|
#include <REGX52.H>
typedef unsigned char u8;
typedef unsigned int u16;
#define SMG PORT P0
#define KEY_MATRIX_PORT P1
u8 gsmg_code[16]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x77,
0x7c,0x39,0x5e,0x79,0x71}
void delay_10us(u16 ten_us)
{
while(ten_us--);
}
u8 key_matrix(void)
{
u8 key_is=0;
KEY_MATRIX_PORT =0xf7;
if(KEY_MATRIX_PORT!=0xf7)
{
delay_10us(1000);
switch(KEY_MATRIX_PORT )
{
case 0x77:key_is 1;break;
case 0xb7:key_is 5;break;
case 0xd7:key_is 9;break;
case 0xe7:key_is 13;break;
}
while(KEY_MATRIX_PORT=0Xf7);
return key_is;
}
else if(KEY_MATRIX_PORT!=0xfb)
{
delay_10us(1000);
switch(KEY_MATRIX_PORT)
{
case 0x7b:key is 2;break;
case 0xbb:key is 6;break;
case 0xdb:key is 10;break;
case 0xeb:key is 14;break;
}
while(KEY_MATRIX_PORT=0Xfb);
return key is;
}
else if(KEY_MATRIX_PORT!=0xfd)
{
delay_10us(1000);
switch(KEY_MATRIX_PORT)
{
case 0x7d:key is 3;break;
case 0xbd:key is 7;break;
case 0xdd:key is 11;break;
case 0xed:key is 15;break;
}
while(KEY MATRIX POR=0Xfd);
return key is;
}
if(KEY_MATRIX_PORT !=0xfe)
{
delay_10us(1000);
switch(KEY_MATRIX_PORT )
{
case 0x7e:key is 4;break;
case 0xbe:key is 8;break;
case 0xde:key is 12;break;
case 0xee:key is 16;break;
}
while(KEY_MATRIX_PORT =0Xfe);
return key is;
}
}
void main()
{ u8 key=0;
while(1)
{
key=key_matrix();
if(key!=0)
P0=gsmg[key-1];
}
}
|
|