你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

万利STM32学习板上的按键驱动(定时扫描去抖方式)

[复制链接]
洗刷刷-98928 发布时间:2008-12-16 16:01
此贴子原创作者为电脑圈圈

在万利STM32学习板的USB摇杆例程中,摇杆的按键处理并没有消抖处理,圈圈重新修改了摇杆的驱动,顺便还增加了两个按键以及摇杆中键下压的驱动,以方便直接使用。只要定时调用(几ms)KyeScan函数,就会将当前按键的改变情况和按住情况保存在对应的变量中。

当某个键按下时,在KeyDown中对应的位被设置为1;某个键被释放时,KeyUp中对应的位为1;KeyPress中保存的是当前按键的按住情况,某位为1时表示对应的键被按住。

KeyDown和KeyUp中的值使用后要手动清除,表示已经处理了这个事件,而KeyPress不用手动清除,它一直反映按键的按住情况。

   万利的板子上有两个按键KEY_2和KEY_3,另外还有一个摇杆:KEY_SEL,KEY_LEFT,KEY_RIGHT,KEY_UP,KEY_DOWN,以及摇杆的中键KEY_SEL。为了统一名称,都叫成了KEY。要获取某个按键的信息,只要跟对应的宏进行与操作即可,实际使用方法参考如下:

if(KeyDown & KEY_UP)   //摇杆往上移动键按下
if(KeyDown & KEY_RIGHT) //摇杆往右移动键按下
if(KeyPress & KEY_DOWN) //摇杆往下移动被按住了
if(KeyUp & KEY_LEFT) //摇杆往左移动由原来的按住变成了松开
if(KeyUp || KEY_DOWN) //有按键状态变动

KeyUp &=~(KEY_2); //清除KEY2释放事件

KeyDown&=~(KEY_SEL); //清除摇杆中键按下事件

 

键盘驱动的实际代码如下:


unsigned char KeyCurrent,KeyOld,KeyNoChangedTime;
unsigned char KeyPress;
unsigned char KeyDown,KeyUp,KeyLast;

#define KEY_SEL    0x01
#define KEY_RIGHT  0x02
#define KEY_LEFT   0x04
#define KEY_DOWN   0x10
#define KEY_UP     0x08
#define KEY_2      0x20
#define KEY_3      0x40

#define KeyIO ((((GPIOD->IDR)>>11)&0x1F)|((((GPIOD->IDR)>>3)&0x03)
收藏 评论0 发布时间:2008-12-16 16:01

举报

0个回答

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版