標題: 如何讓單片機兩個io口控制三個LED顯示呢? [打印本頁]

作者: 禿頭小隊長    時間: 2022-9-15 09:29
標題: 如何讓單片機兩個io口控制三個LED顯示呢?

我的單片機原理圖是這樣的,想用兩個io控制三個LED顯示,但是LED口輸入狀態(tài)時,并沒有辦法讓兩個LED同時熄滅,反而同時點亮,實際加大了LED后面電阻也很難熄滅LED

作者: 逍遙111111    時間: 2022-9-15 11:42
這個電路再加幾個電阻不知道行不行得通,電阻位置不合適的話處于00狀態(tài)的話應(yīng)該3個燈都可能亮吧....

25012ba8ab373196cd5ba13012a7d4f.jpg (115.4 KB, 下載次數(shù): 124)

25012ba8ab373196cd5ba13012a7d4f.jpg

作者: mtdzok    時間: 2022-9-15 13:08
樓主沒有看到51板塊8樓的解決方案嗎?高阻不亮是經(jīng)過驗證的。
作者: 風(fēng)之痕于夢想    時間: 2022-9-15 13:18
可以用邏輯矛盾的方式
作者: zhijie    時間: 2022-9-15 13:39
同時熄滅,同時亮兩個LED并聯(lián)不可以嗎
作者: 89648964    時間: 2022-9-15 14:07
這玩意搞個編碼器可以嗎
作者: songb11    時間: 2022-9-15 14:41
首先你要搞清楚你想要得到或?qū)崿F(xiàn)一個怎樣的亮燈結(jié)果,再考慮設(shè)計電路。
就你貼出來的電路而言D6就獨占了一個IO,D2\D3共享一個IO。對于獨占來說LED亮滅自由控制,而你這個共享就要看你想實現(xiàn)怎樣的一個LED亮滅邏輯了,如IO為三態(tài)就可想你現(xiàn)在這個下的LED幾種狀態(tài)了
作者: songb11    時間: 2022-9-15 14:52
你的問題是不是想問:一個IO實現(xiàn)兩個LED的三種狀態(tài)[1亮2滅、2亮1滅、1 2都滅]控制?
作者: wulin    時間: 2022-9-15 17:37
用盡量少的IO口控制盡量多的LED通常采用查理復(fù)用方法。計算公式N *(N - 1)= 個LED。這顯然不能滿足樓主“兩個IO口控制三個LED”的要求。解決這個問題有多種方法,沙發(fā)提供的方法最簡單,但前提條件是IO口要能設(shè)置為推挽模式。
作者: 一事無成    時間: 2022-9-15 20:18
電路結(jié)構(gòu)是可以的,有的充電器跳燈就是這樣的結(jié)構(gòu),要調(diào)節(jié)LED輸入電壓大于一個LED小于兩個LED,所以只串電阻沒啥用,還得串二極管,或用穩(wěn)壓管穩(wěn)壓芯片之類的。
作者: coody_sz    時間: 2022-9-16 00:02
每個IO可以控制2個LED,2個電阻接VCC、GND,分壓點接兩個LED背靠背,LED另一端接IO。
IO高電平亮LED1,低電平亮LED2,高阻則兩個都不亮,方波驅(qū)動則兩個同時亮,PWM驅(qū)動還可以獨立調(diào)光。

所以,2個IO可以獨立控制4個LED互不干擾。
作者: 地球    時間: 2022-9-16 12:02
如果你不介意多用兩個三極管的話,可以用兩個三極管通過與邏輯控制一個LED,另外兩個LED用電平本身控制。電路圖如下:

Q1和Q2是兩個NPN三極管,如果兩個IO同時高電平,LED1和LED2兩側(cè)電平相同,不亮,此時Q1和Q2飽和,LED3亮;如果兩個IO中只有一個高電平,那么可以對應(yīng)地導(dǎo)通LED1或LED2,此時Q1和Q2中也只有一個導(dǎo)通,LED3不亮;如果兩個IO都是低電平,那么三個LED自然都不會亮。這樣一來,我們就可以單獨地控制三個LED的亮滅了,進而可以通過頻閃的原理控制三個LED的8種組合狀態(tài)。

我簡單搭了個小電路,用兩個IO控制三個LED的流水燈,實現(xiàn)8個LED狀態(tài)的循環(huán)轉(zhuǎn)移(000→001→010→...→111→000→001→...),驗證了上面電路的有效性。IO使用了STC8G1K08A-8PIN 的P3.2和P3.3,電阻均為1kΩ,兩個三極管均使用S8050。代碼以及實現(xiàn)效果如下:

代碼:
  1. #include "STC8G.h"
  2. #include "intrins.h"

  3. void led(int a, int b, int c)
  4. {
  5.         if(a == 1)
  6.         {
  7.                 P3 = 0xF7;
  8.                 _nop_();
  9.                 P3 = 0xF3;
  10.         }
  11.         else _nop_();
  12.         if(b == 1)
  13.         {
  14.                 P3 = 0xFB;
  15.                 _nop_();
  16.                 P3 = 0xF3;
  17.         }
  18.         else _nop_();
  19.         if(c == 1)
  20.         {
  21.                 P3 = 0xFF;
  22.                 _nop_();
  23.                 P3 = 0xF3;
  24.         }
  25.         else _nop_();
  26. }

  27. void main()
  28. {
  29.         unsigned int m;
  30.         P3M0 = 0x0C;
  31.         P3M1 = 0x00;
  32.         P3 = 0xF3;
  33.         while(1)
  34.         {       
  35.                 for (m=0;m<65535;m++) led(0, 0, 0);
  36.                 for (m=0;m<65535;m++) led(0, 0, 1);
  37.                 for (m=0;m<65535;m++) led(0, 1, 0);
  38.                 for (m=0;m<65535;m++) led(0, 1, 1);
  39.                 for (m=0;m<65535;m++) led(1, 0, 0);
  40.                 for (m=0;m<65535;m++) led(1, 0, 1);
  41.                 for (m=0;m<65535;m++) led(1, 1, 0);
  42.                 for (m=0;m<65535;m++) led(1, 1, 1);
  43.         }
  44. }
復(fù)制代碼
代碼一插入進來,TAB縮進全沒了,暈。。。

實現(xiàn)效果:

效果還不錯的,就是要加兩個三極管,不知道你能不能接受。


證明一下,只用了兩個引腳哦,哈哈~



作者: 禿頭小隊長    時間: 2022-9-16 15:06
songb11 發(fā)表于 2022-9-15 14:52
你的問題是不是想問:一個IO實現(xiàn)兩個LED的三種狀態(tài)[1亮2滅、2亮1滅、1 2都滅]控制?

我是想實現(xiàn),1亮2滅,12亮,12滅
作者: mengsiu    時間: 2022-9-19 11:35
用芯片控制,I2C通信,想控制多少個燈都可以,一個或多個燈隨便亮。

作者: lkc8210    時間: 2022-9-19 14:33
逍遙111111 發(fā)表于 2022-9-15 11:42
這個電路再加幾個電阻不知道行不行得通,電阻位置不合適的話處于00狀態(tài)的話應(yīng)該3個燈都可能亮吧....

妙啊,動態(tài)輸出就可以任意控制LED的亮滅

1.jpeg (134.75 KB, 下載次數(shù): 119)

1.jpeg

作者: 188610329    時間: 2022-9-19 14:59
lkc8210 發(fā)表于 2022-9-19 14:33
妙啊,動態(tài)輸出就可以任意控制LED的亮滅

5V供電, 3個LED都是紅色 LED 的話, 全高阻,3燈都會亮, 雖然亮的比較暗
作者: j1ason    時間: 2022-9-19 15:24
12#樓的同志很有想法,充滿智慧。值得學(xué)習(xí)
作者: lkc8210    時間: 2022-9-19 15:34
188610329 發(fā)表于 2022-9-19 14:59
5V供電, 3個LED都是紅色 LED 的話, 全高阻,3燈都會亮, 雖然亮的比較暗

加上電阻就好了
作者: hhh402    時間: 2022-9-19 17:30
3個IO,控制3個LED和一個按鍵。樓主非要用一個IO控制按鍵,2個IO控制3個LED,自討苦吃。IO復(fù)用是有講究的,不是隨意,明顯用一個IO控制一個LED和一個按鍵,其他2個IO控制2個LED才是正解。
作者: mtdzok    時間: 2022-9-19 19:31
最符合樓主要求的就是充分利用高阻,一個I/O口驅(qū)動2個LED,兩個口可以驅(qū)動4個LED。在樓主另一個板塊同樣的提問已經(jīng)有方案了,可是有價值的都沒有回復(fù)不知完成的怎么樣了。其實最主要的就是在高阻時要保證2個LED都不亮,2個二極管是為了更可靠保證高阻時不亮,加大電阻是沒用的,前邊已經(jīng)說了IO口要有高阻和推挽方式,要用壓降大的發(fā)光管,壓降不夠加二極管,下圖是經(jīng)過驗證的。






歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1