- 單片機C語言程序設計實訓100例
- 彭偉編著
- 506字
- 2018-12-27 05:12:04
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); } }
推薦閱讀
- Java逍遙游記
- LabVIEW入門與實戰開發100例
- Vue.js快速入門與深入實戰
- Developing Middleware in Java EE 8
- Elastic Stack應用寶典
- TypeScript實戰指南
- Instant Ext.NET Application Development
- Visual C#通用范例開發金典
- Swift 4從零到精通iOS開發
- Learning YARN
- Unity 2018 Augmented Reality Projects
- Android高級開發實戰:UI、NDK與安全
- Python面向對象編程(第4版)
- AI輔助編程Python實戰:基于GitHub Copilot和ChatGPT
- HTML5+CSS+JavaScript深入學習實錄