电子产业一站式赋能平台

PCB联盟网

搜索
查看: 243|回复: 0
收起左侧

蓝桥杯中GPIO输入之按键实验

[复制链接]

359

主题

364

帖子

2887

积分

三级会员

Rank: 3Rank: 3

积分
2887
发表于 2025-1-9 21:00:00 | 显示全部楼层 |阅读模式
第一节 按键的基本知识   按键按照结构原理可分为两类,一类是触点式开关按键,如机械式开关、导电橡胶式开关灯;另一类是无触点式开关按键,如电气式按键,磁感应按键等。前者造价低,后者寿命长。目前,微机系统中最常见的是触点式开关按键。
0 B  E, E/ r" N7 j5 y在单片机应用系统中,除了复位按键有专门的复位电路及专一的复位功能外,其他按键都是以开关状态来设置控制功能或输入数据的。当所设置的功能键或数字键按下时,计算机应用系统应完成该按键所设定的功能,按键信息输入时与软件结构密切相关的过程。0 j* w1 a  b! g, G( Q0 ?, m
对于一组按键或一个键盘,总有一个接口电路与MCU相连。MCU可以采用查询或中断方式了解有无将按键输入,并检查是哪一个按键按下,将该键号送入程序,然后通过指令转入执行该键的功能程序,执行完成后再返回主程序。0 z! D( Q$ F3 C; K: i3 o7 [) l
按键通常使用机械触点式按键开关,其主要功能式把机械上的通断转换为电气上的逻辑关系。也就是说,它能提供标准的TTL逻辑电平,以便于通用数字系统的逻辑电平相容。机械式按键再按下或释放时,由于机械弹性作用的影响,通常伴随有一定的时间触点机械抖动,然后其触点才稳定下来。
+ Q  {, M6 N$ D) i8 |

nmxbjwtosxn64049705554.png

nmxbjwtosxn64049705554.png

' y5 j0 W% z& t" \1 c  Y    7 @4 `7 R0 g3 C* V* z2 O4 P/ U
抖动时间的长短与开关的机械特性有关,一般为5~10ms。在触点抖动期间检测按键的通与断,可能导致判断出错,即按键一次按下或释放错误的被认为是多次操作,这种情况是不允许出现的。为了克服按键触点机械抖动所致的检测误判,必须采取消抖措施。硬件的消抖方案有很多种:在按键引脚与微控制器之间添加外部电路元件,如电容、电阻或Schmitt触发器等,这些电路元件可以滤除按键的电气噪音,提供更稳定的电平信号。2 B- C( `- V7 l4 d: S/ D/ r' d  I
单片机控制系统中,如果只需要几个功能键,此时,可采用独立式按键结构。独立按键式直接用I/O口构成的单个按键电路,其特点式每个按键单独占用一根I/O口,每个按键的工作不会影响其他I/O口的状态。独立式按键电路配置灵活,软件结构简单,但每个按键必须占用一个I/O口,因此,在按键较多时,I/O口浪费较大,不宜采用。
* a$ S: t2 z3 u( d独立按键的软件常采用查询式结构。先逐位查询与I/O口的输入状态,如某一根I/O口输入为低电平,则可确认该I/O口所对应的按键已按下,然后,再转向该键的功能处理程序。
: e  G( Y0 P- u% w+ G: J+ R$ s* y; l1 d单片机按键一般通过配备上拉电阻来实现输入端高低电平的切换。7 ^9 d# j3 c8 N; O, [

tbm3qp0cxts64049705654.png

tbm3qp0cxts64049705654.png
9 C1 a3 {+ z4 @/ M; P1 F& l+ ^
4条输入线接到单片机的IO口上,当按键K1按下时,+5V通过电阻R1然后再通过按键K1最终进入GND形成一条通路,那么这条线路的全部电压都加到了R1这个电阻上,KeyIn1这个引脚就是个低电平。当松开按键后,线路断开,就不会有电流通过,那么KeyIn1和+5V就应该是等电位,是一个高电平。我们就可以通过KeyIn1这个IO口的高低电平来判断是否有按键按下。   
, P3 ^# s* w; T6 ]# F' F4 ~第二节 硬件解读
( g4 Q/ T8 f0 o% c7 d: S7 C  1 ]$ t( t: w# h/ L; A. i4 f

yads1ql3qih64049705754.png

yads1ql3qih64049705754.png

" O% F7 e& p$ J( r从图中我们可以看出,蓝桥杯物联网开发板上面有2个可编程按键,分别连接到PA8和PB8。如果PA8是高电平,就证明按键没有被按下,反之则被按下。
0 s' ^8 ~- S+ C) @9 g: }第三节 CubeMX配置& H- e" x/ k* r/ M* a) {  q0 }
  第一步:配置PA8和PB8为输入模式,如下:   
- M+ Z! G5 D$ ]: y+ H8 y

t1fwk1nzi2y64049705855.png

t1fwk1nzi2y64049705855.png

+ e% j: E6 Q" Y: f, q第二步:配置GPIO为上拉,并配置用户标签,如下图,! c( n# S% w2 |0 A8 x6 V

xoyiduwgo1l64049705955.png

xoyiduwgo1l64049705955.png
: K( {/ Z# e4 |0 F6 o
   
5 ]6 D8 i, m! {1 H* v其中:具体配置信息如下:
; C2 u# b: y5 v' D           
' Y& J6 y' j! |" E6 B' SGPIO mode:表示输入模式,固定可为输入模式(Input mode);( X" m( Y! |4 c& O
           ; p6 C8 ^2 U/ r) d# _4 m' L  I
GPIO Pull-up/Pull-down:表示是否上下拉,可配置为上拉(Pull-up)或者下拉(Pull-down)或不上拉也不下拉(No Pull-up and no Pull-down);
) w, @. l1 p$ i1 \/ l           
8 X' c1 A- m2 t8 L  yUser Label:表示用户标签,可修改IO口名称,比如可写入KEY,把IO口名称变为KEY;$ Q( r9 Q; w6 M/ y' b' s
               : N$ L6 A5 A' \" X# `6 u8 @% w
第四节 MDK代码
- x, D) g% G9 V4 }3 o, g  
5 W' _5 Z/ p2 U; A! m! L+ ]

ribocgzewya64049706055.png

ribocgzewya64049706055.png
' A. u; ]0 y" ~, \3 E
结合上图,可以看出需要20ms的消抖时间。所以按键的模板代码如下:7 x* N1 d9 @  \& q8 p

jp41n2nt2k364049706155.png

jp41n2nt2k364049706155.png

7 }; G$ \( O, B' y1 ?# N不要忘记在.h文件中声明哦:    * a. N2 x3 Z1 \8 ~1 ?: b

04kidwlidb364049706255.png

04kidwlidb364049706255.png
) P- w8 ^" \  U' Z2 S' j
最后我们在while中读取按键,就可以啦:  N% P/ ?0 J8 q# Q

d4lotq3unvw64049706355.png

d4lotq3unvw64049706355.png
* c' w/ _; t0 {2 A/ @
第五节 实验现象  
) R/ [& F  |+ l; k4 Q; M  注意:+ }! {& `9 f0 V) C5 H! @
1,请用USB线连接电脑与开发板。
! |+ ?$ N4 \# ]0 L2,请选择A开发板。
6 O  K8 A& t" m; ?& [现象:
$ g" F5 f) I$ z& d7 p% R1,按下按键ASW1,AL1翻转一次。
) A1 \7 {6 `6 V: ^2,按下按键ASW2,AL2翻转一次。   
; d4 V6 Y& Y7 K- T, H来源:撞上电子微信公众号
$ }4 N: Y7 N% y+ \* e版权:东莞市东城墨竹公子电子工作室! s0 Q0 P* O* P* F$ S9 u9 N
日期:2024.11.03! D# r- O+ E- n8 q
第六节 课后作业
, g- E4 `1 m% c8 m$ m  按下按键ASW1,AL3翻转。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


联系客服 关注微信 下载APP 返回顶部 返回列表