实训报告五
实训目的:
学会如何使用行列式矩阵按键,学会如何在51单片机上编写行列式矩阵按键的c语言,行列式矩阵按键的作用。
实训原理图:
实训步骤:
1. 在ptoteus平台找出所需的元器件
2. 理解该实验的原理,按照原理图画出仿真图;
3. 根据实验要求写出如下程序: #include #define uchar unsigned char #define uint unsigned int uchar code a[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F, 0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71}; void delay(uint i) //延时程序 {uint j; for(j=0;juchar checkkey() //检测有没有键按下 {uchar i ; uchar j ; j=0x0f; P2=j; i=P2; i=i&0x0f; if (i==0x0f) return (0); else return (0xff); } uchar keyscan() //键盘扫描程序 { uchar scancode; uchar codevalue; uchar a; uchar m=0; uchar k; uchar i,j; if (checkkey()==0) return (0xff); else {delay(100); if (checkkey()==0) return (0xff); else { scancode=0xf7;m=0x00; //键盘行扫描初值,M为列数 for (i=1;i<=4;i++) { k=0x10; P2=scancode; a=P2; for (j=0;j<4;j++) //J为行数 { if ((a&k)==0) { codevalue = m+j; while (checkkey()!=0); return (codevalue); } else k=k<<1; } m=m+4; scancode=~scancode; //为scancode右移时,移入的数为1 scancode=scancode>>1; scancode=~scancode; } } } } void main() //主函数 { int x; P3=0x00; while(1) { if (checkkey()==0x00) continue; else { x= keyscan(); P3=a[x]; delay(100); } } } 总结: 通过本次的实训我学会了矩阵式键盘的c编程,它是通过扫描法识别的:首先按键判别有无键按下,再键盘扫描取得闭合键的行、列号,用计算法或查表法得到键值,判断闭合键是否释放,如没释放则继续等待,将闭合键的键值保存,同时转去执行该闭合键的功能。通过这次的实训使我程序设计的过程更熟悉。 因篇幅问题不能全部显示,请点此查看更多更全内容