Skip to content

4.4 LED 实验 ​

本节导读

API 学完了,动手!这一节我们把 LED 用起来:三个实验,由浅入深——

  1. 点亮 LED1(最简,验证 API 通路)
  2. LED1 闪烁(体验事件驱动的 Blink)
  3. 多灯组合(编号按位组合的实际应用)

原站本节内容已失效,本站按 GEC2530 开发板(对照底板原理图)与 SampleSwitch 工程重写。

实验前:接线与配置 ​

不用接线! GEC2530 开发板的 4 个 LED 已经焊在底板上(对照原理图 Sheet 8):

LED引脚点亮方式
LED1P1_0低电平点亮(330Ω 限流)
LED2P1_1低电平点亮
LED3P1_4低电平点亮
LED4P0_1低电平点亮

配置确认:SampleSwitch 工程默认已经定义了 HAL_LED=TRUE(在 hal_board_cfg.h 中),所以 LED 驱动会被初始化——直接能用。

生活类比:灯已装好、电已接通(HAL_LED=TRUE),你只需要学会"按开关"(调 API)。

实验一:点亮 LED1 ​

在应用层初始化函数 zclSampleSw_Init() 末尾添加:

c
void zclSampleSw_Init(byte task_id) {
    // ……原有初始化代码……

    // 点亮 LED1
    HalLedSet(HAL_LED_1, HAL_LED_MODE_ON);
}

编译下载运行:LED1 常亮。

代码解析:HalLedSet(HAL_LED_1, HAL_LED_MODE_ON) = "告诉 HAL:让 LED1 处于点亮状态"。底层会把 P1_0 拉低(低电平点亮),你不用管引脚电平——这就是 HAL 封装的意义。

实验二:LED1 闪烁(亮 0.5s 灭 0.5s) ​

把上一句换成:

c
void zclSampleSw_Init(byte task_id) {
    // ……原有初始化代码……

    // LED1 闪烁 10 次:周期 1000ms、亮 50%
    HalLedBlink(HAL_LED_1, 10, 50, 1000);
}

编译下载运行:LED1 以 1 秒为周期闪烁 10 次(亮 500ms → 灭 500ms),闪完停住。

参数值含义
numBlinks10闪 10 次
percent50每个周期亮 50%(500ms)
period1000周期 1000ms(1 秒)

想让它一直闪下去? 一个"偷懒"的小技巧——numBlinks 填 255 附近的数(例如 0xFF),或者直接在事件处理函数里用 3.3 节学过的"处理完再触发自己"套路,让闪烁状态持续更新。

想一想:为什么 HalLedBlink 不卡住 CPU?因为闪烁是 HAL 任务的 HAL_LED_BLINK_EVENT 事件驱动的(4.2 讲过)——HAL 每到一个时间点更新一次 LED 状态,其他任务照常运行。这就是"事件驱动"的价值。

实验三:多灯组合(跑马灯预热) ​

LED 编号是按位编码的,可以组合。让 LED1 和 LED2 同时闪烁,然后全部点亮:

c
void zclSampleSw_Init(byte task_id) {
    // ……原有初始化代码……

    // LED1 和 LED2 一起闪 5 次
    HalLedBlink(HAL_LED_1 | HAL_LED_2, 5, 50, 500);

    // 1 秒后全部点亮(示意,可配合定时器事件实现)
    HalLedSet(HAL_LED_1 | HAL_LED_2 | HAL_LED_3 | HAL_LED_4, HAL_LED_MODE_ON);
}

拆解 HAL_LED_1 | HAL_LED_2:0x01 | 0x02 = 0x03,传给 API 后,API 按位判断——"0x03 里有 0x01 和 0x02,所以 LED1、LED2 都要操作"。组合的秘诀就是按位或 |。

编译下载三步走 ​

  1. 编译:在 IAR 中右键工程名 → Rebuild All,确认输出 0 Error(s);

Rebuild All 编译工程

  1. 下载仿真:连接仿真器,单击 Download and Debug(Ctrl+D)下载并进入仿真;
  2. 运行:单击 Go(F5)运行,观察 LED 效果。

变式挑战(课后) ​

挑战提示
让 LED1 快闪、LED2 慢闪调 period:一个 200ms、一个 1000ms
让 4 个 LED 依次点亮HalLedSet + 定时器事件(3.3 节的套路)
按一下按键切换 LED 状态见第 5 章按键实验

小结 ​

实验代码效果
点亮HalLedSet(HAL_LED_1, HAL_LED_MODE_ON)LED1 常亮
闪烁HalLedBlink(HAL_LED_1, 10, 50, 1000)1s 周期闪 10 次
组合`HAL_LED_1HAL_LED_2`

一句话总结:LED 实验 = 三个 API 走天下(Set 点亮 / Blink 闪烁 / 按位组合多灯),配合"Rebuild All → Download and Debug → Go"三连,LED 就乖乖听你指挥了。下一步,让它听按键的指挥!


内容来源:紫甲 IoT《ZigBee 3.0 开发指南》第三部分·4.4 节(原站已失效),本站按 GEC2530 开发板与教学实践重写;原站链接

aioteer · 物联网专业课程群

💬AI 伴学配置