1. LED闪烁控制

LED闪烁控制 学习卡片

任务说明

本案例要求编写单片机程序,控制连接在GPIO引脚上的LED以固定频率闪烁(例如亮200ms、灭200ms),从而掌握GPIO输出模式配置与延时函数的使用方法。以STC89C52单片机(兼容8051内核)和Keil C51开发环境为例进行实现。

硬件连接

STC89C52 DIP-40 P1.0 330Ω LED GND 12MHz 晶振 LED 闪烁控制电路 P1.0 → 电阻 → LED → GND

LED阳极通过330Ω限流电阻连接至单片机P1.0引脚,阴极接地。当P1.0输出高电平时LED点亮,输出低电平时LED熄灭。

代码实现


#include <reg52.h>

sbit LED = P1^0;    // 定义LED连接到P1.0

/* 简单延时函数:约延时1ms(12MHz晶振,12T模式) */
void delay_ms(unsigned int ms)
{
    unsigned int i, j;
    for (i = 0; i < ms; i++)
        for (j = 0; j < 120; j++);
}

void main(void)
{
    while (1)
    {
        LED = 1;            // 点亮LED
        delay_ms(200);      // 延时200ms
        LED = 0;            // 熄灭LED
        delay_ms(200);      // 延时200ms
    }
}

代码说明

程序首先通过sbit将P1.0引脚定义为变量LED。主循环中先将LED置高点亮,调用delay_ms(200)延时约200ms,再将LED置低熄灭,再次延时200ms,如此循环实现周期为400ms的闪烁。延时函数采用嵌套循环实现,在12MHz晶振、12T模式下内层循环约执行120次对应约1ms,外层循环控制总延时毫秒数。

编译与烧录

在Keil C51中新建工程,选择Atmel AT89C52或STC89C52RC作为目标芯片,将上述代码保存为main.c并加入工程。设置Output选项卡勾选"Create HEX File",编译生成HEX文件。使用STC-ISP烧录软件,选择对应单片机型号和串口,将生成的HEX文件下载到单片机中。

验证方法

烧录完成后,给单片机系统上电,观察LED是否以约2.5Hz的频率(每400ms一个周期)持续闪烁。若LED常亮或常灭,检查LED极性、限流电阻连接以及P1.0引脚是否虚焊。若闪烁频率明显异常,检查晶振频率和延时函数参数是否匹配。判定标准:LED以肉眼可见的固定节奏持续亮灭交替,周期约为0.4秒,即认为本案例实现成功。