上节我们学习了单片机连接发光二极管的电路,以及如何编程实现点灯。
在开始继续一灯的故事前,先让我们做个练习。
图1为一个发光二极管的驱动电路,请判断电路连接是否正确。
图1 LED驱动电路
电路分析(全选可见):
由图1可知。发光二极管D1的正极接VCC,负极通过一个220欧姆的限流电阻连接到单片机的P3.0引脚。
我们假设D1导通电压是2V,工作电流是10mA,VCC为5V,则算得限流电阻Rmax = (5V-2V)/10mA=300Ω。
图中R2为220Ω,满足要求。因此电路正确。
由正正的正,负负得正,单片机P3.0输出低电平,D1点亮; P3.0输出高电平,D1熄灭(不满足正向导通)。
本节,我们将让D1灯动起来,类似下面的手电筒,亮->灭->亮....
我们知道,P3.0输出低电平,D1亮;P3.0输出低电平,D1灭。 如果P3.0输出电平保持,则D1状态也会保持。
为此,得到程序核心算法如下:
P3.0输出低电平,点亮D1;
P3.0状态保持低电平一定时间。
P3.0输出高电平,熄灭D1。
P3.0状态保持高电平一定时间。
重复步骤1~4。
P3.0输出高电平和低电平很简单,如下:
sbit led = P3^0;
led = 1; //输出高电平
led = 0; //输出低电平
但如何能让P3.0保持电平状态呢?
境由心生。 记住,P3.0是输出端口,只要输出内容不变(1-高电平,0-低电平),则其输出电平将会保持。根据核心算法,大致代码如图2所示。
图2 大致代码
因此,要在10行和12行,使电平保持一段时间。还记得《
C51编程入门(四):延时函数
》,该它登场了。
延时函数用来消耗CPU的时间,即执行空语句(C51是空语句,但实际指令是循环、跳转),
使9行语句和11行语句没那么快执行,因此P3.0状态能保持。
图3 亮>灭>亮实现代码
代码分析:
第9行:led=0, P3.0输出低电平,点亮D1;
第10行:delayMS(1000); 延时1000毫秒,消耗CPU,P3.0维持低电平不变,D1保持亮。
第9行:led=1, P3.0输出高电平,熄灭D1;
第10行:delayMS(1000); 延时1000毫秒,消耗CPU,P3.0维持高电平不变,D1保持熄灭。
执行第10行后,由于while(1)循环,重新回到第9行执行。
注意,初学者容易忘记写第12行如下,结局就是led=1;执行后,P3.0仅仅保持了1-2us左右,肉眼难以分辨出来。
图4 错误代码-忘记了高电平也要保持
图5是图1和图3代码的Proteus仿真
图5 Proteus仿真
写到这里,好像我们已经实现了亮->灭->亮,但是,我们做事情应该是think smart, do more。
我们可以把亮->灭->亮用一个函数封装起来,如下。
#include "reg51.h"
sbit led = P3^0; //P3.0接口
void delayMS(unsigned int x); //delayMS函数声明
void led_flash();
void main()
{
while(1)
{
led_flash();
}
}
/****************************
函数:delayMS@12MHz
功能:ms级延时函数
参数: x:unsigned int, 延时时间,单位:ms
返回值:无
****************************/
void delayMS(unsigned int x) //delayMS函数实现
{
unsigned int i,j;
for(i=0;i
for(j=0;j
}
/****************************
函数:led_flash
功能:使P3.0连接的LED亮1s,灭1s
参数: 无
返回值:无
****************************/
void led_flash()
{
led = 0; //输出低电平,点亮D1
delayMS(1000);//保持低电平1s
led = 1; //输出高电平, 熄灭D1
delayMS(1000);//保持高电平1s
}
main函数看起来非常简洁。
到这,大功告成。 大家以后应该习惯定义函数,调用函数,不管是自己写的,还是别人写的(库函数)。
*********************************************************************************************************
本节主题还是一灯大师的故事,下面继续八卦一灯大师。
一灯大师,原名段智兴,又称南帝,是《天龙八部》段誉的孙子。
一灯大师本是皇帝,武痴,与周伯通、瑛姑、慈恩(裘千仞)之间存在恩恩怨怨,还与李莫愁有十年之约..
领取专属 10元无门槛券
私享最新 技术干货