📄 矩阵键盘.c
字号:
#include<reg52.h>
#define uchar unsigned char
sbit duan=P2^6;
sbit wei=P2^7;
uchar i=0,x=0,y=0,num[8]={16,16,16,16,16,16,16,16},temp;
uchar duantable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; //0-F共阴极数码管代码
uchar weitable[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //0-8位选代码
delay(uchar t)
{
uchar a,b;
for(a=t;a>0;a--)
for(b=200;b>0;b--);
}
void display()
{
if(x==8)
x=0;
if(y==8)
y=0;
P0=0xff;
wei=1;
wei=0;
P0=duantable[num[x]];
duan=1;
duan=0;
P0=weitable[y];
wei=1;
wei=0;
x++;
y++;
}
main()
{
while(1)
{
display();
P3=0x7f;
temp=P3;
temp=temp&0x0f;
if(temp!=0x0f)
{
delay(50);
switch(temp)
{
case 0x0e:
num[i++]=3;
break;
case 0x0d:
num[i++]=7;
break;
case 0x0b:
num[i++]=11;
break;
case 0x07:
num[i++]=15;
break;
}
while(P3!=0x7f)display();
}
display();
P3=0xbf;
temp=P3;
temp=temp&0x0f;
if(temp!=0x0f)
{
delay(50);
switch(temp)
{
case 0x0e:
num[i++]=2;
break;
case 0x0d:
num[i++]=6;
break;
case 0x0b:
num[i++]=10;
break;
case 0x07:
num[i++]=14;
break;
}
while(P3!=0xbf)display();
}
display();
P3=0xdf;
temp=P3;
temp=temp&0x0f;
if(temp!=0x0f)
{
delay(50);
switch(temp)
{
case 0x0e:
num[i++]=1;
break;
case 0x0d:
num[i++]=5;
break;
case 0x0b:
num[i++]=9;
break;
case 0x07:
num[i++]=13;
break;
}
while(P3!=0xdf)display();
}
display();
P3=0xef;
temp=P3;
temp=temp&0x0f;
if(temp!=0x0f)
{
delay(50);
switch(temp)
{
case 0x0e:
num[i++]=0;
break;
case 0x0d:
num[i++]=4;
break;
case 0x0b:
num[i++]=8;
break;
case 0x07:
num[i++]=12;
break;
}
while(P3!=0xef)
display();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -