Funpack5-2 - 基于PIC32CM5164LS00048实现触摸输入与LED控制
该项目使用了Microchip EV41C56A,实现了触摸点灯的设计,它的主要功能为:对按键进行触摸后灯亮,再次触摸灯灭。
标签
Funpack活动
Microchip EV41C56A
寒彬彬
更新2026-06-17
5

项目介绍

基于 EV41C56A 开发板,实现板载触摸按键与 LED 联动控制:完成触摸通道精准初始化,保证触摸检测稳定无误差;核心逻辑为单次触摸点亮板载 LED,再次触摸熄灭 LED,严格控制触发逻辑,杜绝误触、乱触发问题,实现按键与 LED 的可靠交替控制。

硬件介绍

本次任务使用平台PIC32CM LS00 Curiosity Nano 触摸评估套件,使用PIC32CM5164LS00048 单片机。搭载 ARM Cortex-M23 内核,具备高安全性与超低功耗特性,原生集成触摸检测功能,硬件资源完善,可便捷开展触摸按键、LED 联动等功能开发与性能评估。

方案框图和项目设计思路介绍

设计思路介绍

本项目基于 PIC32CM LS00 Curiosity Nano 评估套件开发,依托板载触摸按键与 LED 硬件,实现可靠的触摸亮灭灯控制。设计核心为:先完成微控制器时钟、GPIO 及触摸通道初始化,配置触摸检测参数并校准,确保检测稳定;主循环实时扫描触摸按键状态,通过状态翻转逻辑记录触发次数,实现单次触摸点亮 LED、再次触摸熄灭 LED 的交替控制,全程通过软件消抖与状态判断规避误触发,保障功能稳定可靠。

方案框图

image.png

调试软件介绍

本项目采用MPLAB X IDE作为核心开发软件,它是 Microchip 官方推出的跨平台集成开发环境,全面支持 PIC、SAM 等全系单片机,可完成代码编写、工程管理、程序编译、烧录下载、在线仿真与断点调试等全流程工作。该软件对本次使用的 PIC32CM5164LS00048 单片机兼容性极佳,调试功能完善,能快速排查程序运行问题,保障开发进度。

项目同时使用 IDE 内置的MCC 代码配置器,这是一款图形化外设配置工具。借助 MCC,无需手动编写复杂底层寄存器代码,通过可视化界面就能快速配置系统时钟、GPIO 引脚、触摸检测模块等硬件资源,自动生成标准化底层驱动代码。不仅大幅降低了外设初始化的开发难度,减少手写代码带来的漏洞,也让触摸通道、LED 引脚的配置更加直观高效,配合 MPLAB X IDE 的编译调试能力,整体提升了项目开发效率与代码稳定性。

软件流程图

图片.png



关键代码介绍

代码底层的驱动主要使用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灯的反转

图片.png


项目中遇到的难题及解决方法

1、这个项目开发中的难题主要来源于网络的环境,会导致MCC工具持续的报错不能使用,解决办法也很简单必要的时候可以使用一些魔法。

2、在使用MPLAB X IDE中MCC生成触摸部分初始化时要先将RTC初始化完成再去执行touch_init否则无法获取触摸的状态

3、在创建项目时会生成两个项目,一定要在安全的项目下进行代码的编写

心得体会

通过本次触摸按键控制 LED 项目,我熟练掌握了 PIC32CM 系列单片机的开发流程,学会运用 MPLAB X IDE 与 MCC 工具完成硬件配置与代码开发。项目让我理解了触摸检测原理与消抖逻辑设计,提升了硬件调试与问题排查能力,深刻体会到合理初始化、严谨软件逻辑对实现稳定可靠功能的重要性。

附件下载
LED.zip
团队介绍
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号