標(biāo)題: 89C51單片機(jī)能否控制兩個四位數(shù)碼管 [打印本頁]

作者: endura82    時間: 2018-3-12 19:05
標(biāo)題: 89C51單片機(jī)能否控制兩個四位數(shù)碼管
請教大家一個問題,最近做了兩個單片機(jī)小玩意兒(硬件和程序都是網(wǎng)上購的哈),一個是單片機(jī)接DS18B20測溫,通過四位數(shù)碼管顯示溫度,功能大概如下:
1)通過四位數(shù)碼管顯示溫度
2)設(shè)置報警溫度值,超范圍報警。接有蜂鳴器。
3)接有紅外遙控,可通過遙控更改報警設(shè)置。

另外一個是超聲波測距,接有SR04測距模塊,同樣通過四位數(shù)碼管顯示距離,超范圍報警。

這兩個實(shí)驗(yàn)本身都是單獨(dú)的。都有自己的單片機(jī)芯片。
我的目的是,我想用同一個單片機(jī)89C51RC來控制這兩大功能。
目前我將超聲測距的外圍電路已經(jīng)接到測溫的板子上,用測溫的單片機(jī),和修改后的測距程序,實(shí)現(xiàn)測距。當(dāng)然這個程序不包括測溫的 功能。

那么我的問題是,要修改程序同時實(shí)現(xiàn)測溫和測距兩個功能。初步看了一下原始程序,發(fā)現(xiàn)都用到定時和中斷,也就是說TH1,TL1和TH0,TL0在兩個原始程序中都用到。這樣的話,我還能同時實(shí)現(xiàn)顯示溫度和距離(兩個四位數(shù)碼管分別顯示),并超范圍報警嗎?

請各位大神幫忙看一下。這是不是屬于多任務(wù)?定時器是否不夠用?
謝謝大家啦!

作者: 老田8310    時間: 2018-3-12 20:17
89C51有多種封裝形式,一般有40腳和44腳,應(yīng)該40腳的夠用了。
作者: 安心1x2    時間: 2018-3-12 21:36
如果你的定時器是用來延時的,兩功能又要同時完成,可以設(shè)個全局變量t,定時器中斷里給它加1,溢出了沒關(guān)系從0再循環(huán)的。然后在每個你要執(zhí)行程序部分前加if(t%num==0),num可決定你執(zhí)行間隔的時間,0也可以換成小于num的任何正整數(shù),一定程度上決定執(zhí)行的先后次序。相當(dāng)于用定時器設(shè)定了一個系統(tǒng)時鐘或者心跳,大家按著系統(tǒng)時鐘來執(zhí)行程序,如果兩次執(zhí)行程序間隔夠長,就可以插入另外的任務(wù),注意保證在時間間隔內(nèi)執(zhí)行完,就可以實(shí)現(xiàn)有時序地執(zhí)行你的多任務(wù)了。又或者說兩個定時器都不可獲缺,試試分時復(fù)用吧,比如測溫用完重新配置一下給測距用,然后再互換。你看你數(shù)碼管也是共用的,不好同時顯示,也不需要同步吧,先測溫,再測距沒多大影響的。
作者: zl2168    時間: 2018-3-12 21:53
兩個任務(wù),夠用!但取決于你巧妙編程。
作者: woti    時間: 2018-3-12 22:31
要看看你原來的電路空余的IO口有多少?一般情況下,IO口夠用的話,你這兩個應(yīng)用都可以在一個IC上實(shí)現(xiàn)
作者: oohoh    時間: 2018-3-12 23:58
當(dāng)然可以,8個IO控制字段,8個IO控制數(shù)碼管位
作者: xrfxrfxrf008    時間: 2018-3-13 08:09
只要刷新時間允許 應(yīng)該不是問題
作者: banyueju    時間: 2018-3-13 08:46
可以的,用8個IO控制數(shù)碼管段選,再用IO控制數(shù)碼管位選就可以了,如果IO口不夠,還可以用個譯碼器什么的
作者: QWER01234    時間: 2018-3-13 10:33
一般來說一個ds18b20的測溫程序使用3位數(shù)碼管(顯示的溫度帶一位小數(shù),小數(shù)點(diǎn)位于第二位數(shù)碼管上),超聲波測距我記得沒錯的話極限距離是4m左右,使用三位數(shù)碼管表示單位是cm,一共使用了6位數(shù)碼管。一個八位數(shù)碼管的動態(tài)顯示只需要16個io口,超聲波占用兩個io,ds18b20占用一個io,基本上io是夠用的。然而定時器不需要占用兩個吧,根據(jù)樓主的描述只需要在超聲波測距中占用一個定時器用于測量超聲波返回的高電平時間,在測溫度的程序中應(yīng)該是不需要用到定時器的。外部中斷的使用就看樓主的程序是如何設(shè)計的了。
作者: endura82    時間: 2018-3-13 10:49
各位,IO口夠用,分別編兩個程序,分別控制,沒有問題。
問題就是把兩個程序合并起來,同時控制,編程時發(fā)現(xiàn)原來每個程序都要用到TH0, TL0和TH1, TL1.
所以,需要考慮這個情況下怎么編程了。還需要多學(xué)習(xí)。
謝謝大家。
作者: endura82    時間: 2018-3-13 10:51
zl2168 發(fā)表于 2018-3-12 21:53
兩個任務(wù),夠用!但取決于你巧妙編程。

對的,就是兩個任務(wù)。怎么巧妙編程就是個問題了。謝謝指點(diǎn)。如果能稍微指點(diǎn)下編程方向,就更感激了。謝謝版主!
作者: endura82    時間: 2018-3-13 10:52
安心1x2 發(fā)表于 2018-3-12 21:36
如果你的定時器是用來延時的,兩功能又要同時完成,可以設(shè)個全局變量t,定時器中斷里給它加1,溢出了沒關(guān)系 ...

謝謝親,你的回復(fù)具有很大的參考意義。我先消化下,有問題再請教。
作者: endura82    時間: 2018-3-13 11:16
xrfxrfxrf008 發(fā)表于 2018-3-13 08:09
只要刷新時間允許 應(yīng)該不是問題

請教一下,刷新時間怎么設(shè)置呢,謝謝!
作者: endura82    時間: 2018-3-13 11:21
安心1x2 發(fā)表于 2018-3-12 21:36
如果你的定時器是用來延時的,兩功能又要同時完成,可以設(shè)個全局變量t,定時器中斷里給它加1,溢出了沒關(guān)系 ...

我是兩個數(shù)碼管,分別給測溫和測距的?梢酝瑫r顯示嗎?~
作者: endura82    時間: 2018-3-13 12:50
QWER01234 發(fā)表于 2018-3-13 10:33
一般來說一個ds18b20的測溫程序使用3位數(shù)碼管(顯示的溫度帶一位小數(shù),小數(shù)點(diǎn)位于第二位數(shù)碼管上),超聲波 ...

多謝回復(fù)。
程序的東西我要多看多學(xué)習(xí)。兄弟明確給出了定時器最少用量,讓我也多少有了信心。
我要嘗試自己寫下程序,看看能不能用其他方式實(shí)現(xiàn)延時或者中斷。

謝謝啦!
作者: 淡定孤鴻    時間: 2018-3-13 14:08
可疑的,看你怎么寫程序了
作者: 電黑子    時間: 2018-3-13 16:56
可以,沒問題的
作者: 力道嘎嘎1    時間: 2018-3-13 17:31
可以的,認(rèn)真 就可以了的
作者: 肆月    時間: 2018-3-13 22:15
可以用兩個鎖存器控制數(shù)碼管可以節(jié)省IO口的
作者: 51hei321    時間: 2018-3-13 23:17
絕對夠用了,根據(jù)設(shè)計的電路來進(jìn)行編程
作者: qq254300286    時間: 2018-3-14 00:35
可以控制,P0口IO口作為并行數(shù)據(jù)  把兩個四位數(shù)碼管 A B C D E F G H 并聯(lián)一起,再把兩個四位數(shù)碼管位選信號線共8根給P1口 1 2 3 4 5 6 7 8 。就這樣連接。軟件方面能節(jié)省定時器的就節(jié)省。
作者: 奎爾塞拉    時間: 2018-3-14 01:00
首先,第一點(diǎn),不建議用數(shù)碼管,這種東西可以換成液晶屏來做,顯示的內(nèi)容更豐富,管腳也不會很多(甚至可以用串口來控制,那么還會減少占用的管腳)
然后,如果要用數(shù)碼管的話,38譯碼器啊,地址鎖存器啊什么用起來問題也不大吧(雖然你目前的成品不一定有??)
最重要的是,你的意思是執(zhí)行兩個功能,都占用了定時器是吧。這里可以考慮一個問題,你真的需要幾乎全部的時間都用來測溫度或者距離嗎?應(yīng)該不會吧。
一般12位的ds18b20的響應(yīng)時間是750ms,精度是0.0625度,你完全可以降低分辨率同時提高響應(yīng)速度,比如10位,大概180+ms就響應(yīng)啦,分辨率0.25度也還好吧。然后相當(dāng)于說檢測一次溫度大概耗時200ms
另外超聲波測距一次的時間呢?比如我們測距范圍是10m,那么時間大概是10*2/340不到100ms吧
那么我覺得可以這樣,每500ms為一個工作周期,先測溫度,更新相應(yīng)的數(shù)碼管,再測距離,再更新相應(yīng)的數(shù)碼管;蛘呦葴y量后統(tǒng)一更新數(shù)碼管。這樣一次周期的時間基本可以把握在500ms內(nèi)。數(shù)碼管每500ms跳一次,其實(shí)能夠接受吧,再加快更新頻率其實(shí)實(shí)際作用也不大。
嗯,或者就用12位的溫度傳感器,每1s更新一次,也沒毛病。

這只是一種思路吧,當(dāng)然還有很多別的方法
作者: 笨笨兔    時間: 2018-3-14 11:01
這點(diǎn)功能,完全可以
作者: 大太陽啊    時間: 2018-3-14 11:13
可以啊,你可以把紅外的那個用外部中斷啊,其他的就做成那種定時掃描,stc的51可以跑30多兆的
作者: hdh88717    時間: 2018-3-14 11:26
可以,現(xiàn)在的單片機(jī)一般都有兩個以上的定時器
作者: endura82    時間: 2018-3-14 12:42
奎爾塞拉 發(fā)表于 2018-3-14 01:00
首先,第一點(diǎn),不建議用數(shù)碼管,這種東西可以換成液晶屏來做,顯示的內(nèi)容更豐富,管腳也不會很多(甚至可以 ...

謝謝你的建議,你給出了很明確的方向,雖然我還不是很明白 :)
因?yàn)橛泻芏嗉?xì)節(jié)還沒有接觸到,沒有學(xué)習(xí)過。我會去學(xué)習(xí)這個工作周期的設(shè)置,然后看看有沒有方向。

我目前的水平還特別低,是這樣的,年初開始我在某寶買一些套件,比如紅綠燈、溫度控制、電子琴,廣告屏、測距等散件,自己焊接,單片機(jī)程序賣家都已經(jīng)寫入了。我焊接成功之后,只是嘗試簡單的去修改一下程序。之前照著《手把手教你學(xué)單片機(jī)》配合學(xué)習(xí)板,學(xué)過前半部分,后面的還沒有學(xué)習(xí)。

這個設(shè)計其實(shí)是自己給自己的任務(wù),就是將網(wǎng)上買的溫控和測距兩套東西合并到一起去,也是想通過這個過程看看能不能接觸到新的東西,沒想到困難真的還很多哈。因?yàn)橘I的時候就是用的數(shù)碼管,所以,一些硬件部分暫時不改了,就照著數(shù)碼管用吧。

程序方面和原理方面,我要學(xué)的東西還很多。太感謝回復(fù)了!
作者: pcf2000    時間: 2018-3-14 13:43
加上HC164或HC594之類的IC,可以實(shí)現(xiàn)多個LED顯示的。。。
作者: cht870422    時間: 2018-3-14 14:00
串行可以的
作者: fridayer    時間: 2018-3-14 14:40
完全可以用,狀態(tài)機(jī)編程沒有問題




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