一、将跳帽接成矩阵键盘的模式,组成4*4矩阵键盘。在扫描按键的过程中,发现有按键触发信号后(不做去抖动),待按键松开后,在数码管的第一位显示相应的数字:从左至右,从上到下,依次显示0~F
#include<stc15.h>
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,0X80,
0XC6,0XC0,0X86,0X8E,0XBF,0X7F};
void SelectHC573(unsigned char channel)
{
switch(channel)
{
case 4:
P2=(P2&0X1F)|0X80;
break;
case 5:
P2=(P2&0X1F)|0XA0;
break;
case 6:
P2=(P2&0X1F)|0XC0;
break;
case 7:
P2=(P2&0X1F)|0XE0;
break;
}
}
void DisplayKeyNum(unsigned char value)
{
SelectHC573(6);
P0=0X01;
SelectHC573(7);
P0=value;
}
unsigned char key_num=0;
void ScanKeysMulti()
{
R1=0;
R2=R3=R4=1;
C1=C2=C3=C4=1;
if(C1==0)
{
while(C1==0);
key_num=0;
DisplayKeyNum(SMG_duanma[key_num]);
}
else if(C2==0)
{
while(C2==0);
key_num=1;
DisplayKeyNum(SMG_duanma[key_num]);
}
else if(C3==0)
{
while(C3==0);
key_num=2;
DisplayKeyNum(SMG_duanma[key_num]);
}
else if(C4==0)
{
while(C4==0);
key_num=3;
DisplayKeyNum(SMG_duanma[key_num]);
}
R2=0;
R1=R3=R4=1;
C1=C2=C3=C4=1;
if(C1==0)
{
while(C1==0);
key_num=4;
DisplayKeyNum(SMG_duanma[key_num]);
}
else if(C2==0)
{
while(C2==0);
key_num=5;
DisplayKeyNum(SMG_duanma[key_num]);
}
else if(C3==0)
{
while(C3==0);
key_num=6;
DisplayKeyNum(SMG_duanma[key_num]);
}
else if(C4==0)
{
while(C4==0);
key_num=7;
DisplayKeyNum(SMG_duanma[key_num]);
}
R3=0;
R1=R2=R4=1;
C1=C2=C3=C4=1;
if(C1==0)
{
while(C1==0);
key_num=8;
DisplayKeyNum(SMG_duanma[key_num]);
}
else if(C2==0)
{
while(C2==0);
key_num=9;
DisplayKeyNum(SMG_duanma[key_num]);
}
else if(C3==0)
{
while(C3==0);
key_num=10;
DisplayKeyNum(SMG_duanma[key_num]);
}
else if(C4==0)
{
while(C4==0);
key_num=11;
DisplayKeyNum(SMG_duanma[key_num]);
}
R4=0;
R1=R2=R3=1;
C1=C2=C3=C4=1;
if(C1==0)
{
while(C1==0);
key_num=12;
DisplayKeyNum(SMG_duanma[key_num]);
}
else if(C2==0)
{
while(C2==0);
key_num=13;
DisplayKeyNum(SMG_duanma[key_num]);
}
else if(C3==0)
{
while(C3==0);
key_num=14;
DisplayKeyNum(SMG_duanma[key_num]);
}
else if(C4==0)
{
while(C4==0);
key_num=15;
DisplayKeyNum(SMG_duanma[key_num]);
}
}
void main()
{
while(1)
{
ScanKeysMulti();
}
}