这个比较简单,我的实现方式是把引脚设为INPUT并拉高,当钮按下时接地。
安排了一个五项导航按钮和四个按钮,使用PA7-15。都是PA的好处是可以一次读出所有寄存器。
keyDefine.h
#ifndef __DEYDEFINE_H__
#define __DEYDEFINE_H__
#define KEY_GPIO_CENT 15
#define KEY_GPIO_LEFT 14
#define KEY_GPIO_DOWN 13
#define KEY_GPIO_RHT 12
#define KEY_GPIO_UP 11
#define KEY_GPIO_A 10
#define KEY_GPIO_B 9
#define KEY_GPIO_C 8
#define KEY_GPIO_D 7
#define KEY_UP (!(keys & (0x1 << KEY_GPIO_UP)))
#define KEY_DOWN (!(keys & (0x1 << KEY_GPIO_DOWN)))
#define KEY_LEFT (!(keys & (0x1 << KEY_GPIO_LEFT)))
#define KEY_RHT (!(keys & (0x1 << KEY_GPIO_RHT)))
#define KEY_CENT (!(keys & (0x1 << KEY_GPIO_CENT)))
#define KEY_A (!(keys & (0x1 << KEY_GPIO_A)))
#define KEY_B (!(keys & (0x1 << KEY_GPIO_B)))
#define KEY_C (!(keys & (0x1 << KEY_GPIO_C)))
#define KEY_D (!(keys & (0x1 << KEY_GPIO_D)))
#define KEY_INPUT (*(TLS_REG*)HR_GPIO_DATA)
#
W801学习笔记:GPIO驱动与节省引脚策略

文章介绍了在W801开发中,如何通过GPIO控制五个导航按钮和四个功能键,同时提出优化方法如分组和片选以减少引脚占用。作者讨论了现有实现的局限以及未来可能的改进措施。
最低0.47元/天 解锁文章
726

被折叠的 条评论
为什么被折叠?



