微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 数码管delay函数为什么是200us?

数码管delay函数为什么是200us?

时间:10-02 整理:3721RD 点击:
请教之后得到的是这个是长期经验得到的数据,但是这个数据有什么优点?多一些少一些可能会造成什么后果?希望有人能知道,先行谢过

时间不合理会造成数码管闪烁或亮度低的问题。应多动手实验。

时间长了,单个数码管的显示时间增加,会造成闪烁,时间短了,单个数码管的显示时间短了,会降低亮度。另外应该和数码管的数量也有关系,具体情况,具体调整就好了

人眼残影问题

数码管动态显示刷新频率要大于50HZ,也就是20ms,如果分摊到8个数码管,每个数码管只能显示2.5ms,但还是能感觉微闪烁,根据经验每个数码管显示1ms为宜,也就是刷新周期小于10ms,速度过快亮度下降明显甚至有鬼影。为了保证显示效果,程序中不宜使用大于1ms的软件延时,否则按键消抖等操作都会影响数码管显示效果,我习惯放在中断里处理。示例:
void T0_time() interrupt 1
{
        TL0 = 0x18;                //设置定时初值1ms
        TH0 = 0xFC;                //设置定时初值1ms
        cnt++;
        if(cnt>=6)
                cnt=0;
        switch(cnt)
        {
                case 0:
                        du=0;
                        P0=table[b_qian];                //显示第6位
                        du=1;
                        du=0;
                        we=0;                               
                        P0=0x7e;
                        we=1;
                        we=0;
                break;
                case 1:
                        du=0;
                        P0=table[s_qian];                //显示第5位
                        du=1;
                        du=0;
                        we=0;                       
                        P0=0x7d;
                        we=1;
                        we=0;
                break;
                       
                case 2:
                        du=0;
                        P0=table[qian];                //显示第4位
                        du=1;
                        du=0;
                        we=0;                       
                        P0=0x7b;
                        we=1;
                        we=0;
                break;                       
                case 3:
                        du=0;
                        P0=table[bai];                //显示第3位
                        du=1;
                        du=0;
                        we=0;                       
                        P0=0x77;
                        we=1;
                        we=0;
                break;
                       
                case 4:
                        du=0;
                        P0=table[shi];                //显示第2位
                        du=1;
                        du=0;
                        we=0;                       
                        P0=0xef;
                        we=1;
                        we=0;
                break;                       
                case 5:
                        du=0;
                        P0=table[ge];                //显示第1位
                        du=1;
                        du=0;
                        we=0;                       
                        P0=0xdf;
                        we=1;
                        we=0;
                break;
        }
}

没有经验这么一说,多调试看看

嗯嗯,受教了,确实应该多实践,一定改正

好的,答案简单明了,这么久才回复十分抱歉

嗯嗯,谢谢回复

哈哈,看到这么详细的解释令我高兴。谢谢解答,也抱歉搁置这么久才回复

好的,一定改正

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top