#include<reg51.h>
#define u8 unsigned char
#define u16 unsigned short
u8 a,b,c,second,s_A1,g_A2,temp,key=0;
u16 i,j,k=0;
sbit DULA = P2^6;//LED段选
sbit WELA = P2^7;//LED位选
u8 model0[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7c,0x39,0x5e,0x79,0x71};//数码管0-9 A-F
void delay(i) //延时函数
{
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
/* 数码管显示函数*/
void display(u8 num){
DULA=1;
P0=model0[num];
DULA=0;
WELA=1;
P0=0XC0;//LED全部开起
WELA=0;
}
void main(){
DULA=0;
WELA=0;
while(1){
/* 按钮0-3显示*/
P3=0xfe;//第一行p3.0置低
temp=P3;//temp读取P3 I0状态
temp=temp&0xf0;//如果某一按钮按下,temp值就会发生改变
if(temp!=0xf0) {
delay(10);
if(temp!=0xf0)
temp=P3;//读取P3 IO状态
switch(temp){
case 0xee:
key=0;
break;
case 0xde:
key=1;
break;
case 0xbe:
key=2;
break;
case 0x7e:
key=3;
break;
}
while(temp!=0xf0){
temp=P3;//temp读取P3 I0状态
temp=temp&0xf0;//如果某一按钮按下,temp值就会发生改变
P1=0XFE;//LED测试程序专用
}
display(key);
P1=0XFF;//LED测试程序专用
}
/* 按钮4-7显示*/
P3=0xfd;//第二行p3.1置低
temp=P3;//temp读取P3 I0状态
temp=temp&0xf0;//如果某一按钮按下,temp值就会发生改变
if(temp!=0xf0) {
delay(10);
if(temp!=0xf0)
temp=P3;//读取P3 IO状态
switch(temp){
case 0xed:
key=4;
break;
case 0xdd:
key=5;
break;
case 0xbd:
key=6;
break;
case 0x7d:
key=7;
break;
}
while(temp!=0xf0){
temp=P3;//temp读取P3 I0状态
temp=temp&0xf0;//如果某一按钮按下,temp值就会发生改变
P1=0XFE;//LED测试程序专用
}
display(key);
P1=0XFF;//LED测试程序专用
}
/* 按钮8-B显示*/
P3=0xfB;//第二行p3.1置低
temp=P3;//temp读取P3 I0状态
temp=temp&0xf0;//如果某一按钮按下,temp值就会发生改变
if(temp!=0xf0) {
delay(10);
if(temp!=0xf0)
temp=P3;//读取P3 IO状态
switch(temp){
case 0xeB:
key=8;
break;
case 0xdB:
key=9;
break;
case 0xbB:
key=10;
break;
case 0x7B:
key=11;
break;
}
while(temp!=0xf0){
temp=P3;//temp读取P3 I0状态
temp=temp&0xf0;//如果某一按钮按下,temp值就会发生改变
P1=0XFE;//LED测试程序专用
}
display(key);
P1=0XFF;//LED测试程序专用
}
/* 按钮C-F显示*/
P3=0xf7;//第二行p3.1置低
temp=P3;//temp读取P3 I0状态
temp=temp&0xf0;//如果某一按钮按下,temp值就会发生改变
if(temp!=0xf0) {
delay(10);
if(temp!=0xf0)
temp=P3;//读取P3 IO状态
switch(temp){
case 0xe7:
key=12;
break;
case 0xd7:
key=13;
break;
case 0xb7:
key=14;
break;
case 0x77:
key=15;
break;
}
while(temp!=0xf0){
temp=P3;//temp读取P3 I0状态
temp=temp&0xf0;//如果某一按钮按下,temp值就会发生改变
P1=0XFE;//LED测试程序专用
}
display(key);
P1=0XFF;//LED测试程序专用
}
}
}
TX-1C学习记录——矩阵键盘检测
最新推荐文章于 2023-06-19 00:01:31 发布