zigbee学习:示例程序SampleApp中按键工作流程
zigbee学习:示例程序SampleApp中按键工作流程
本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明.
环境:
主机:WIN7
开发环境:IAR8.10.3
MCU:CC2530
示例程序:SampleApp
按键电路:
电路原理为利用ADC采集JOY_LEVEL脚电压,根据电压判断按键.
不同按键的电压值:
UP:0.1VCC
DN:0.38VCC
LT:0.54VCC
RT:0.60VCC
PUSH:0.7VCC
程序中利用8位分辨率,第一位为符号位,即7位分辨率分辨
程序中AD值表电压值
UP:2-380.02VCC-0.30VCC
DN:39-590.30VCC-0.46VCC
LT:60-730.47VCC-0.57VCC
RT:74-880.58VCC-0.69VCC
PUSH:89-1000.70VCC-0.78VCC
可见,程序检测与按键是能够匹配.
代码结构:
程序中按键检测机制为轮询机制,周期为100ms.
工作步骤:
1.main()函数中调用InitBoard()函数
2.此函数调用函数HalKeyConfig(HAL_KEY_INTERRUPT_DISABLE, OnBoard_KeyCallback)
3.此函数配置按键服务,如果是轮询机制,则调用函数osal_set_event(Hal_TaskID, HAL_KEY_EVENT),此函数启动按键事件,任务为Hal_TaskID
4.main()函数中调用硬件驱动初始化函数HalDriverInit()
5.此函数调用按键初始化函数HalKeyInit(),完成按键初始化
6.因为步骤3启动按键事件,所以进入Hal_TaskID处理函数Hal_ProcessEvent()
此函数中判断是否按键事件,如果是则处理:
HalKeyPoll(); /* if interrupt disabled, do next polling */ if (!Hal_KeyIntEnable) { osal_start_timerEx( Hal_TaskID, HAL_KEY_EVENT, 100); }
首先轮询按键,然后启动定时器,100ms后再度轮询
7.轮询函数中调用halGetJoyKeyInput()函数,此函数调用读取ADC函数adc = HalAdcRead (HAL_KEY_JOY_CHN, HAL_ADC_RESOLUTION_8),然后根据ADC判断按键
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)