准备阶段:你需要什么?(5分钟)
-
硬件:
(图片来源网络,侵删)- 一块51单片机开发板(推荐带STC89C52或AT89S52芯片的,最常见,资料多)。
- 一根USB下载线(通常是CH340或PL2303芯片)。
- 一个LED灯(任何颜色)和一个330Ω电阻(用于限流,保护LED和单片机引脚)。
- 杜邦线若干。
-
软件:
- Keil C51 (μVision): 这是51单片机最经典、最主流的开发环境,你可以从官网下载评估版(有2K代码限制,足够我们学习)。
- STC-ISP: 这是由STC官方提供的下载工具,用于把你写好的程序烧录(下载)到单片机里,直接搜索“STC-ISP下载”就能找到官网下载。
第一部分:认识51单片机(10分钟)
想象一下,51单片机就是一个小小的“大脑”。
- 核心: 中央处理器,负责执行指令。
- 内存:
- ROM (程序存储器): 断电后不丢失,用来存放我们写的C程序代码。
- RAM (数据存储器): 断电后丢失,用来存放程序运行时临时产生的变量。
- I/O口 (输入/输出端口): 这是单片机与外界沟通的“手”和“脚”,我们就是通过这些“脚”来控制LED灯亮灭的,51单片机通常有4个8位的I/O口,记作 P0, P1, P2, P3。
我们的目标: 让单片机P1.0这个“脚”输出高电平,LED灭;输出低电平,LED亮。
第二部分:点亮一个LED - C语言实战(35分钟)
我们将分三步走:配置硬件 -> 编写代码 -> 下载运行。

(图片来源网络,侵删)
步骤1:硬件连接(5分钟)
按照下面的图示,把你的开发板和元件连接起来:
- 单片机P1.0引脚 --- 330Ω电阻 --- LED的长脚(阳极)
- LED的短脚(阴极) --- 开发板上的GND(接地)
简单理解: 当P1.0输出低电平(0V)时,电流从电源经过电阻和LED流到GND,形成回路,LED亮,当P1.0输出高电平(5V)时,LED两端电压差为0,不亮。
步骤2:编写C代码(25分钟)
打开Keil C51软件,创建一个新的工程,然后新建一个C文件(main.c),把下面的代码复制进去。
// 包含51单片机寄存器定义的头文件
#include <reg52.h>
// 主函数,程序从这里开始执行
void main(void)
{
// 1. 配置P1.0为输出模式
// 在51单片机中,一个端口有8个引脚,P1是特殊功能寄存器SFR
// 我们要操作P1.0,所以先读取整个P1端口的当前值,然后修改第0位,再写回去
// P1 = P1 & 0xFE; // 这是一种方法,FE的二进制是11111110,与操作后,P1.0被强制置0
// 更简单、更常用的方法是使用位定义
sbit LED = P1^0; // 定义一个名为LED的变量,它代表P1.0这个引脚
// 2. 让LED亮
// 给LED变量赋值0,就是让P1.0输出低电平
LED = 0;
// 3. 程序停止在这里,保持LED常亮
// 如果没有这行,程序会继续向下执行,可能会出问题
while(1)
{
// while(1) 是一个死循环,让程序永远停在这里
// 如果你想让LED闪烁,可以在这里写延时和翻转逻辑
}
}
代码解释:

(图片来源网络,侵删)
#include <reg52.h>:这是必须的!它定义了51单片机所有特殊功能寄存器(比如P0, P1, P2, P3等)的地址,没有它,你写的P1^0就没有意义。void main(void):这是C程序的入口,程序启动后会首先执行这里的代码。sbit LED = P1^0;:这是51单片机C语言特有的语法。sbit用来定义一个“位”变量。LED = P1^0;的意思是,我们创建了一个名为LED的别名,以后操作LED就等同于操作P1.0这个引脚,非常直观。LED = 0;:给LED赋值0,就是让P1.0输出低电平,LED灯亮。while(1):这是一个无限循环,单片机程序一旦运行,就不能停止。while(1)就起到了让程序“卡住”的作用,防止它跑飞,我们后续的闪烁、读取按键等逻辑都会放在这个循环里。
步骤3:编译和下载(5分钟)
- 编译: 在Keil中点击“构建”按钮(一个锤子图标),如果代码没有错误,下方会提示 "0 Error(s), 0 Warning(s)",并在你的工程目录下生成一个
.hex文件,这就是单片机能读懂的机器码。 - 下载:
- 打开你下载好的 STC-ISP 软件。
- 点击“打开文件”,找到刚才生成的
.hex文件。 - 选择正确的单片机型号(比如STC89C52RC)。
- 点击“下载/编程”按钮。
- 关键一步: 点击下载后,立刻按下开发板上的“电源”或“复位”按钮。
- 如果一切顺利,STC-ISP会提示“完成”,你的开发板上的LED灯就会亮起!
第三部分:进阶与总结(5分钟)
恭喜!你已经成功让51单片机执行了你的第一个指令!现在我们稍微修改一下代码,让LED灯闪烁起来,这会让你更有成就感。
#include <reg52.h>
// 定义一个简单的延时函数(不精确,但够用)
void delay(unsigned int time)
{
unsigned int i, j;
for(i = 0; i < time; i++)
for(j = 0; j < 120; j++);
}
sbit LED = P1^0;
void main(void)
{
while(1) // 进入无限循环
{
LED = 0; // LED亮
delay(500); // 延时一段时间
LED = 1; // LED灭 (P1口默认是高电平,也可以不写,但写上更清晰)
delay(500); // 延时一段时间
}
}
修改后的代码解释:
- 我们创建了一个
delay函数,通过一个简单的空循环来消耗时间,实现延时效果。 - 在
main函数的while(1)循环里,我们交替执行LED = 0(亮) 和LED = 1(灭),并在中间调用delay函数,这样LED就会闪烁起来。
一小时总结
-
你学会了什么?
- 知道了51单片机开发需要哪些基本软硬件。
- 理解了51单片机I/O口的基本概念。
- 掌握了点亮LED灯的硬件连接方法。
- 最重要的一点: 写出了你的第一段51单片机C代码,并成功编译和下载到硬件中看到了效果。
- 通过修改代码,实现了LED闪烁,理解了程序循环和延时的基本用法。
-
接下来去哪里?
- 改变连接: 尝试把LED接到P1.1, P1.2等其他引脚,修改代码看看效果。
- 控制多个LED: 尝试同时控制8个LED,做出流水灯效果。
- 学习定时器:
delay函数很粗略,学习51单片机的定时器,可以实现更精确的延时和定时任务。 - 学习中断: 了解中断,让单片机能够“响应”外部事件,比如按键按下。
一小时的时间很短,但这已经为你打开了一扇通往嵌入式世界的大门,保持好奇心,多动手,你很快就能掌握更多有趣的功能!
