![]() |
發布時間: 2023-9-14 11:01
正文摘要:各位前輩,我最近重拾單片機,在實現數碼管動態顯示的時候遇到一個問題。我按照教程編寫了使用兩個鎖存器實現數碼管顯示的代碼,并使用定時器中斷來進行延時的作用。當延時為1s時,可以實現前六個數碼管分別從1-6流 ... |
要點: 1、切換時間要盡可能短,讓有效顯示時間長,這樣亮度才能達到最大。 2、切換前要準備好切換的數據,這樣才能減少切換執行的指令。 3、切換動作的第一步是關顯示,這樣切換時的數據變化才不被顯示,顯示才不會混亂。 4、做切換動作。 5、最后一步,是打開新一顯示。 切換步驟如下(切換過程僅在條指令): 1、U3 = 全關 2、U1 = 新的顯示位數據(數據事先做好,如放在變量NEX_D中,在此取用) 3、U3 = 打開新顯示位(數據事先做好,如放在變量NEX_W中,在此取用) P0 = 全關 → U3.LE = 1使能 → U3.LE = 0鎖存 → 關顯示【消隱】 P0 = NEX_D → U1.LE = 1使能 → U1.LE = 0鎖存 → 【切換顯示數據】 P0 = NEX_W → U3.LE = 1使能 → U3.LE = 0鎖存 → 【切換顯示位】 你的錯誤是: dula = 1; 錯誤:【這時Ux打開,但數據P0是混亂的,導致短暫顯示不受控】 改正:【放在正確的數據準備好之后】 P0 = table[numdu] 不佳:【C語言取數組中的數據,不止一條指令,也即占用時間長了】 最佳:【事先做 NEX_x = table[numdu],在此:P0 = NEX_x】 dula = 0【OK】 改正后: P0 = NEX_x;【切換前準備好 NEX_x = table[numdu]】 dula = 1; dula = 0; |
前兩天我也遇到了,proteus上使用數碼管必須消影。 當數碼管切換到下一位時,這個數碼管就會顯示上一個數碼管的數字,由于切換時間很短,一閃而過,給人一種影的感覺,為了不顯示上一個數,應該在切換數碼管之前把所有的燈關掉,這就是所謂的消影。 |
謝謝老哥,修改成功。請問這是段選P0口賦值和位選P0口賦值相互之間的干擾嗎? 我也剛意識到,上傳的代碼沒有注釋 ![]() |
要加消影
|