#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar aa;
uchar code table[17] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};
uchar juzhenkey();
void Delay(uint del);
void main ()
{
while(1)
{
//P0=table[juzhenkey()];
aa=juzhenkey();
P0=aa;
}
}
uchar juzhenkey() //矩阵键盘检测程序,返回值如下,对应买回来的矩阵键盘
{
/*******************************************************************************************/
/*********************** key=0x00 0 *****************************************************/
/*********************** key=0x01 1 *****************************************************/
/*********************** key=0x02 2 *****************************************************/
/*********************** key=0x03 3 *****************************************************/
/*********************** key=0x04 4 *****************************************************/
/*********************** key=0x05 5 *****************************************************/
/*********************** key=0x06 6 *****************************************************/
/*********************** key=0x07 7 *****************************************************/
/*********************** key=0x08 8 *****************************************************/
/*********************** key=0x09 9 *****************************************************/
/*********************** key=0x0a 点号 *****************************************************/
/*********************** key=0x0b cancel*****************************************************/
/*********************** key=0x0c 上 *****************************************************/
/*********************** key=0x0d 下 *****************************************************/
/*********************** key=0x0e steup *****************************************************/
/*********************** key=0x0f enter *****************************************************/
/*******************************************************************************************/
uchar temp,num,key;
//num=0;
P3=0xef; //第1行键盘
temp=P3;
temp=temp&0x0f;
while(temp!=0x0f)
{
Delay(5);
temp=P3; //确认按下
temp=temp&0x0f;
while(temp!=0x0f)
{
temp=P3;
switch(temp)
{
case 0xee: num=0;key=0x00;break;
case 0xed: num=1;key=0x01;break;
case 0xeb: num=2;key=0x02;break;
case 0xe7: num=3;key=0x0c;break;
default: break;
}
while(temp!=0x0f)temp=P3&0x0f;
}
}
P3=0xdf; //第2行键盘
temp=P3;
temp=temp&0x0f;
while(temp!=0x0f)
{
Delay(5);
temp=P3; //确认按下
temp=temp&0x0f;
while(temp!=0x0f)
{
temp=P3;
switch(temp)
{
case 0xde: num=4;key=0x03;break;
case 0xdd: num=5;key=0x04;break;
case 0xdb: num=6;key=0x05;break;
case 0xd7: num=7;key=0x0d;break;
default: break;
}
while(temp!=0x0f)temp=P3&0x0f;
}
}
P3=0xbf; //第1行键盘
temp=P3;
temp=temp&0x0f;
while(temp!=0x0f)
{
Delay(5);
temp=P3; //确认按下
temp=temp&0x0f;
while(temp!=0x0f)
{
temp=P3;
switch(temp)
{
case 0xbe: num=8;key=0x06;break;
case 0xbd: num=9;key=0x07;break;
case 0xbb: num=10;key=0x08;break;
case 0xb7: num=11;key=0x0e;break;
default: break;
}
while(temp!=0x0f)temp=P3&0x0f;
}
}
P3=0x7f; //第1行键盘
temp=P3;
temp=temp&0x0f;
while(temp!=0x0f)
{
Delay(5);
temp=P3; //确认按下
temp=temp&0x0f;
while(temp!=0x0f)
{
temp=P3;
switch(temp)
{
case 0x7e: num=12;key=0x09;break;
case 0x7d: num=13;key=0x0a;break;
case 0x7b: num=14;key=0x0b;break;
case 0x77: num=15;key=0x0f;break;
default: break;
}
while(temp!=0x0f)temp=P3&0x0f;
}
}
// return num;
return key;
}
void Delay(uint del)
{
uint i,j;
for(i=0; i<del; i++)
for(j=0; j<120; j++)
;
}
/*延时函数*/
/*
void Delay(unsigned int a){ // 1ms延时程序(12MHz 10倍于51单片机速度时)
unsigned int i;
while( --a != 0){
for(i = 0; i < 600; i++);
}
} */