项目介绍
基于 EV41C56A 开发板,实现板载触摸按键与 LED 联动控制:完成触摸通道精准初始化,保证触摸检测稳定无误差;核心逻辑为单次触摸点亮板载 LED,再次触摸熄灭 LED,严格控制触发逻辑,杜绝误触、乱触发问题,实现按键与 LED 的可靠交替控制。
硬件介绍
本次任务使用平台PIC32CM LS00 Curiosity Nano 触摸评估套件,使用PIC32CM5164LS00048 单片机。搭载 ARM Cortex-M23 内核,具备高安全性与超低功耗特性,原生集成触摸检测功能,硬件资源完善,可便捷开展触摸按键、LED 联动等功能开发与性能评估。
方案框图和项目设计思路介绍
设计思路介绍
本项目基于 PIC32CM LS00 Curiosity Nano 评估套件开发,依托板载触摸按键与 LED 硬件,实现可靠的触摸亮灭灯控制。设计核心为:先完成微控制器时钟、GPIO 及触摸通道初始化,配置触摸检测参数并校准,确保检测稳定;主循环实时扫描触摸按键状态,通过状态翻转逻辑记录触发次数,实现单次触摸点亮 LED、再次触摸熄灭 LED 的交替控制,全程通过软件消抖与状态判断规避误触发,保障功能稳定可靠。
方案框图

调试软件介绍
本项目采用MPLAB X IDE作为核心开发软件,它是 Microchip 官方推出的跨平台集成开发环境,全面支持 PIC、SAM 等全系单片机,可完成代码编写、工程管理、程序编译、烧录下载、在线仿真与断点调试等全流程工作。该软件对本次使用的 PIC32CM5164LS00048 单片机兼容性极佳,调试功能完善,能快速排查程序运行问题,保障开发进度。
项目同时使用 IDE 内置的MCC 代码配置器,这是一款图形化外设配置工具。借助 MCC,无需手动编写复杂底层寄存器代码,通过可视化界面就能快速配置系统时钟、GPIO 引脚、触摸检测模块等硬件资源,自动生成标准化底层驱动代码。不仅大幅降低了外设初始化的开发难度,减少手写代码带来的漏洞,也让触摸通道、LED 引脚的配置更加直观高效,配合 MPLAB X IDE 的编译调试能力,整体提升了项目开发效率与代码稳定性。
软件流程图

关键代码介绍
代码底层的驱动主要使用MCC工具来进行生成的,具体操作步骤请见视频 。以下是部分代码的讲解
/* 初始化代码, 使用MCC工具生成 */
/**
* @brief 系统初始化函数
* @param data 预留参数指针(当前未使用,通常为NULL)
* @note 该函数由MCC工具自动生成,调用顺序至关重要
*/
void SYS_Initialize(void* data)
{
// ========== 1. 功耗管理初始化 ==========
PM_Initialize();
// ========== 2. NVM控制器控制寄存器配置 ==========
NVMCTRL_SEC_REGS->NVMCTRL_CTRLB = NVMCTRL_CTRLB_RWS(2);
// ========== 3. I/O端口初始化 ==========
PORT_Initialize();
// ========== 4. 时钟系统初始化 ==========
CLOCK_Initialize();
// ========== 5. NVM控制器完整初始化 ==========
NVMCTRL_Initialize();
// ========== 6. 事件系统初始化 ==========
EVSYS_Initialize();
// ========== 7. RTC初始化 一定要在touch_init之前==========
RTC_Initialize();
// ========== 8. 触摸感应初始化 ==========
touch_init();
// ========== 9. 嵌套向量中断控制器初始化 ==========
NVIC_Initialize();
}
/* 循环执行代码详解 */
while (true)
{
// 1. 触摸信号处理
touch_process();
// 2. 读取当前触摸状态(只取最高位)
uint8_t current_state = (get_sensor_state(0) & 0x80) ? 1 : 0;
// 3. 软件去抖动处理(防误触发)
if (current_state != last_key_state)
{
// 状态变化,开始去抖动计数
debounce_counter++;
if (debounce_counter >= 3) // 连续3次(约30-50ms)状态稳定
{
// 确认状态稳定,更新上次状态
last_key_state = current_state;
// 4. 边沿检测:仅在触摸按下的瞬间触发(上升沿)
if (current_state == 1) // 从释放变为触摸
{
LED_Toggle(); // 翻转LED状态
}
debounce_counter = 0; // 重置计数器
}
}
else
{
// 状态未变化,重置计数器
debounce_counter = 0;
}
}
功能展示图及说明
说明:将代码使用IDE烧录到板卡上即可实现,触摸按键控制LED灯的反转

项目中遇到的难题及解决方法
1、这个项目开发中的难题主要来源于网络的环境,会导致MCC工具持续的报错不能使用,解决办法也很简单必要的时候可以使用一些魔法。
2、在使用MPLAB X IDE中MCC生成触摸部分初始化时要先将RTC初始化完成再去执行touch_init否则无法获取触摸的状态
3、在创建项目时会生成两个项目,一定要在安全的项目下进行代码的编写
心得体会
通过本次触摸按键控制 LED 项目,我熟练掌握了 PIC32CM 系列单片机的开发流程,学会运用 MPLAB X IDE 与 MCC 工具完成硬件配置与代码开发。项目让我理解了触摸检测原理与消抖逻辑设计,提升了硬件调试与问题排查能力,深刻体会到合理初始化、严谨软件逻辑对实现稳定可靠功能的重要性。