1. LED闪烁控制
任务说明
本案例要求编写单片机程序,控制连接在GPIO引脚上的LED以固定频率闪烁(例如亮200ms、灭200ms),从而掌握GPIO输出模式配置与延时函数的使用方法。以STC89C52单片机(兼容8051内核)和Keil C51开发环境为例进行实现。
硬件连接
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秒,即认为本案例实现成功。