找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3661|回复: 21
收起左侧

单片机做的温湿度+时钟 数码管出现闪烁的清况,求大佬给指点下!

  [复制链接]
ID:302353 发表于 2018-4-23 20:44 | 显示全部楼层 |阅读模式
请问大佬我用51单片机+LCD12864显示温湿度,而用数码管显示实时时钟,为什么数码管会出现闪烁的清况,我把LCD12864显示温湿度的程序注释掉,数码管就正常了;我的数码管是用2片595通过级联扩展出16个IO口;8个控制段选,8个控制位选,但一旦LCD12864显示温湿度就会闪烁,求大佬给个解决的办法



回复

使用道具 举报

ID:213173 发表于 2018-4-25 07:07 | 显示全部楼层
本帖最后由 wulin 于 2018-4-25 11:04 编辑

你需要重新调整程序框架,把主循环周期控制在2ms以内,非不得已不要使用Delay()、while()空耗时间等待的语句,不是必须在中断中处理的事务就不要放在中断里。其实就这一点点功能不应该占用多少时间,比如数码管动态显示程序只要在主循环周期内显示一位,分8次完成一轮显示。比如12864也不必在一个主循环周期内全部刷新,温湿度采样也不必在一个主循环周期内全部处理。可以按时间片调度的思维方式写多任务程序就不会有这些问题。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:118624 发表于 2018-4-23 23:32 | 显示全部楼层
你最好也把电路图和程序贴一下,我的猜测是读取的温度时间比较长打断数码管的显示

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:315153 发表于 2018-4-24 10:59 | 显示全部楼层
数码管刷新频率过慢,提高刷新频率即可

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:315207 发表于 2018-4-24 12:01 | 显示全部楼层
刷新频率肉眼20HZ左右不闪

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:302353 发表于 2018-4-24 15:32 | 显示全部楼层
对的,就是温湿度读取的时间有点长,导致了数码管闪烁,我对数码管的位选与段选分别接了一个锁存器还是不行
回复

使用道具 举报

ID:118624 发表于 2018-4-24 22:17 | 显示全部楼层
如果我的话,我会将那个数码管显示放在定时器里面,温度是在主程序里面,时间一到先刷新数码管,再执行温度的那一部分

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:302353 发表于 2018-4-24 23:31 | 显示全部楼层
青青之歌 发表于 2018-4-24 22:17
如果我的话,我会将那个数码管显示放在定时器里面,温度是在主程序里面,时间一到先刷新数码管,再执行温度 ...

大哥帮忙看下怎么改:
void smgxs(uchar n,uchar shu)
{
  uchar i;
        int smgdat;
        smgdat=(smgwei[n-1]<<8)+smgduan[shu];
        ST_CP=0;
  SH_CP=0;
        for(i=0;i<16;i++)
        {
        if(smgdat&(0x8000>>i))
    DS=1;
    else
    DS=0;
    SH_CP=0;         
                 Delay10us();       
          SH_CP=1;
                Delay10us();
         SH_CP=0;
        }
   ST_CP=1;       
        Delay10us();
   ST_CP=0;       
}

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:316218 发表于 2018-4-25 15:18 | 显示全部楼层
兄弟你这也是毕业设计吗?还是啥,我现在要做的毕业设计和这个差不多
回复

使用道具 举报

ID:316280 发表于 2018-4-25 15:31 | 显示全部楼层
一般来说数码管的频率在20hz就可以,有可能你的液晶程序复杂、执行时间长,数码管刷新频率过慢。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:316305 发表于 2018-4-25 15:44 | 显示全部楼层
可以了解下单片机前后台的写法,不要让读温度的操作影响,显示刷新频率。
回复

使用道具 举报

ID:316332 发表于 2018-4-25 16:15 | 显示全部楼层
位的扫描调换看看
回复

使用道具 举报

ID:302353 发表于 2018-4-25 23:14 | 显示全部楼层
wulin 发表于 2018-4-25 07:07
你需要重新调整程序框架,把主循环周期控制在2ms以内,非不得已不要使用Delay()、while()空耗时间等待的语 ...

不是,我自己没事做着玩
回复

使用道具 举报

ID:302353 发表于 2018-4-25 23:15 | 显示全部楼层
aoyucheng 发表于 2018-4-25 15:18
兄弟你这也是毕业设计吗?还是啥,我现在要做的毕业设计和这个差不多

不,自己做着玩玩
回复

使用道具 举报

ID:316761 发表于 2018-4-26 00:53 | 显示全部楼层
最好有电路图和程序,之前做过也有类似问题,读取温度的程序会干扰数码管的刷新显示,建议对温度显示程序进行改进

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:138119 发表于 2018-4-26 07:35 | 显示全部楼层
初学者往往对液晶屏发送数据前不进行查忙操作,每次发送完或者发送数据前都延时5ms再发,看看是不是这里引起的?一般程序里不要有毫秒级延时,如果延时最好用定时器做标志,根据标志确定延时时长,或者做一个变量的++操作,进行跑圈累加,以达到延时的目的。我做程序一般最长的delay为几十us,再长久考虑上述方法!希望对您有帮助!

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:307103 发表于 2018-4-26 09:10 | 显示全部楼层
把数码管刷新频率调慢一点,开发板上应该有一个可调电容调节的
回复

使用道具 举报

ID:306178 发表于 2018-4-26 09:12 | 显示全部楼层
你要知道数码管的显示原理。
你的数码管我手上也有,也是做温湿度显示,也是用两个HC595进行位选和段选。
数码管显示原理:同一时刻(指绝对时间,比如此时此刻,一纳秒都不多也不少的那种)只有一个数码管在显示数据,怎么做才能让多个数码管显示呢?
其实是用的动态扫描法。比如说我此时刻显示第一个数码管,下一时刻显示第二个,以此类推,到了最后一个再从第一个开始显示。
那如何做到一个时刻只显示一个数码管却让人眼看到全部的数码管显示呢?
这个是利用的人眼识别东西的余晖效应,通常情况下,人眼识别连贯的图像的最低帧率是24帧/秒,也就是说,如果是这样动态刷新的显示方式,最慢的刷新时间为1000ms/24帧约等于40ms/帧,就是一副完整的图像最低得40ms刷新一次。对于4位数码管而言,想要无闪烁显示,则整体刷新最低时间为40ms,即每单个数码管,最低刷新速率是10ms,对于8位数码管则是5ms
弄懂了原理想要无闪烁显示就简单了,看看书上的定时器中断介绍,基本就OK了。
回复

使用道具 举报

ID:183278 发表于 2018-4-26 11:07 | 显示全部楼层
我的毕设也是这个,多功能数显温度计,我想用的是1602屏幕做这个,用数码管的话不能同时显示年与日时间-温度湿度
回复

使用道具 举报

ID:183278 发表于 2018-4-26 11:07 | 显示全部楼层
另外你可以多加一个时间模块不就可以了吗
回复

使用道具 举报

ID:302353 发表于 2018-4-26 17:04 | 显示全部楼层
感谢各位大佬的回复,我把数码管显示的程序放在了定时器里,数码管闪烁问题已经解决
回复

使用道具 举报

ID:499163 发表于 2020-3-27 17:06 | 显示全部楼层
飞科技 发表于 2018-4-26 17:04
感谢各位大佬的回复,我把数码管显示的程序放在了定时器里,数码管闪烁问题已经解决

怎么做的,能把代码贴出来吗,我也有这个问题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

Powered by 单片机教程网

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