#include "reg52.h"
sfr P4 = 0xc0;
sbit R1 = P3^0;
sbit R2 = P3^1;
sbit R3 = P3^2;
sbit R4 = P3^3;
sbit C4 = P3^4;
sbit C3 = P3^5;
sbit C2 = P4^2;
sbit C1 = P4^4;
unsigned char code SMG_duanma[18]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,
0xbf,0x7f};//01234567 89ABCDEF -.
void delay(int n)
{
while(n--)
{}
}
void Init_Hc138(int n) //译码器选择
{
switch (n)
{
case 4:
P2=(P2 & 0x1f) | 0x80;
break; //让Y4输出低电平
case 5:
P2=(P2 & 0x1f) | 0xa0;
break; //让Y5输出低电平
case 6:
P2=(P2 & 0x1f) | 0xc0;
break; //让Y6输出低电平
case 7:
P2=(P2 & 0x1f) | 0xe0;
break; //让Y7输出低电平
}
}
void Output_P0(unsigned char channel,unsigned char dat)
{
Init_Hc138(channel);
P0=dat; //P0口输出数据
}
void show_smg(unsigned char val)
{
Output_P0(6,0x01);
Output_P0(7,SMG_duanma[val]);
delay(500);
}
unsigned char keynum;
void scankey()
{
R1=0;
R2=R3=R4=1;
C1=C2=C3=C4=1;
if(C1==0)
{
while(C1==0)
keynum=0;
show_smg(keynum);
}
else if(C2==0)
{
while(C2==0)
keynum=1;
show_smg(keynum);
}
else if(C3==0)
{
while(C3==0)
keynum=2;
show_smg(keynum);
}
else if(C4==0)
{
while(C4==0)
keynum=3;
show_smg(keynum);
}
R2=0;
R1=R3=R4=1;
C1=C2=C3=C4=1;
if(C1==0)
{
while(C1==0)
keynum=4;
show_smg(keynum);
}
else if(C2==0)
{
while(C2==0)
keynum=5;
show_smg(keynum);
}
else if(C3==0)
{
while(C3==0)
keynum=6;
show_smg(keynum);
}
else if(C4==0)
{
while(C4==0)
keynum=7;
show_smg(keynum);
}
R3=0;
R2=R1=R4=1;
C1=C2=C3=C4=1;
if(C1==0)
{
while(C1==0)
keynum=8;
show_smg(keynum);
}
else if(C2==0)
{
while(C2==0)
keynum=9;
show_smg(keynum);
}
else if(C3==0)
{
while(C3==0)
keynum=10;
show_smg(keynum);
}
else if(C4==0)
{
while(C4==0)
keynum=11;
show_smg(keynum);
}
R4=0;
R2=R3=R1=1;
C1=C2=C3=C4=1;
if(C1==0)
{
while(C1==0)
keynum=12;
show_smg(keynum);
}
else if(C2==0)
{
while(C2==0)
keynum=13;
show_smg(keynum);
}
else if(C3==0)
{
while(C3==0)
keynum=14;
show_smg(keynum);
}
else if(C4==0)
{
while(C4==0)
keynum=15;
show_smg(keynum);
}
}
void main()
{
while(1)
{
scankey();
}
}
蓝桥杯学习--按键扫描
最新推荐文章于 2024-01-19 23:24:54 发布