你要想一样亮可以把数码管动态扫描放中断里 |
我下载下来怎么数码管全亮 |
你把延时设对了,就可以了!不过也有其他问题(包括你的上拉电阻,自己测一下硬件电路,测完就剩软件了) |
Colin_zhai 发表于 2018-11-26 15:01 非常感谢您的建议,在一楼点明我的问题后我就做了这样的尝试,效果并不明显。主要是原因是读取温度的函数所需时间太长了,达到了肉眼可见的闪烁的地步。我对主函数的显示做了如下修改,使得数码管显示亮度均匀,但是还是有点小瑕疵 void main() { u8 temp; u16 i; while(1) { while(1) { display(temp); temp=datapros(Ds18b20ReadTemp()); for(i=500;i>0;i--) { display(temp); } } } } 那就是读取温度函数运行的时候数码管会闪烁一下 |
应该是占空比不一样导致的 |
1.最后一位和第一位数码管之间的延时较大造成的,这么理解,在处理完一次显示之后,单片机读取18B20的时间太久 2.建议把void display(u8 num) { …… }内最后一个delay(50); 减小或取消,数码管的亮度应该会比较均匀 |
wulin 发表于 2018-11-26 07:36 理解了,我改了一下程序,确实是这个原因,谢谢大佬 |
用三极管驱动,会避免这问题。当然,用别的IC驱动会更好。 |
是因为这个动态显示程序有严重缺陷,个位数码管显示的时间比其他位占用时间过长。表面上看各位的延时都一样,实际在主循环运行其他程序的时间里个位一直在显示。显示程序中的数据分解语句也很占用时间,这个时段个位也一直在显示。 |