熱門: 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂(lè)園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時(shí)間: 2023-9-14 11:01
正文摘要:各位前輩,我最近重拾單片機(jī),在實(shí)現(xiàn)數(shù)碼管動(dòng)態(tài)顯示的時(shí)候遇到一個(gè)問(wèn)題。我按照教程編寫了使用兩個(gè)鎖存器實(shí)現(xiàn)數(shù)碼管顯示的代碼,并使用定時(shí)器中斷來(lái)進(jìn)行延時(shí)的作用。當(dāng)延時(shí)為1s時(shí),可以實(shí)現(xiàn)前六個(gè)數(shù)碼管分別從1-6流 ... |
要點(diǎn): 1、切換時(shí)間要盡可能短,讓有效顯示時(shí)間長(zhǎng),這樣亮度才能達(dá)到最大。 2、切換前要準(zhǔn)備好切換的數(shù)據(jù),這樣才能減少切換執(zhí)行的指令。 3、切換動(dòng)作的第一步是關(guān)顯示,這樣切換時(shí)的數(shù)據(jù)變化才不被顯示,顯示才不會(huì)混亂。 4、做切換動(dòng)作。 5、最后一步,是打開(kāi)新一顯示。 切換步驟如下(切換過(guò)程僅在條指令): 1、U3 = 全關(guān) 2、U1 = 新的顯示位數(shù)據(jù)(數(shù)據(jù)事先做好,如放在變量NEX_D中,在此取用) 3、U3 = 打開(kāi)新顯示位(數(shù)據(jù)事先做好,如放在變量NEX_W中,在此取用) P0 = 全關(guān) → U3.LE = 1使能 → U3.LE = 0鎖存 → 關(guān)顯示【消隱】 P0 = NEX_D → U1.LE = 1使能 → U1.LE = 0鎖存 → 【切換顯示數(shù)據(jù)】 P0 = NEX_W → U3.LE = 1使能 → U3.LE = 0鎖存 → 【切換顯示位】 你的錯(cuò)誤是: dula = 1; 錯(cuò)誤:【這時(shí)Ux打開(kāi),但數(shù)據(jù)P0是混亂的,導(dǎo)致短暫顯示不受控】 改正:【放在正確的數(shù)據(jù)準(zhǔn)備好之后】 P0 = table[numdu] 不佳:【C語(yǔ)言取數(shù)組中的數(shù)據(jù),不止一條指令,也即占用時(shí)間長(zhǎng)了】 最佳:【事先做 NEX_x = table[numdu],在此:P0 = NEX_x】 dula = 0【OK】 改正后: P0 = NEX_x;【切換前準(zhǔn)備好 NEX_x = table[numdu]】 dula = 1; dula = 0; |
前兩天我也遇到了,proteus上使用數(shù)碼管必須消影。 當(dāng)數(shù)碼管切換到下一位時(shí),這個(gè)數(shù)碼管就會(huì)顯示上一個(gè)數(shù)碼管的數(shù)字,由于切換時(shí)間很短,一閃而過(guò),給人一種影的感覺(jué),為了不顯示上一個(gè)數(shù),應(yīng)該在切換數(shù)碼管之前把所有的燈關(guān)掉,這就是所謂的消影。 |
謝謝老哥,修改成功。請(qǐng)問(wèn)這是段選P0口賦值和位選P0口賦值相互之間的干擾嗎? 我也剛意識(shí)到,上傳的代碼沒(méi)有注釋 ![]() |
要加消影
|
Powered by 單片機(jī)教程網(wǎng)