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
    }
}

编译与烧录

  1. 在Keil中新建工程,选择对应单片机型号(如AT89C51),将上述代码保存为main.c并加入工程。
  2. 工程配置中勾选"Create HEX File",编译生成.hex文件。
  3. 使用STC-ISP或ProgISP等烧录工具,将HEX文件下载到单片机。

验证方法

给单片机通电后,观察LED是否以约1Hz频率闪烁(每秒亮灭各一次)。若LED常亮或常灭,检查LED极性连接及限流电阻是否接在P1.0与LED之间;若闪烁频率明显偏差,检查晶振频率与延时参数是否匹配。

关键说明

本案例使用软件循环延时,延时精度受晶振频率和编译器优化影响。实际工程中若需精确定时,应改用定时器中断方式(后续案例覆盖)。P1.0在单片机复位后默认高电平,因此LED初始为熄灭状态,程序运行后开始闪烁。