C51单片机之数码管实现99秒倒计时(结合定时器)—STC89C52单片机
代码如下:
#include <reg52.h>
typedef unsigned char u8;
typedef unsigned int u16;
sbit b1 = P2^2;
sbit b2 = P2^3;
sbit b3 = P2^4;
u8 duan[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};
u16 count = 99;
u16 digit = 0;
void delay(u16 a){
while(a--);
}
void timeSub(){
u8 j;
for( j=0; j<2; j++){
switch(j){
case(0):
b1 = 0, b2 = 0, b3 = 0 ,P0 = duan[count%10];break;
case(1):
b1 = 1, b2 = 0, b3 = 0, P0 = duan[count/10];break;
}
delay(100);
}
}
void Tim0() interrupt 1
{
TH0 = 0xfc;
TL0 = 0x18;
digit++;
if(digit >= 1000){
digit = 0;
if(count>=0){
count--;
}
}
}
void main(){
TMOD |= 0x01;
TH0 = 0xfc;
TL0 = 0x18;
ET0 = 1;
TR0 = 1;
EA = 1;
while(1){
timeSub();
}
}