📄 keypad.c
字号:
/*
标题:小键盘的输入函数
版本: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 keyscan();
/*char keypad_scan()
{
char key,i;
P1=0xF0;
while (P1!=0xF0);
do{
for(i=0;i<=3;i++)
{
P1=ksp[i];
if(P1!=ksp[i])
{
delay();
key=P1;
if(key!=ksp[i])
{
return(key);
}
}
}
} while(1);
}
// 检查是否有按键按下
char gotkey()
{
char temp,i;
temp=keyscan();
for (i=0;i<=15;i++) {
if(temp==key_code[i]) return(i);
}
return(16);
}
*/
char keyscan()
{
char keytemp;
P1=0xf0;
keytemp=P1&0x0f;
if(keytemp!=0)
{
delay();
if(keytemp!=0)
{
P1|=0x80;
keytemp=P1&0x0f;
switch(keytemp)
{
case 0x01: return(0); break;
case 0x02: return(1); break;
case 0x04: return(2); break;
case 0x08: return(3); break;
default : break;
}
P1|=0x40;
keytemp=P1&0x0f;
switch(keytemp)
{
case 0x01: return(4); break;
case 0x02: return(5); break;
case 0x04: return(6); break;
case 0x08: return(7); break;
default : break;
}
P1|=0x20;
keytemp=P1&0x0f;
switch(keytemp)
{
case 0x01: return(8); break;
case 0x02: return(9); break;
case 0x04: return(10); break;
case 0x08: return(11); break;
default : break;
}
P1|=0x10;
keytemp=P1&0x0f;
switch(keytemp)
{
case 0x01: return(12); break;
case 0x02: return(13); break;
case 0x04: return(14); break;
case 0x08: return(15); break;
default : break;
}
return (0xff);
}
else return (0xff);
}
else return (0xff);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -