标题: 单片机数码管倒计时显示乱码 求帮助 [打印本页]

作者: nancheng307    时间: 2021-11-21 16:34
标题: 单片机数码管倒计时显示乱码 求帮助
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
void delay(uint);
sbit DULA=P2^6;                //声明U2锁存端,段选
sbit WELA=P2^7;                //位选
uchar code Tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};        //0-9段码
void main()
{
        uint k;
        while(1)
        {
                WELA=1;
//                P0=0XF8;
                                P0=0Xc7;

                WELA=0;//关闭位选
               
                DULA=1;
//                for(k=0;k<10;k++)
//                {
//                        P0=Tab[k];
//                        delay(500);
//                }        
                for(k=10;k>=0;k--)
                {
                        P0=Tab[k];
                        delay(500);
                }        
        }
}

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

数码管倒计数.rar

83.89 KB, 下载次数: 2


作者: munuc_w    时间: 2021-11-23 08:42
做任何事情都是有规律的,按着处理数据、分离个,十,百。。。位、查段吗、送显的顺序做,不会出问题的。
作者: glinfei    时间: 2021-11-23 09:05
你在用锁存器控制数码管, DULA=1; 打开锁存器送完数据之后,应该有个 DULA=0;再delay,这样应该可以防止乱码。
作者: man1234567    时间: 2021-11-23 09:12
你这个肯定是乱码。关键代码修改建议如下:
                for(k=10;k>=0;k--) //从10到1循环
                {
                        P0=Tab[k];   //显示循环数
                        delay(500);   //延时
//这里要加消隐P0=0x00和延时delay(??),而且和上面的延时配合得当,让视觉暂留现象出现的残影呵呵
                }        





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1