- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
stm32矩阵按键扫描
原理图
?各位大侠,这是我写的矩阵按键扫描程序,大家可以参考参考 思维是和一般的按键扫描一样的,欢迎大家吐槽。
说明:微处理器:STM32F103VET6,开发软件:IAR for ARM。(本来想复制文本文档的,发现代码层次感全变了,而且看着不舒服,所以采用截图的方式)
其中需要注意的是:1、HKey是利用位带定义然后宏定义的,如下:
PEin(n)利位带宏定义,(如果不明白可以百度一下 stm32 位带操作)。
2、此函数是利用定时器设置30ms进行一次中断,而按键扫描的时间则由KeyScanEn确定
3、关于KeyHData=HKey 编译器一直报警告,(但是程序跑起来为发现问题,不知道有没有什么潜在的风险)
为了安全起见,大家可以直接去读寄存器也行
4、按键消抖是利用计数器的方式,(说白了就是需要检测到两次后再处理)。
5、关于Delay(1)函数,试过不用也行,这里是置输入脚后马上检测输出感觉应该给点反应时间。
6、此函数只取出了键值,判断的话需要在另外的函数,最好不在中断函数里来做判断。
思路:1、首先置行线全为高,然后检测HEKEY这四位是不是全为0(当然,先要把这四个脚设置为下拉输入),如果不全是0,侧说明有按键按下。
2、然后依次将PE12-PE15置高进行扫描,(将一位置高后,然后检测输入引脚,如果输入引脚不是0x00,则说明按键在此行。如若不是则循环置下一个引脚为高再判断),因为是循环扫描,此时循环次数就说明了在第几行。 所以键值=列键值(读取的键值)+ 循环的次数(行键值)。
3、取出按键的键值依次是:0x11 0x21 0x41 0x81
0x12 0x22 0x42 0x82
0x13 0x23 0x43 0x83
0x14 0x24 0x44 0x84
4、从上面的键值表可以看出:键值的后四位说明了按键的行数,键值的前四位则说明了按键所在的列数。
文档评论(0)