說到動態(tài)顯示,我們可以說是輕車熟路了,之前的LED已經(jīng)練過不少了,此次只是把LED換成了數(shù)碼管,原理一樣,還是一樣的電路,接下來看看如何做到動態(tài)顯示。
首先是對程序代碼做些更改,只要要加上掃描的部分就可以了。關于中間的時間,還是用延時函數(shù)來做。
在循環(huán)函數(shù)中,我先是把刷新代碼寫在了最前部分,激活數(shù)碼管1,輸出數(shù)據(jù),然后延時,接著激活數(shù)碼管2,然后輸出數(shù)據(jù),再次延時,延時結(jié)束判斷按鍵是否按下。沒有按下繼續(xù)掃描數(shù)碼管,顯示的是之前的存儲在緩存中的數(shù)值,延時函數(shù),采用的還是之前的配方,時間也是一樣的,估計有些同學已經(jīng)忘記了是延時多久了。我再給介紹下如何查看延時時間。
我用的是11.0592MHz,然后再去查看keil中仿真的頻率是多少。修改為一致的參數(shù)。
單擊這個按鍵,彈出設置對話框。
把此處的數(shù)字更改為11.0592即可,只填數(shù)值。記號小數(shù)點不要填錯位置。其他不用動,單擊OK即可。
單擊此按鍵進入仿真模式。
首先單擊左上角的復位按鍵,對時間復位,然后再代碼調(diào)試窗口對這左側(cè)的灰色部分,在delay對應的前方單擊,就可以添加一個斷點,當程序運行到此處,會停止運行,方便我們查看時間。為了計算的方便,可以把delay后邊括號中的數(shù)值更改的合適一些,例如改成整數(shù),這里我修改為100,方便計算。切記一旦進入仿真模式,你可以修改代碼,但是修改后的代碼是不會立即運行到此次仿真中的,需要退出仿真,進行編譯后,再次進入仿真,才會運行修改后的代碼。所以進入仿真后,就不要更改了,需要改的,可以退出放著后再修改,每次修改完記得編譯。
在延時函數(shù)結(jié)尾處的灰色部分也添加斷點。接著單擊左上角復位鍵后的開始鍵。
當運行到延時函數(shù)時,就停下來了,此時延時函數(shù)前的運行時間是0.00043511秒。還是很快的。再次點擊開始按鍵。
代碼停止到了延時的函數(shù)結(jié)尾處,此時延時函數(shù)已經(jīng)運行完畢。當前總時間是0.21941732秒,減去之前的運行時間,得到的延時時間是21941732-43511=21898221,就是0.21898221秒,四舍五入,就是0.219秒,219毫秒。因為延時了100次,所以一次就是2.19毫秒。
之前的代碼是delay(26),就是延時26次,相當于26*2.19=56.94毫秒,約為57毫秒,道理上已經(jīng)低于人眼的范圍,從仿真軟件上,也可以看出閃爍,為什么用這個數(shù)值呢,主要是當我選則較低的延時時間時,就會出現(xiàn)仿真數(shù)碼管不顯示,沒辦法,因為手頭沒有實際的數(shù)碼管去驗證,所以就增大了延時時間,如果實際去驗證的話,延時時間應該設置在5毫秒以內(nèi),因為是兩個數(shù)碼管,一個5毫秒,兩個就是10毫秒。5/2.19=2.28次,所以延時設置為delay(2)。注意這一點,不然用26去試,閃得厲害。所以仿真軟件只適用于測試,真正的還是需要去動手實踐。
我們還接著看仿真效果吧。
當按下按鍵,首先是顯示的0,1、2此時再不停地切換。
再次按下按鍵,數(shù)碼管顯示了10,因為buffer2中的0依然在,buffer1中存儲的是1,所以就顯示了10。
多次單擊后,可以看到,奇數(shù)顯示在左,偶數(shù)顯示在右,隨著單擊,交替更新。有興趣可以自己測試下。這就是動態(tài)顯示,也不是那么難。
責任編輯人:CC