單片機是控制器件而不是驅(qū)動器件,因為輸出電流很小,不足以驅(qū)動某些需要大電流的外設。 單片機的GPIO口驅(qū)動能力有限,不能直接驅(qū)動較大功率的負載。
標準51的P0口(雙向口)在作為I/O口使用時,是開漏結(jié)構(gòu),在實際應用中通常要添加上拉電阻(排阻)。 P1、P2、P3都是準雙向I/O,內(nèi)部有上拉電阻,既可作為輸入又可以作為輸出。
P0三態(tài)門有三個狀態(tài),即在其的輸出端可以是高電平、低電平,同時還有一種就是高阻狀態(tài)(或稱為禁止狀態(tài))
惡補一些基礎概念,稍微了解下,原理看不懂跳過...
1.灌電流方式
LED正極接VCC,負極接IO口。 IO為高電平是LED兩極電平相同,沒有電流,LED熄滅;IO為低電平時,電流從VCC流入IO,LED點亮。
但是當你把LED正極接在IO接口,負極接GND時,將IO接口置于高電平,LED會亮,但因為IO接口上拉能力不足而使亮度不理想
2.三極管驅(qū)動
三極管全稱半導體三極管,也稱晶體三極管,是一種控制電流的半導體器件其作用是把微弱的電信號放大成幅度值較大的電信號,也用作無觸點開關,在電路中主要起開關和增大電流的作用。
NPN基極高于發(fā)射極電壓是導通,PNP發(fā)射極電壓高于基極電壓則導通。
NPN高電平時導通,PNP低電平時導通;
以共陽極4位數(shù)碼管為例,共陰極感覺電路復雜繁瑣,直接用專用IC驅(qū)動就好
PNP例子代碼用自學單片機04里面的代碼即可,NPN里面有
注意:唯一的區(qū)別【使用PNP三極管,基極為低電平時,才導通】
NPN三極管基極為高電平導通
3.使用專用IC提高驅(qū)動能力(74HC245)
74hc245是一種在單片機系統(tǒng)中常用的驅(qū)動器,在電路中的作用是:增加io口的驅(qū)動能力,比如說51單片機的io口本身的驅(qū)動電流較小但所帶的負載很大,這種時候就可以使用74hc245來增強io口的驅(qū)動能力
共陰極數(shù)碼管連接方式
共陰極數(shù)碼管代碼稍微改動下
1.顯示數(shù)字0-9的數(shù)組和共陽極不一樣不一樣
2.位碼低電平導通,位碼高電平截至沒有壓降
#include
#include "DelayXms.h"
#define led P2
const u8 a[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//共陰極數(shù)碼管0-9
sbit bitcode0 = P1^0;
sbit bitcode1 = P1^1;
sbit bitcode2 = P1^2;
sbit bitcode3 = P1^3;
void display(u16 number);
void main()
{
u16 count=0;
while(1){
count++;
display(count);
if(10000 ==count)
count = 0;
}
}
void display(u16 number)
{
led = a[number/1000];//千位
bitcode0 = 0; //位碼低電平導通
DelayXms(9);
bitcode0 = 1;//位碼高電平導通
led = a[(number/100)%10];//百位
bitcode1 = 0;//位碼低電平導通
DelayXms(9);
bitcode1 = 1;//位碼高電平導通
led = a[(number/10)%10];//十位
bitcode2 = 0;
DelayXms(9);
bitcode2 = 1;
led = a[number%10];//個位
bitcode3 = 0;
DelayXms(9);
bitcode3 = 1;
}
-
led
+關注
關注
242文章
23277瀏覽量
660893 -
三極管
+關注
關注
142文章
3611瀏覽量
121928 -
單片機
+關注
關注
6037文章
44558瀏覽量
635353 -
GPIO
+關注
關注
16文章
1204瀏覽量
52104 -
灌電流
+關注
關注
0文章
55瀏覽量
9172
發(fā)布評論請先 登錄
相關推薦
評論