单片机想用动态显示完成60秒倒计时

2019-07-15 08:46发布

我是想用动态显示来做一个60秒的计时,现在个位可以正常显示,十位数也能正常进位,但是一直在闪烁,求个解决方案。
以下是代码
#include <reg52.h>
#define uint unsigned int

#define uchar unsigned char
sbit led=P1^0;
sbit dula=P2^6;
sbit wela=P2^7;
uchar num;
uint ge,shi;
uchar code a[]={0x3f,0x06,0x5b,0x4f,
                                0x66,0x6d,0x7d,0x07,
                                0x7f,0x6f,0x77,0x7c,
                                0x39,0x5e,0x79,0x71};
void delay(uint);
void main()
{
        while(1)
        {
                wela=1;
                P0=0xfd;
                wela=0;
                P0=0xff;
                dula=1;
                P0=a[ge];
                dula=0;
                delay(1000);
                ge++;
                if(ge==10)
                {
                        shi++;
                        ge=0;
                }
                wela=1;
                P0=0xfe;
                wela=0;
                P0=0xff;
                dula=1;
                P0=a[shi];
                dula=0;
                delay(1000);
                if(shi==6)
                {
                        ge=0;
                        shi=0;
                        wela=0;
                        dula=0;
                        led=0;
                        delay(500);
                        led=1;
                        delay(500);
                }
        }
}


void delay(uint xms)


{
        uint i,j;
        for(i=xms;i>0;i--)
                for(j=110;j>0;j--);
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。