PIC单片机长按按键抖动处理与功能控制
需积分: 21 122 浏览量
更新于2024-09-04
收藏 15KB TXT 举报
本文档主要介绍了如何在基于PIC单片机的系统中处理按键输入,实现按键的长按、短按以及去抖动功能,同时配合数码管进行数字显示和蜂鸣器声音控制。以下将详细介绍相关知识点:
1. **按键处理**:
- 使用三个独立的按键输入引脚(key_sr1RC0、key_sr2RC1、key_sr3RC2)来检测按键状态。
- 定义了三个按键锁定标志(key_lock1, key_lock2, key_lock3)来防止按键误操作,当按键被按下并保持一段时间后,这些标志会被设置为1,表示按键已锁定。
2. **按键去抖动**:
- 使用三个延时计数器(delay_Cnt1, delay_Cnt2, delay_Cnt3)来减少按键抖动的影响,即在按键被按下时连续快速点击的情况。当按键按下和释放之间的间隔超过预设的时间(如(cnt_delay_cnt15)定时器周期),才视为有效按键事件。
3. **短按和长按判断**:
- 定义了两个短按触发标志(ucShortTouchFlag1, ucShortTouchFlag2),当按键被短暂按下并在设定时间内再次释放,这些标志会置1,表示触发了短按事件。
- 对于长按,文档没有直接定义一个特定的按键保持时间,但通过延迟计数器的比较可以间接实现长按逻辑,例如当按键按下并保持超过一定次数(ucKeySec变量可能与此有关)或达到某个固定时间(如(cnt_voice_time150)毫秒)时,可以判定为长按。
4. **数字显示与控制**:
- 数字显示部分使用了两个8位数码管,分别存储数据在number_left和number_right变量中。number_set变量用于临时存储按键输入后的数值,然后更新数码管显示。
- 数码管的驱动函数(未给出具体实现)会根据number_left和number_right的值更新相应的段驱动信号。
5. **蜂鸣器控制**:
- 蜂鸣器的控制通过beep_drRA2引脚实现,声音的长短由voice_time_cnt变量控制,该变量记录了声音播放的总时间,可能是通过定时器中断或其他方式来调整声音持续时间。
6. **初始化函数**:
- 文档提供了几个初始化函数,如initial_myself()和initial_595(),它们可能分别负责单片机和外部接口(如595串行移位寄存器)的初始化设置。
7. **全局变量和定时器**:
- cnt_voice_time150, cnt_delay_cnt15, cnt_delay_long100等常量用于设定不同延时时间,表明代码中可能使用了定时器进行精确的时间测量。
- unsigned int类型的变量delay_Cnt1, delay_Cnt2, delay_Cnt3用于记录按键延时计数,可能关联到定时器或中断处理。
总结来说,该代码主要关注按键输入的精确处理、数字显示的更新以及简单的音频反馈,通过精心设计的延时机制和标志位系统,实现了对按键行为的灵活响应。
2013-03-30 上传
2023-06-02 上传
2023-11-08 上传
2023-03-23 上传
2023-06-06 上传
2023-05-25 上传
2023-06-06 上传
2023-05-26 上传
qq_42008562
- 粉丝: 0
- 资源: 3
最新资源
- C++多态实现机制详解:虚函数与早期绑定
- Java多线程与异常处理详解
- 校园导游系统:无向图实现最短路径探索
- SQL2005彻底删除指南:避免重装失败
- GTD时间管理法:提升效率与组织生活的关键
- Python进制转换全攻略:从10进制到16进制
- 商丘物流业区位优势探究:发展战略与机遇
- C语言实训:简单计算器程序设计
- Oracle SQL命令大全:用户管理、权限操作与查询
- Struts2配置详解与示例
- C#编程规范与最佳实践
- C语言面试常见问题解析
- 超声波测距技术详解:电路与程序设计
- 反激开关电源设计:UC3844与TL431优化稳压
- Cisco路由器配置全攻略
- SQLServer 2005 CTE递归教程:创建员工层级结构