I/O输出——
实例1:LED点亮-入门版
一、实例目的
通过本实例,我们应:
1. 了解发光二极管(LED)驱动电路的原理;
2. 掌握单片机I/O控制LED的程序设计;
3. 掌握C51程序的结构;
4. 会编写软件延时函数。
提示:本实例属于入门级,初学者应该熟练掌握,即在学完本课程后,不看资料就能画出电路图和编写出程序并验证。
二、LED驱动原理
点亮LED通常是单片机初学者的第一个程序,如同学习C语言的第一个程序永远是打印“Hello World”一样,亘古不变。
要点亮一个LED,需要用到单片机的IO输出口,输出一个高电平(数字1)或低电平(数字0),至于是高电平还是低电平,这取决于LED驱动电路。LED驱动电路通常有两种,如图1所示。图中,R为限流电阻。

图1 LED驱动电路
- 方式1: LED的负极接MCU的输出I/O,正极通过一个限流电阻接到电源VCC。LED驱动电流Id由电源VCC提供,流向MCU内部,称为灌电流。 控制I/O输出低电平时,LED正向导通,LED点亮;控制I/O输出高电平时,LED反向截止,LED熄灭。方式1对MCU的I/O电流驱动能力要求低。
- 方式2: LED的正极接MCU的输出/O,负极通过一个限流电阻接到地GND。LED驱动电流由MCU提供。 控制I/O输出高电平时,LED正向导通,LED点亮;控制I/O输出低电平时,LED截止,LED熄灭。方式2要求MCU的I/O具有mA级的电流输出能力。
发光LED的正向导通电压一般在2.0V上下,不同材质和颜色的导通电压不同。LED的工作电流一般为mA级别(10~20mA),电流越大LED越亮。限流电阻R计算公式如下:
R = (VCC-Ud)/Id
取Ud=2.0V, VCC=5V, Id=10mA,代入公式得:R=300Ω。通常限流电阻为几百欧,过大则可能达不到导通电压,无法点亮LED,过小LED工作电流大,可能烧掉LED,或影响寿命。
注意,51单片机的I/O驱动能力只有几百uA,采用方式2是无法直接点亮一个LED的。因此只能采取方式1来驱动LED。
三、LED驱动电路设计
假设通过8051单片机P1口驱动8只LED,P2.1管脚驱动一只LED。电路图如图2所示。

四、LED驱动程序设计
(一)编程实现D1~D4和D9点亮,D5~D8熄灭。
根据图2所示的电路,可知LED控制管脚输出低电平时,LED点亮;输出高电平时,LED熄灭。根据LED与I/O的连接关系,得到表1。
表1 LED与单片机I/O连接及驱动电平
LED
|
D9
|
D8
|