1. LED闪烁控制
任务目标
控制单片机GPIO引脚输出高低电平,驱动LED以约1Hz频率(亮500ms、灭500ms)循环闪烁。通过本案例掌握GPIO输出模式配置与延时函数的编写方法。
硬件连接
- LED正极串联220Ω限流电阻接单片机P1.0引脚
- LED负极接GND(低电平点亮)
- 晶振频率:12MHz(便于定时计算)
完整代码(Keil C51)
#include <reg51.h>
sbit LED = P1^0; // 定义LED控制引脚
/* 软件延时函数:约延时xms(12MHz晶振) */
void delay_ms(unsigned int x)
{
unsigned int i, j;
for(i = 0; i < x; i++)
for(j = 0; j < 125; j++); // 内层循环约8μs,125次约1ms
}
void main(void)
{
while(1)
{
LED = 0; // 输出低电平,LED点亮
delay_ms(500); // 延时500ms
LED = 1; // 输出高电平,LED熄灭
delay_ms(500); // 延时500ms
}
}
编译与烧录
- 在Keil中新建工程,选择对应单片机型号(如AT89C51),将上述代码保存为
main.c并加入工程。 - 工程配置中勾选"Create HEX File",编译生成
.hex文件。 - 使用STC-ISP或ProgISP等烧录工具,将HEX文件下载到单片机。
验证方法
给单片机通电后,观察LED是否以约1Hz频率闪烁(每秒亮灭各一次)。若LED常亮或常灭,检查LED极性连接及限流电阻是否接在P1.0与LED之间;若闪烁频率明显偏差,检查晶振频率与延时参数是否匹配。
关键说明
本案例使用软件循环延时,延时精度受晶振频率和编译器优化影响。实际工程中若需精确定时,应改用定时器中断方式(后续案例覆盖)。P1.0在单片机复位后默认高电平,因此LED初始为熄灭状态,程序运行后开始闪烁。