|
如果你不介意多用兩個(gè)三極管的話,可以用兩個(gè)三極管通過(guò)與邏輯控制一個(gè)LED,另外兩個(gè)LED用電平本身控制。電路圖如下:
20220916103117.jpg (10.06 KB, 下載次數(shù): 45)
下載附件
2022-9-16 10:32 上傳
Q1和Q2是兩個(gè)NPN三極管,如果兩個(gè)IO同時(shí)高電平,LED1和LED2兩側(cè)電平相同,不亮,此時(shí)Q1和Q2飽和,LED3亮;如果兩個(gè)IO中只有一個(gè)高電平,那么可以對(duì)應(yīng)地導(dǎo)通LED1或LED2,此時(shí)Q1和Q2中也只有一個(gè)導(dǎo)通,LED3不亮;如果兩個(gè)IO都是低電平,那么三個(gè)LED自然都不會(huì)亮。這樣一來(lái),我們就可以單獨(dú)地控制三個(gè)LED的亮滅了,進(jìn)而可以通過(guò)頻閃的原理控制三個(gè)LED的8種組合狀態(tài)。
我簡(jiǎn)單搭了個(gè)小電路,用兩個(gè)IO控制三個(gè)LED的流水燈,實(shí)現(xiàn)8個(gè)LED狀態(tài)的循環(huán)轉(zhuǎn)移(000→001→010→...→111→000→001→...),驗(yàn)證了上面電路的有效性。IO使用了STC8G1K08A-8PIN 的P3.2和P3.3,電阻均為1kΩ,兩個(gè)三極管均使用S8050。代碼以及實(shí)現(xiàn)效果如下:
代碼:
- #include "STC8G.h"
- #include "intrins.h"
- void led(int a, int b, int c)
- {
- if(a == 1)
- {
- P3 = 0xF7;
- _nop_();
- P3 = 0xF3;
- }
- else _nop_();
- if(b == 1)
- {
- P3 = 0xFB;
- _nop_();
- P3 = 0xF3;
- }
- else _nop_();
- if(c == 1)
- {
- P3 = 0xFF;
- _nop_();
- P3 = 0xF3;
- }
- else _nop_();
- }
- void main()
- {
- unsigned int m;
- P3M0 = 0x0C;
- P3M1 = 0x00;
- P3 = 0xF3;
- while(1)
- {
- for (m=0;m<65535;m++) led(0, 0, 0);
- for (m=0;m<65535;m++) led(0, 0, 1);
- for (m=0;m<65535;m++) led(0, 1, 0);
- for (m=0;m<65535;m++) led(0, 1, 1);
- for (m=0;m<65535;m++) led(1, 0, 0);
- for (m=0;m<65535;m++) led(1, 0, 1);
- for (m=0;m<65535;m++) led(1, 1, 0);
- for (m=0;m<65535;m++) led(1, 1, 1);
- }
- }
復(fù)制代碼 代碼一插入進(jìn)來(lái),TAB縮進(jìn)全沒(méi)了,暈。。。
實(shí)現(xiàn)效果:
20220916065556-6bcc1cced7.[gif-2-mp4.com].gif (19.78 MB, 下載次數(shù): 47)
下載附件
2022-9-16 12:00 上傳
效果還不錯(cuò)的,就是要加兩個(gè)三極管,不知道你能不能接受。
20220916115910.jpg (57.89 KB, 下載次數(shù): 45)
下載附件
2022-9-16 12:01 上傳
證明一下,只用了兩個(gè)引腳哦,哈哈~
|
|