📄 scankeybord.c
字号:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
void scankey();
void display(uchar key);
void delay();
void delay1();
void keyvl_deal();
sbit FENG=P3^4;
uchar keyold=0,keyp,VKEY=0xff;
uchar key_table[]={0xed,0x7e,0x7d,0x7b,
0xbe,0xbd,0xbb,0xde,
0xdd,0xdb,0x77,0xb7,
0xee,0xd7,0xeb,0xe7};
uchar value_table[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void main()
{
while(1)
{
scankey();
if(VKEY!=0xff)
{
keyold=VKEY;
keyvl_deal();
display(keyp);
}
}
}
void scankey()
{
P0=0xfe; //扫描第一列
VKEY=P0; //P0口的值赋给键值寄存器
if(VKEY!=0xfe) //如果第一列有键按下
return; //返回键值寄存器的值
P0=0xfd; //扫描第二列
VKEY=P0;
if(VKEY!=0xfd)
return;
P0=0xfb; //扫描第三列
VKEY=P0;
if(VKEY!=0xfb)
return;
P0=0xf7; //扫描第四列
VKEY=P0;
if(VKEY!=0xf7)
return;
VKEY=0xff;
}
void keyvl_deal()
{
if(keyold!=VKEY)
{FENG=1;
return;}
else
{
FENG=0;
for(keyp=0;keyp<16;keyp++)
{
if(VKEY==key_table[keyp])
break;
}
}
}
void display(uchar key)
{
int wei=0;
while(wei<1)
{
P1=wei; //位数字送P1口
P2=value_table[key]; //字码送P2口
delay(); //延时
P2=0x00;
wei++; //对P2口清零,防止影响下一位
}
}
void delay()
{
uint i=100;
while(i--);
}
/*void delay1()
{
int i=10;
while(i--);
} */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -