#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;
}
}
}
|