|
發布時間: 2019-1-11 15:44
正文摘要:本人單片機小白,只會用玩同一個IO口4*4的矩陣。在一個IO口上可以用十六進制設置4個引腳高,4個引腳低,P1=0xF0; 12*3的36個燈怎么驅動,想了一天了跪求大佬 |
| 兩個P0總共可以驅動8*8=64個燈,方式原理與4*4一般 |
動態掃描,Proteus仿真。
|
wulin 發表于 2019-1-11 17:59 大佬牛逼,這么多方法,我還是覺得這種比較易實現多種功能組合 |
| 根據你的電路用動態掃描方式,列提供數據,行掃描,頻率在50*12Hz,每次單片機一個引腳上只有一個LED點亮,關鍵程序的寫好,單片機引腳能承受電流的20MA,要加限流電阻。 |
|
本帖最后由 wulin 于 2019-1-12 08:00 編輯 最簡單的方法就像操作數碼管一樣,設置unsigned int 數組控制行,設置unsigned char 數組控制列,把不同組的端口組合成一個unsigned int變量來操作。參看我以前的回壇友的帖子:“異組端口組成矩陣鍵盤的讀寫操作方法”。也可以按點陣LED方法驅動。 |
| 可以考慮采用掃描方式控制,只要掃頻大于20Hz,人眼基本就分辨不出來。 |
| 其實,這是個數學分解質因素的問題。 |
|
如果必須用8個IO來做可以這樣:4*3*3。 3*3用6個IO可以做成9個驅動,這樣的驅動做4組,這4四組用剩下的兩IO做選通,剛好可以有4個狀態的選通。不過,3*3之后,如何再被選通要下功夫了。需要增加其它器件,得不償失。 所以幾乎無人采用這種方式,但作為學習,你可以按照這個思路試試。 大多會采用6*6的方案。即用12個IO口。 |
| 相信P0,P2的數據你都會了,P1可以這樣表示:第一行P1=10000000B,第二行P1=01000000B,第三行P1=00100000B |
| 如法炮制:6高6低。 |
| 相信P0和P2的數據你都會了,P1你可以這樣:P1=10000000B 表示第一行,P1=01000000B表示第二行,P1=00100000B表示第三行 |
|
要L1頭一個燈亮,p10低,p11與p12高,p20高,p21-p27以及p00-p03全低。 要L1第二個燈亮,p10低,p11與p12高,p21高,p20-p27以及p00-p03全低。 。 。 。 要L2頭一個燈亮,p11低,p10與p12高,p20高,p21-p27以及p00-p03全低。 。 。 。 以此類推。 |
|
P1=0xF0是全亮啊,你這36個LED也是要全亮和全滅嗎? 全亮:P1&=0xf8;P2=0xff;P0|=0xff; 全滅:P1|=0xff;P2=0xff;P0|=0xff; 好久沒搞51了,都不敢肯定對不對。。。 |