#include<reg51.h> #define uchar unsigned char sbit KEY_S1=P3^0; //定义输入引角 sbit KEY_S2=P3^1; sbit KEY_S3=P3^2; sbit KEY_S4=P3^3; void main(void) { uchar temp; P3=0xff; //将p3口置成输入状态 while(1) { temp=P3; switch(temp&=0x0f) //屏蔽高4位 { case 0x0e:P1=0xe7;break; //按下k1,p1端口位3、位4控制的led灯亮 case 0x0d:P1=0xdb;break; //按下k2,p1端口位2、位5控制的led灯亮 case 0x0b:P1=0xbd;break; //按下k3,p1端口位1、位6控制的led灯亮 case 0x07:P1=0x7e;break; //按下k4,p1端口位0、位7控制的led灯亮 default:P1=0xc3;break; //不按键或同时按下多个按键时,p1端口位2、位3、位4、位5控制的led灯亮 } } } |
无键按下P3为0XFF,按键按下P3为0XFE,按键抬起P3恢复到0XFF,所以判断按键抬起可以用while(P3!=0XFF); 意思是直到P3=0XFF时才跳出循环,也可以写作while(!P3==0XFF); |
不加while判断抬起也可以实现功能了吧。 |
while(P3!=0xfe ); |
P3^0XFF 就可以了,不要 !。 |
为什么没有大神帮我解答一下,各位大神帮忙看看 |