您好,登錄后才能下訂單哦!
/******************************** 按獨立按鍵使數碼管加1 ********************************/ #include <reg52.h> #define uchar unsigned char sbit KEY = P1 ^ 0; //定義獨立按鍵 bit KEYSTA = 1; //按鍵的初始狀態 uchar code DispCode[] = {0xc0,0xf9,0xa4,0xb0, //共陽數碼管 0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e}; void Timer0Init(); //定時器初始化函數 void KeyProcess(); //按鍵處理函數 void main() { Timer0Init(); KeyProcess(); } void Timer0Init() { TMOD |= 0x01; TH0 = 0xF8; //定時2MS TL0 = 0xCD; EA =1; ET0 = 1; TR0 = 1; } void KeyProcess() { bit lasttime = 1; //定義前一次按鍵值,初始化為1; uchar count = 0; //計數值初始化為0; KEY = 0x01; //按鍵初始化; P0 = DispCode[count]; //數碼管初始化; while(1) { if (KEYSTA != lasttime) //如果“當前按鍵狀態”與“前一次按鍵狀態”不同,說明按鍵有動作; { if (lasttime == 1) //如果按鍵有動作了,那么前一次按鍵狀態為“彈起”(lasttime == 1),說明按鍵按下時,會響應動作; { count++; if (count >= 16) //計數加到16清零,只用一個共陽數碼管; { count = 0; } P0 = DispCode[count]; //共陽數碼管顯示相應的值; } lasttime = KEYSTA; //如果按鍵有動作,就更新前一次按鍵的值; } } } void Timer0IRQ() interrupt 1 //2MS中斷一次 { static keybuf = 0xFF; //定義一個靜態按鍵緩存變量,且值為FF;主要是暫存按鍵狀態; TH0 = 0xF8; //重新寫入初值; TL0 = 0xCD; keybuf = (keybuf << 1) | KEY; //左移一位,使當前的按鍵狀態移到按鍵緩存中; if (keybuf == 0) //如果移8次,按鍵狀態都為0,說明按鍵真正按下; { KEYSTA = 0; //確定按鍵狀態為按鍵; } else if (keybuf == 0xFF) //如果移8次,按鍵狀態都為1,說明按鍵未按下 { KEYSTA = 1; } }
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。