|
4X4鍵盤掃描程序,采用查表方式,適用于AVR單片機。 此處為4X4鍵盤軟件部分,硬件部分設(shè)計請參照: 此程序?qū)?yīng)的鍵盤電路為: 
/* 鍵盤掃描函數(shù) 讀取當(dāng)前鍵盤的狀態(tài) 有按鍵按下返回相應(yīng)按鍵值 無按鍵按下返回"0x00" */ unsigned char key_read(void){ unsigned char i; DDRA = 0x00;/*獲取列地址*/ PORTA = 0x0F; DDRA = 0xF0; i = PINA; DDRA = 0x00;/*獲取行地址*/ PORTA = 0xF0; DDRA = 0x0F; i |= PINA; DDRA = 0x00;/*輸出復(fù)位*/ PORTA = 0xFF; switch (i) {/*將按鍵碼轉(zhuǎn)換成鍵值*/ case 0x00: return 0x00; case 0xEE: return '1'; case 0xDE: return '2'; case 0xBE: return '3'; case 0x7E: return 'A'; case 0xED: return '4'; case 0xDD: return '5'; case 0xBD: return '6'; case 0x7D: return 'B'; case 0xEB: return '7'; case 0xDB: return '8'; case 0xBB: return '9'; case 0x7B: return 'C'; case 0xE7: return '*'; case 0xD7: return '0'; case 0xB7: return '#'; case 0x77: return 'D'; default : return 0x00; } } /* 按鍵獲取函數(shù) 獲取按鍵信號,其中包含有狀態(tài)記錄及按鍵去顫抖。 有正確按鍵按下返回相應(yīng)按鍵值 無正確按鍵按下返回"0x00" */ unsigned char get_key(void){ unsigned char i; static unsigned char j;/*按鍵記錄*/ i = key_read(); if (i == 0x00){/*無有效按鍵按下*/ j = 0x00;/*清除按鍵記錄*/ return 0x00;/*程序退出*/ } if (j == 0x00) {/*為新按鍵*/ j = i;/*保存本次采樣結(jié)果*/ delay_ms(10);/*去按鍵顫抖*/ i = key_read(); if(i == j) { return i; } } return 0x00; }
|