![]() |
你可以用中斷優先級,讓不同的燈,一起亮![]() |
這種接法IO口必須有推挽模式和高阻模式,89C52不可以,每次只點亮一個LED,一個IO推挽輸出1,另一個IO輸出0,其它2個IO必須為高阻。通過動態掃描方式可以實現全部LED點亮,類似數碼管的點亮方式,n個IO最多可以控制n*(n-1)個LED,樓主4個IO最多控制4*3=12個LED。 |
減少口線數量,就采用雙向掃描,電路要改改, |
分時掃描 |
采用雙向掃描法,平時我們用的LED都是單向掃描,電流方向不會變,你如果減少口線數量,就采用雙向掃描,電路要改改, |
矩陣正反掃,不亮的IO要高阻態才行 |
先LED1為1,其它LED2~4 輪流持續1毫秒為0再拉高,同樣,再到LED2為1,重復前面方法,不斷循環即可全亮。 |
Bikho 發表于 2023-11-7 10:43 你說的對,我看錯了 |
Bikho 發表于 2023-11-7 10:45 程序上確保這3點: 1. 調用掃描LED程序的時間,間隔是穩定的,這個可以用定時器中斷來做,因為掃描程序本身不會占用多少時間。比如每100uS調用它一次,不要這會100uS等下變成200uS; 2. 通常我是100uS刷一次。CPU主頻更快程序進程少的話,也就是條件允許,可以刷得更快; 3. 刷某一個燈時,這個燈對應的2個管腳是輸出腳,其余腳設置成高組態; 代碼我不會幫你寫,平臺不一樣。且我認為提供解決思路與辦法,永遠比直接給代碼更加負責。根據別人的思路或自己想出來思路,然后自己用代碼實現出來,自己才會得到提升。 |
板凳說的是對的,不過線路是沒錯的 |
哦豁~ 發表于 2023-11-7 10:37 我前兩個燈以及后面六個燈用按鍵來控制的,第一二個燈按鍵長按切換,后六個按鍵短按實現一個燈亮到六個燈全亮,現在的現象是后面的燈有時會影響到前兩個燈亮,掃描的方式怎么樣才能更好的消除這二者的影響,方便寫一下嗎,謝謝。 |
哦豁~ 發表于 2023-11-7 10:37 如何才算是掃描過快,我現在后面六個燈用按鍵控制的,然后當有個亮的時候第一或第二個燈會亮,但是會暗些 |
lkc8210 發表于 2023-11-7 09:39 LD1和LD4方向不同啊,應該不會同時亮的吧 |
用掃描的方式就可以實現。一瞬間讓某個燈亮起:12 -> 13 -> 21 -> 23 -> 24 -> 31 -> 32 -> 34 -> 41 -> 42 -> 43,只要掃描夠快,就看起來所有燈都亮起來了。線路是正確的,樓上說法有誤。 |
你這個燈怎么這樣接法,io口又當正極又當負極嗎?還要全部同時亮,應該是不現實,改一下布線吧 |
線路不正確,如LD1和LD4必定同時亮 LD4需掉換一下方向 可以看一下查理復用 引腳必須具備推挽和高阻能力 |
你這少了個燈吧,應該是連到LED1 LED4,看樣子你是三個一組進行分類分了四組,如果想要不同組之間同時顯示,我建議利用數碼管的那種動態掃描方式點亮,如果你是同一組的三個同時點亮,就直接陽極引腳拉高其余引腳拉低就行了。 |
分時掃描就可以了 |