標題: 單片機做的溫濕度+時鐘 數(shù)碼管出現(xiàn)閃爍的清況,求大佬給指點下! [打印本頁]

作者: 飛科技    時間: 2018-4-23 20:44
標題: 單片機做的溫濕度+時鐘 數(shù)碼管出現(xiàn)閃爍的清況,求大佬給指點下!
請問大佬我用51單片機+LCD12864顯示溫濕度,而用數(shù)碼管顯示實時時鐘,為什么數(shù)碼管會出現(xiàn)閃爍的清況,我把LCD12864顯示溫濕度的程序注釋掉,數(shù)碼管就正常了;我的數(shù)碼管是用2片595通過級聯(lián)擴展出16個IO口;8個控制段選,8個控制位選,但一旦LCD12864顯示溫濕度就會閃爍,求大佬給個解決的辦法




作者: 青青之歌    時間: 2018-4-23 23:32
你最好也把電路圖和程序貼一下,我的猜測是讀取的溫度時間比較長打斷數(shù)碼管的顯示
作者: jimjassdf    時間: 2018-4-24 10:59
數(shù)碼管刷新頻率過慢,提高刷新頻率即可
作者: long3772639    時間: 2018-4-24 12:01
刷新頻率肉眼20HZ左右不閃
作者: 飛科技    時間: 2018-4-24 15:32
對的,就是溫濕度讀取的時間有點長,導(dǎo)致了數(shù)碼管閃爍,我對數(shù)碼管的位選與段選分別接了一個鎖存器還是不行
作者: 青青之歌    時間: 2018-4-24 22:17
如果我的話,我會將那個數(shù)碼管顯示放在定時器里面,溫度是在主程序里面,時間一到先刷新數(shù)碼管,再執(zhí)行溫度的那一部分
作者: 飛科技    時間: 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;       
}

作者: wulin    時間: 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ù)程序就不會有這些問題。
作者: aoyucheng    時間: 2018-4-25 15:18
兄弟你這也是畢業(yè)設(shè)計嗎?還是啥,我現(xiàn)在要做的畢業(yè)設(shè)計和這個差不多
作者: zhouyilin    時間: 2018-4-25 15:31
一般來說數(shù)碼管的頻率在20hz就可以,有可能你的液晶程序復(fù)雜、執(zhí)行時間長,數(shù)碼管刷新頻率過慢。
作者: yhangzzz    時間: 2018-4-25 15:44
可以了解下單片機前后臺的寫法,不要讓讀溫度的操作影響,顯示刷新頻率。
作者: 123456m    時間: 2018-4-25 16:15
位的掃描調(diào)換看看
作者: 飛科技    時間: 2018-4-25 23:14
wulin 發(fā)表于 2018-4-25 07:07
你需要重新調(diào)整程序框架,把主循環(huán)周期控制在2ms以內(nèi),非不得已不要使用Delay()、while()空耗時間等待的語 ...

不是,我自己沒事做著玩
作者: 飛科技    時間: 2018-4-25 23:15
aoyucheng 發(fā)表于 2018-4-25 15:18
兄弟你這也是畢業(yè)設(shè)計嗎?還是啥,我現(xiàn)在要做的畢業(yè)設(shè)計和這個差不多

不,自己做著玩玩
作者: 609229918    時間: 2018-4-26 00:53
最好有電路圖和程序,之前做過也有類似問題,讀取溫度的程序會干擾數(shù)碼管的刷新顯示,建議對溫度顯示程序進行改進
作者: yfpc2006    時間: 2018-4-26 07:35
初學(xué)者往往對液晶屏發(fā)送數(shù)據(jù)前不進行查忙操作,每次發(fā)送完或者發(fā)送數(shù)據(jù)前都延時5ms再發(fā),看看是不是這里引起的?一般程序里不要有毫秒級延時,如果延時最好用定時器做標志,根據(jù)標志確定延時時長,或者做一個變量的++操作,進行跑圈累加,以達到延時的目的。我做程序一般最長的delay為幾十us,再長久考慮上述方法!希望對您有幫助!
作者: 965677198    時間: 2018-4-26 09:10
把數(shù)碼管刷新頻率調(diào)慢一點,開發(fā)板上應(yīng)該有一個可調(diào)電容調(diào)節(jié)的
作者: 西瓜_    時間: 2018-4-26 09:12
你要知道數(shù)碼管的顯示原理。
你的數(shù)碼管我手上也有,也是做溫濕度顯示,也是用兩個HC595進行位選和段選。
數(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了。
作者: qq383570990    時間: 2018-4-26 11:07
我的畢設(shè)也是這個,多功能數(shù)顯溫度計,我想用的是1602屏幕做這個,用數(shù)碼管的話不能同時顯示年與日時間-溫度濕度
作者: qq383570990    時間: 2018-4-26 11:07
另外你可以多加一個時間模塊不就可以了嗎
作者: 飛科技    時間: 2018-4-26 17:04
感謝各位大佬的回復(fù),我把數(shù)碼管顯示的程序放在了定時器里,數(shù)碼管閃爍問題已經(jīng)解決
作者: qingfengjyf    時間: 2020-3-27 17:06
飛科技 發(fā)表于 2018-4-26 17:04
感謝各位大佬的回復(fù),我把數(shù)碼管顯示的程序放在了定時器里,數(shù)碼管閃爍問題已經(jīng)解決

怎么做的,能把代碼貼出來嗎,我也有這個問題




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1