《嵌入式技术应用开发项目教程》项目4 嵌入式键盘与中断控制
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
嵌入式键盘与中断控制
教学目标
知识目标
技能目标
素质目标
1.了解独立式和矩阵式键盘结构;2.掌握键盘的接口电路和程序设计的方法;3.掌握LK32T102单片机外部中断的设置;4.掌握外部中断的编程方法和中断服务程序编写。
能完成独立式和矩阵式键盘电路设计,能应用C语言程序完成对键盘的按键识别程序设计,实现中断方式的按键控制设计、运行及调试。
任务11 矩阵键盘设计
任务11 矩阵键盘设计
4×4矩阵键盘行线依次连接到LK32T102单片机PB口的PB8~PB11引脚上,列线依次连接到PB12~PB15引脚上。
4×4矩阵键盘的程序设计,本任务采用常见的行列反转扫描方法。(1)判断有无键按下方法是:PB口输出0x0f00,既PB12~PB15输出低电平、PB8~PB11输出高电平;然后读PB口,若高8位的低4位PB8~PB11全为1,则键盘上没有键按下,若PB8~PB11不全为1,则有键按下。(2)消除按键的抖动方法是:当判断到键盘上有键按下后,先延时一段时间,再判断键盘的状态,若仍为有键按下状态,则认为有一个键按下,否则当作按键抖动来处理。(3)保存按键的行号方法是:消除按键的抖动后,仍有行线为低电平“0”,该行线既为按键按下的所在行,保存该按键所在的行号。
任务11 矩阵键盘设计
编写矩阵键盘设备文件
02
任务11 矩阵键盘设计
(1)矩阵键盘设备头文件keyboard4x4.h
编写矩阵键盘设备文件
02
任务11 矩阵键盘设计
(2)矩阵键盘设备驱动文件keyboard4x4.c
修改oledfont.h头文件
02
任务11 矩阵键盘设计
根据任务描述要求,需要在OLED显示屏在显示“矩阵键盘测试、按键被按下、朗迅科技公司”等汉字、显示“0~9、A~D、*、#”等字符。ASCII常用字符集的点阵数据不需要提取,只要更换“按键被按下”等汉字的点阵数据即可,修改的oledfont.h头文件。
任务11 矩阵键盘设计
(1)逐行扫描法逐行扫描法是最常见的方法是按键识别的扫描方法,其方法是往列线上按顺序一列一列的送出低电平。1)先送第0列为低电平,其它列为高电平,读入的行的电平状态就表明了第0列的4个键的情况,若读入的行值全为高电平,则表示无键按下;2)再送第1列为低电平,其它列为高电平,读入的行的电平状态则显示了该列上的4个按键的情况,若读入的行值全为高电平,则表示无键按下;3)然后依次轮流给各列送出低电平,直至4列全部送完,再从第0列开始,依此循环。
(2)如何识别按下的按键在判断有键按下后,可以通过程序逐个检测PA0、PA1、PA10以及PA11中的哪个引脚是“0”,这样就可以识别出是哪一个键按下,并返回需要的键值,按键S2的键值是1、S3的键值是2、S4的键值是3、S5的键值是4。(3)按键去抖软件方法去抖。当有键按下时,先调用一个延时10ms左右的延时函数,然后再确认该按键是否还在按下状态,若是则表示本次按键按下不是由抖动造成的,否则就是由抖动造成。
【技能训练4-1】一键多功能控制设计
通过按键S2实现4个功能控制,功能要求:(1)第1次按下S2,执行功能1模块代码:LED1点亮,LED2、LED3和LED4熄灭;(2)第2次按下S2,执行功能2模块代码:LED2点亮,LED1、LED3和LED4熄灭;(3)第3次按下S2,执行功能3模块代码:LED3点亮,LED1、LED2和LED4熄灭;(4)第4次按下S2,执行功能4模块代码:LED4点亮,LED1、LED2和LED3熄灭;(5)重复(1)~(4)操作。
任务10 按键控制设计
程序下载与调试
04
(1)修改好主文件main.c后,我们就可以直接对工程进行编译,生成目标代码文件。若编译发生错误,要进行分析检查,直到编译正确。(2)然后连接J-link下载 器和开发板,单击快捷工具栏的
按键完成程序下载。
【技能训练4-1】一键多功能控制设计
嵌入式键盘与中断控制
任务10 按键控制设计
01
编写按键设备文件
02
(1)编写KEY.h头文件(2)编写KEY.c文件
任务10 按键控制设计
编写主文件main.c
02
任务10 按键控制设计
工程编译
03
1.把Project Targets栏下的LK32T102_M0名,修改为M0_KEY
2.对工程进行编译,若编译发生错误,要进行分析检查,直到编译正确
任务10 按键控制设计
硬件双稳态去抖动电路
软件去抖流程
任务10 按键控制设计
任务10 按键控制设计
按键控制电路是由基于Cortex-M0的LK32T102单片机、按键电路、LED电路以及蜂鸣器电路组成。其中4个按键电路设计如下图:
任务10 按键控制设计
(1)如何判断有键按下当按键S2按下时,S2闭合,使得PA0引脚经S2接地,被拉低为低电平,既PA0引脚为“0”。当按键S2未按下时,S2断开,使得PA0引脚经上拉电阻接电源,被拉高为高电平,既PA0为“1”,按键S3、S4和S5同理。
按照按键的结构原理分为如下2类:(1)触点式开关按键。(2)无触点开关按键。
任务10 按键控制设计
按照键盘的接口原理,键盘可以分为如下2类:(1)编码键盘。编码键盘主要是用硬件来实现对按键的识别,硬件结构复杂;(2)非编码键盘。非编码键盘主要是由软件来实现按键的定义与识别,硬件结构简单,软件编程量大。这2类键盘的主要区别是识别键符及给出相应键码的方法。非编码键盘由于使用经济,较多的应用于单片机应用系统中,以下我们重点介绍非编码键盘。
1. 启发学生创新思维、关注社会发展;2.引导学生甘于奉献、勤奋学习;3.培养学生勇敢肩负起时代赋予的历史重任;4.养成优先处理重要紧急程度高的任务的做事惯。
嵌入式键盘与中断控制
任务10 按键控制设计
嵌入式键盘与中断控制
任务10 按键控制设计
嵌入式键盘与中断控制
任务10 按键控制设计
键盘由一组规则排列的按键开关组成,一个按键实际上是一个开关元件。按键的主要功能是把机械上的通断转换为电气上的逻辑关系(1和0)。
任务11 矩阵键盘设计
移植工程模板
编写源文件
工程编译
程序下载与调试
STEP01
STEP02
STEP03
STEP04
任务11 矩阵键盘设计
移植工程模板
01
复制“任务9 OLED显示设计”文件夹,然后修改文件夹名为“任务11 矩阵键盘设计”,USER文件夹下的工程名修改为Matrix_keyboard.uvprojx
任务11 矩阵键盘设计
(4)保存按键的列号方法是:在获得按键按下的所在行后,根据行列反转扫描方法,在PB口输出0xf000,既PB8~PB11输出低电平、PB12~PB15输出高电平,读取列线数据,列线为低电平“0”,则为按键按下的所在列,保存该按键所在的列号。(5)查表获得键值采用查表方式,先对按键位置表格进行查表,获得按键所在位置(既colrow数组的下标);然后根据按键所在位置(既下标)直接获得按键的键值。(6)最后根据键值转向不同的功能程序(7)判断闭合键是否释放由于按键闭合一次,只能进行一次功能操作。所以要等按键释放后,才能根据键值执行相应的功能键操作。
嵌入式技术应用开发项目教程(微课版)
——嵌入式键盘与中断控制
中断是单片机或嵌入式开发中一个相当重要的概念,定时器、串口通信等外设都需要用到中断,中断使计算机系统具备应对对处理突发事件的能力,提高了CPU的工作效率,及时响应紧急事件,我们处理事情也需要按照重要紧急的程度来安排事情的先后顺序,优先做重要紧急程度高的,提高效率。本项目从按键控制设计入手,首先让读者对键盘有一个初步了解;然后通过矩阵键盘设计,介绍键盘结构、电路设计和按键识别方法;最后通过中断方式的按键控制设计,介绍LK32T102单片机外部中断的编程方法,让读者进一步了解键盘和外部中断的应用。
任务10 按键控制设计
常见的非编码键盘种类有2种:独立式键盘和矩阵式键盘。(1)独立式键盘的结构简单,但占用的资源多;(2)矩阵式键盘的结构相对复杂些,但占用的资源较少。 因此,当单片机应用系统中只需少数几个功能键时,可以采用独立式键盘结构。而当需要较多按键时,则可以采用矩阵式键盘结构。
任务10 按键控制设计
任务11 矩阵键盘设计
(2)行列反转法行列反转法的矩阵键盘扫描过程,主要有以下2个步骤:1)先将列线全部设置为低电平“0”、行线全部设置为高电平“1”;然后将行线设置为输入线并读取行线数据,若行线全为高电平“1”,则没有按键按下,若有行线为低电平“0”,则为按键按下的所在行。2)将第一步反过来,列线全部设置为低电平“1”、行线全部设置为高电平“0”;然后将列线设置为输入线并读取列线数据,若列线全为高电平“1”,则没有按键按下,若有列线为低电平“0”,则为按键按下的所在列。
任务11 矩阵键盘设计
由于矩阵键盘的按键较多,按键的位置又是由行号和列号唯一确定的,因此可以对按键进行编码,并把得到的编码称为键值。 由以上分析,矩阵键盘有如下编程步骤:(1)先判断是否有键按下;(2)若有再判断是哪一个按键按下;(3)然后查表或计算得到键值;(4)最后根据键值转向不同的功能程序。
移植任务10工程
工程编译
一键多功能控制程序设计
程序下载与调试
【技能训练4-1】一键多功能控制设计
一键多功能控制设计(部分)
【技能训练4-1】一键多功能控制设计
任务11 矩阵键盘设计
嵌入式键盘与中断控制
任务11 矩阵键盘设计
嵌入式键盘与中断控制
任务11 矩阵键盘设计
一个4×4的行、列结构,可以构成一个含有16个按键的键盘,节省了很多IO口。按键开关的两端分别接行线和列线,列线通过上拉电阻接到+5V的电源上。
修改主文件main.c文件
02
任务11 矩阵键盘设计
工程编译
03
对工程进行编译,生成“keyboard4x4.hex”目标代码文件。若编译发生错误,要进行分析检查,直到编译正确。
任务11 矩阵键盘设计
程序下载与调试
04
(1)修改好主文件main.c后,我们就可以直接对工程进行编译,生成“LCD12864.hex”目标代码文件。若编译发生错误,要进行分析检查,直到编译正确。(2)然后连接J-link下载 器和开发板,单击快捷工具栏的
任务10 按键控制设计
移植工程模板
编写源文件
工程编译
程序下载与调试
STEP01
STEP02
STEP03
STEP04
任务10 按键控制设计
移植工程模板
01
(1)复制“任务6 基于设备文件的声光跑马灯设计”文件夹(2)修改文件夹名为“任务10 按键控制设计”(3)修改USER文件夹下的“M0_ LED.uvprojx”工程名为“M0_KEY.uvprojx”。
任务11 矩阵键盘设计
判断是否有键按下的方法:(1)向所有的行线输出高电平,向所有的列线输出低电平(不能为高电平,因为若为高电平,按键按下与否都不会引起行线电平的变化);(2)将所有行线的电平状态读入;(3)判断所有行线是否都保持高电平状态。若无键按下,所有的行线仍保持高电平状态;若有键按下,行线中至少应有一条线为低电平。
机械式按键在按下或释放时,由于机械弹性作用的影响,通常伴随有一定时间的触点机械抖动,然后其触点才稳定下来。其抖动过程如右图所示,抖动时间的长短与开关的机械特性有关,一般为5~10ms。
消除抖动常用的方法有:硬件去抖和软件去抖。在按键数较少时,可采用硬件去抖,而当按键数较多时,采用软件去抖。
按键触点的机械抖动
在“任务10 按键控制设计”中,是通过4个按键来完成控制的。那么,我们如何实现一键多功能控制呢?
【技能训练4-1】一键多功能控制设计
对于要通过一个按键来完成不同功能控制,我们可以给每个不同的功能模块,使用不同的ID号标识,这样就使得每按下一次按键,ID的值是不相同的,所以就很容易识别不同功能的身份了。给LED1到LED4点亮的时段,定义出不同的ID号,LED1点亮时,ID=1;LED2点亮时,ID=2;LED3点亮时,ID=3;LED4点亮时,ID=4。很显然,只要每次按下按键,就分别给出不同的ID号,就能够完成上面的任务了。
按键完成程序下载。
任务11 矩阵键盘设计
任务12 中断方式的按键控制设计
嵌入式键盘与中断控制
1.认识LK32T102单片机中断2.中断方式的按键控制设计与实现