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

单片机讲义12:矩阵按键

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
第12讲 矩阵按键
知识点:
" Q! {& \" Z2 x1 m) r9 H1、 单片机程序的一般结构) u5 Q6 S% v$ i9 i+ x
2、 keil 基本使用/ o& e' o% r* p. I
3、 单片机识别按键的注意点: y% c3 S1 Z) g, G! l& ?
4、 识别矩阵按键的一种方法
; h* z) V* L& \  Z8 Q; A9 W

" f( F" i% b4 A. v一、单片机程序的一般结构" z: N" [4 N3 {- a
1、前后台结构 前后台结构是最常用的结构。所谓前后台结构就是主循环+中断的方式,主
2 n+ T( G, @$ H' t; N7 w3 D循环称为后台,前台就是中断程序。主循环用 while(1)或其它死循环结构轮询
7 u& \9 @3 H) f任务,而前台负责处理实时性要求较高的任务,或者外部中断任务,一般把按键 扫描、显示扫描放在定时中断里。
% {9 \1 H. ]" h2、占用式程序与非占用式程序
. N6 Z/ |1 c# u  ~. c# X: F凡是用 while、for 等循环语句实现的程序都称为占用式程序。占用式程序的特 点是 CPU 必须执行完所有的循环任务才能退出,除非有中断发生,比如我们做的 独立按键处理程序就是占用式程序。在单片机程序设计中要尽量避免设计占用式 程序。与其相对应的是非占用式程序,非占用式程序能提高 CPU 的使用效率,让 所有的任务都能及时得到响应。
7 `  [9 \% ~/ Z
二、keil 基本使用9 C: q0 n* J2 }. f2 K- ?
1、点击工程文件图标,进入源代码编辑区。$ s5 v& r1 X3 T" D# [% ?+ j
2、保存、编译、生成 hex 文件
1 f! w3 }8 X/ f3、下载、运行 7 e4 I. l* y, B( U) O$ t

# M+ Y0 T" x0 {8 n三、单片机识别按键的注意点) m" ~& L8 r: }) g: c
识别哪个键被按下(通过读取键码的方式)、识别按键所处的状态(有效方 式),常用的有效方式:抬起有效、按下有效、组合有效、长按有效等, |$ E8 J3 X4 U5 Q0 J
- E  d& `" m+ U0 `
四、识别矩阵按键的一种方法
4 l3 F! g: Z8 @; }$ o8 L" b矩阵式按键接法,是利用单片机的IO 口组成行与列,在行与列的每一个 交点处连接按键。故也称为矩阵式按键。电路结构如下所示:
7 k1 B/ k1 X, m$ V: v7 w
file:///Z:/TEMP/msohtmlclip1/01/clip_image002.jpg  o! j4 C8 K2 V
这种按键的识别方法,我们会在第 5 个知识点上详细讲解。
# @# J2 V0 ]5 K  a4 P3 N% i3 R$ g5 _
" [7 {: M$ U& v5 I2 V
五、单片机识别按键的一般思路:
: p5 G* T: Q/ V; c- b6 u

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

按下并抬起时,LED 被点亮。这是最简单的识别。因为是一支按键,所以不用识别是哪个键被按下,只需识别按键的状态。一般的按键 状态有以下几种:按下,抬起,长按,组合,长按多长时间等等。
2 ]: S4 X1 U7 i$ x5 |% V8 Z! o- g: i* b6 W7 l( v' |

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

* |- p; O2 ~+ M$ D* ~
按键执行。这个思路适用于所有形式的按键。至于为什么要消抖?是 因为我们在操作按键时,不可能立即按下或抬起,机械式按键接触面 不是立刻就接触或断开的,而单片机的检测速度特别快,这样往往会 发生误判,因此,我们要等待电平稳定了,再去处理按键。消抖的方 式很简单,就是利用延时,等待一个稳定电平的到来。; S. J8 o% t1 `4 Y& i: Y2 O1 |( h6 x" @
0 e6 X7 g8 Q5 T1 K3 F- |
六、识别行列式按键的一种方法
H:表示行;L:表示列;
' L' \2 w1 n9 w. {5 y . I# M$ B: S. P! N6 A. l* m
( ^* w& c, U0 K1 s( ^# y
  L0 P13
7 W% Z2 ]1 a' z% o9 E% p2 {
  L1 P12
9 D/ {1 W7 P& T+ p: Y7 ^; l" p
  L2 P11
0 z& W  v* M. O' T! ]# q
  L3 P10
4 Z5 S; i4 h: t% ]+ s
     D2 h8 E1 I- ^, B* c9 H& Y! q
  H0  P172 T) m& ?6 K6 ~* G. h
  07 {5 j3 v6 ]2 V( J2 C; u
  1
( B5 s# W+ a" y0 F6 a1 H
  29 b& d8 H. b7 w, o4 p+ c; {0 q7 |% M
  3
6 g. ?. L5 _/ {
   
& @5 q' j' Q1 G/ M
  H1  P16
$ E) V' n9 k9 l6 p# M
  4: p6 b& l+ `9 [0 u5 o; g$ I% W
  51 L4 ?7 }3 E+ V+ O& |7 F
  6$ B& ?1 u& X7 O7 b  X0 H3 g5 `
  7
9 D- B! y. h, |- W" k  x6 N
   
  H2  P154 v, l6 I3 d6 m7 C' U& h* W, N/ W
  8
- ]6 h8 b$ F4 t% D( K! J9 A! w  r) b
  93 f) m9 N9 `7 u7 B4 m" v. A- x0 t4 z
  101 Q1 B9 |& g3 f4 {3 A
  113 P3 R4 M7 _! p6 X5 \
   0 c* n% m8 M8 v) R# u
  H3  P14
0 _' W- x+ O4 O2 W: J  w  n: W
  12' W. y7 ?6 p$ {1 P& n; F
  138 B: ~* P$ M( h6 t5 E
  14, H: E- i9 }7 T0 H
  15; z) W! G' s! M  H
   
- C8 S) P, a& I
0 |( g, D; z8 P& c9 p4 b
) P# M# t1 {1 Z8 _# Q
( h) A% t* f- ~0 i+ J
8 r/ {0 v- ?5 Q( N/ q( J/ v( \5 F
3 k( K9 D, X! \3 V1 j

2 f2 {& u3 `' R
我们先测试列,测试列时,把行控 IO 设置为 0,列空IO 设置为 1/ z9 @* y8 U: n' Q! ~+ _
即:P1 = 0X0F;此时若有按键被按下,我们可以得到 4 组编码:  P; C! w  y7 n3 S
0X07,0X0B,0X0D,0X0E;每一组又对应列的四个按键。然后我们再测试行:P1 = 0XF0;又可以得出四个按键编码,这样就可以判断是哪个键被按下了。这里依然是抬起有效。
. g' f2 W+ Y8 P% B

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-4 21:29 , Processed in 0.109375 second(s), 26 queries , Gzip On.

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

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

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