![]() |
發布時間: 2022-11-30 21:55
正文摘要:各位大神,用IO口驅動數碼管,單燈給值掃描正常,0~9數字跳轉實現不了,是哪里邏輯錯誤了。。 單片機源程序如下: void LED_Init(void) { PORTA = 0; TRISA0 = 1;   ... |
yzwzfyz 發表于 2022-12-1 17:22 好的,按照上面兩位的思路整理了下程序,基本可以了 |
zjjhtony 發表于 2022-12-1 11:39 好的,是這樣的思路,謝謝~ |
不急: 弄懂顯示的原理。 建議先畫個顯示0-9的真值表。按表寫驅動程序就可以了。 |
declansang 發表于 2022-12-1 09:49 查理復用是需要軟件、硬件配合。不能有效關閉LED多數是代碼不對。 |
這個燈需要一個定時器對他IO口進行定時循環掃描,在數據的處理上要化點時間。 處理過2個這樣的LED程序。 |
declansang 發表于 2022-12-1 09:49 這個復用模式,需要單片機的高阻模式不漏電,因為現在LED很小的驅動電流就會發亮1mA以下都可以,你要單獨試個點,一IO高電平一次 低電平一次 另一IO一直高阻開漏模式 測試所處的點是否發亮,如發亮你怎么弄也不能有效關閉LED了 |
本帖最后由 lkc8210 于 2022-12-1 10:57 編輯 代碼不全 可以用Excel 算出段值用來比較,就可以簡化代碼 ![]() 以下的Disp()函數放到1ms中斷里運行 Dat1/Dat2/Dat3的值是共陰數碼管的碼,k1k2對應bit0,bit1 ![]() |
wulin 發表于 2022-12-1 09:19 感謝指點,我目前是按查理復用設定的掃描方式去處理的,就是亮下一個燈的時候,上一個不論怎么配置不知道為什么滅不掉。 |
這類數碼管的驅動碼編寫有點麻煩,首先要選擇有高阻輸出模式的MCU,采用查理復用的方法編寫驅動碼,共有25個筆段。小數點DP1、DP2只需2選1就能滿足運用。空出的碼位讓給k2。這就得到24個實際使用筆段。最簡單的應用是單管逐一顯示,由于每個筆段只能顯示1/25時間,可能視覺亮度不夠。要減小限流電阻阻值。
![]() |