在万利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_right0x02
#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)<=1) //如果按下时间足够
{
keynochangedtime=1;
keypress=keyold; //保存按键
keydown|=(~keylast)&(keypress); //求出新按下的键
keyup|=keylast&(~keypress); //求出新释放的键
keylast=keypress; //保存当前按键情况
}
}
}
在调用键盘扫描函数之前,记得先对相应的i/o口初始化为高阻输入模式,摇杆连接在pd11~15上,key2、key3连接在pd3、pd4上。
stm32/stm8
意法半导体/st/stm
移动存储器全面解析
利用DataSocket技术实现虚拟仪器在网络平台上的应用
230亿收购案不获批,UTC面临拆分!
LED灯板拼接屏线路板,看完不迷糊
英特尔能在VR智能眼镜上打一场漂亮的翻身仗吗
万利EK-STM32开发板上实现按键驱动(定时扫描去抖方式)
大众携手微软开发云计算自动驾驶平台
串口服务器概述和功能介绍
车企借助3D打印技术制造各种零部件
葡萄雨技术瑞芯微RK3399邮票孔开发板介绍
物联网网关最常用的边缘计算优势在哪里
雷军26亿元拿地所谓何事 吃瓜群众猜测不断
电广传媒发布了2020年第一季度运营情况
AcrelCloud-3100高校宿舍预付费电控系统
在架构尺度上的部分技术经验与积累分享
2021全球AIoT开发者生态白皮书发布
采用AD9850的信号发生器的设计方案
华为荣耀V9:荣耀V9和华为mate9对比评测,打脸打的啪啪响!
来了解一下RTOS应用中的调度策略
联诚发LED透明屏和智慧荧光棒系列为全球各类舞台演绎增添活力与光彩