美文网首页
单片机实例——数字递增

单片机实例——数字递增

作者: 飞向深空 | 来源:发表于2018-10-21 14:03 被阅读0次

现象:3个数码管量,最右边的到10则上面的数码管加1,其本身清0

#include<reg52.h>

typedef unsigned int u16;
typedef unsigned char u8;

sbit LSA = P3^0;
sbit LSB = P3^1;
sbit LSC = P3^3;  //数码管位选

u8 DisplayData[8];
u8 code List[17] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                  0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};  //数字列表
u8 codes[6];   //

u8 S,M,Mo; //3个数


void delay(u16 i) //延时函数,i=1,延时10us
{
    while(i--);
}


void DigDisplay()   //数码管显示函数
{
    u8 i;
    for(i=0;i<3;i++){
        switch(i){
            case(0):LSA=0;LSB=0;LSC=0;break;
            case(1):LSA=1;LSB=0;LSC=0;break;
            case(2):LSA=0;LSB=1;LSC=0;break;
        }
        P0 = DisplayData[i];
        delay(100);
        P0 = 0x00;
    }   
}

void shuju()     //数据处理
{
    DisplayData[2] = List[codes[0]];
    DisplayData[1] = List[codes[1]];
    DisplayData[0] = List[codes[2]];
            
}

void Init_Time0()   //定时中断0初始函数
{
    TMOD |= 0x01;
    TH0 = 0xfc;
    TL0 = 0x18;
    ET0 = 1;
    EA = 1;
    TR0 = 1; 
}


void main()
{
    Init_Time0();
    while(1){
        shuju();
        DigDisplay();   
    }

}

void inter_Time0() interrupt 1  //定时中断0服务函数
{
    static u16 i;
    
    TH0 = 0xfc;
    TL0 = 0x18;
    i++;
    if(i==1000){
        i=0;
        S++;
        codes[0] = S;
        if(S==10){    //当S=10,则M进1
            S = 0;
            M+=1;
            codes[1]=M;
            if(M==10){  //当M=10,Mo进1
                M=0;
                Mo+=1;
                codes[2]= Mo;
                }
            }
    }
            
}

相关文章

网友评论

      本文标题:单片机实例——数字递增

      本文链接:https://www.haomeiwen.com/subject/uljbzftx.html