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

单片机讲义12:矩阵按键

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
第12讲 矩阵按键
知识点:4 a2 k, X  Z( L
1、 单片机程序的一般结构
7 i: `2 A& E9 s$ }! W+ R4 V  U( I2、 keil 基本使用
. x4 {- ?' S  ?( ]3、 单片机识别按键的注意点
5 P/ k% L- t( d& q3 V4、 识别矩阵按键的一种方法
, n2 i4 Y8 q0 U* ?4 g$ |. [  r
4 f& I& ^0 ?) Q; V7 d! Z: U8 [, E, D( ^
一、单片机程序的一般结构
3 `1 Z! z1 p  }2 ]' Q  n1 ~' O$ z1、前后台结构 前后台结构是最常用的结构。所谓前后台结构就是主循环+中断的方式,主
/ X  w/ R  @8 Z' w+ f  w( o1 P循环称为后台,前台就是中断程序。主循环用 while(1)或其它死循环结构轮询
2 U& v+ p  I: b! X+ S; K任务,而前台负责处理实时性要求较高的任务,或者外部中断任务,一般把按键 扫描、显示扫描放在定时中断里。
2 B2 t/ p6 w; M6 F9 e2、占用式程序与非占用式程序6 S' s* u+ C2 ~7 S2 y3 I
凡是用 while、for 等循环语句实现的程序都称为占用式程序。占用式程序的特 点是 CPU 必须执行完所有的循环任务才能退出,除非有中断发生,比如我们做的 独立按键处理程序就是占用式程序。在单片机程序设计中要尽量避免设计占用式 程序。与其相对应的是非占用式程序,非占用式程序能提高 CPU 的使用效率,让 所有的任务都能及时得到响应。7 e2 _  S; o2 s+ O& @# L# M  ~( a! K
二、keil 基本使用4 Q7 U  }% q8 r- t& u4 E8 \
1、点击工程文件图标,进入源代码编辑区。- ?7 \3 S. C! I
2、保存、编译、生成 hex 文件
/ A& j9 ^! ^7 O( I7 y5 v3、下载、运行
* g" I: h/ \2 q
5 \, u: q" l) v8 M0 T" P
三、单片机识别按键的注意点
  w4 q/ V4 i8 ]7 K9 Z( N1 k识别哪个键被按下(通过读取键码的方式)、识别按键所处的状态(有效方 式),常用的有效方式:抬起有效、按下有效、组合有效、长按有效等
$ o. O) j  ^& b. `6 S6 V/ w$ Y2 b; M, ?/ ^+ K' E" l& y
四、识别矩阵按键的一种方法
; R' F  ~7 j  t& t" q6 p; ?矩阵式按键接法,是利用单片机的IO 口组成行与列,在行与列的每一个 交点处连接按键。故也称为矩阵式按键。电路结构如下所示: ! ^6 Z( X: u$ p  K- H. ]1 y
file:///Z:/TEMP/msohtmlclip1/01/clip_image002.jpg$ @' I" E. J; A% P2 C7 U
这种按键的识别方法,我们会在第 5 个知识点上详细讲解。
4 u! |: k7 s- t" O; y9 U& S8 V5 ^2 G! Z; ~
( z! N' {7 g! w* v8 z
五、单片机识别按键的一般思路:& L( v2 |( K& E+ w

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

按下并抬起时,LED 被点亮。这是最简单的识别。因为是一支按键,所以不用识别是哪个键被按下,只需识别按键的状态。一般的按键 状态有以下几种:按下,抬起,长按,组合,长按多长时间等等。8 _/ h/ x6 Q4 D' c: ]! S

' \" l# @7 I7 [! o

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


8 Y( k6 @$ G1 g3 c按键执行。这个思路适用于所有形式的按键。至于为什么要消抖?是 因为我们在操作按键时,不可能立即按下或抬起,机械式按键接触面 不是立刻就接触或断开的,而单片机的检测速度特别快,这样往往会 发生误判,因此,我们要等待电平稳定了,再去处理按键。消抖的方 式很简单,就是利用延时,等待一个稳定电平的到来。
9 S9 L8 [" b& i
) n: h& V- H/ w4 `2 ~" ?
六、识别行列式按键的一种方法
H:表示行;L:表示列;
. H5 X0 e# H$ y* A; A* C# K5 G : P; _; m, P: z, `# D  G

; g( \  j/ i' J: }+ B3 X$ n
  L0 P13: C8 \9 V. @: ^* ^8 @
  L1 P12
" O4 s+ J# v. u) z
  L2 P11
- z2 r# u: G1 {9 j1 ]/ N$ w2 \/ G
  L3 P10
" Q' {% N# }/ X- F1 e
   1 A/ F2 ^8 V" i3 X5 K
  H0  P177 I# L2 P, V7 ]" m8 d0 l5 v% C
  0
- E  P+ _8 j9 t5 \! G6 d
  1
0 W3 y  M0 T$ N3 a7 \1 N
  2
  C2 z+ x' l( T/ H
  3
! {# i' k9 M8 t, x- L" c
   
5 B" P( D; ?; K  W, _# D
  H1  P164 v8 t1 N% O+ }1 E$ x2 m
  4
" ~1 Q, ^7 b4 h% {, z+ _% s) m
  5
  I0 d- z8 p7 _8 e" d% C5 G
  6
9 T# h3 Y1 s* D8 O
  7) o) ?8 [5 A, ~
   
  H2  P15
% ^0 `. c1 n& b3 w% ?$ V- A
  8
+ q/ j$ z/ ?1 S- Y( w' }& ~
  9. n2 p' Z3 H: O. H5 @7 [! \; l, X
  10
7 F, W( ^, ]) t( {7 u  f
  11
: {) m+ }! Q- s$ N6 A2 X
   + {7 e8 k3 q7 x
  H3  P14. Z5 b' C# p& ?/ |9 q
  12
0 w# K, S" z% }. z
  13: Y0 y% g& K2 l+ Q* _6 d
  14, d' E. F# b" p4 W. ]0 I$ X! _  L  r
  15
9 |  g3 D2 ^; I
   
. O( _" b  V* j; ~  L
4 f. d3 O, g, k
7 [7 b; Q, L5 W& M" J

# n% X. R& M; a6 {- E- Z

+ S- ?! u% N. A6 S0 h" p% e! n  R
( R" [' S3 e5 s4 ]% n6 j

( G* U0 j. G  P) \) v
我们先测试列,测试列时,把行控 IO 设置为 0,列空IO 设置为 1
) d- W# i' g# `$ f/ \# `即:P1 = 0X0F;此时若有按键被按下,我们可以得到 4 组编码:
6 n; X0 Z# X2 w2 U0X07,0X0B,0X0D,0X0E;每一组又对应列的四个按键。然后我们再测试行:P1 = 0XF0;又可以得出四个按键编码,这样就可以判断是哪个键被按下了。这里依然是抬起有效。+ K/ ^% u5 H- r, O4 ?% J. P

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-18 10:10 , Processed in 0.109375 second(s), 26 queries , Gzip On.

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

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

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