找回密码
 注册
关于网站域名变更的通知
查看: 178|回复: 2
打印 上一主题 下一主题

单片机讲义12:矩阵按键

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-6-7 10:55 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
第12讲 矩阵按键
知识点:  `3 A1 b) L# o2 m: T" h
1、 单片机程序的一般结构
8 A( E4 I' Q7 C8 }; d2、 keil 基本使用  T' d) B4 }# x
3、 单片机识别按键的注意点5 K% S9 d- S' V
4、 识别矩阵按键的一种方法

7 w0 N. w* e1 @1 f7 f
; B. U9 R6 M- u2 B; Y& o# v一、单片机程序的一般结构5 W6 D5 i% u6 t2 `3 J4 i% @6 K
1、前后台结构 前后台结构是最常用的结构。所谓前后台结构就是主循环+中断的方式,主4 L% C  S0 @. ~0 U9 Q
循环称为后台,前台就是中断程序。主循环用 while(1)或其它死循环结构轮询
; a; @+ F* v! X4 v: v+ e% o任务,而前台负责处理实时性要求较高的任务,或者外部中断任务,一般把按键 扫描、显示扫描放在定时中断里。, k( w% Q& z! ?' ^8 K+ d# ~- b
2、占用式程序与非占用式程序  W$ U0 `7 F  \5 U  m/ C& \2 S. I
凡是用 while、for 等循环语句实现的程序都称为占用式程序。占用式程序的特 点是 CPU 必须执行完所有的循环任务才能退出,除非有中断发生,比如我们做的 独立按键处理程序就是占用式程序。在单片机程序设计中要尽量避免设计占用式 程序。与其相对应的是非占用式程序,非占用式程序能提高 CPU 的使用效率,让 所有的任务都能及时得到响应。: x0 t; E+ r& m' _' x
二、keil 基本使用+ ^2 G( M# T) L( G
1、点击工程文件图标,进入源代码编辑区。
+ C, a3 {& T6 _; ?  k2、保存、编译、生成 hex 文件( A- N% z) M! W9 ?
3、下载、运行
! j" G& C" Y8 h" _' }

( F) s  v6 X4 B; e8 \& c9 d8 j三、单片机识别按键的注意点2 k8 r3 j% A( q. a+ j7 I  t4 N
识别哪个键被按下(通过读取键码的方式)、识别按键所处的状态(有效方 式),常用的有效方式:抬起有效、按下有效、组合有效、长按有效等- v$ W/ Z3 ^  a

5 d. H+ O- ~( J' G. I- |# ~
四、识别矩阵按键的一种方法
& O" z6 F* o5 b& D3 m+ E: k9 z' P矩阵式按键接法,是利用单片机的IO 口组成行与列,在行与列的每一个 交点处连接按键。故也称为矩阵式按键。电路结构如下所示:
0 N  d5 J- }# B6 D; ^: C2 H
file:///Z:/TEMP/msohtmlclip1/01/clip_image002.jpg
8 o3 [6 t3 q/ ]这种按键的识别方法,我们会在第 5 个知识点上详细讲解。
: H; p4 W' l' f8 F+ ~0 W2 @4 P) o* Y/ I$ B

) ~- J4 \( m! C* C五、单片机识别按键的一般思路:
) I1 A! P8 ]7 {0 L' @! v! ]

一般情况下,单片机识别按键的目的是识别当前按键的状态,意 思就是说,一要识别是哪个键动作了(键码),还要识别当前按键 是何状态,也称为有效方式,当然了这里的状态大多是与时间有关的,并执行相应的动作。比如,开发板上独立式按键实验,当按键

按下并抬起时,LED 被点亮。这是最简单的识别。因为是一支按键,所以不用识别是哪个键被按下,只需识别按键的状态。一般的按键 状态有以下几种:按下,抬起,长按,组合,长按多长时间等等。
' ]! H, X! V7 \! d7 M! X- J3 `+ _3 j6 l' O

一个完整的按键动作必须包含下面四个阶段: 按键按下-à按下消抖-à按键抬起-à抬起消抖 在单片机与按键接口程序中,往往先进行按下消抖,而对按键状态的 判断就是指按键处理了。这里的按键处理不是执行相应的动作,而是 区分按键此刻处于何种状态,并改变相应状态变量的值,以便程序其 它地方通过检测相应的按键状态变量去执行相应的动作。比如,我们可以把按下并抬起的短按点亮 LED,改成长按一段时间点亮 LED。总的来讲,单片机识别按键就分为三个阶段:按键消抖---按键处理---

. I+ E$ I: g$ Q# L. d6 l& r
按键执行。这个思路适用于所有形式的按键。至于为什么要消抖?是 因为我们在操作按键时,不可能立即按下或抬起,机械式按键接触面 不是立刻就接触或断开的,而单片机的检测速度特别快,这样往往会 发生误判,因此,我们要等待电平稳定了,再去处理按键。消抖的方 式很简单,就是利用延时,等待一个稳定电平的到来。
; ^& e' P, y9 M6 W- ]* V( |0 `3 W# x, Q: R7 ~8 H: {
六、识别行列式按键的一种方法
H:表示行;L:表示列;, g7 @5 B. o7 I9 o& l, r
+ Z& k" t* G) q! T2 _
2 A% n; s$ _! d6 e8 Q) B3 a- l
  L0 P13
. ]( Y6 W& o" g( V8 A
  L1 P12; e$ G) J4 S, e- Y9 N
  L2 P11
; k$ V' a1 r" y& v# J3 |' ?. Z6 Y
  L3 P10  Q2 w% G, b: p- ]
   
4 g( ~: Y; m" e; K! @3 n' w% k% I
  H0  P17: }! [. c& N8 r& v0 F0 ~
  0
0 T) ?: X8 a  J
  1
/ Z6 W6 t/ `4 Z  N
  24 O, c6 |0 R0 z3 P6 J2 P, B8 r9 }4 T
  3
* D* }% i8 S1 _. l& x& G% _9 M
   
1 n4 f# V9 v& o
  H1  P16
/ R4 p' Q7 H6 p" v% B+ W; F$ R
  4
. s$ y6 U. g6 R8 q
  5
8 x6 d! B( t4 j5 [6 Z+ o
  6
1 c' c) w, Z( a/ r2 T) V8 x
  7
6 d0 `1 K& q5 i
   
  H2  P15$ P1 Q- W7 n- z# t
  8% j% R5 D% j) y, i. f1 }
  9
1 R3 n) c# E8 Z4 ?: \
  10
; ~& Z6 y, k, p) T: a- c
  111 l2 y  d. m8 J
   / E0 b9 n  t* }! B* B
  H3  P141 D& j1 B: R: S! f5 I4 r
  12
% s# Q4 r, O3 `& y" L; Q2 Y$ t
  13
3 H/ n( E( k- t; C
  14! i: U6 m; @1 y# g
  15; a  N& U0 P& Z) _8 n1 U
   
2 G# W( O/ I7 i8 H0 W

+ j) P% i$ d- @: Z
' J: f9 j& a/ d0 O  T7 t( F

; _; w4 N) k% D* u% e

, e+ E7 u. U0 C; |+ i1 y
4 {8 ]; p0 ]$ M* C2 V
- D! }1 n, ?/ n/ p4 K% c, i7 B* \1 d
我们先测试列,测试列时,把行控 IO 设置为 0,列空IO 设置为 1( r7 o9 V# F* c9 h
即:P1 = 0X0F;此时若有按键被按下,我们可以得到 4 组编码:4 \: @! u7 i( |' L: x$ Y, G
0X07,0X0B,0X0D,0X0E;每一组又对应列的四个按键。然后我们再测试行:P1 = 0XF0;又可以得出四个按键编码,这样就可以判断是哪个键被按下了。这里依然是抬起有效。% r3 O/ g& E( Z8 w3 Q

该用户从未签到

2#
发表于 2022-6-7 13:46 | 只看该作者
非常详细,感谢作者

该用户从未签到

3#
发表于 2022-6-7 16:04 | 只看该作者
非常详细,感谢作者
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-24 17:54 , Processed in 0.125000 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表