1.支持連按的書寫
對上一講的知識我們再補充一下支持連按的代碼以此加深理解。
實驗現(xiàn)象就是按著按鍵不放,那么“key=1;”出現(xiàn)的頻率就會比不支持連按代碼的時候多,所以就會有左右不斷流水的現(xiàn)象,按鍵的功能代碼大家自己去分析了。
#include <reg52.h> #include <function.h> #define TIMES 2000 //讓流速慢一點 sbit KEY4 = P2^7; u8 KEY4_Scan() { static u8 key_up=1; static u16 times; if(key_up==0) { times++; if(times>=TIMES) { times=0; return 1; } } key_up=KEY4; return 0; } void main() { u8 key; //用來讀取按鍵動作的返回值 u8 i=0,dir; //dir是作為切換流水方向 LED_Init(); //初始化LED硬件模塊 P2=0xF7; //讓K4能具備有被拉低的條件先 P0=0xFE; //先點亮LED2 while(1) { key=KEY4_Scan(); if(key==1)//執(zhí)行功能代碼 { i++; if(i>=15)i=1;//讓i一直在1~14之間變化 if(i<8)dir=0;//向左移 if(dir==0)P0=~(0x01<<i); if(i>=8)dir=1;//向右移 if(dir==1)P0=~( 0x80>>(i-7) );//當i大于等于8之后,(i-7)其實也還是在1~7之間變化 } } }
2.常用按鍵
之前我們講解了很多按鍵處理功能的代碼,一步步地深入了解了硬件與軟件的結合,然而我們舉例過的這些按鍵例程都不算完美,我們參考了正點原子團隊開發(fā)的按鍵代碼,發(fā)現(xiàn)他們執(zhí)行的效率更高。又因為初學者還沒有足夠能力去理解人家團隊書寫的代碼,所以筆者才一步步地講解前面的代碼來為此次的最終按鍵程序打下基礎。
考慮到我們最常用的按鍵是K4,K8,K12,K16
所以只有P2.7輸出低電平之后,對應的4個按鍵的IO端口才有被拉低的條件。
也就是說,按鍵的初始化函數(shù)我們規(guī)定這樣寫
void KEY_Init() { P2=0X7F;//讓P2.7輸出低電平,其他IO端口輸出高電平,這樣就可以使能4個按鍵了 }
由于篇幅有限,我們下一講再細說最終的按鍵程序。
C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習題和答疑,點擊了解:
一點編程也不會寫的:零基礎C語言學練課程
解決困擾你多年的C語言疑難雜癥特性的C語言進階課程
從零到寫出一個爬蟲的Python編程課程
只會語法寫不出代碼?手把手帶你寫100個編程真題的編程百練課程
信息學奧賽或C++選手的 必學C++課程
藍橋杯ACM、信息學奧賽的必學課程:算法競賽課入門課程
手把手講解近五年真題的藍橋杯輔導課程