- #include <reg52.h>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar code led[]={0xfe,0xfb,0xfd,0xf7,0xef,0xbf,0xef,0x7f} ;
- /*1毫秒延时函数*/
- void delay(uint z)
- {
- uint x,y;
- for(x = z; x > 0; x--)
- for(y = 114; y > 0 ; y--);
- }
- uchar KeyScan()
- {
- uchar cord_l,cord_h;//声明列线和行线的值的储存变量
- P3 = 0xf0;//1111 0000
- if( (P3 & 0xf0) != 0xf0)//判断是否有按键按下
- {
- delay(5);//软件消抖
- if( (P3 & 0xf0) != 0xf0)//判断是否有按键按下
- {
- cord_l = P3 & 0xf0;// 储存列线值
- P3 = cord_l | 0x0f;
- cord_h = P3 & 0x0f;// 储存行线值
- while( (P3 & 0x0f) != 0x0f );//松手检测
- return (cord_l + cord_h);//返回键值码
- }
- }
-
- }
- /*
- 4*4矩阵键盘键值码处理函数
- 返回转换后的键值码
- */
- uchar KeyPro()
- {
- uchar key_value; //存放转换后的按键值
- switch( KeyScan() )
- {
- //第一行键值码
- case 0xee: P1=0xfe; break;
- case 0xde: P1=0xfd; break;
- case 0xbe: P1=0xfb; break;
- case 0x7e: P1=0xf7; break;
-
- //第二行键值码
- case 0xed: key_value = 0x05; break;
- case 0xdd: key_value = 0x06; break;
- case 0xbd: key_value = 0x07; break;
- case 0x7d: key_value = 0x08; break;
- //第三行键值码
- case 0xeb: key_value = 0x09; break;
- case 0xdb: key_value = 0x0a; break;
- case 0xbb: key_value = 0x0b; break;
- case 0x7b: key_value = 0x0c; break;
- //第四行键值码
- case 0xe7: key_value = 0x0d; break;
- case 0xd7: key_value = 0x0e; break;
- case 0xb7: key_value = 0x0f; break;
- case 0x77: key_value = 0x10; break;
- }
- return (key_value);//返回转换后的键值码
- }
- void main()
- {
- while(1)
- {
- KeyScan();
- KeyPro();//提取键值码并且送不同数值给数码管显示
- delay(10);
- if( (P3 & 0x0f) == 0x0f )
- {
- P1=0xff;
- }
-
- }
- }
复制代码我这样写为什么不能实现功能,求各位大佬解答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
我42到46行有写LED的程序,那我这个功能要怎么实现
我把检测的删了,又修改了一下,怎么不稳定,有的时候按下亮,松开灭。有的时候按下去亮,送开还是亮,
按键防抖动程序加了没有
一周热门 更多>