- #include <reg52.h> //头文件
- #define uchar unsigned char //宏定义
- #define uint unsigned int
- void DelayMs(uint z);
- void KeyScan();
- uchar key,n; //定义变量
- uchar code KeyCode[]={0xee,0xde,0xbe,0x7e,
- 0xed,0xdd,0xbd,0x7d,
- 0xeb,0xdb,0xbb,0x7b,
- 0xe7,0xd7,0xb7,0x77}; //反转法矩阵键盘的各个按键的计算值
- uchar code DispCode[]={0xc0,0xf9,0xa4,0xb0,
- 0x99,0x92,0x82,0xf8,
- 0x80,0x90,0x88,0x83,
- 0xc6,0xa1,0x86,0x8e}; //共阳极数码管显示0~F
- void main()
- {
- while(1)
- {
- KeyScan();
- P0=DispCode[n]; //在数码管上显示相应的键值
- }
- }
- void DelayMs(uint z)
- {
- uint x,y;
- for(x=z;x>0;x--)
- {
- for(y=114;y>0;y--);
- }
- }
- void KeyScan()
- {
- uchar l,h,i; //定义局部变量,用l得出低4位的值,用h得出高4位的值
- P1=0x0F; //给P1赋值00001111
- if(P1!=0x0F)
- {
- DelayMs(10);
- if(P1!=0x0F)
- l=P1;
- }
- P1=0xF0; //给P1赋值11110000
- if(P1!=0xF0)
- {
- DelayMs(10);
- if(P1!=0xF0)
- h=P1; //若有键按下,得出高4位的值
- }
- key=l|h; //高4位的值与低4位的值相加
- for(i=0;i<16;i++)
- {
- if(key==KeyCode[i]) //通过查表得出n的值
- n=i;
- }
- }
复制代码
此帖出自
小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
if(P1!=0x0F)
有什么意义,赋值成0x0f,又再判断是不是=于0x0f,IO的初始化都没有,网上参考下矩阵键盘的代码吧
一周热门 更多>