单片机想用动态显示完成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--);
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
jjy1039
1楼-- · 2019-07-15 22:11
 精彩回答 2  元偷偷看……
不胖到130斤不改名
2楼-- · 2019-07-16 03:02
lee_st 发表于 2018-3-27 22:13
很简单

那是需要修改下哪里呢?
不胖到130斤不改名
3楼-- · 2019-07-16 08:18
wulinwl 发表于 2018-3-28 11:09
#include
#define uint unsigned int
#define uchar unsigned char

你使用了中断了呀,我只想在单纯的动态显示用消影来做一个计时器
不胖到130斤不改名
4楼-- · 2019-07-16 13:02
jjy1039 发表于 2018-3-30 15:46
如果要消除抖动,适当调整延时,增加十位后面的延时时间,缩小各位后面的延时时间,如果还有增加准确度,软件延时是不准确的。你的延时已经远远超出了1秒钟。

好的,我试试,能不能成功。
不胖到130斤不改名
5楼-- · 2019-07-16 17:37
晓晓江南 发表于 2018-3-28 08:21
延迟太长了,你把延迟函数改成以下形式:

void delay(uint xms)

是所有的延时函数都改吗,还是改十位的?
lee_st
6楼-- · 2019-07-16 17:46
 精彩回答 2  元偷偷看……

一周热门 更多>