新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)鍵盤掃描實(shí)驗(yàn)

單片機(jī)鍵盤掃描實(shí)驗(yàn)

作者: 時(shí)間:2016-11-21 來(lái)源:網(wǎng)絡(luò) 收藏
代碼如下:
//實(shí)例7
#include
//led字模
char led_mod[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x58,0x5e,0x79,0x71};
//鍵值
char key_buf[] = {0x11,0x21,0x41,0x81,0x12,0x22,0x42,0x82,
0x14,0x24,0x44,0x84,0x18,0x28,0x48,0x88};
char getKey(void);
void delay(unsigned int time){
unsigned int j = 0;
for(;time>0;time--)
for(j=0;j<125;j++);
}
void main(void) {
char key = 0;
P2 = 0x00;
//P0=0x11;
while(1) {
key = getKey();
if (key != -1) {
P2 = led_mod[key];
}
delay(10);
}
}
//檢測(cè)按鍵
//返回-1表示沒(méi)有檢測(cè)到按鍵按下
char getKey(void) {
char i = 0;
unsigned char keycode=0xff;
unsigned char scancode=0xff;
scancode=0xf7;
P0=0xf0;
while(scancode!=0xff) {
P0=scancode;
//delay(10);
keycode=P0;
if((keycode&0xf0)!=0xf0)break;
scancode=(keycode>>1)|0xf0;
//if(keycode==0xff)scancode=scancode&0xf0;
}
keycode=~keycode;
for (i = 0 ; i < 16 ; i++) {
if (key_buf[i] == keycode) {
return i;
}
}
return-1;
}



關(guān)鍵詞: 單片機(jī)鍵盤掃

評(píng)論


技術(shù)專區(qū)

關(guān)閉