📄 矩阵键盘.c
字号:
//16个按键对应0-F。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit rclk=P1^4;
sbit srclk=P1^7;
sbit ser=P1^5;
uchar dat,k,duantable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //数字编码
uint i;
void delay(uchar x) //延时函数
{
uchar a,b;
for(a=x;a>0;a--)
for(b=100;b<0;b--) ;
}
void display(uchar x) //显示函数
{
k=0x00;
for(i=0;i<8;i++)
{
srclk=0;
k=k<<1;
ser=CY;
srclk=1;
}
k=duantable[x];
for(i=0;i<8;i++)
{
srclk=0;
k=k<<1;
ser=CY;
srclk=1;
}
rclk=0;
rclk=1;
}
void init() //初始化
{
k=0xff;
for(i=0;i<8;i++)
{
srclk=0;
k=k<<1;
ser=CY;
srclk=1;
}
k=0x00;
for(i=0;i<8;i++)
{
srclk=0;
k=k<<1;
ser=CY;
srclk=1;
}
rclk=0;
rclk=1;
}
void main()
{
init();
while(1) //键盘循环扫描
{
P0=0x7f;
dat=0x7f;
dat=P0&0x7f;
while(dat!=0x7f)
{
delay(100);
switch(dat)
{
case 0x77:
display(15);
break;
case 0x7b:
display(14);
break;
case 0x7d:
display(13);
break;
case 0x7e:
display(12);
break;
}
break;
}
P0=0xbf;
dat=0xbf;
dat=P0&0xbf;
while(dat!=0xbf)
{
delay(100);
switch(dat)
{
case 0xb7:
display(11);
break;
case 0xbb:
display(10);
break;
case 0xbd:
display(9);
break;
case 0xbe:
display(8);
break;
}
break;
}
P0=0xdf;
dat=0xdf;
dat=P0&0xdf;
while(dat!=0xdf)
{
delay(100);
switch(dat)
{
case 0xd7:
display(7);
break;
case 0xdb:
display(6);
break;
case 0xdd:
display(5);
break;
case 0xde:
display(4);
break;
}
break;
}
P0=0xef;
dat=0xef;
dat=P0&0xef;
while(dat!=0xef)
{
delay(100);
switch(dat)
{
case 0xe7:
display(3);
break;
case 0xeb:
display(2);
break;
case 0xed:
display(1);
break;
case 0xee:
display(0);
break;
}
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -