#include <AT89X51.H>
unsigned char dispbitcnt; //數碼管位碼掃描變量
unsigned char second;
//秒變量
unsigned char minite;
//分變量
unsigned char hour;
//時變量
unsigned char tcnt;
//秒信號產生變量
unsigned char mstcnt;
//掃描時間變量
const unsigned char dispcode[10]={0xc0,0xf9,0xa4,0xb0,0x99,<br> <br> <br> 0x92,0x82,0xf8,0x80,0x90};
//0123456789段碼
const unsigned char dispbitcode[6]={0xfe,0xfd,0xfb,0xf7,<br> <br> <br> 0xef,0xdf};
//123456位碼
unsigned char dispbuf[6]={0,0,0,0,0,0};
//緩沖數組
//**************TMR0中斷數碼管掃描程序*********************
void Timer0() interrupt 1
{
P2=dispcode[dispbuf[dispbitcnt]];//段碼
P1=dispbitcode[dispbitcnt];//位碼
dispbitcnt++;
if(dispbitcnt==6)
{dispbitcnt=0;<br> }
tcnt++;
//中斷產生秒信號
if(tcnt==244)
{tcnt=0;<br> <br>second++;<br> <br>if(second==60)<br> <br> {second=0;<br> <br> minite++;<br> <br> if(minite==60)<br> <br> {minite=0;<br> <br> <br>hour++;<br> <br> <br>if(hour==24)<br> <br> <br> {hour=0;<br> <br> <br> }
}
}
dispbuf[4]=second%10;
dispbuf[5]=second/10;
dispbuf[2]=minite%10;
dispbuf[3]=minite/10;
dispbuf[0]=hour%10;
dispbuf[1]=hour/10;
}
TMOD=0x01;
TL0=0x10;
TH0=0xf0;
}
///****************1ms延時程序******************
void delay_1ms(unsigned char i)
{
unsigned char j;
for(i=0;i<144;i++)
for(j=0;j<144;j++);
}
//*************主程序********************
void main(void)
{
TMOD=0x01;
TL0=0x10;
TH0=0xf0;
while(1)
{
dispbitcnt=0;
P1=0x00;
//開段碼
P2=0x00;
//開位碼
delay_1ms(200);
//延時
delay_1ms(200);
//延時
delay_1ms(200);
//延時
delay_1ms(200);
//延時
P2=0xff;
//關位碼
EA=1;
ET0=1;
TR0=1;
while(1);
}
}