51单片机:在2位数码管上循环显示00-99,间隔0.5秒

原理图

这里写图片描述

 #include <reg52.h>
#define uint unsigned int                   // 宏
#define uchar unsigned char 
sbit a = P1^0;                          
sbit b = P1^1;
sbit c = P1^2;
sbit d = P1^3;  
uchar code table[]=
            {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳极0-916进制编码
void delayms(uint); //延时函数声明
void display(uint); //自定义位选函数
uint num=0;
uchar shi=0;    

void display(uint num)  
{
        d=1;    //共阳极数码管高电平有效
        P0=table[num%10];   //循环显示0-9
        delayms(5);         //刷新
        P0=0XFF;        
        d=0;

        c=1;    //共阳极数码管高电平有效
        P0=table[(num/10)%10];      //循环显示0-9
        delayms(5);         //刷新
        P0=0XFF;        
        c=0;                    
}

void jishu() interrupt 1
{
    if(shi==10)
    {               //10*50MS定时时间为0.5秒
        shi=0;
        num++;
    }
        TH0=(65536-50000)/256;  //重新赋值
        TL0=(65536-50000)%256;
        shi++;          //50毫秒加1,加20次为一秒
}

void delayms(uint xms)       //延时程序
{       
    uint i,j;
    for(i=xms;i>0;i--)
        for(j=110;j>0;j--);
}


void main()
{

    TMOD=0X01;      /*中断初始化*/
    TH0=(65536-50000)/256;  
    TL0=(65536-50000)%256;
    EA=1;               //中断总开关
    ET0=1;              //请求中断
    TR0=1;              //允许中断

    while(1)
    {   

                        //关闭其他位
        a=0;
        b=0;                        
        display(num);       //调用函数

    }
}

猜你喜欢

转载自blog.csdn.net/title71/article/details/79011392