#include<reg51.h>
#include<intrins.h>
unsigned char key_num = 0xff;
unsigned char output=0xfe;
unsigned int k=1,ms=0;
void delay(unsigned int a){
unsigned int b;
while(a--)
for(b=0;b<155;b++);
}
void Time0(){
TMOD=0x01;//设置定时器模式
TL0=0x66;//设置定时器初值
TH0=0xfc;//设置定时器初值
TR0=1;//定时器0开始计时
TF0=0;//清除定时器标志
ET0=1;//定时器0中断开关
EA=1;//中断总开关
}
unsigned char read_key() {
unsigned char key_value=0xff,key_temp;
key_temp=P2 & 0xf0;
if(key_temp!=0xf0){
delay(10);
key_temp=P2&0xf0;
if(key_temp!=0xf0){
switch(key_temp)
{
case 0x70:key_value=4;break; //0111 0000
case 0xb0:key_value=3;break; //1011 0000
case 0xd0:key_value=2;break; //1101 0000
case 0xe0:key_value=1;break; //1110 0000
}
return key_value;
}
else return 0xff;
}
}
void main(){
Time0();
while(1) {
key_num=read_key();
}
}
void timer0() interrupt 1
{
TL0=0x66;//设置定时器初值
TH0=0xfc;//设置定时器初值
ms=ms+1;
if(ms>=1000)
{
ms=0;
if(key_num==1)
{P1=0xfe;}
else if(key_num==2)
{P1=0x00;}
else if(key_num==3)
{
P1=output;
output=output<<1;
output=output|1;
if(output==0xff)output=0xfe;
}
else if(key_num==4)
{
if(k==1)
{
P1=output;
output=output<<1;
output=output|1;
if(output==127)
k=0;
}
else if(k==0)
{
P1=output;
output=output>>1;
output=output|128;
if(output==0xfe)
k=1;
}
}
}
}