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