第12讲 矩阵按键 知识点:
1、 单片机程序的一般结构
2、 keil 基本使用
3、 单片机识别按键的注意点
4、 识别矩阵按键的一种方法
一、单片机程序的一般结构
1、前后台结构 前后台结构是最常用的结构。所谓前后台结构就是主循环+中断的方式,主
循环称为后台,前台就是中断程序。主循环用 while(1)或其它死循环结构轮询
任务,而前台负责处理实时性要求较高的任务,或者外部中断任务,一般把按键 扫描、显示扫描放在定时中断里。
2、占用式程序与非占用式程序
凡是用 while、for 等循环语句实现的程序都称为占用式程序。占用式程序的特 点是 CPU 必须执行完所有的循环任务才能退出,除非有中断发生,比如我们做的 独立按键处理程序就是占用式程序。在单片机程序设计中要尽量避免设计占用式 程序。与其相对应的是非占用式程序,非占用式程序能提高 CPU 的使用效率,让 所有的任务都能及时得到响应。
二、keil 基本使用
1、点击工程文件图标,进入源代码编辑区。
2、保存、编译、生成 hex 文件
3、下载、运行
三、单片机识别按键的注意点
识别哪个键被按下(通过读取键码的方式)、识别按键所处的状态(有效方 式),常用的有效方式:抬起有效、按下有效、组合有效、长按有效等
四、识别矩阵按键的一种方法
矩阵式按键接法,是利用单片机的IO 口组成行与列,在行与列的每一个 交点处连接按键。故也称为矩阵式按键。电路结构如下所示:
file:///Z:/TEMP/msohtmlclip1/01/clip_image002.jpg
这种按键的识别方法,我们会在第 5 个知识点上详细讲解。
五、单片机识别按键的一般思路:
一般情况下,单片机识别按键的目的是识别当前按键的状态,意 思就是说,一要识别是哪个键动作了(键码),还要识别当前按键 是何状态,也称为有效方式,当然了这里的状态大多是与时间有关的,并执行相应的动作。比如,开发板上独立式按键实验,当按键 按下并抬起时,LED 被点亮。这是最简单的识别。因为是一支按键,所以不用识别是哪个键被按下,只需识别按键的状态。一般的按键 状态有以下几种:按下,抬起,长按,组合,长按多长时间等等。
一个完整的按键动作必须包含下面四个阶段: 按键按下-à按下消抖-à按键抬起-à抬起消抖 在单片机与按键接口程序中,往往先进行按下消抖,而对按键状态的 判断就是指按键处理了。这里的按键处理不是执行相应的动作,而是 区分按键此刻处于何种状态,并改变相应状态变量的值,以便程序其 它地方通过检测相应的按键状态变量去执行相应的动作。比如,我们可以把按下并抬起的短按点亮 LED,改成长按一段时间点亮 LED。总的来讲,单片机识别按键就分为三个阶段:按键消抖---按键处理---
按键执行。这个思路适用于所有形式的按键。至于为什么要消抖?是 因为我们在操作按键时,不可能立即按下或抬起,机械式按键接触面 不是立刻就接触或断开的,而单片机的检测速度特别快,这样往往会 发生误判,因此,我们要等待电平稳定了,再去处理按键。消抖的方 式很简单,就是利用延时,等待一个稳定电平的到来。
H:表示行;L:表示列;
| L0 P13
| L1 P12
| L2 P11
| L3 P10
|
| H0 P17
| 0
| 1
| 2
| 3
|
| H1 P16
| 4
| 5
| 6
| 7
| |
H2 P15
| 8
| 9
| 10
| 11
|
| H3 P14
| 12
| 13
| 14
| 15
|
|
|
|
|
|
|
| 我们先测试列,测试列时,把行控 IO 设置为 0,列空IO 设置为 1
即:P1 = 0X0F;此时若有按键被按下,我们可以得到 4 组编码:
0X07,0X0B,0X0D,0X0E;每一组又对应列的四个按键。然后我们再测试行:P1 = 0XF0;又可以得出四个按键编码,这样就可以判断是哪个键被按下了。这里依然是抬起有效。
这是以前给小学生培训单片机做的一套讲义,尽可能的做到了通俗易懂,现分享给大家,绝对的纯原创资料.
全部资料下载地址(共15章,pdf格式):http://www.51hei.com/bbs/dpj-98524-1.html
|