📄 矩阵键盘扫描1.c
字号:
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit LE1=P2^7;
sbit A=P2^0;
sbit BB=P2^1;
sbit C=P2^2;
sbit beep=P2^6;
uchar code table[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0x00};
uchar temp,keynum,Flag;
void display(void);
void Init(void);
uchar Keyscan();
void Speak(void);
void delay_50us(uint t)
{
uchar j;
for(;t>0;t--)
for(j=19;j>0;j--);
}
void main(void)
{
Init();
P0=0x00;
LE1=0;
while(1)
{
if( Flag==1)
Speak();
display();
}
}
void Init(void)
{
P1=0xff;
P2=0xff;
P3=0xff;
P0=0xff;
keynum=0;
beep=1;
Flag=0;
}
void Speak(void)
{
beep=~beep;
delay_50us(100);
delay_50us(100);
beep=1;
}
uchar Keyscan()
{
uchar keynum;
temp=0xfe;
P3=temp;
if((P3&0xf0)!=0xf0)
{
delay_50us(100);
if((P3&0xf0)!=0xf0)
{
Flag=1;
switch(P3)
{
case 0xee:keynum=12;break;
case 0xde:keynum=9;break;
case 0xbe:keynum=5;break;
case 0x7e:keynum=1;break;
}
}
}
temp=0xfd;
P3=temp;
if((P3&0xf0)!=0xf0)
{
delay_50us(100);
if((P3&0xf0)!=0xf0)
{ Flag=1;
switch(P3)
{
case 0xed:keynum=13;break;
case 0xdd:keynum=0;break;
case 0xbd:keynum=6;break;
case 0x7d:keynum=2;break;
}
}
}
temp=0xfb;
P3=temp;
if((P3&0xf0)!=0xf0)
{
delay_50us(100);
if((P3&0xf0)!=0xf0)
{ Flag=1;
switch(P3)
{
case 0xeb:keynum=14;break;
case 0xdb:keynum=10;break;
case 0xbb:keynum=7;break;
case 0x7b:keynum=3;break;
}
}
}
temp=0xf7;
P3=temp;
if((P3&0xf0)!=0xf0)
{
delay_50us(100);
if((P3&0xf0)!=0xf0)
{ Flag=1;
switch(P3)
{
case 0xe7:keynum=15;break;
case 0xd7:keynum=11;break;
case 0xb7:keynum=8;break;
case 0x77:keynum=4;break;
}
}
}
return(keynum);
}
void display(void)
{
Flag=0;
LE1=1;//选通hc573
//分别依次选通数码管的位选端
A=0;
BB=0;
C=0;
P0=table[Keyscan()];
delay_50us(10);
A=1;
BB=0;
C=0;
P0=table[Keyscan()];
delay_50us(10);
A=0;
BB=1;
C=0;
P0=table[Keyscan()];
delay_50us(10);
A=1;
BB=1;
C=0;
P0=table[Keyscan()];
delay_50us(10);
A=0;
BB=0;
C=1;
P0=table[Keyscan()];
delay_50us(10);
A=1;
BB=0;
C=1;
P0=table[Keyscan()];
delay_50us(10);
A=0;
BB=1;
C=1;
P0=table[Keyscan()];
delay_50us(10);
A=1;
BB=1;
C=1;
P0=table[Keyscan()];
delay_50us(10);
P0=0x00;
LE1=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -