快捷搜索:  汽车  科技

led调试全过程(硬件编程精粹玩转LED)

led调试全过程(硬件编程精粹玩转LED)/*将连接LED阴极的P1.0口定义为特殊功能寄存器的位变量,方便位操作。*/#include <reg51.h> 【程序】为使描述清晰,动机或启发式解释使用多行注释符(/* */),放在预写代码的上方,而普通解释使用单行注释符(//)。/*程序功能:LED闪烁。*//*实现方法:LED按设定的时间间隔点亮、熄灭。*/

【任务】LED的发光颜色可以表示各种警示状态,而灯的闪烁亦然。试编写使一盏LED闪烁的程序。

【硬件平台】继承前篇《硬件编程精粹·玩转LED(一)》的最小系统:

led调试全过程(硬件编程精粹玩转LED)(1)

AT89C51最小系统

说明:1. C1、C2称为晶振X1的负载电容,它们与晶振X1一起构成单片机的外部谐振电路,这两个电容之所以取22pF,是根据12M晶振的生产厂家的数据手册而选择的;

  1. VCC默认 5V,允许误差为±0.5V,即4.5~5.5V;
  2. 系统上电瞬间,电容C3瞬态短路,VCC瞬时加到复位脚RST(上电高电平复位),经过2个机器周期(24个振荡周期)后单片机复位。使用12M晶振时,1个机器周期=12/12M=1us,所以复位时间至少为2us。假定R1=10k(最常用,所以最容易想到的阻值),那么R1C3≥2us,C3≥2/1000)=2nF,为了可靠复位(不打擦边球),我使用了较大的电容C3=10uF;
  3. 当P1.0口拉低时(相当于口寄存器写入0),lLED被点亮。假定LED工作电流为3mA,工作电压为2V,那么R2=(5-2)/3=1k。

【程序】为使描述清晰,动机或启发式解释使用多行注释符(/* */),放在预写代码的上方,而普通解释使用单行注释符(//)。

/*程序功能:LED闪烁。*/

/*实现方法:LED按设定的时间间隔点亮、熄灭。*/

#include <reg51.h>

/*将连接LED阴极的P1.0口定义为特殊功能寄存器的位变量,方便位操作。*/

sbit LED = P1^0;

/*打字偷懒定义两个简写宏定义*/

#define uint unsigned int //无符号整型

#define uchar unsigned char //无符号字符型

/*延时函数*/

void delay(uint x)

{

uchar i;

while(x--) //从x(正整数)的递减外循环

{

for(i=0;i<200;i ); //从0到200(不含200)的递增内循环

}

}

/*主程序*/

void main()

{

while(1) //上电后永不停止的大循环

{

LED = ~LED; //P1.0口电平取反

delay(500); //根据硬件平台确定延时,这里试用500

}

}

上面的代码在keil c51中编译链接后生成hex文件,烧写进单片机,系统上电便使LED闪烁。

代码截图如下:

led调试全过程(硬件编程精粹玩转LED)(2)

led调试全过程(硬件编程精粹玩转LED)(3)

猜您喜欢: