第一节 按键的基本知识 按键按照结构原理可分为两类,一类是触点式开关按键,如机械式开关、导电橡胶式开关灯;另一类是无触点式开关按键,如电气式按键,磁感应按键等。前者造价低,后者寿命长。目前,微机系统中最常见的是触点式开关按键。8 C+ [$ L; x4 @3 E
在单片机应用系统中,除了复位按键有专门的复位电路及专一的复位功能外,其他按键都是以开关状态来设置控制功能或输入数据的。当所设置的功能键或数字键按下时,计算机应用系统应完成该按键所设定的功能,按键信息输入时与软件结构密切相关的过程。
' ?; U3 F( P+ r6 o& F对于一组按键或一个键盘,总有一个接口电路与MCU相连。MCU可以采用查询或中断方式了解有无将按键输入,并检查是哪一个按键按下,将该键号送入程序,然后通过指令转入执行该键的功能程序,执行完成后再返回主程序。
& u+ J0 a1 W7 z& q! W# n按键通常使用机械触点式按键开关,其主要功能式把机械上的通断转换为电气上的逻辑关系。也就是说,它能提供标准的TTL逻辑电平,以便于通用数字系统的逻辑电平相容。机械式按键再按下或释放时,由于机械弹性作用的影响,通常伴随有一定的时间触点机械抖动,然后其触点才稳定下来。0 w+ I1 p2 V; m# e
nmxbjwtosxn64049705554.png
: @: N9 l5 L8 k2 f! i C
# Y5 d5 ^% D: p抖动时间的长短与开关的机械特性有关,一般为5~10ms。在触点抖动期间检测按键的通与断,可能导致判断出错,即按键一次按下或释放错误的被认为是多次操作,这种情况是不允许出现的。为了克服按键触点机械抖动所致的检测误判,必须采取消抖措施。硬件的消抖方案有很多种:在按键引脚与微控制器之间添加外部电路元件,如电容、电阻或Schmitt触发器等,这些电路元件可以滤除按键的电气噪音,提供更稳定的电平信号。
+ H# ~- D6 c& b9 f4 z a单片机控制系统中,如果只需要几个功能键,此时,可采用独立式按键结构。独立按键式直接用I/O口构成的单个按键电路,其特点式每个按键单独占用一根I/O口,每个按键的工作不会影响其他I/O口的状态。独立式按键电路配置灵活,软件结构简单,但每个按键必须占用一个I/O口,因此,在按键较多时,I/O口浪费较大,不宜采用。
; ~% n( e5 k" K) e u独立按键的软件常采用查询式结构。先逐位查询与I/O口的输入状态,如某一根I/O口输入为低电平,则可确认该I/O口所对应的按键已按下,然后,再转向该键的功能处理程序。* }+ ~& k* [- Y8 k" ~8 ~+ a/ |
单片机按键一般通过配备上拉电阻来实现输入端高低电平的切换。5 Q& M* ?4 @ O# ^# p9 R* _
tbm3qp0cxts64049705654.png
, y9 T+ B3 O1 o( ^( b: M8 U- |* e4条输入线接到单片机的IO口上,当按键K1按下时,+5V通过电阻R1然后再通过按键K1最终进入GND形成一条通路,那么这条线路的全部电压都加到了R1这个电阻上,KeyIn1这个引脚就是个低电平。当松开按键后,线路断开,就不会有电流通过,那么KeyIn1和+5V就应该是等电位,是一个高电平。我们就可以通过KeyIn1这个IO口的高低电平来判断是否有按键按下。 2 A" }, L5 D5 G% G$ E
第二节 硬件解读
W8 C) e* w0 r* X2 M0 M) H% T A' ? 4 E( g. F |6 h
yads1ql3qih64049705754.png
* n4 N- M6 M! n; r从图中我们可以看出,蓝桥杯物联网开发板上面有2个可编程按键,分别连接到PA8和PB8。如果PA8是高电平,就证明按键没有被按下,反之则被按下。
: x: u" w5 e0 B* D1 J; f第三节 CubeMX配置
: W) W* y4 b# S! J, D 第一步:配置PA8和PB8为输入模式,如下:
8 L f0 h9 d; `! [. `4 `& X
t1fwk1nzi2y64049705855.png
# L, i8 e% Y V( j9 s, x* C$ g第二步:配置GPIO为上拉,并配置用户标签,如下图,% t' k1 V2 H" N t4 D+ r v2 d$ R
xoyiduwgo1l64049705955.png
/ N+ L, a3 e! O7 N; l
. C0 [9 \7 X. t. Y其中:具体配置信息如下:! |" V' E4 n4 P# b
& ?8 ]4 }3 M+ f+ `# L* A( z
GPIO mode:表示输入模式,固定可为输入模式(Input mode);7 o/ D; U% p1 U# X+ L
! K F, |; e; ^$ AGPIO Pull-up/Pull-down:表示是否上下拉,可配置为上拉(Pull-up)或者下拉(Pull-down)或不上拉也不下拉(No Pull-up and no Pull-down);
3 l; P( X; g! C& p7 g3 u2 G) c 7 e( q) y* z$ m# u3 R9 b
User Label:表示用户标签,可修改IO口名称,比如可写入KEY,把IO口名称变为KEY;2 l9 C; q- E1 A4 Z- j
1 H% W% `. |% o' l# f# a2 s6 I9 \第四节 MDK代码$ o/ i& H. h0 D8 @3 i, r2 T& E
0 Q+ C$ y9 M9 J: ]# |
ribocgzewya64049706055.png
2 F/ q! |. c. W S! D b! s' I! v
结合上图,可以看出需要20ms的消抖时间。所以按键的模板代码如下:; N/ B' d9 J3 P6 a* Y* F! t
jp41n2nt2k364049706155.png
% s. `0 Q; k, Y+ }0 V
不要忘记在.h文件中声明哦:
( h6 o0 ]$ l: I$ h$ m ~- e
04kidwlidb364049706255.png
" \ Y: u4 |! V5 d6 L
最后我们在while中读取按键,就可以啦:
) P& s% \8 c. h4 ]8 P B
d4lotq3unvw64049706355.png
. w6 E' W- M% y+ |3 J( v
第五节 实验现象
- `, X9 _8 S/ e) w, U 注意: m4 Z, z, P0 ~8 a) n, l
1,请用USB线连接电脑与开发板。
( X) u; a$ r4 G7 C t: W7 G2,请选择A开发板。' f$ @, M+ [5 I S" d& Q
现象:& o3 Q5 L1 F Q8 o4 }
1,按下按键ASW1,AL1翻转一次。& P9 x1 k( h2 r; U, r! ^
2,按下按键ASW2,AL2翻转一次。
( o" ~, S$ v/ i( z来源:撞上电子微信公众号
) d7 r4 T% H8 @版权:东莞市东城墨竹公子电子工作室' x8 D' k& q/ j
日期:2024.11.03: o) D9 l8 T2 _# m9 N0 D, T. j
第六节 课后作业8 a/ z5 ^) L( O/ W7 p* [2 o
按下按键ASW1,AL3翻转。 |