xiangzichen 发表于 2024-5-12 15:28:57

人眼26帧,刷8个的话,轮流刷,那是26*8=208,
也就是一秒钟要扫208次,算250次,定时4m,挨个刷,绝对不会闪.
还有就是,数码管刷新下一位之前,全部段码根据工阴共阳,让他全灭,然后再开启,保证效果棒棒滴.

xiangzichen 发表于 2024-5-12 15:30:51

wangxiangtan 发表于 2024-3-31 07:06
8个数码管中断里面多长时间刷新一次合适,
频率低了有频闪,频率高了亮度骤降……求指导 ...

做产品,第一件事解决闪,,不闪了,试着把电阻改小,如果还不够亮,加三极管驱动,实在不行,直接上LED专用芯片,一劳永逸了.

xxkj2010 发表于 2024-5-12 16:47:09

把显示处理交给TM1637或带数码管驱动的STC8。

zhudean11 发表于 2024-5-14 03:42:59

加驱动芯片

小飞侠 发表于 2024-5-14 07:42:37

每个数码管,最低保证每秒刷新60Hz以上,人眼就不会看出来有闪烁现象,75Hz会更好

晓飛飛 发表于 2024-5-14 11:43:36

用定时器中断里面放状态机,周期性刷数码管,保证流畅不闪,随便给你贴个参考代码,别60Hz不闪,我直接干到300多Hz对单片机也没任何负担
//刷数码管定时器 1000Hz三个数码管平均333Hz
void Timer2_Isr(void) interrupt 12
{
        static u8 sta;
        COM1 = 0; COM2 = 0; COM3 = 0;   //关闭数码管
        switch (sta)
        {
                case 1:
                        P1 = number;   
                        COM1 = 1;      //百位
                        sta = 2;
                        break;
                case 2:
                        P1 = number;
                        COM2 = 1;               //十位       
                        sta = 3;
                        break;
                case 3:
                        P1 = number;
                        COM3 = 1;               //个位       
                        sta = 1;
                        break;
                default:
                        sta = 1;
                        break;
        }
}


调用方法,直接赋值即可:
      number = display;       //拆分出十位
      number = display[(tmp_now % 100) / 10]&0x7F;//拆分出个位
      number = display;      //拆分出小数点后一位





嵌入式之路 发表于 2024-5-14 12:30:33

上TM1633 还是什么的, 忘了 那个数码管的芯片

pluto1000 发表于 2024-5-19 21:50:21

多谢各位大佬,用定时器可以

ljm10000 发表于 2025-1-5 15:03:20

求大神贴个TM1637四位led模块的例程,谢谢了

垂柳工作室 发表于 2025-1-5 16:28:54

用一毫秒定时器刷新一个数码管,不能在main函数里面刷新数码管。
页: 1 2 3 [4]
查看完整版本: 数码管显示怎样才能不闪烁