📄 keyboard_serial.c
字号:
#include<reg51.h>
#include<stdio.h>
//发光管显示码,共阳极
unsigned char data displaycode[10]={0x00,0x9f,0x24,0x0c,0x98,0x48,0x40,0x1e,0x00,0x08};
//LED显示数据
unsigned char leddisplay[4]={1,1,1,1};
//键扫描值,低四位为行号,高四位为列号
unsigned char key;
// 键消抖的延时函数
void delay_10ms(void)
{
unsigned char j,k;
for(j=20;j>0;j--)
for(k=248;k>0;k--);
}
// kbscan键扫描函数
unsigned char kbscan(void)
{
unsigned char sccode,recode;
P1=0xf0;
if((P1&0xf0)!=0xf0)
{
delay_10ms();
if((P1&0xf0)!=0xf0)
{
sccode=0xfe;
while((sccode&0x10)!=0)
{
P1=sccode;
if((P1&0xf0)!=0xf0)
{
recode=(P1&0xf0)|0x0f;
return((~sccode)+(~recode));
}
else
{
sccode=(sccode<<1)|0x01;
}
}
}
}
return(0);
}
//LED显示函数
void display(void)
{
unsigned char count;
for(count=4;count>0;count--)
{
SBUF=displaycode[leddisplay[count-1]];
while(TI==0);
TI=0;
}
}
//初始化LED显示数据
void leddisplay_ini(unsigned i)
{
leddisplay[0]=i;leddisplay[1]=i;leddisplay[2]=i;leddisplay[3]=i;
}
void main(void)
{
SCON=0x00; //移位寄存器工作方式
display();
while(1)
{
key=kbscan(); //键盘扫描函数
delay_10ms(); //延时函数
if(key!=0)
{
switch(key)
{
case 0x11: //显示1,第一行第一列
leddisplay_ini(1); //显示数据初始化,显示1
display(); //显示数据
break;
case 0x21:
leddisplay_ini(2);
display();
break;
case 0x41:
leddisplay_ini(3);
display();
break;
case 0x12: //显示4,第二行第一列
leddisplay_ini(4);
display();
break;
case 0x22:
leddisplay_ini(5);
display();
break;
case 0x42:
leddisplay_ini(6);
display();
break;
case 0x14:
leddisplay_ini(7); //显示7,第三行第一列
display();
break;
case 0x24:
leddisplay_ini(8);
display();
break;
case 0x44:
leddisplay_ini(9);
display();
break;
default:
leddisplay_ini(0); //显示其他
display();
break;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -