#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula = P2^6;
sbit wela = P2^7;
uchar table[] = {
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
0x76,0x79,0x38,0x38,0x3F,0
};
uchar bai,shi,ge;//显示百十个的变量
uchar x,y;//加上HELLO
uchar shijian1,shijian2;//两个定时器的变量
//uchar flag1,flag2;//分别控制定时器0和1的flag
uint number = 300;//初始时间
uchar flag = 1;
void init()//初始化函数
{
TMOD = 0x11;
TH0 = (65536 - 45872)/256;
TL0 = (65536 - 45872)%256;
TH1 = (65536 - 45872)/256;
TL1 = (65536 - 45872)%256;
EA = 1; //开启总中断
ET0 = 1; //开启定时器0的中断
ET1 = 1; //开启定时器1的中断
TR0 = 1; //启动定时器0
TR1 = 0; //定时器1
}
void delayms(uint xms)
{
uint i,j;
for(i = xms ; i > 0 ;i--)
for(j = 110 ; j > 0 ;j--);
}
void display(uchar bai, uchar shi, uchar ge, uchar x , uchar y)
{
dula = 1;
P0 = table[bai];
dula = 0;
P0 = 0xff;
wela = 1;
P0 = 0xfe;
wela = 0;
delayms(1);
dula = 1;
P0 = table[shi];
dula = 0;
P0 = 0xff;
wela = 1;
P0 = 0xfd;
wela = 0;
delayms(1);
dula = 1;
P0 = table[ge];
dula = 0;
P0 = 0xff;
wela = 1;
P0 = 0xfb;
wela = 0;
delayms(1);
dula = 1;
P0 = table[x];
dula = 0;
P0 = 0xff;
wela = 1;
P0 = 0xf7;
wela = 0;
delayms(1);
dula = 1;
P0 = table[y];
dula = 0;
P0 = 0xff;
wela = 1;
P0 = 0xef;
wela = 0;
delayms(1);
}
void main()
{
init();
while(1)
{
if(flag==1)
{
display(bai,shi,ge,21,21);
}
else
{
display(16,17,18,19,20); //显示HELLO
}
}
}
void time1() interrupt 1//控制数码管显示百十个倒计时
{
TH0=(65536 - 45872)/256;
TL0=(65536 - 45872)%256;
shijian1++;
if(flag=1)
{
if(shijian1 == 2)
{
shijian1=0;
number--;
bai=number/100;//开始分离
shi=number%100/10;
ge=number%10;
if(number==0)
{
TR0 = 0;
TR1 = 1;
flag = 0;
}
}
}
}
void time2() interrupt 3
{
TH1 = (65536 - 45872)/256;
TL1 = (65536 - 45872)%256;
shijian2++;
if(flag=0)
{
if(shijian2 == 20)
{
shijian2=0;
TR1=~TR1;
}
}
}
|