如何提高单片机的GPIO口驱动能力

描述

单片机是控制器件而不是驱动器件,因为输出电流很小,不足以驱动某些需要大电流的外设。 单片机的GPIO口驱动能力有限,不能直接驱动较大功率的负载。

标准51的P0口(双向口)在作为I/O口使用时,是开漏结构,在实际应用中通常要添加上拉电阻(排阻)。 P1、P2、P3都是准双向I/O,内部有上拉电阻,既可作为输入又可以作为输出。

P0三态门有三个状态,即在其的输出端可以是高电平、低电平,同时还有一种就是高阻状态(或称为禁止状态)

恶补一些基础概念,稍微了解下,原理看不懂跳过...

1.灌电流方式

LED正极接VCC,负极接IO口。 IO为高电平是LED两极电平相同,没有电流,LED熄灭;IO为低电平时,电流从VCC流入IO,LED点亮。

但是当你把LED正极接在IO接口,负极接GND时,将IO接口置于高电平,LED会亮,但因为IO接口上拉能力不足而使亮度不理想

2.三极管驱动

三极管全称半导体三极管,也称晶体三极管,是一种控制电流的半导体器件其作用是把微弱的电信号放大成幅度值较大的电信号,也用作无触点开关,在电路中主要起开关和增大电流的作用。

led

NPN基极高于发射极电压是导通,PNP发射极电压高于基极电压则导通。

NPN高电平时导通,PNP低电平时导通;

以共阳极4位数码管为例,共阴极感觉电路复杂繁琐,直接用专用IC驱动就好

PNP例子代码用自学单片机04里面的代码即可,NPN里面有

注意:唯一的区别【使用PNP三极管,基极为低电平时,才导通】

NPN三极管基极为高电平导通

led

3.使用专用IC提高驱动能力(74HC245)

74hc245是一种在单片机系统中常用的驱动器,在电路中的作用是:增加io口的驱动能力,比如说51单片机的io口本身的驱动电流较小但所带的负载很大,这种时候就可以使用74hc245来增强io口的驱动能力

共阴极数码管连接方式

led

共阴极数码管代码稍微改动下

1.显示数字0-9的数组和共阳极不一样不一样

2.位码低电平导通,位码高电平截至没有压降

#include 
#include "DelayXms.h"
#define led P2

const u8 a[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//共阴极数码管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;
}
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分