第一节 按键的基本知识 按键按照结构原理可分为两类,一类是触点式开关按键,如机械式开关、导电橡胶式开关灯;另一类是无触点式开关按键,如电气式按键,磁感应按键等。前者造价低,后者寿命长。目前,微机系统中最常见的是触点式开关按键。
2 ^- E, ^1 E* U在单片机应用系统中,除了复位按键有专门的复位电路及专一的复位功能外,其他按键都是以开关状态来设置控制功能或输入数据的。当所设置的功能键或数字键按下时,计算机应用系统应完成该按键所设定的功能,按键信息输入时与软件结构密切相关的过程。
1 x) y' h. g/ [对于一组按键或一个键盘,总有一个接口电路与MCU相连。MCU可以采用查询或中断方式了解有无将按键输入,并检查是哪一个按键按下,将该键号送入程序,然后通过指令转入执行该键的功能程序,执行完成后再返回主程序。* X# G5 @; l! Y- \' z
按键通常使用机械触点式按键开关,其主要功能式把机械上的通断转换为电气上的逻辑关系。也就是说,它能提供标准的TTL逻辑电平,以便于通用数字系统的逻辑电平相容。机械式按键再按下或释放时,由于机械弹性作用的影响,通常伴随有一定的时间触点机械抖动,然后其触点才稳定下来。' O% Q" x. V# |8 W3 ]
nmxbjwtosxn64049705554.png
$ @6 G, M1 J9 [. t* C
8 M# ]( ], X/ c$ j! N: K' n抖动时间的长短与开关的机械特性有关,一般为5~10ms。在触点抖动期间检测按键的通与断,可能导致判断出错,即按键一次按下或释放错误的被认为是多次操作,这种情况是不允许出现的。为了克服按键触点机械抖动所致的检测误判,必须采取消抖措施。硬件的消抖方案有很多种:在按键引脚与微控制器之间添加外部电路元件,如电容、电阻或Schmitt触发器等,这些电路元件可以滤除按键的电气噪音,提供更稳定的电平信号。6 j* v2 |0 a: T3 Q
单片机控制系统中,如果只需要几个功能键,此时,可采用独立式按键结构。独立按键式直接用I/O口构成的单个按键电路,其特点式每个按键单独占用一根I/O口,每个按键的工作不会影响其他I/O口的状态。独立式按键电路配置灵活,软件结构简单,但每个按键必须占用一个I/O口,因此,在按键较多时,I/O口浪费较大,不宜采用。; X9 i& q! ? N/ x( J- k; ~
独立按键的软件常采用查询式结构。先逐位查询与I/O口的输入状态,如某一根I/O口输入为低电平,则可确认该I/O口所对应的按键已按下,然后,再转向该键的功能处理程序。
8 ] L, C% W) x( S- W9 R$ ~单片机按键一般通过配备上拉电阻来实现输入端高低电平的切换。# u8 `4 \* r6 N
tbm3qp0cxts64049705654.png
! L0 B/ e, w# ^7 H$ L( V7 P, i
4条输入线接到单片机的IO口上,当按键K1按下时,+5V通过电阻R1然后再通过按键K1最终进入GND形成一条通路,那么这条线路的全部电压都加到了R1这个电阻上,KeyIn1这个引脚就是个低电平。当松开按键后,线路断开,就不会有电流通过,那么KeyIn1和+5V就应该是等电位,是一个高电平。我们就可以通过KeyIn1这个IO口的高低电平来判断是否有按键按下。
. R6 n3 X2 ], R/ C# K" k2 G7 g2 `7 H第二节 硬件解读
+ I0 {5 Z: N! N3 d ]2 r# j! S ' Z8 m+ T. [3 }" _$ Q1 L
yads1ql3qih64049705754.png
3 g3 F, _4 ?) P" x从图中我们可以看出,蓝桥杯物联网开发板上面有2个可编程按键,分别连接到PA8和PB8。如果PA8是高电平,就证明按键没有被按下,反之则被按下。+ G2 k2 v, b% ^* e
第三节 CubeMX配置
6 s8 l6 o |1 U1 n. y X* L 第一步:配置PA8和PB8为输入模式,如下: 0 H( d" ? J( G" G3 U
t1fwk1nzi2y64049705855.png
; Z) a- Y, J4 B1 l& ^+ E( w w
第二步:配置GPIO为上拉,并配置用户标签,如下图,# H% Z: ~ t- E* G
xoyiduwgo1l64049705955.png
9 P, i( X. p3 s9 l
+ b. q9 ?) Z4 r' X* m8 ~其中:具体配置信息如下:
) u& ^/ i2 D2 J/ \# T ; z, F9 R' A/ m/ v# V2 E/ T' b H
GPIO mode:表示输入模式,固定可为输入模式(Input mode);, u& w7 Q1 e$ T. e1 [: u& A8 [
0 B- W2 ~% U8 H5 a' J* _4 |& bGPIO Pull-up/Pull-down:表示是否上下拉,可配置为上拉(Pull-up)或者下拉(Pull-down)或不上拉也不下拉(No Pull-up and no Pull-down);
* U5 X2 o- }; n# w. T. B4 n' Z5 R7 O
# V8 n0 P7 r2 X. lUser Label:表示用户标签,可修改IO口名称,比如可写入KEY,把IO口名称变为KEY;" ] Y. x. u; X& X5 ]
R* Z8 U# ^4 Z9 G$ D3 l第四节 MDK代码/ t$ F& Q1 ]" o
7 y1 f" r3 ? c# `
ribocgzewya64049706055.png
; E( u% O( v, B& a% c: k结合上图,可以看出需要20ms的消抖时间。所以按键的模板代码如下:% W& W* h0 f4 y1 R/ d8 w6 ?
jp41n2nt2k364049706155.png
' D/ Z% y# [# o* k( W7 V
不要忘记在.h文件中声明哦:
3 y; z8 m9 C9 p1 D
04kidwlidb364049706255.png
4 u" C: P0 s) M8 S6 q
最后我们在while中读取按键,就可以啦:* u, c8 j/ G4 a; A! C- o( Z
d4lotq3unvw64049706355.png
. }" D0 }- [1 a# O3 p: s( T
第五节 实验现象
k2 M7 U9 z8 S; N% }( j 注意:) K, P" e% V+ I6 j' f9 P+ e: G2 u
1,请用USB线连接电脑与开发板。
& A8 N1 \! k! C8 ]1 ], a0 l2,请选择A开发板。
8 n, G2 l- ^6 @' s3 Y' P现象:
7 U8 ^, ?/ q8 j9 }; V8 ]1,按下按键ASW1,AL1翻转一次。
4 {" p2 V# E) D' ^2,按下按键ASW2,AL2翻转一次。 . J) {! A- Y7 L
来源:撞上电子微信公众号 d8 p+ G8 Y. |1 {; n
版权:东莞市东城墨竹公子电子工作室. H" d: B# W# }5 n, Q; {- E0 I
日期:2024.11.03
' ]$ u0 D( C7 m第六节 课后作业% t5 j6 t: ?5 S3 m
按下按键ASW1,AL3翻转。 |