📄 keyboard.c
字号:
#include <reg51.h>
#define uchar unsigned char
//数码管显示段表
uchar code codetab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//键盘扫描段表
uchar code duancode[]={0X7E,0XBE,0XdE,0xEE,0X7d,0XBd,0Xdd,0XEd,0X7B,0XBB,0XdB,0XEB,0X77,0XB7,0XD7,0XE7};
//键盘扫描位码
uchar code bitcode[4]={0xfe,0xfd,0xfb,0xf7};
//延迟
void delay(uchar n)
{
uchar i,j;
for(j=n;j>0;--j)
for(i=255;i>0;--i)
;
}
//键盘扫描
uchar keyscan(void)
{
uchar key;
P1=0xf0;
if(P1!=0xF0)
{
delay(50);
if(P1!=0xF0) //按下第一列键
{
P1=0x7f;
if(P1!=0x7f)
{
switch(P1)
{
case 0x7e:key=0;break;
case 0x7d:key=4;break;
case 0x7b:key=8;break;
case 0x77:key=12;break;
}
}
P1=0xbf; //按下第二列键
if(P1!=0xbf)
{
switch(P1)
{
case 0x7e:key=1;break;
case 0x7d:key=5;break;
case 0x7b:key=9;break;
case 0x77:key=13;break;
}
}
P1=0xdf; //按下第三列键
if(P1!=0xdf)
{
switch(P1)
{
case 0x7e:key=2;break;
case 0x7d:key=6;break;
case 0x7b:key=10;break;
case 0x77:key=14;break;
}
}
P1=0xef; //按下第四列键
if(P1!=0xef)
{
switch(P1)
{
case 0x7e:key=3;break;
case 0x7d:key=7;break;
case 0x7b:key=11;break;
case 0x77:key=15;break;
}
}
}
}
return 0;
}
//得到键盘号
uchar getkey(uchar key)
{
uchar i,temp;
temp=key;
for(i=0;i<=15;i++)
{
if(temp==duancode[i])
return(i);
}
}
//主函数
main()
{
uchar i,key=0;
SCON=0x50;
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
IE=1;
ES=1;
while(1) //窜口通信
{
key=keyscan();
if(key)
{
i=getkey(key);
SBUF=i;
while(TI!=1);
P2=codetab[i];
TI=0;
}
if(RI==1)
{
while(RI!=1);
P0=codetab[SBUF];
RI=0;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -