#include<reg51.h>
#include<intrins.h>
typedef unsigned int u16;
typedef unsigned char u8;
#define uchar unsigned char
#define led P1
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
sbit k1=P3^2;
sbit k2=P3^3;
sbit k3=P3^4;
sbit A1=P2^0;
sbit A2=P2^1;
sbit A3=P2^2;
sbit A4=P2^3;
u16 count=1000,flag=0;
void delay(u16 i)
{
while(i--);
}
void smg()
{
P0=table[count/1000];
A1=0;
delay(1);
A1=1;
P0=table[count%1000/100];
A2=0;
delay(1);
A2=1;
P0=table[count%100/10];
A3=0;
delay(1);
A3=1;
P0=table[count%10];
A4=0;
delay(1);
A4=1;
}
void Timer0Init()
{
TMOD|=0X01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。
TH0=0XFC; //给定时器赋初值,定时1ms
TL0=0X18;
ET0=1;//打开定时器0中断允许
EA=1;//打开总中断
TR0=1;//打开定时器
}
void main(void)
{
u8 i;
Timer0Init();
led=0xfe;
while(1)
{
smg();
if(flag)
{
flag=0;
for(i=0;i<7;i++)
{
led=_crol_(led,1);
}
}
delay(10);
if(k1==0)
{
delay(10);
if(k1==0)
{
count=count-100;
if(count==100)
{
count=500;
}
}
while(!k1);
}
if(k2==0)
{
delay(10);
if(k2==0)
{
count=count+100;
if(count==2000)
{
count=500;
}
}
while(!k2);
}
}
}
void time0(void) interrupt 1 using 0
{
static u16 i=0;
TH0=0xfc; //重新装入初值
TL0=0x18;
i++;
if(i==count)
{
i=0;
flag=1;
}
}