第二周之第一讲笔记

点亮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.0P1.2P1.4P1.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)开关 → 实现流水灯!