//实例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);
}
}
//检测按键
//返回-1表示没有检测到按键按下
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;