您的位置:首页 > 其它

keypad 键盘扫描,并返回按键值

2009-09-21 19:51 197 查看
/*
标题:小键盘的输入函数
版本:1.0
Target:89S51
函数描述: char gotkey(void)
从4ⅹ4小键盘输入数据,返回0 15
小键盘的连接方式:

1 P20 -----0----1----2----3
| | | |
2 P21 -----4----5----6----7
| | | |
3 P22 -----8----9----10---11
| | | |
4 P23 -----12---13---14---15
| | | |
5 P24 ---- | | | |
| | | |
6 P25 ---------- | |
| |
7 P26 --------------- |
|
8 P27 --------------------
*/
#include <REGX51.H>
code char key_code[]={0x7E,0XBE,0XBD,0XBB,0XDE,0XDD,0XDB,0XEE,
0XED,0XEB,0X7D,0X7B,0XE7,0XD7,0XB7,0X77};
code ksp[4]={0x7F,0xBF,0xDF,0xEF};
void delay (void) { /* 时间延迟函数 */
unsigned char i,j;
for (i=0;i<5;i++)
for(j=0;j<255;j++)
;
}
char keypad_scan()
{
char key,i;
P2=0xF0;
while (P2!=0xF0); //这句想不明白什么作用!? W 应该是要满足条件情况下,重复执行上面一句P2=0xF0;
do{
for(i=0;i<=3;i++)
{
P2=ksp[i];
if(P2!=ksp[i])
{
delay();
key=P2;
if(key!=ksp[i])
{
return(key);
}
}
}
} while(1);
}
// 检查是否有按键按下
char gotkey()
{
char temp,i;
temp=keypad_scan();
for (i=0;i<=15;i++)
{
if(temp==key_code[i]) return(i);
}
return(16); //1.这句不知道为什么要放括号外??
//W 我想可能是因为键盘大多时间应该是不被按下的,没按下的情况返回16.
//2.还有,有按键被按下,返回相应的键值后,会不会再执行这句呢?
//会的话不是多输出一个16呢?
//查资料,得知,return是返回函数值并退出函数

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: