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是返回函数值并退出函数
}
标题:小键盘的输入函数
版本: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是返回函数值并退出函数
}
相关文章推荐
- 三行三列的扫描模式的键盘,有一行一列上的按键监听不到
- GUI 键盘上敲入方向向上的按键会输出UP KeyAdapter keyPressed KeyEvent的getKeyCode方法返回的是keyCode类型的整数
- Android 重温--键盘事件--按两次按键返回例子
- 键盘的扫描码虚拟码概念 常见Windows键盘按键虚拟码
- 键盘的扫描码虚拟码概念 常见Windows键盘按键虚拟码
- 用扫描法读出4×4矩阵键盘,在数码管显示按键值
- Android6.0 按键流程(二)KeyboardInputMapper扫描码转成键盘码
- 键盘的扫描码虚拟码概念 常见Windows键盘按键虚拟码
- Android6.0 按键流程 KeyboardInputMapper扫描码转成键盘码 (二)
- 跨平台的检测键盘是否有键按下并返回按键的值
- jQuery事件函数-点击、双击、键盘按键、鼠标滑动、失去焦点、显示哪个 DOM 元素触发了事件/返回事件的类型。等
- JS 键盘按键keyCode对应表
- Android App监听软键盘按键的收起和展开,非常好用
- 多功能检測按键-3 按键扫描 单按 长按 多个按键 响应方式
- 关于WM_CHAR函数中键盘各个按键的值
- 模拟键盘按键---很经典,总结很全面
- VC键盘虚拟按键...
- UITextView点击键盘Done返回
- “线反转法”键盘扫描
- Windows 8/8.1 下,键盘按键后,鼠标左键短暂失灵问题