📄 keyboard.c
字号:
#include<reg52.h>
#include"timer.h"
#include"keyboard.h"
bit FLAG0;
unsigned char ptr,m;
extern unsigned char dispcode[6];
//----------------------------------------------------------------------------------
//键盘码数组
unsigned char tab[16]= {0x01,0x02,0x03,0x04,
0x05,0x06,0x07,0x08,
0x09,0x0a,0x0b,0x0c,
0x0d,0x0e,0x0f,0x10
};
/*-----------------------------------------------------------------------------------
功能:键盘扫描程序
名称:Scan_Key
输入:无
输出:无
返回:无
-------------------------------------------------------------------------------------*/
void Scan_Key(void)
{
char a1,i;
FLAG0=0;
a1=0xf7; //列扫描初值
ptr=0;
for(i=0;i<4;i++) //键盘4个扫描列
{
P1=a1;
Delay(10);
m=P1;
switch( m & 0xf0 ) //取行的高4位,侦测那一行被按
{
case 0x70:
ptr=i*4; //第一行被按否? 如有则是tab[i*4]键
FLAG0=1; //表示有按键
break;
case 0xb0:
ptr=i*4+1; //第二行被按否? 如有则是tab[i*4+1]键
FLAG0=1;
break;
case 0xd0:
ptr=i*4+2; //第三行被按否? 如有则是tab[i*4+2]键
FLAG0=1;
break;
case 0xe0:
ptr=i*4+3; //第四行被按否?如有则是tab[i*4+3]键
FLAG0=1;
break;
default:
break;
}
if( FLAG0 )
{
//----------------------------------------------------------------------------------
////将键盘编码转换成显示编码
dispcode[0]=tab[ptr] % 10; //个数
dispcode[1]=tab[ptr] / 10; //十数
BEEP(200);
break; //有按键,则退出扫描
}
a1=a1>>1 | 0x80; //高位补1,由于P1.7~4末接+5V,而是由指令加载高电平
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -