第一节 按键的基本知识 按键按照结构原理可分为两类,一类是触点式开关按键,如机械式开关、导电橡胶式开关灯;另一类是无触点式开关按键,如电气式按键,磁感应按键等。前者造价低,后者寿命长。目前,微机系统中最常见的是触点式开关按键。 M3 A F$ z$ [( w9 v
在单片机应用系统中,除了复位按键有专门的复位电路及专一的复位功能外,其他按键都是以开关状态来设置控制功能或输入数据的。当所设置的功能键或数字键按下时,计算机应用系统应完成该按键所设定的功能,按键信息输入时与软件结构密切相关的过程。
" X: G! E2 b9 }. @, v对于一组按键或一个键盘,总有一个接口电路与MCU相连。MCU可以采用查询或中断方式了解有无将按键输入,并检查是哪一个按键按下,将该键号送入程序,然后通过指令转入执行该键的功能程序,执行完成后再返回主程序。, w; f! m8 M2 o
按键通常使用机械触点式按键开关,其主要功能式把机械上的通断转换为电气上的逻辑关系。也就是说,它能提供标准的TTL逻辑电平,以便于通用数字系统的逻辑电平相容。机械式按键再按下或释放时,由于机械弹性作用的影响,通常伴随有一定的时间触点机械抖动,然后其触点才稳定下来。
+ e ]9 f% c' k/ m. |
nmxbjwtosxn64049705554.png
( m& u0 F+ c! ~ 7 \3 C6 I: Z" [) V; N7 C0 T
抖动时间的长短与开关的机械特性有关,一般为5~10ms。在触点抖动期间检测按键的通与断,可能导致判断出错,即按键一次按下或释放错误的被认为是多次操作,这种情况是不允许出现的。为了克服按键触点机械抖动所致的检测误判,必须采取消抖措施。硬件的消抖方案有很多种:在按键引脚与微控制器之间添加外部电路元件,如电容、电阻或Schmitt触发器等,这些电路元件可以滤除按键的电气噪音,提供更稳定的电平信号。
& @ R. R ^' {6 N0 @7 R- e* f& m单片机控制系统中,如果只需要几个功能键,此时,可采用独立式按键结构。独立按键式直接用I/O口构成的单个按键电路,其特点式每个按键单独占用一根I/O口,每个按键的工作不会影响其他I/O口的状态。独立式按键电路配置灵活,软件结构简单,但每个按键必须占用一个I/O口,因此,在按键较多时,I/O口浪费较大,不宜采用。1 s( ~) Z6 C$ }% v
独立按键的软件常采用查询式结构。先逐位查询与I/O口的输入状态,如某一根I/O口输入为低电平,则可确认该I/O口所对应的按键已按下,然后,再转向该键的功能处理程序。' x& F7 p! i0 X% p
单片机按键一般通过配备上拉电阻来实现输入端高低电平的切换。$ ?+ d! ?4 u$ X5 U# Q& p
tbm3qp0cxts64049705654.png
5 ~0 n$ A. @$ W0 }8 o* H
4条输入线接到单片机的IO口上,当按键K1按下时,+5V通过电阻R1然后再通过按键K1最终进入GND形成一条通路,那么这条线路的全部电压都加到了R1这个电阻上,KeyIn1这个引脚就是个低电平。当松开按键后,线路断开,就不会有电流通过,那么KeyIn1和+5V就应该是等电位,是一个高电平。我们就可以通过KeyIn1这个IO口的高低电平来判断是否有按键按下。
# u U8 q L% L# t( i第二节 硬件解读
+ z$ r Z9 N) A& q
, Z& G3 T; a) H9 e/ ?/ E- g
yads1ql3qih64049705754.png
5 ]: X/ K. ]8 A) S2 y C2 G% L
从图中我们可以看出,蓝桥杯物联网开发板上面有2个可编程按键,分别连接到PA8和PB8。如果PA8是高电平,就证明按键没有被按下,反之则被按下。
* X0 I" V: q, t4 a( ?第三节 CubeMX配置; ^) T3 B0 S1 {8 g$ L
第一步:配置PA8和PB8为输入模式,如下:
' ?+ h* ?- Q s( T1 X6 o
t1fwk1nzi2y64049705855.png
, ]/ ~4 B9 T" g/ U第二步:配置GPIO为上拉,并配置用户标签,如下图,
" |! }7 Z* u/ F- \
xoyiduwgo1l64049705955.png
8 v5 `: K, X- }! o: M/ v4 w
: ]3 J# h. Z! f
其中:具体配置信息如下:
7 G( L& }2 i A% |" {, Y4 S( g 9 o) p5 z, x: z* j. a/ @
GPIO mode:表示输入模式,固定可为输入模式(Input mode);' A% k( |) O- C% c5 X' z+ Z8 _$ S
1 i$ E4 N0 ^/ O) tGPIO Pull-up/Pull-down:表示是否上下拉,可配置为上拉(Pull-up)或者下拉(Pull-down)或不上拉也不下拉(No Pull-up and no Pull-down);
7 a9 d! m" b- X$ \0 O
* i" w, C" g7 k+ BUser Label:表示用户标签,可修改IO口名称,比如可写入KEY,把IO口名称变为KEY;
6 H5 Q6 G# O8 z5 ~, i9 m* Q' F! @
7 B& A! c; F3 U, ]4 m. W* y4 N$ F; d6 i) h第四节 MDK代码
% v! `, z" p5 f ~6 G5 S$ |' U ; W" a; h0 o9 t# ` C
ribocgzewya64049706055.png
8 R( c( c9 o# B3 s3 i' q
结合上图,可以看出需要20ms的消抖时间。所以按键的模板代码如下:, j0 H r- E6 U" L
jp41n2nt2k364049706155.png
' n( Y0 D1 K" I0 `3 h, b6 u( V
不要忘记在.h文件中声明哦: 6 V4 k" N# [+ _6 m: s
04kidwlidb364049706255.png
6 m; r: z @7 x2 x最后我们在while中读取按键,就可以啦:
+ F$ _( d: K3 H5 V! o0 S
d4lotq3unvw64049706355.png
5 D5 y: x# d; t4 _
第五节 实验现象
$ g0 G6 P( |7 U' ?8 Z) [6 |+ E 注意:& \$ K$ P# N" O2 l. X6 ]
1,请用USB线连接电脑与开发板。# Z5 b9 C1 v6 M7 N
2,请选择A开发板。/ }; d# f( I6 v* {- O: `
现象:* F. O' L: e9 g0 [1 O
1,按下按键ASW1,AL1翻转一次。
0 m: F% \, W6 m2,按下按键ASW2,AL2翻转一次。 . H& E- |1 i, r
来源:撞上电子微信公众号
6 S0 }- L4 j6 c) i7 y6 R9 x版权:东莞市东城墨竹公子电子工作室6 Z |/ u$ O, N. B; }$ `
日期:2024.11.037 c$ G$ C4 @8 E& z
第六节 课后作业7 r- Y$ ]% _: k+ R: H
按下按键ASW1,AL3翻转。 |