相关代码:
#include “STC15F2K60S2.H”
unsigned char KeyNumber;
unsigned char value;
unsigned char code SMG_weixu[18] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x80,0xc6,0xc0,0x86,0x8e,0xbf,0x7f};
sbit R1 = P3^0;
sbit R2 = P3^1;
sbit R3 = P3^2;
sbit R4 = P3^3;
sbit C1 = P3^4;
sbit C2 = P3^5;
sbit C3 = P4^2;
sbit C4 = P4^4;
//unsigned char *c[4]; 不知道如何使地址成为数组变量
//c[0] = &C1;c[1] = &C2;c[2] = &C3;c[3] = &C4;
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 DisplyKeyNum(unsigned char value)
{
SelectHC573(6);
P0 = 0x01;
SelectHC573(7);
P0 = value;
}
char i;
void ScanKeysMulti() //尝试不使用A B C D E F使用10, 11, 12…
{
P3 |= 0xff;
R1 = 0;
for(i=1;i<=4;i++)
{
C1 = C2 = C3 = C4 =1;
if(C1 == 0)
{
while(C1 == 0)
KeyNumber = 0;
DisplyKeyNum(SMG_weixu[KeyNumber+(i-1)*4]);
}
else if(C2 == 0)
{
while(C2 == 0)
KeyNumber = 1;
DisplyKeyNum(SMG_weixu[KeyNumber+(i-1)*4]);
}
else if(C3 == 0)
{
while(C3 == 0)
KeyNumber = 2;
DisplyKeyNum(SMG_weixu[KeyNumber+(i-1)*4]);
}
else if(C4 == 0)
{
while(C4 == 0)
KeyNumber = 3;
DisplyKeyNum(SMG_weixu[KeyNumber+(i-1)*4]);
}
P3 = (P3<<1)|1;
}
}
void main()
{
while(1)
{
ScanKeysMulti();
}
}