点亮LED灯
一、新建工程 → 准备“控制工具”
你可以把「新建工程」理解为:准备一个“智能遥控器”。
- 就像你买了新电视,得先给遥控器装电池、配对电视一样,新建工程是给单片机“装系统”——告诉它:“你要控制的是STC89C52RC这款单片机,接下来听我指挥!”
二、LED原理图 → 电路像“水管+水龙头”
LED的电路逻辑,就像家里的水管和水龙头:
- LED = 水龙头(水流出就亮,不流就灭)。
- VCC(电源) = 自来水厂(提供“电流”水源)。
- P1口(单片机引脚) = 你家的总水阀(控制水流开关)。
- 限流电阻 = 水管上的“减压阀”(防止水流太大烧坏水龙头)。
点亮LED的逻辑:
当你把总水阀(P1口)打开(输出低电平0),水流(电流)从自来水厂(VCC)→ 水龙头(LED)→ 总水阀(P1口)→ 下水道(GND),水龙头就亮了!
如果总水阀关闭(输出高电平1),水流断了,LED就灭了。
三、程序编写 → 给遥控器“写指令”
代码就像你给遥控器发的语音指令,比如:“一直开着客厅的灯!”
#include <REGX52.H> // 给遥控器“配对说明书”:告诉它怎么控制单片机的各个按钮(引脚)
void main() { // 你拿起遥控器,准备发指令
while(1) { // 一直重复这个指令(就像你说“一直开着灯,别关!”)
P1 = 0x55; // 按下遥控器按钮:“打开P1.0、P1.2、P1.4、P1.6这几个水龙头!”
}
}
- 二进制与十六进制对应:
例如,P1=0x55对应二进制0101 0101,表示P1.0、P1.2、P1.4、P1.6为低电平(亮),其余为高电平(灭)。 - 常见误区:若实际LED排列顺序与代码逻辑相反(如代码中
P1.0对应最右边LED,但硬件上P1.0对应最左边),需调整十六进制数值(如0xAA对应1010 1010)。
四、流水灯 → 让水龙头“依次开关”
流水灯就像你家的“走廊灯自动切换”:进门时客厅灯亮,走两步走廊灯亮、客厅灯灭,再走两步卧室灯亮、走廊灯灭……
方法1:直接喊指令(简单但麻烦)
你对着遥控器喊:“先开客厅灯!等1秒!再开走廊灯!等1秒!再开卧室灯……”
对应代码:
P1 = 0xFE; Delay1ms(100); // 开客厅灯(P1.0),等100ms
P1 = 0xFD; Delay1ms(100); // 开走廊灯(P1.1),等100ms
P1 = 0xFB; Delay1ms(100); // 开卧室灯(P1.2),等100ms
方法2:用“自动切换按钮”(高效)
遥控器上有个“自动切换”按钮,按一下就自动依次开灯——对应代码里的位移函数:
ucLed = _crol_(ucLed, 1); // 按一下“左移按钮”,客厅灯→走廊灯→卧室灯……依次切换
五、烧录程序 → 把指令“输入遥控器”
烧录程序就像给遥控器“录入语音指令”:
- 你对着遥控器说:“按我刚才写的清单开灯!” 遥控器把这句话存下来,之后就一直按这个指令执行。
- 对应操作:把编译好的
.hex文件(你的指令)通过USB线“输入”单片机(遥控器),单片机就记住了怎么控制LED(水龙头)。
总结:一句话理解单片机控制LED
你(程序员)→ 写指令(代码)→ 装到遥控器(单片机)→ 遥控器控制水龙头(LED)开关 → 实现流水灯!


