#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar code
dantab[]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40} ;
//0~9,+ -;
uchar key;
uint value=0;
sbit W1=P2^0;
sbit W2=P2^1;
sbit W3=P2^2;
sbit W4=P2^3;
void delay1ms()
{
uchar t=25;
while(t--);
}
void Display(uint num)
{
uchar temp1,temp2,temp3,temp4;
temp1=num/1000;
temp2=num%1000/100;
temp3=num%100/10;
temp4=num%10;
P0=dantab[temp1];
W1=0;
delay1ms();
W1=1;
P0=dantab[temp2];
W2=0;
delay1ms();
W2=1;
P0=dantab[temp3];
W3=0;
delay1ms();
W3=1;
P0=dantab[temp4];
W4=0;
delay1ms();
W4=1;
}
void scan()
{
key = 0x03 & P1;
while(key==0x00) { key = 0x03 & P1;Display(value);}
if(key==0x02)
{
while(key==0x02) {key = 0x03 & P1;Display(value);}
while(key==0x03) {key = 0x03 & P1;Display(value);}
while(key==0x01)
{
key = 0x03 & P1;Display(value);
if(key==0x00)
{
value++;
if(value==1001)
{
value=0;
}
Display(value);
}
}
}
if(key==0x01)
{
while(key==0x01) { key = 0x03 & P1;Display(value);}
while(key==0x03) { key = 0x03 & P1;Display(value);}
while(key==0x02)
{
key = 0x03 & P1;Display(value);
if(key==0x00)
{
value--;
if(value==-1)
{
value=1000;
}
Display(value);
}
}
}
}
void main()
{
P1=0x00;
EA=1; //CPU开中断
EX0=1; //允许外部中断0中断
IT0=1; //边沿触发
while(1) scan();
}
|