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

【经验分享】stm32矩阵键盘(扫描模式)

[复制链接]
STMCU小助手 发布时间:2022-5-19 10:57
因为最近开发一个项目需要用到3*4的矩阵键盘,所以我就写了一下相关的矩阵键盘的内容,分享出来供大家参考。
7 N/ Y  A4 |2 Y4 q- Q8 N
+ L9 G; |, J  j1 R' q5 J" F$ W3 s4 v4 u
我所用到的矩阵键盘是3*4的矩阵键盘实物图如下
3 Z- W) y8 G9 ^& i
; |. B4 c9 {9 m2 C! y 9~]D3WMPECEP_48K(W`T]Y1.png $ H" m9 U$ B  d
" @/ }$ a& a5 w1 M
其中是4行3列,示意图如下
3 I# U- a  J1 n$ M+ T$ k
; F- ^( |# a. K) t# n* H% X N{QH~RTL9`HBN@P97W@0X}M.png
# h9 B. ?# S: R
8 K5 ^! W0 [' {/ Y6 o: ~, M采用循环扫描的方式主要是应用while循环来进行,优点是可以进行快速反应,缺点是占用较多的机时,CPU卡在这个循环里出不来。: l6 A: e9 d2 O" z7 `
' _% z) G( f  w# v$ Q& ~
具体的思想就是通过变换GPIO的引脚电平来读取具体是哪个按键被按下。. L' A1 F8 {& ]$ l8 A
9 L. v* g- K/ ?2 M, |, O0 W
首先是将行中连接的引脚设置为上拉输入模式,将列中引脚设置为推挽输出模式,并将列的引脚都定义为低电平。
( N+ k9 h8 q! ?! ^7 ?8 ]. |8 \
# ~' N% R" R1 {0 I# H如果有按键按下,行输入就会得到低电平信号,就可以确定是哪一行的按键被按下。当测出哪一行的按键被按下后,再反过来,将行的引脚都设置为推挽输出模式,定义为高电平;将列的引脚都设置为下拉输入模式。& f; l+ ^$ p" k0 G# n: _8 A% l* c  T) C
3 k3 |. A, ]! f* U7 a: n8 l0 b' |
这样再通过列的扫描,如果列得到高电平,就可以确定是哪一列的按键被按下。通过两次循环扫描可以定位到具体是哪个按键按下,返回键值后就可以进行后续操作。
* T  @5 L0 L0 ^& K. @( U( g- B# D6 j# X% {9 @
效果图
/ s; h* Z+ e% p, P( N
! x8 U; r6 n7 D( k7 b2 W* y9 ` TT4DY4%{GL61C64@X3E{3]9.png
8 R3 K3 Z" }8 V: \' X# Q4 i, B5 d4 D
/ K8 p) I4 D# W按下#号键+ n6 X* t1 `- e, F) H9 v

. \  N. x, T# V+ r8 c$ ?' i PUJ$J90~_A(%@R%F]SU9W5O.png 0 s3 i! F# I! z8 A
" \+ o$ k8 f( I; E9 J- S
按下7
* Y" f! J' n, S! n; D& J
& N" W2 u) x% g/ w D8V6]LJ{@A)}B2F}A`W{~NU.png
$ F4 N- |; y" u
- `3 F5 \' e5 l  u按下8
- ]* K, [! X0 \+ ]3 e2 d' d& g2 `
+ n; h$ _7 R; t3 [代码的大致思想如下
& B6 b% ~2 w+ l A6JEIS6N84N]EJUYHZ2)J@T.png / |9 H* _) g0 f8 k# K* u" |

4 M) z7 t- Z$ l
/ v8 e! m6 x1 U6 N3 n# e# Q& J( j: ~1 v" y# G: L
7 h7 H6 l' [" f5 F/ [

5 i" c( \3 X( E1 \" ~3 ?+ F2 h! k9 W9 T
VG)W)2$6DZ(8L484~7MI~ZT.png
赞 收藏 评论0 发布时间:2022-5-19 10:57

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版