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函数里面刷新数码管。