之前在我們設(shè)計(jì)的DIY電子時鐘里面,有一項(xiàng)需求就是數(shù)碼管顯示的亮度要隨環(huán)境亮度的改變而自動調(diào)節(jié)。這幾天在群里也有人問到這個問題,在群里說了大體思路后,還是不能理解,程序部分還是沒有是成功,今天小代就寫此文來說說數(shù)碼管亮度怎么調(diào)節(jié)?文后會附上源碼。
在我們硬件電路做好之后,再要去調(diào)節(jié)數(shù)碼管的亮度,那就只能從軟件入手,也就是編程來實(shí)現(xiàn)它。正常情況下,我們的程序都是給數(shù)碼管全亮,就像電機(jī)全速運(yùn)行一樣,需要調(diào)速了,我們就采用PWM信號去控制,PWM信號的原理其實(shí)就是在相同的頻率下,減小了驅(qū)動電平的時間,這里調(diào)節(jié)亮度的原理也是差不多,就是在保持刷新頻率不變得情況下,減少每一位數(shù)碼管點(diǎn)亮的時間。
下面我們簡單說說正常的數(shù)碼管顯示程序怎么寫。全亮?xí)r,我們是現(xiàn)給數(shù)碼送段選數(shù)據(jù),再送位選數(shù)據(jù),然后延時一小會時間,再重復(fù)以上內(nèi)容顯示下一位。現(xiàn)在我們有四位數(shù)碼管,我們讓每位點(diǎn)亮6ms,這樣4位數(shù)碼管顯示完一次(掃描一次)大約25ms,那1秒就可以掃描40次(40幀/秒),這樣我們?nèi)搜劭吹降木褪峭瑫r顯示(視頻一般為25幀/秒)。具體過程如下(4位數(shù)碼管分別計(jì)為A、B、C、D):
開始: A 選通 延時6ms ,關(guān)閉A
B 選通 延時6ms ,關(guān)閉B
C 選通 延時6ms ,關(guān)閉C
D選通 延時6ms ,關(guān)閉 D
結(jié)束一幀掃描
(注:此處的選通包含段碼和位碼)
詳細(xì)程序如下:
正常顯示程序
如上圖就是正常的顯示代碼段(共陰數(shù)碼管),以上程序運(yùn)行后可以在數(shù)碼管上看到顯示1234全亮度。這里說的延時一小會,這個時間是在毫秒級別的,調(diào)節(jié)這個時間,是可以調(diào)節(jié)亮度,但是時間稍微大一點(diǎn),就會出現(xiàn)閃爍的情況了。我們要的是既要亮度可以調(diào)節(jié),又要不閃爍,那就要用到我們說的PWM信號了。
現(xiàn)在要在不改變掃描速率的情況下,降低每一位點(diǎn)亮的時間,這樣我們看到的效果就是亮度的降低了。比如上圖中的程序,我們延時時間是6ms,這6ms時間都是點(diǎn)亮數(shù)碼管的,現(xiàn)在要減少點(diǎn)亮?xí)r間,那我們就點(diǎn)亮3ms,關(guān)閉3ms,這樣一來,掃描一位的時間還是6ms,但是這6ms時間內(nèi)只有3ms時間是點(diǎn)亮的,自然亮度就降低了,而沒有改變掃描時間,自然不會出現(xiàn)閃爍的情況。具體過程如下:
開始: A 選通 延時3ms ,關(guān)閉A 延時3ms
B 選通 延時3ms ,關(guān)閉B 延時3ms
C 選通 延時3ms ,關(guān)閉C 延時3ms
D選通 延時3ms ,關(guān)閉 D 延時3ms
結(jié)束一幀掃描
(注:此處的選通包含段碼和位碼)
具體代碼如下:
如上圖所示,每一位點(diǎn)亮的時間只有3ms,但是掃描每一位數(shù)碼管的時間還是原來的6ms,這樣就實(shí)現(xiàn)了在不改變刷新頻率的情況下減少了每一位點(diǎn)亮的時間,從而減低了亮度,上圖中的亮度已經(jīng)是全亮的一半了。
好了,到這要調(diào)節(jié)亮度的任務(wù)就已經(jīng)完成了,但是我們還想拓展一下,如何讓這個亮度可以通過程序自動來調(diào)節(jié)而不是我們認(rèn)為的修改程序呢?辦法很簡單,我們在程序中設(shè)一個變量為點(diǎn)亮的時間參數(shù)(比如設(shè)為on_time),每一位還是點(diǎn)亮6ms,那關(guān)閉的時間就是6ms-on_time。
那過程就變?yōu)槿缦拢?/p>
開始: A 選通 延時on_time ,關(guān)閉A延時6ms-on_time
B 選通 延時on_time ,關(guān)閉B延時6ms-on_time
C 選通 延時on_time ,關(guān)閉C延時6ms-on_time
D選通 延時on_time ,關(guān)閉 D延時6ms-on_time
結(jié)束一幀掃描
要讓程序自動調(diào)節(jié)這個變量on_time,就需要來調(diào)節(jié)的參數(shù),比如時間參數(shù),在幾點(diǎn)到幾點(diǎn)之間亮度為多少,可以多少幾個檔次。更高級別的可以通過光敏電阻來實(shí)現(xiàn)檢測環(huán)境光照度來調(diào)節(jié)這個現(xiàn)實(shí)的時間參數(shù)on_time,這樣就可以實(shí)現(xiàn)正真的隨環(huán)境的變化而變化。我們做的DIY電子時鐘就是采用最后說的方式,通過光敏電阻分壓后單片機(jī)ADC轉(zhuǎn)換得到電壓值,再根據(jù)這個電壓值來自動的調(diào)節(jié)點(diǎn)亮的時間。通過修改延時函數(shù),可以做到真正的無極調(diào)光。
-
單片機(jī)
+關(guān)注
關(guān)注
6058文章
44822瀏覽量
644854 -
數(shù)碼管
+關(guān)注
關(guān)注
32文章
1888瀏覽量
92081 -
光敏電阻
+關(guān)注
關(guān)注
4文章
306瀏覽量
49553 -
PWM信號
+關(guān)注
關(guān)注
3文章
98瀏覽量
20495 -
ADC采樣
+關(guān)注
關(guān)注
0文章
134瀏覽量
13086
發(fā)布評論請先 登錄
相關(guān)推薦
數(shù)碼管驅(qū)動芯片的使用方法
LED數(shù)碼管
LED數(shù)碼管驅(qū)動芯片選型指南
數(shù)碼管顯示亮度太暗怎樣增加亮度?
數(shù)碼管的分類
數(shù)碼管的驅(qū)動方式
為什么數(shù)碼管亮度不均勻?
靜態(tài)數(shù)碼管
多位數(shù)大尺寸高亮度低成本LED數(shù)碼管驅(qū)動電路的設(shè)計(jì)
數(shù)碼管的用途
led數(shù)碼管怎么接線_LED數(shù)碼管的測試
51匯編(六):數(shù)碼管顯示

靜態(tài)數(shù)碼管和動態(tài)數(shù)碼管

評論