Ⅰ 單片機 8×8點陣LED 驅動電路
我看了你寫的,感到秋收的關鍵問題是不理解8×8點陣LED驅動電路是如何工作的。
這個8×8點陣LED驅動電路是「行」和「列」的掃描方式工作的,這64個發光管,在每個瞬間只有一個亮。我畫了一個簡圖,圖中,紅色的僅在1高,A低時工作,同樣綠色的僅在2高,D低時工作,黃色的僅在6高,E低時工作,不是同時都亮。
只要64個發光管在1/25秒內掃描一次(或是說整個64隻管子,每秒掃描35次以上)視覺上是看不出是掃描的。
行和列的掃描頻率是1比8,這樣就能有序的工作了。
你的R1,R2電阻也好確定了,你只要按一個發光管的工作來考慮。這里也用不上什麼3態,你將OE接0電平就行了。
好好想想吧,搞不清可以HI我,我一般晚上都在。
Ⅱ 單片機中LED顯示電路用三極體驅動電路怎麼連接啊四個數碼管。
三極體的基極接單片機引腳,集電極接+5V電源和數碼管的共陽極,發射極接地。OK?
Ⅲ @張飛老師:如何設計單片機控制的2PIN雙色LED燈的驅動電路
你的線路好像不對吧 請看我的方案,肯定可以,望採納,
Ⅳ 單片機驅動LED
如果是NPN三極體的話,把LED的正極接到三極體的發射極,如果是PNP的話,把LED的負極接到三極體的發射極這種導通方式電流最大,注意電流方向,PNP的電流是從發射極流動到基極和集電極,NPN的是集電極和基極的電流通過發射極流出。
Ⅳ 51單片機做個led路燈照明,求1W led驅動電路
給您兩個方案,一個是正規方案,另一個是建議方案。
先說簡易方案,用三極體與功率電阻組合用單片機控制這是簡易方案。然後說明其中作用,三極體選用9013,作用是放大,他的幾級串電阻接單片機。他的發射極串x歐姆電阻接地,他的集電極串接led和電阻。其中集電極電阻r和發射極電阻x歐需功率電阻,大小為1W的功率電阻。集電極供電電源是由7808穩壓器,若改為7805則可減小阻值,具體電阻阻值這需要計算。
LED有個特性,在未達到額定電壓時候是可以點亮的,此時電流小於額定電流很多,但有可能亮度與額定電壓下變化並不明顯,若超過額定電壓,則電流比額定電流會大很多。也就是說需要使led串接電阻,使其電流一定。那麼計算阻值時候,比如led額定電流要求300ma,那麼我們只要保證他是通過300ma去計算阻值。
由於這個簡單方案我做過,故給個紅筆更改過的電路圖,只不過我是2led串聯,紅叉代表不接,紅線代表鏈接。具體看圖。
最後祝你調試成功,沒了。
Ⅵ 單片機的IO驅動LED燈電路,需要用到三極體,求原理圖,並說明
搞不明白單片機I/O口驅動LED為什麼要用到那麼復雜的電路,是單純的為了復雜而復雜嗎?很暈!如果一個I/O口驅動一個LED,只要I/O口低電平有效LED串一個470Ω的電阻即可,如果驅動多個LED只要按下圖即可:
如果Vcc=5v;則R0=1KΩ-5.1KΩ;Rn=470Ω。如果晶體管用S8550,那麼同時點亮5個LED是沒問題的。
Ⅶ 單片機中LED顯示電路用三極體驅動電路怎麼連接啊四個數碼管。
//單片機中LED顯示電路用三極體驅動電路四個數碼管。可以參考一下
#include<reg52.h>
sbit led0=P3^2;
sbit led1=P3^3;
sbit led2=P3^4;
sbit led3=P3^5;
sbit ledd=P3^7;
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char g,s,b,d,a;
unsigned int num;
void delay(unsigned char x)
{
unsigned char i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void display()
{
P1=table[d];
led3=0;
delay(5);
led3=1;
P1=table[b];
led2=0;
delay(5);
led2=1;
P1=table[s];
led1=0;
delay(5);
led1=1;
P1=table[g];
led0=0;
delay(5);
led0=1;
}
void ont()
{
num=0;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void main()
{
ont();
while(1)
{
if(a==20)
{
a=0;
ledd=~ledd;
num++;
d=num/1000;
b=num%1000/100;
s=num%100/10;
g=num%10;
}
display();
if(num==10000)
{
num=0;
}
} }
void time_0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
a++;
}