
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
3.12 K1~K4按键状态显示
在本例执行过程中,按下K1或K2键时LED1或LED2点亮,松开时对应的LED熄灭,当按下K3或K4后释放时,LED3或LED4点亮,再次按下并释放时熄灭,如此重复。不同于上一案例的是本例对各按键和LED均单独进行sbit定义,这样便于对它们单独控制。
本例电路如图3-10所示。

图3-10 K1~K4按键状态显示电路
程序设计调试与实训:
由于LED1,LED2是否导通与K1,K2是否按下完全保持一致,因此代码中有语句D1 = K1和D2 = K2,而LED3、LED4是在K3、K4按下并释放后切换显示,因此用K3或K4是否等于0来判断是否按下,用while(K3 == 0)和while(K4 == 0)来等待释放按键,在释放后LED3和LED4分别取反,实现切换显示。
读者可稍加修改代码,使K3或K4按下时随即实现LED切换显示。对于上一案例,读者也可修改代码,使用本例方法对按键进行判断。
源程序代码:
//----------------------------------------------------------------- // 名称: K1~K4按键状态显示 //----------------------------------------------------------------- // 说明: K1,K2按下时LED点亮,松开时熄灭, // K3,K4按下并释放时LED点亮,再次按下并释放时熄灭。 //----------------------------------------------------------------- #include <reg51.h> #define uchar unsigned char #define uint unsigned int sbit LED1 = P0^0; sbit LED2 = P0^1; sbit LED3 = P0^2; sbit LED4 = P0^3; sbit K1 = P1^0; sbit K2 = P1^1; sbit K3 = P1^2; sbit K4 = P1^3; //----------------------------------------------------------------- // 延时 //----------------------------------------------------------------- void DelayMS(uint x) { uchar i; while(x--) for(i = 0; i < 120; i++); } //----------------------------------------------------------------- // 主程序 //----------------------------------------------------------------- void main() { P1 = 0xFF; P0 = 0xFF; while(1) { LED1 = K1; LED2 = K2; if( K3 == 0) { while (K3==0); //等待释放按键 LED3 = ~LED3; } if( K4 == 0) { while (K4==0); //等待释放按键 LED4 = ~LED4; } DelayMS(10); } }