找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

单片机读取温度数码管显示程序,最后一位明显更亮,求解释

查看数: 5225 | 评论数: 9 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2018-11-26 01:29

正文摘要:

今天通过DS18B20读取温度并通过LED数码管显示,最后一位明显更亮,为啥呢? 下面是我的函数分3个文件:头文件,DS18B20系列子函数文件,主函数部分(既数据处理和显示部分) 头文件:#ifndef __TEMP_H_ #def ...

回复

ID:939710 发表于 2021-12-21 10:03
你要想一样亮可以把数码管动态扫描放中断里
ID:853568 发表于 2021-12-20 09:34
我下载下来怎么数码管全亮
ID:433516 发表于 2018-11-26 16:45
你把延时设对了,就可以了!不过也有其他问题(包括你的上拉电阻,自己测一下硬件电路,测完就剩软件了)
ID:426640 发表于 2018-11-26 16:23
Colin_zhai 发表于 2018-11-26 15:01
1.最后一位和第一位数码管之间的延时较大造成的,这么理解,在处理完一次显示之后,单片机读取18B20的时间太 ...

非常感谢您的建议,在一楼点明我的问题后我就做了这样的尝试,效果并不明显。主要是原因是读取温度的函数所需时间太长了,达到了肉眼可见的闪烁的地步。我对主函数的显示做了如下修改,使得数码管显示亮度均匀,但是还是有点小瑕疵
void main()
{       
        u8 temp;
        u16 i;
        while(1)
        {
                while(1)
                {
                        display(temp);
                        temp=datapros(Ds18b20ReadTemp());
                        for(i=500;i>0;i--)
                        {
                                display(temp);
                        }
                }
        }               
}
那就是读取温度函数运行的时候数码管会闪烁一下
ID:113187 发表于 2018-11-26 16:11
应该是占空比不一样导致的
ID:413475 发表于 2018-11-26 15:01
1.最后一位和第一位数码管之间的延时较大造成的,这么理解,在处理完一次显示之后,单片机读取18B20的时间太久
2.建议把void display(u8 num) { …… }内最后一个delay(50); 减小或取消,数码管的亮度应该会比较均匀
ID:426640 发表于 2018-11-26 13:37
wulin 发表于 2018-11-26 07:36
是因为这个动态显示程序有严重缺陷,个位数码管显示的时间比其他位占用时间过长。表面上看各位的延时都一样 ...

理解了,我改了一下程序,确实是这个原因,谢谢大佬
ID:202748 发表于 2018-11-26 09:01
用三极管驱动,会避免这问题。当然,用别的IC驱动会更好。
ID:213173 发表于 2018-11-26 07:36
是因为这个动态显示程序有严重缺陷,个位数码管显示的时间比其他位占用时间过长。表面上看各位的延时都一样,实际在主循环运行其他程序的时间里个位一直在显示。显示程序中的数据分解语句也很占用时间,这个时段个位也一直在显示。

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表