//返回键值 /********************************************************************/ //键盘扫描子程序 获取键值函数
/****************************************************************************/ uchar keyscan(void) { uchar temp; P0=0xfe; //第一行置低 temp=P0; temp&=0xf0; if(temp!=0xf0) { delay_nms(10); if(temp!=0xf0) { switch(temp) //根据列线获取第一行的键值 { case 0xe0: key=3; break; case 0xd0: key=2; break; case 0xb0: key=1; break; case 0x70: key=0; break; } } } P0=0xfd; //扫描第二行,置低 temp=P0; temp&=0xf0; if(temp!=0xf0) { delay_nms(10); if(temp!=0xf0) { switch(temp) { case 0xe0: key=7; break; case 0xd0: key=6; break; case 0xb0: key=5; break; case 0x70: key=4; break; } } } P0=0xfb; //扫描第三行,置低 temp=P0; temp&=0xf0; if(temp!=0xf0) { delay_nms(10); if(temp!=0xf0) { switch(temp) { case 0xe0: key=11; break; case 0xd0: key=10; break; case 0xb0: key=9; break; case 0x70: key=8; break; } } } P0=0xf7; //扫描第四行,置低 temp=P0; temp&=0xf0; if(temp!=0xf0) { delay_nms(10); if(temp!=0xf0) { switch(temp) { case 0xe0: key=15; break; case 0xd0: key=14; break; case 0xb0: key=13; break; case 0x70: key=12; break; } } }
else { ; } return(key); } |
|