找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 5360|回復(fù): 21
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)做的溫濕度+時鐘 數(shù)碼管出現(xiàn)閃爍的清況,求大佬給指點下!

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:302353 發(fā)表于 2018-4-23 20:44 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
請問大佬我用51單片機(jī)+LCD12864顯示溫濕度,而用數(shù)碼管顯示實時時鐘,為什么數(shù)碼管會出現(xiàn)閃爍的清況,我把LCD12864顯示溫濕度的程序注釋掉,數(shù)碼管就正常了;我的數(shù)碼管是用2片595通過級聯(lián)擴(kuò)展出16個IO口;8個控制段選,8個控制位選,但一旦LCD12864顯示溫濕度就會閃爍,求大佬給個解決的辦法



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

來自 8#
ID:213173 發(fā)表于 2018-4-25 07:07 | 只看該作者
本帖最后由 wulin 于 2018-4-25 11:04 編輯

你需要重新調(diào)整程序框架,把主循環(huán)周期控制在2ms以內(nèi),非不得已不要使用Delay()、while()空耗時間等待的語句,不是必須在中斷中處理的事務(wù)就不要放在中斷里。其實就這一點點功能不應(yīng)該占用多少時間,比如數(shù)碼管動態(tài)顯示程序只要在主循環(huán)周期內(nèi)顯示一位,分8次完成一輪顯示。比如12864也不必在一個主循環(huán)周期內(nèi)全部刷新,溫濕度采樣也不必在一個主循環(huán)周期內(nèi)全部處理�?梢园磿r間片調(diào)度的思維方式寫多任務(wù)程序就不會有這些問題。

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

沙發(fā)
ID:118624 發(fā)表于 2018-4-23 23:32 | 只看該作者
你最好也把電路圖和程序貼一下,我的猜測是讀取的溫度時間比較長打斷數(shù)碼管的顯示

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

板凳
ID:315153 發(fā)表于 2018-4-24 10:59 | 只看該作者
數(shù)碼管刷新頻率過慢,提高刷新頻率即可

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

地板
ID:315207 發(fā)表于 2018-4-24 12:01 | 只看該作者
刷新頻率肉眼20HZ左右不閃

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

5#
ID:302353 發(fā)表于 2018-4-24 15:32 | 只看該作者
對的,就是溫濕度讀取的時間有點長,導(dǎo)致了數(shù)碼管閃爍,我對數(shù)碼管的位選與段選分別接了一個鎖存器還是不行
回復(fù)

使用道具 舉報

6#
ID:118624 發(fā)表于 2018-4-24 22:17 | 只看該作者
如果我的話,我會將那個數(shù)碼管顯示放在定時器里面,溫度是在主程序里面,時間一到先刷新數(shù)碼管,再執(zhí)行溫度的那一部分

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

7#
ID:302353 發(fā)表于 2018-4-24 23:31 | 只看該作者
青青之歌 發(fā)表于 2018-4-24 22:17
如果我的話,我會將那個數(shù)碼管顯示放在定時器里面,溫度是在主程序里面,時間一到先刷新數(shù)碼管,再執(zhí)行溫度 ...

大哥幫忙看下怎么改:
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;       
}

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

9#
ID:316218 發(fā)表于 2018-4-25 15:18 | 只看該作者
兄弟你這也是畢業(yè)設(shè)計嗎?還是啥,我現(xiàn)在要做的畢業(yè)設(shè)計和這個差不多
回復(fù)

使用道具 舉報

10#
ID:316280 發(fā)表于 2018-4-25 15:31 | 只看該作者
一般來說數(shù)碼管的頻率在20hz就可以,有可能你的液晶程序復(fù)雜、執(zhí)行時間長,數(shù)碼管刷新頻率過慢。

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

11#
ID:316305 發(fā)表于 2018-4-25 15:44 | 只看該作者
可以了解下單片機(jī)前后臺的寫法,不要讓讀溫度的操作影響,顯示刷新頻率。
回復(fù)

使用道具 舉報

12#
ID:316332 發(fā)表于 2018-4-25 16:15 | 只看該作者
位的掃描調(diào)換看看
回復(fù)

使用道具 舉報

13#
ID:302353 發(fā)表于 2018-4-25 23:14 | 只看該作者
wulin 發(fā)表于 2018-4-25 07:07
你需要重新調(diào)整程序框架,把主循環(huán)周期控制在2ms以內(nèi),非不得已不要使用Delay()、while()空耗時間等待的語 ...

不是,我自己沒事做著玩
回復(fù)

使用道具 舉報

14#
ID:302353 發(fā)表于 2018-4-25 23:15 | 只看該作者
aoyucheng 發(fā)表于 2018-4-25 15:18
兄弟你這也是畢業(yè)設(shè)計嗎?還是啥,我現(xiàn)在要做的畢業(yè)設(shè)計和這個差不多

不,自己做著玩玩
回復(fù)

使用道具 舉報

15#
ID:316761 發(fā)表于 2018-4-26 00:53 | 只看該作者
最好有電路圖和程序,之前做過也有類似問題,讀取溫度的程序會干擾數(shù)碼管的刷新顯示,建議對溫度顯示程序進(jìn)行改進(jìn)

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

16#
ID:138119 發(fā)表于 2018-4-26 07:35 | 只看該作者
初學(xué)者往往對液晶屏發(fā)送數(shù)據(jù)前不進(jìn)行查忙操作,每次發(fā)送完或者發(fā)送數(shù)據(jù)前都延時5ms再發(fā),看看是不是這里引起的?一般程序里不要有毫秒級延時,如果延時最好用定時器做標(biāo)志,根據(jù)標(biāo)志確定延時時長,或者做一個變量的++操作,進(jìn)行跑圈累加,以達(dá)到延時的目的。我做程序一般最長的delay為幾十us,再長久考慮上述方法!希望對您有幫助!

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

17#
ID:307103 發(fā)表于 2018-4-26 09:10 | 只看該作者
把數(shù)碼管刷新頻率調(diào)慢一點,開發(fā)板上應(yīng)該有一個可調(diào)電容調(diào)節(jié)的
回復(fù)

使用道具 舉報

18#
ID:306178 發(fā)表于 2018-4-26 09:12 | 只看該作者
你要知道數(shù)碼管的顯示原理。
你的數(shù)碼管我手上也有,也是做溫濕度顯示,也是用兩個HC595進(jìn)行位選和段選。
數(shù)碼管顯示原理:同一時刻(指絕對時間,比如此時此刻,一納秒都不多也不少的那種)只有一個數(shù)碼管在顯示數(shù)據(jù),怎么做才能讓多個數(shù)碼管顯示呢?
其實是用的動態(tài)掃描法。比如說我此時刻顯示第一個數(shù)碼管,下一時刻顯示第二個,以此類推,到了最后一個再從第一個開始顯示。
那如何做到一個時刻只顯示一個數(shù)碼管卻讓人眼看到全部的數(shù)碼管顯示呢?
這個是利用的人眼識別東西的余暉效應(yīng),通常情況下,人眼識別連貫的圖像的最低幀率是24幀/秒,也就是說,如果是這樣動態(tài)刷新的顯示方式,最慢的刷新時間為1000ms/24幀約等于40ms/幀,就是一副完整的圖像最低得40ms刷新一次。對于4位數(shù)碼管而言,想要無閃爍顯示,則整體刷新最低時間為40ms,即每單個數(shù)碼管,最低刷新速率是10ms,對于8位數(shù)碼管則是5ms。
弄懂了原理想要無閃爍顯示就簡單了,看看書上的定時器中斷介紹,基本就OK了。
回復(fù)

使用道具 舉報

19#
ID:183278 發(fā)表于 2018-4-26 11:07 | 只看該作者
我的畢設(shè)也是這個,多功能數(shù)顯溫度計,我想用的是1602屏幕做這個,用數(shù)碼管的話不能同時顯示年與日時間-溫度濕度
回復(fù)

使用道具 舉報

20#
ID:183278 發(fā)表于 2018-4-26 11:07 | 只看該作者
另外你可以多加一個時間模塊不就可以了嗎
回復(fù)

使用道具 舉報

21#
ID:302353 發(fā)表于 2018-4-26 17:04 | 只看該作者
感謝各位大佬的回復(fù),我把數(shù)碼管顯示的程序放在了定時器里,數(shù)碼管閃爍問題已經(jīng)解決
回復(fù)

使用道具 舉報

22#
ID:499163 發(fā)表于 2020-3-27 17:06 | 只看該作者
飛科技 發(fā)表于 2018-4-26 17:04
感謝各位大佬的回復(fù),我把數(shù)碼管顯示的程序放在了定時器里,數(shù)碼管閃爍問題已經(jīng)解決

怎么做的,能把代碼貼出來嗎,我也有這個問題
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表