内容介绍
内容介绍
一、项目介绍
1.1 项目功能简介
本项目基于 Microchip EV41C56A 开发板,实现触摸按键控制板载 LED 的人机交互系统。通过板载触摸传感器识别用户操作,支持两种触摸手势:单击和长按,分别实现 LED 状态翻转和亮度调节功能。
1.2 硬件介绍
硬件组件 | 描述 |
|---|---|
开发板 | Microchip EV41C56A (ATSAML11E16A) |
触摸传感器 | 板载电容式触摸按键 (QTouch) |
LED | 板载 LED 指示灯 |
定时器 | TC0 定时器用于 PWM 亮度控制 |
系统时钟 | SYSTICK 定时器提供 1ms 时间基准 |

1.3 功能概览
功能 | 触发方式 | 实现效果 |
|---|---|---|
LED 亮灭翻转 | 单击触摸按键 | 切换 LED 开/关状态 |
LED 亮度调节 | 长按触摸按键 | 循环调节亮度(由亮转暗再由暗转亮) |
1.4 设计思路
采用有限状态机 (FSM) 设计触摸检测逻辑,核心思路如下:
- 去抖动处理:通过连续检测确认有效触摸,避免误触发
- 时间阈值判断:区分单击(< 长按阈值)和长按(≥ 长按阈值)
- PWM 亮度控制:利用定时器比较匹配功能实现 LED 亮度调节
- 状态管理:使用全局变量记录 LED 状态和亮度等级
二、功能实现
2.1 软件流程图

2.2 实现过程
2.2.1 状态机设计
typedef enum {
TOUCH_STATE_IDLE, // 空闲状态
TOUCH_STATE_DEBOUNCE, // 去抖动状态
TOUCH_STATE_PRESSED // 已按下状态
} TouchState;
2.2.2 MCC关键配置
- 首先是全部模块配置,本次项目需要用到 TC、Touch 和 SERCOM 三个关键组件。

- SERCOM 配置,用于调试日志的串口打印。

- TC 配置,用于控制LED灯亮度与开关。

- Touch 触摸按键的配置

- 最终的Pin Configuration

2.2.3 核心参数配置
参数 | 定义 | 值 | 说明 |
|---|---|---|---|
| 长按阈值 | 180 | 约 180ms(1ms × 180) |
| 去抖动计数 | 3 | 连续3次检测确认有效 |
| 亮度步进值 | 30 | 每次长按调节的亮度增量 |
| PWM 周期最大值 | TC0 周期寄存器值 | 决定最大亮度 |
2.2.4 关键函数实现
触摸状态检测函数 (check_touch_status):
- 空闲状态:检测到触摸时记录时间戳,进入去抖动状态
- 去抖动状态:连续检测到触摸达到阈值后进入按下状态
- 按下状态:持续触摸超过阈值则开始调节亮度,释放时判断单击/长按
LED 翻转函数 (led_toggle):
- 根据当前状态切换 LED 开/关
- 开启时恢复上次亮度值
亮度调节逻辑:
- 长按期间周期性更新
periodValue实现亮度渐变 - 达到边界时反转调节方向(亮→暗→亮循环)
三、功能展示
3.1 操作演示
操作 | 预期效果 | 串口输出 |
|---|---|---|
单击触摸按键 | LED 状态翻转(亮→灭 或 灭→亮) |
|
长按触摸按键 | LED 亮度渐变调节(循环) |
|
长按结束 | 保持当前亮度 |
|
3.2 典型场景
场景1:LED 点亮
用户单击 → LED 点亮 → 串口输出: "Single click detected!"
场景2:LED 熄灭
用户再次单击 → LED 熄灭 → 串口输出: "Single click detected!"

场景3:亮度调节
用户长按 → LED 亮度逐渐变化 → 串口持续输出: "Long press!"
用户释放 → 保持当前亮度 → 串口输出: "Long press detected!"

3.3 串口日志示例
System initialized! period: 0
Single click detected! // 单击点亮LED
Long press! // 长按开始调节
Long press!
Long press!
Long press detected! // 长按结束
Single click detected! // 单击熄灭LED
四、总结
4.1 项目完成情况
本项目成功实现了基于 EV41C56A 开发板的触摸控制 LED 功能:
- ✅ 触摸检测:实现稳定的电容式触摸按键检测,包含去抖动处理
- ✅ 手势识别:正确区分单击和长按两种手势
- ✅ LED 控制:单击翻转状态,长按调节亮度
- ✅ 亮度循环:长按调节时亮度由亮转暗再由暗转亮循环
4.2 遇到的问题
- 触摸无效,根据官方例程的配置步骤配置好触摸功能之后,烧录到开发板后点击触摸按键没有响应。经群友提醒发现需要在 Pin Configuration 中配置触摸引脚,另外还需要将
SYS_Initialize函数中RTC_Initialize();的调用放转在touch_init();函数之前。
4.3 技术要点
- 状态机设计:使用有限状态机管理触摸事件,逻辑清晰
- 时间基准:基于 SYSTICK 实现 1ms 精确定时
- PWM 控制:利用 TC0 定时器实现平滑的亮度调节
- 防抖处理:通过多次采样确认有效触摸,提高可靠性
4.4 扩展建议
- 多按键支持:扩展支持多个触摸按键,实现不同功能
- 触摸滑动:实现滑动手势,支持更多交互方式
- 状态指示:增加不同颜色 LED 或蜂鸣器反馈
- 参数配置:通过串口或按键动态调整阈值和步进参数
五、参考资料
软硬件
附件下载
Funpack5_2_secure.zip
MPLAB X 工程源码
团队介绍
业余电子爱好者
团队成员
鲜de芒果
评论
0 / 100
查看更多