编辑代码

#include <reg51.h>

typedef unsigned int uint;//新定义类:unsign>0

uint num;
uint num1;
uint num2;

//led数字管段
char leds[16]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

sbit LED=P2^0;

//控制数码管38译码器 哪个亮
sbit kongwei1=P2^2;
sbit kongwei2=P2^3;
sbit kongwei3=P2^4;

static int shi;
static int ge;

void delay(int n)
{
	while(n--);	
}

//动态数码管:
void dongShu(){
    
    uint i;

    for(i=0;i<2;i++){

        if(i==0){
            //控制第二个数码管亮:110
            kongwei1=0;
            kongwei2=1;
            kongwei3=1;
            P0=leds[ge];//十位显示数字
        }else if(i==1){
           //控制第一个数码管亮:111
            kongwei1=1;
            kongwei2=1;
            kongwei3=1;
            P0=leds[shi];//个位显示数字
        }

        //保留数字残影
        delay(100);

        //清除数字影子
        P0=0x00;

    }
}


//定时器初始化:启动定时器0,1;启动定时器的定时程序;设置定时器的间隔时间
void timerInit(){

EA=1;//开启中断
TMOD=0x11;//16位定时器,定时器0和定时1

ET0=1;//开启定时器0
TR0=1;//开启定时器0程序
	TH0 = (65536-45872)/256;      //定时器0间隔时间:50ms
	TL0 = (65536-45872)%256;

ET1=1;//开启定时器1
TR1=1;//开启定时器1程序
	TH1 = (65536-45872)/256;      //定时器1间隔时间
	TL1 = (65536-45872)%256;
}


void timer1() interrupt 3{//定时器1程序
    TH1 = (65536-45872)/256;//定时器1间隔时间:50ms
	TL1 = (65536-45872)%256;

    num1++;
    if(num1==20){//50*20=1000ms=1s
    num1=0;
    num++;
    shi=num/10;//十位
    ge=num%10;
    //数字不能大于100
    if(num==100){
num=0;
}
    }

}


//定时器程序0:
void timer0() interrupt 3{//定时器0程序
    TH0 = (65536-45872)/256;//定时器1间隔时间:50ms
	TL0 = (65536-45872)%256;

    num2++;
    if(num2==20){//50*20=1s
        num2=0;
        LED=~LED;
    }


}




void main () {
   
   timerInit();//定义计时器开启

   while(1){//执行:动态led数码管
   dongShu();
   }

}