#include <STC15F2K60S2.H>
sbit R1=P3^0;
sbit R2=P3^1;
sbit R3=P3^2;
sbit R4=P3^3;
sbit C1=P4^4;
sbit C2=P4^2;
sbit C3=P3^5;
sbit C4=P3^4;
unsigned char code smgduanma[18]={
0xC0,0xF9,0xA4,0xB0,0x99,0x92,
0x82,0xF8,0x80,0x90,0x88,0x80,
0xc6,0xc0,0x86,0x8e,0xbf,0x7f
};
void SELECT_HC138(unsigned int n)
{
switch(n)
{
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)
{
SELECT_HC138(6);
P0=0x01;
SELECT_HC138(7);
P0=value;
}
unsigned char Key_num;
void ScanKey()
{
R1=0;
R2=R3=R4=1;
C1=C2=C3=C4=1;
if(C1==0)
{
while(C1==0);
Key_num=0;
DisplayKeynum(smgduanma[Key_num]);
}
else if(C2==0)
{
while(C2==0);
Key_num=1;
DisplayKeynum(smgduanma[Key_num]);
}
else if(C3==0)
{
while(C3==0);
Key_num=2;
DisplayKeynum(smgduanma[Key_num]);
}
else if(C4==0)
{
while(C4==0);
Key_num=3;
DisplayKeynum(smgduanma[Key_num]);
}
R2=0;
R1=R3=R4=1;
C1=C2=C3=C4=1;
if(C1==0)
{
while(C1==0);
Key_num=4;
DisplayKeynum(smgduanma[Key_num]);
}
else if(C2==0)
{
while(C2==0);
Key_num=5;
DisplayKeynum(smgduanma[Key_num]);
}
else if(C3==0)
{
while(C3==0);
Key_num=6;
DisplayKeynum(smgduanma[Key_num]);
}
else if(C4==0)
{
while(C4==0);
Key_num=7;
DisplayKeynum(smgduanma[Key_num]);
}
R3=0;
R2=R1=R4=1;
C1=C2=C3=C4=1;
if(C1==0)
{
while(C1==0);
Key_num=8;
DisplayKeynum(smgduanma[Key_num]);
}
else if(C2==0)
{
while(C2==0);
Key_num=9;
DisplayKeynum(smgduanma[Key_num]);
}
else if(C3==0)
{
while(C3==0);
Key_num=10;
DisplayKeynum(smgduanma[Key_num]);
}
else if(C4==0)
{
while(C4==0);
Key_num=11;
DisplayKeynum(smgduanma[Key_num]);
}
R4=0;
R2=R3=R1=1;
C1=C2=C3=C4=1;
if(C1==0)
{
while(C1==0);
Key_num=12;
DisplayKeynum(smgduanma[Key_num]);
}
else if(C2==0)
{
while(C2==0);
Key_num=13;
DisplayKeynum(smgduanma[Key_num]);
}
else if(C3==0)
{
while(C3==0);
Key_num=14;
DisplayKeynum(smgduanma[Key_num]);
}
else if(C4==0)
{
while(C4==0);
Key_num=15;
DisplayKeynum(smgduanma[Key_num]);
}
}
void main(){
while(1){
ScanKey();
}
}