2. 按键控制LED
任务说明
本案例基于TI CC2530开发板,实现按键控制LED的基本输入输出功能:当按键按下时LED点亮,松开时LED熄灭。通过该案例掌握CC2530的GPIO方向寄存器(PxDIR)、端口输入寄存器(PxIN)和端口输出寄存器(PxOUT)的配置与使用方法。
硬件连接
本案例使用开发板上的独立按键S1和LED1,连接关系如下:
- LED1正极经限流电阻接P1_0引脚,负极接地——P1_0配置为输出模式,输出高电平点亮LED。
- 按键S1一端接P0_0引脚,另一端接地——P0_0配置为输入模式,内部上拉,按键按下时引脚读到低电平。
代码实现
创建文件 key_led.c,代码如下:
#include <ioCC2530.h>
#define LED1 P1_0
#define KEY P0_0
void delay(unsigned int ms)
{
unsigned int i, j;
for (i = 0; i < ms; i++)
for (j = 0; j < 535; j++);
}
void main(void)
{
// 配置P1_0为输出模式
P1SEL &= ~0x01; // P1_0作为通用IO
P1DIR |= 0x01; // P1_0方向为输出
// 配置P0_0为输入模式,带上拉
P0SEL &= ~0x01; // P0_0作为通用IO
P0DIR &= ~0x01; // P0_0方向为输入
P0INP &= ~0x01; // P0_0为上拉/下拉模式(由P2INP决定)
P2INP &= ~0x20; // P0组选择上拉
LED1 = 0; // 初始熄灭LED
while (1) {
if (KEY == 0) { // 按键按下(低电平有效)
delay(10); // 软件消抖
if (KEY == 0) { // 确认按下
LED1 = 1; // 点亮LED
}
} else {
LED1 = 0; // 松开熄灭
}
}
}
代码说明
- 引脚功能选择:P0SEL和P1SEL的对应位清零,将P0_0和P1_0配置为通用GPIO模式,而非外设功能。
- 方向配置:P1DIR第0位置1使P1_0为输出;P0DIR第0位清零使P0_0为输入。
- 上拉配置:P0INP第0位清零使P0_0受P2INP控制,P2INP第5位清零选择P0组上拉模式,保证按键未按下时读到高电平。
- 消抖处理:检测到按键按下后延时10ms再次确认,避免机械抖动导致的误触发。
编译与烧录
使用IAR Embedded Workbench for 8051创建工程,将上述代码加入工程,编译生成HEX文件。通过CC Debugger或SmartRF04EB仿真器连接开发板,使用SmartRF Flash Programmer将HEX文件烧录到CC2530芯片中。
验证方法
烧录完成后,开发板上电运行,按以下步骤验证:
- 观察LED1初始状态应为熄灭。
- 按下按键S1,LED1应立即点亮。
- 松开按键S1,LED1应立即熄灭。
- 快速连续按动按键,LED1应跟随按键状态同步亮灭,无异常闪烁。
判定标准:按键按下时LED点亮、松开时熄灭,且状态切换无延迟卡顿,即判定本案例功能实现正确。