![]() |
發表于 2025-7-28 15:16 不要相信那些搜索引擎答案AI答案,要相信自己對鎖存器的理解,相信靜態顯示不需要消隱這一真理,事實勝于雄辯。 |
Luckyhorse009 發表于 2025-7-28 13:45 從理論上分析,本案例實際是程序選擇某位數碼管顯示某個數字,屬于靜態顯示,所以是不需要消隱的。之所以出現鬼影,是程序有問題,如果去掉第29行和33行,程序是這樣的:(以loction=1為例) 1. WLE=1; 2. P0=0xfe; 3. WLE=0; 4. DLE=1; 5. P0=Smgtable(num); 6. DLE=0; 問題就出在第4行,程序執行第4行時,位信號會進入數碼管段選端,形成數據干擾。 解決辦法: 1. P0=0xfe; 2. WLE=1; 3. WLE=0; 4. P0=Smgtable(num); 5. DLE=1; 6. DLE=0; |
Y_G_G 發表于 2025-7-28 14:18 真的假的啊 |
Luckyhorse009 發表于 2025-7-28 13:50 不論編程水平有多高也不可能同時切換數碼管的段和位(也是鬼影的根源),所以要在切換數碼管的段和位期間先使數碼管不亮再切換,完成后再使數碼管發亮。其他因素都不重要,肉眼根本觀察不到。按樓主的硬件環境可以按如下邏輯編程 P0=0x00;//段消隱 DLE=1;DLE=0;//鎖存 P0=0xfe;//送位碼 WLE=1;WLE=0;//鎖存 P0=smgtable[num];//送段碼 DLE=1;DLE=0;//鎖存 Delay_ms(1);//保持顯示若干時間 |
Y_G_G 發表于 2025-7-28 14:18 這樣說還能理解一下 |
鬼影是因為數碼管中的LED有結電容,如果只是單純的斷電,它就沒那么快暗下去,這就是你看到鬼影 這就要有一個給LED快速把電放掉的操作,至于是給高電平還是低電平,那就要看你的硬件電路了,你知道原理就行了 |
cyi8 發表于 2025-7-28 08:05 數據不是已經被鎖存器鎖住了嗎 |
GlenXu 發表于 2025-7-28 09:13 鎖存器已經鎖住數據了 為做么加這個還有用呢 |
cy009 發表于 2025-7-28 10:52 不消隱的話看上去重影挺厲害的 我是想問 這個已經通過鎖存器鎖住了 為什么還會產生鬼影的 |
一般是先關位,然后更新段,然后開位 |
數碼管動態掃描的消隱可以采用:1.關閉位選,2.關閉段選,3.同時關閉位選和段選。 樓主的案例是通過兩片鎖存器驅動,位碼和段碼都是由P0輸出,程序是先輸送位碼,后輸送段碼,從形參上看只顯示1位,所以本案例中無需消隱。 |
但是一般都不這樣寫,你寫的太麻煩了 |
其實在加一個1ms更加好 |
關 開 |
前一個是打開,為了顯示, 后一個是“全關”避免鬼影殘留 |
看看教程的解釋 |
消隱啊,不然人眼還停留在上一個代碼點亮的圖像上 |