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