測試通過*/
#include<reg51.h>
sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit P1_2=P1^2;
sbit P1_3=P1^3;
sbit P2_7=P2^7;
sbit P3_7=P3^7;
unsigned char code table[]={0xC0,0xF9,0xA4,0xB0,0x99, //0~4
0x92,0x82,0xF8,0x80,0x90, //5~9
0x88,0x83,0xC6,0xA1,0x86,0x8E}; //A~F
void KeyScan();
void delay10ms(unsigned char time);
void Dispaly(unsigned char k);
void buzzer();
unsigned char key,temp;
void main() //主程序
{
while(1)
{
KeyScan();
}
}
void KeyScan() //按鍵掃描子程序
{
P1=0xFF;
P1_0=0;
temp=P1;
temp&=0xF0;
if(temp !=0xF0)
{buzzer();
delay10ms(10);
temp=P1;
temp&=0xF0;
if(temp !=0xF0)
{
temp=P1;
temp&=0xF0;
switch(temp)
{
case 0xE0:
key=0;break;
case 0xD0:
key=4;break;
case 0xB0:
key=8;break;
case 0x70:
key=12;break;
}
Dispaly(key);
}
}
P1=0xFF;
P1_1=0;
temp=P1;
temp&=0xF0;
if(temp !=0xF0)
{buzzer();
delay10ms(10);
temp=P1;
temp&=0xF0;
if(temp !=0xF0)
{
temp=P1;
temp&=0xF0;
switch(temp)
{
case 0xE0:
key=1;break;
case 0xD0:
key=5;break;
case 0xB0:
key=9;break;
case 0x70:
key=13;break;
}
Dispaly(key);
}
}
P1=0xFF;
P1_2=0;
temp=P1;
temp&=0xF0;
if(temp !=0xF0)
{buzzer();
delay10ms(10);
temp=P1;
temp&=0xF0;
if(temp !=0xF0)
{
temp=P1;
temp&=0xF0;
switch(temp)
{
case 0xE0:
key=2;break;
case 0xD0:
key=6;break;
case 0xB0:
key=10;break;
case 0x70:
key=14;break;
}
Dispaly(key);
}
}
P1=0xFF;
P1_3=0;
temp=P1;
temp&=0xF0;
if(temp !=0xF0)
{buzzer();
delay10ms(10);
temp=P1;
temp&=0xF0;
if(temp !=0xF0)
{
temp=P1;
temp&=0xF0;
switch(temp)
{
case 0xE0:
key=3;break;
case 0xD0:
key=7;break;
case 0xB0:
key=11;break;
case 0x70:
key=15;break;
}
Dispaly(key);
}
}
}
//延時程序
void delay10ms(unsigned char time)
{
unsigned char i;
while(time--)
{
for(i=0;i<120;i++) ;
}
}
void Dispaly(unsigned char k) //顯示程序
{
P0=table[k];
P2_7=0;
}
void buzzer()
{
P3_7=0;
delay10ms(20);
P3_7=1;
}