昨天說的是數碼管的靜態顯示,和靜態顯示對應的就是動態顯示。什么是動態顯示? 先來考慮一個問題,用靜態顯示的方法驅動一位數碼管用了多少資源? 一個鎖存器控制段選,另一個鎖存器的一個引腳控制位選。也就是9個引腳,如果用這種方式控制兩位數碼管要占用多少資源?18個引腳!8位數碼管呢?不敢想了。所以要另一種方式來解決這個問題。于是就出現了動態顯示的方法。 我不知道大家對于動態顯示的原理是不是能透徹理解,先插播一個故事。我小的時候很愛玩,喜歡看動畫片(海爾兄弟)。當得知動畫片里的人物動作發生的原理時,很興奮,自己畫了兩個小人,一個筆直站立,另一個擺出踢腿的動作,然后疊在一起,兩張紙片快速來回翻動,竟然就出現了動畫的效果。這么高科技的玩具不知道你們誰玩過~~~ 于是當我看到數碼管動態顯示的原理時,很自然就懂了。 通常情況下,人眼識別圖像的速度是24幀每秒,也就是說24幀/1000毫秒,平均一幀40毫秒左右。當你的刷新頻率高于這個速度的時候,那些斷斷續續的圖片就連貫成了動作。 說回到數碼管上,這里有6位數碼管,我想讓它從左開始依次顯示1、2、3、4、5、6,每次只亮一個,1秒更新一次,使用昨天的靜態顯示的方法,很簡單吧。只需要定時更新段選編碼以及位選引腳即可。 這樣的效果就是它們循環點亮,如同流水燈那樣。 在這個時候,如果我們不斷減少更新時間,突破了人眼的識別速度,將會是什么視覺效果?六個數字同時點亮!這就是今天要做的。 上程序,在昨天的基礎上進行修改。依然共陰極,依然用CH573鎖存器,這次同時驅動6位數碼管,顯示123456. 首先,定義了table這個數組,通過查表的方式來查詢對應的編碼;其次,使用code的方式,把這個數組定義在ROM區,節約了51單片機RAM的資源。 留個思考題,常說的數碼管消隱是因為什么細節沒處理好出現的問題? 程序下載地址:
SEG_6.zip
(28.84 KB, 下載次數: 47)
2015-3-24 22:54 上傳
點擊文件名下載附件
|