一、硬件电路
LED闪烁外围硬件电路如图1所示,J10为1K的排阻。LED连接到单片机的P0口。
当P0口某位为高电平时,LED灭。
当P0口某位为低电平时,LED亮。
图1:LED闪烁硬件电路
二、电路参数设计
我们单独来分析一个LED电路。如图2所示,假定LED发光时的电压为1.5V,那么:
5 - 1.5 =470 * I
I = 0.0074A
为3.5毫安,我们设计该值也是为了提高LED 寿命。
这里:我们简单解释一下单片机的IO“输入与输出”
输入:单片机IO 作为采集外部信号,在单片机内部处理,现在很多单片机都有高阻或者开漏状态用做输入。
输出:单片机为外界提供信号和电流。这里包括灌电流和拉电流。
灌电流:IO输出“0”时允许灌入该IO口的电流。
拉电流:IO输出“1”时允许输出该IO口的电流。
所以,不要以电流的方向来理解输入和输出,这个是初学者很容易理解错的。
图2:单个LED硬件电路
三、单片机程序设计
作为单片机的指令的执行的时间是很短,数量为微秒级。因此,我们要求的闪烁时间间隔为 0.2 秒,相对于微秒来说,相差太大,所以我们在
执行某一指令时,插入延时程序,来达到我们的要求。下面为Delay()源程序代码。
/********************************************************************
* 名称 : Delay()
* 功能 : 延时,延时时间为 10ms * del。这是通过软件延时,有一定误差。
* 输入 : del
* 输出 : 无
***********************************************************************/
void Delay(uint del)
{
uint i,j;
for(i=0; i<del; i++)
for(j=0; j<1827; j++) //这个是通过软件仿真得出的数
;
}
这个就是我们用KEIL软件仿真得出的10 毫秒的延时程序。
程序设计之前简单做个LED流水灯的流程图。见图3。
图3:LED闪烁流程图
根据流程图,写出主函数如下:
配套试验程序一中部分程序。
void Main(void)
{
while(1)
{
Show_LED = 0;
Delay(20); //Delay(del)中的数为延时的时间参数,延时时间为 10ms *
del.
Show_LED = 1;
Delay(20);
}
}