#include <reg51.h>
#define KEYPAD P2
unsigned char code seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; //共阳
void delay(void) //10MS
{
unsigned char data i, j;
i = 20;
j = 113;
do
{
while (--j);
} while (--i);
}
char getKey(){
char row; //行号
char column; //列号
KEYPAD=0xf0; //检测行
if(KEYPAD==0xf0){ //没检测到按键按下
return -1;
}
delay();
if(KEYPAD==0xf0){ //消抖
return -1;
}
switch(KEYPAD){
case 0x70: row=0; break; //第0行被按下
case 0xb0: row=1; break; //第1行被按下
case 0xd0: row=2; break; //第2行被按下
case 0xe0: row=3; break; //第3行被按下
}
KEYPAD=0x0f; //检测列
switch(KEYPAD){
case 0x07: column=0; break; //第0列被按下
case 0x0b: column=1; break; //第1列被按下
case 0x0d: column=2; break; //第2列被按下
case 0x0e: column=3; break; //第3列被按下
}
while(KEYPAD!=0x0f); //等待松手
return row*4 + column;
}
main(){
char keyCode;
while(1){
keyCode = getKey();
if(keyCode!=-1){
P0=seg[keyCode];
}
}
}