单片机应用技术项目教程(C语言版)项目四-键盘设计与实现PPT课件_第1页
单片机应用技术项目教程(C语言版)项目四-键盘设计与实现PPT课件_第2页
单片机应用技术项目教程(C语言版)项目四-键盘设计与实现PPT课件_第3页
单片机应用技术项目教程(C语言版)项目四-键盘设计与实现PPT课件_第4页
单片机应用技术项目教程(C语言版)项目四-键盘设计与实现PPT课件_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

十二五 职业教育国家规划教材 经全国职业教育教材审定委员会审定 单片机应用技术项目教程 C语言版 第二版 项目四键盘的设计与实现 教学目的 掌握键盘电路的设计方法和编程方法 了解中断的基本概念和功能 掌握51单片机中断系统的结构和控制方式 掌握中断系统的中断处理过程 4 1模块9独立式键盘设计与实现 工作任务 使用AT89S52单片机 设计一个具有8个按键的独立式键盘 每个按键对应一个发光二极管 功能要求 无键按下时 键盘输出全为 1 发光二极管全部熄灭 有键按下时 其所对应发光二极管点亮 4 1 1认识键盘 键盘是单片机应用系统中人机交流不可缺少的输入设备 用于输入数据和控制信息 键盘由一组规则排列的按键组成 键盘通常使用机械触点式按键开关 常见的种类有 查询 独立 式键盘 结构简单 占资源多 适合按键少的单片机应用系统 矩阵式键盘 结构复杂 占资源少 适合按键多的单片机应用系统 键盘分类 按键按照结构原理可分为两类触点式开关按键 如机械式开关 导电橡胶式开关等 无触点开关按键 如电气式按键 磁感应按键等 前者造价低 后者寿命长 按键按照接口原理可分为两类编码键盘 主要是用硬件来实现对按键的识别 硬件结构复杂 非编码键盘 主要是由软件来实现按键的定义与识别 硬件结构简单 软件编程量大 这里我们主要介绍单片机中常用的非编码键盘 用的是触点式开关按键 4 1 2独立式键盘电路设计 1 画出按键电路简化图2 特点 每个按键单独占有一根I O线 每个按键的工作不会影响其它I O线的状态 4 1 3独立式键盘程序设计 1 功能分析 无键按下时 P0的8个I O口线均通过电阻接高电平 信息为 1 P1口输出全为 1 发光二极管全部熄灭 有键按下 将使对应的I O口线通过该键接地 信息为 0 P1口对应的口线输出低电平 其连接的发光二极管点亮 因此 CPU可以通过检测P0的8个I O口线哪个是 0 就可以识别是否有键按下 并能识别出是哪一个键按下 另外注意键盘防抖的问题 2 独立式键盘程序 独立式键盘程序演示某一键按下 对应LED亮 多个按键按下LED不亮 为什么 分析程序 如果在多个键按下时 对应的LED都亮 怎么修改程序 假设8个按键分别为1 8 用数码管显示按下的按键编号 怎样设计 4 1 4键盘防抖动措施 机械式按键在按下或释放时 由于机械弹性作用的影响 通常伴随有一定时间的触点机械抖动 然后其触点才稳定下来 其抖动过程如右图所示 若有抖动 按键按下会被错误地认为是多次操作 抖动时间的长短与开关的机械特性有关 一般为5 10ms 按键触点的机械抖动 防抖动措施 为了克服按键触点机械抖动所致的检测误判 必须采取去抖动措施 可从硬件 软件两方面予以考虑 键数较少时 采用硬件去抖 键数较多时 采用软件去抖 软件上采取的措施是在检测到有按键按下时 执行一个10ms左右 具体时间应视所使用的按键进行调整 的延时程序 再确认该键电平是否仍保持闭合状态电平 若仍保持闭合状态电平 则确认该键处于闭合状态 从而消除抖动的影响 电路构成 R S触发器未按时 输出为1按下时 输出为0 技能训练4 1 一键多功能按键识别设计与实现功能要求 按键接在P3 0管脚上 在AT89S52单片机的P1端口接有四个发光二极管 上电的时候 接在P1 0管脚上的发光二极管D1在闪烁 当第一次按下按键的时候 接在P1 1管脚上的发光二极管D2在闪烁 第二次按下按键的时候 接在P1 2管脚上的发光二极管D3在闪烁 第三次按下按键的时候 接在P1 3管脚上的发光二极管D4在闪烁 第四次按下按键的时候 又轮到D1在闪烁了 如此轮流下去 一键多功能按键识别软 硬件设计 分析 通过按键按下的次数来控制某个变量的值 然后根据变量不同的值来实现各个灯的闪烁 D1在闪烁时 ID 0 上电 D2在闪烁时 ID 1 第一次 D3在闪烁时 ID 2 第二次 D4在闪烁时 ID 3 第三次 循环 第四次 一键多功能按键识别程序 4 2工作模块10矩阵式键盘设计与实现 工作任务 设计一个4X4矩阵键盘 16个键分别对应0 9 A F 有键按下 数码管显示按下键对应的字符 无键按下 数码管无显示 4 2 1矩阵键盘的结构与原理 矩阵式键盘的结构单片机系统中 若使用按键较多时 通常采用矩阵式键盘 其结构如右图所示 有行线和列线组成 按键在交叉点上 由图可知 一个4 4的行 列结构 可以构成一个含有16个按键的键盘 节省了很多I O口 判断按键按下的方法 判断是否有键按下的方法是 向所有的列输出口线输出低电平 不能为高电平 因为若为高电平 按键按下与否都不会引起行线电平的变化 然后将行线的电平状态读入 若无键按下 所有的行线仍保持高电平状态 若有键按下 行线中至少应有一条线为低电平 例如 第2行与第2列交叉点的键被按下 则第2行与第2列导通 第2行电平被拉低 读入的行信号就为低电平 表示有键按下 但是判定哪个行线为低电平 只是判定有键按下 我们还是无法判别是哪个键 识别按键的方法 按键识别的扫描方法 常用 往列线上按顺序一列一列的送出低电平 先送第0列为低电平 其他列为高电平 读入的行的电平状态就表明了第0列的4个键的情况 若读入的行值全为高电平 则表示无键按下 再送第1列为低电平 其他列为高电平 读入的行的电平状态则显示了该列上的4个按键的情况 依次轮流给各列送出低电平 直至4列全部送完 再从第0列开始 依此循环 举例说明第2行与第2列交叉点的键按下时的判断过程 当第2列送出低电平时 读第2行为低电平 而其他列送出低电平时 读第2行却为高电平 由此即可断定按下的键应是第2行与第2列交叉点的键 按键编码 在这里我们是通过对按键进行编码 建立起按键 单片机和输出设备之间的联系 该编码称为键值 键值 列号 行号 4 例如 注意 行号和列号的编号是从0开始的 例如 4 4键盘控制方式 先判断是否有键按下 如有 再判断哪一键按下 并得到键码值 然后根据键码值转向不同的功能程序 4 2 2矩阵式键盘电路设计 键盘扫描程序具体实现方法 判断有无键按下去除按键的抖动求按键的键值判断闭合键是否释放 判断有无键按下 P0 4 P0 7输出0 然后读P0口 若低4位P0 0 P0 3全为1 则键盘上没有键按下 若P0 0 P0 3不全为1 则有键按下 while tmp 0 x0f 循环判断是否有键按下 P0 0 x0f 所有列输出低电平tmp P0 读行信号 去除按键的抖动 当判断到键盘上有键按下后 延时一段时间再判断键盘的状态 若仍为有键按下状态 则认为有一个键按下 否则当作按键抖动来处理 delay10ms 延时10ms去抖P0 0 x0f 所有列输出低电平tmp P0 再次读键盘状态if tmp 0 x0f continue 如果无键按下则认为是按键抖动 重新扫描键盘 求按键的键值 对键盘的列线进行扫描 P0 7 P0 4循环输出1110 1101 1011和0111 依次读P0口 若低4位全为1 则断定该列上没有键按下 否则 该列上就有键按下 按公式 rol 4 col计算得到按下键的键值 例如 P0 7 P0 4输出1101时 P0口的低四位P0 3 P0 0读入的值为1011 不全为1 就可以断定有键按下 并且是第2行和第1列交叉点的键 于是 该键的键值 2 4 1 9 按照相同的方法可以得到所有键的键值 如 return rol 4 col 判断闭合键是否释放 按键闭合一次只能进行一次功能操作 因此 等按键释放后才能根据键号执行相应的功能键操作 key scan key 有键按下 调用键盘扫描程序 并把键值送keywhile k 1 判断闭合键是否释放 直到其释放 delay10ms k scan key 4 2 3矩阵式键盘程序设计 矩阵式键盘程序思考 按键顺序若如下所示 该如何修改程序 0123456789ABCDEF 4 3工作模块11中断方式矩阵键盘 为什么要采用中断方式的矩阵键盘 模块10中的键盘扫描方法 无论是否按键 CPU都要按时扫描键盘 而单片机应用系统工作时 并非经常需要键盘输入 因此 很多扫描工作是不必要的 浪费了CPU的时间 为了提高CPU的工作效率 需要采用中断扫描工作方式 下面首先讲下中断的相关知识 4 3 1与中断相关的几个基本概念 当CPU在执行程序时 由单片机内部或外部的原因引起的随机事件要求CPU暂时停止正在执行的程序 而转向执行一个用于处理该随机事件的程序 处理完后又返回被中止的程序断点处继续执行 这一过程就称为中断 向CPU发出中断请求的来源 或引起中断的原因称为中断源 中断源可分为两大类 一类来自单片机内部 称之为内部中断源 一类来自单片机外部 称之为外部中断源 中断源要求服务的请求称为中断请求 中断系统是指能实现中断功能的硬件和软件 断点是主程序被中断的位置 中断服务程序 响应中断后转去执行的程序 主程序 原来正在执行的程序 见右图表示 4 3 2中断的功能 中断系统的功能一般包括以下几个方面 进行中断优先级排队实现中断嵌套自动响应中断实现中断返回 进行中断优先级排队 通常 单片机中有多个中断源 设计人员能按轻重缓急给每个中断源的中断请求赋予一定的中断优先级 当两个或两个以上的中断源同时请求中断时 CPU可通过中断优先级排队电路首先响应中断优先级高的中断请求 等到处理完优先级高的中断请求后 再来响应优先级低的中断请求 实现中断嵌套 CPU在响应某一中断源中断请求而进行中断处理时 若有中断优先级更高的中断源发出中断请求 CPU会暂停正在执行的中断服务程序 转向执行中断优先级更高的中断源的中断服务程序 等处理完这个高优先级的中断请求后 再返回来继续执行被暂停的中断服务程序 这个过程称为中断嵌套 自动响应中断 中断源向CPU发出的中断请求是随机的 CPU总是在每条指令的最后状态对中断请求信号进行检测 当某一中断源发出中断请求时 CPU能根据相关条件 如中断优先级 是否允许中断 进行判断 决定是否响应这个中断请求 若允许响应这个中断请求 CPU在执行完相关指令后 会自动完成断点地址压入堆栈 中断矢量地址送入程序计数器PC 撤除本次中断请求标志 转入执行相应中断服务程序 实现中断返回 CPU响应某一中断源中断请求 转入执行相应中断服务程序 在执行中断服务程序最后的中断返回指令时 会自动弹出堆栈区中保存的断点地址 返回到中断前的原程序中 中断的特点 可以提高CPU的工作效率实现实时处理处理故障 4 3 3中断系统结构 51单片机的中断系统主要由与中断有关的4个特殊功能寄存器和硬件查询电路等组成 见电路 定时器控制寄存器TCON 主要用于保存中断信息 串行口控制寄存器SCON 主要用于保存中断信息 中断允许寄存器IE 主要用于控制中断的开放和关闭 中断优先级寄存器IP 主要用于设定优先级别 硬件查询电路 主要用于判定5个中断源的自然优先级别 51子系列单片机的中断源有五个 可分为三类 外部中断 定时器溢出中断 串行口中断 外部中断是由外部原因 如打印机 键盘 控制开关 外部故障 引起的 可以通过两个固定引脚来输入到单片机内的信号 即外部中断0 INT0 和外部中断1 INT1 INT0 外部中断0中断请求信号输入端 P3 2的第二功能 由定时器控制寄存器TCON中的IT0位决定中断请求信号是低电平有效还是下降沿有效 一旦输入信号有效 即向CPU申请中断 并且硬件自动使IE0置1 INT1 外部中断1中断请求信号输入端 P3 3的第二功能 由定时器控制寄存器TCON中的IT1位决定采用电平触发方式还是边沿触发方式 一旦输入信号有效 即向CPU申请中断 并且硬件自动使IE1置1 定时中断 定时中断是由内部定时 或计数 溢出或外部定时 或计数 溢出引起的 即定时器0 T0 中断和定时器1 T1 中断 内部定时 当定时器对单片机内部定时脉冲进行计数而发生计数溢出时 即表明定时时间到 由硬件自动使TF0 TF1 置1 并申请中断 外部定时 当定时器对单片机外部计数脉冲进行计数而发生计数溢出时 即表明计数次数到 由硬件自动使TF0 TF1 置1 并申请中断 外部计数脉冲是通过两个固定引脚来输入到单片机内的 T0外部计数输入端 P3 4的第二功能 T1外部计数输入端 P3 5的第二功能 串行口中断 串行口中断是为接收或发送串行数据而设置的 串行中断请求是在单片机芯片内部发生的 RXD 串行口输入端 P3 0的第二功能 当接收完一帧数据时 硬件自动使RI置1 并申请中断 TXD 串行口输出端 P3 1的第二功能 当发送完一帧数据时 硬件自动使TI置1 并申请中断 4 3 4中断系统控制1 定时器控制寄存器TCON TCON的作用是控制定时器的启动与停止 并保存T0 T1的溢出中断标志和外部中断的中断标志 TCON的格式 TCON8FH8EH8DH8CH8BH8AH89H88H 88H 功能说明 TF1 TCON 7 定时器1溢出标志位 TR1 TCON 6 定时器1启停控制位 TF0 TCON 5 定时器0溢出标志位 TR0 TCON 4 定时器0启 停控制位 IE1 TCON 3 外部中断1请求标志位 IEl 1表示外部中断1向CPU申请中断 当CPU响应外部中断1的中断请求时 由硬件自动使IE1清0 边沿触发方式 IT1 TCON 2 外部中断1触发方式选择位 当ITl 0时 外部中断1为电平触发方式 若采到低电平 则认为有中断申请 硬件自动使IEl置1 若为高电平 认为无中断申请或中断申请已撤除 硬件自动使IEl清0 注意 CPU响应中断后硬件不能自动使IEl清0 也不能由软件使IEl清0 所以在中断返回前必须撤消INT1引脚上的低电平 否则将再次响应中断造成出错 当ITl 1时 外部中断1为边沿触发方式 若在连续两个机器周期采样到先高电平后低电平 则认为有中断申请 硬件自动使IEl置1 此标志一直保持到CPU响应中断时 才由硬件自动清0 注意 为保证CPU在两个机器周期内检测到先高后低的负跳变 输入高低电平的持续时间至少要保持12个时钟周期 IE0 TCON 1 外部中断0请求标志位 其功能同IE1 IT0 TCON 0 外部中断0触发方式选择位 其功能同IT1 2 串行口控制寄存器SCON串行口控制寄存器SCON的低2位TI和RI保存串行口的接收中断和发送中断标志 SCON的格式 SCON9FH9EH9DH9CH9BH9AH99H98H 98H 各位的功能说明 1 TI SCON 1 串行发送中断请求标志 CPU将一个字节数据写入发送缓冲器SBUF后启动发送 每发送完一帧数据 硬件自动使TI置1 但CPU响应中断后 硬件并不能自动使TI清0 必须由软件使TI清0 2 RI SCON 0 串行接收中断请求标志 在串行口允许接收时 每接收完一帧数据 硬件自动使RI置1 但CPU响应中断后 硬件并不能自动使RI清0 必须由软件使RI清0 3 中断允许寄存器IE 中断允许寄存器IE的作用是控制CPU对中断的开放或屏蔽以及每个中断源是否允许中断 IE的格式 IEAFHACHABHAAHA9HA8H A8H 功能说明 EA IE 7 CPU中断总允许位 EA 1 CPU开放中断 每个中断源是被允许还是被禁止 分别由各中断源的中断允许位确定 EA 0 CPU屏蔽所有的中断要求 称为关中断 ES IE 4 串行口中断允许位 ES 1 允许串行口中断 ES 0 禁止串行口中断 ET1 IE 3 定时器1中断允许位 ET1 1 允许定时器1中断 ETl 0 禁止定时器1中断 EX1 IE 2 外部中断1中断允许位 EX1 1 允许外部中断1中断 EX1 0 禁止外部中断1中断 ET0 IE 1 定时器0中断允许位 ET0 1 允许定时器0中断 ET0 0 禁止定时器0中断 EX0 IE 0 外部中断0中断允许位 EX0 1 允许外部中断0中断 EX0 0 禁止外部中断0中断 4 中断优先级寄存器IP 中断优先级寄存器IP的作用是设定各中断源的优先级别 IP的格式 IPBCHBBHBAHB9HB8H B8H 功能说明 PS IP 4 串行口中断优先级控制位 PS 1 串行口为高优先级中断 PS 0 串行口为低优先级中断 PT1 IP 3 定时器1中断优先级控制位 PT1 1 定时器1为高优先级中断 PTl 0 定时器1为低优先级中断 PX1 IP 2 外部中断1中断优先级控制位 PX1 1 外部中断1为高优先级中断 PXl 0 外部中断1为低优先级中断 PT0 IP 1 定时器0中断优先级控制位 PT0 1 定时器T0为高优先级中断 PT0 0 定时器0为低优先级中断 PX0 IP 0 外部中断0中断优先级控制位 PX0 1 外部中断0为高优先级中断 PX0 0 外部中断0为低优先级中断 4 3 5中断处理过程 中断响应中断处理中断返回 中断响应 CPU的中断响应条件CPU响应中断必须首先满足以下三个基本条件 有中断源发出中断请求 中断总允许位EA 1 请求中断的中断源的中断允许位为1 在满足以上条件的基础上 若有下列任何一种情况存在 中断响应都会受到阻断 CPU正在执行一个同级或高优先级的中断服务程序 正在执行的指令尚未执行完 正在执行中断返回指令RETI或者对专用寄存器IE IP进行读 写的指令 CPU在执行完上述指令之后 要再执行一条指令 才能响应中断请求 中断响应 中断优先级的判定中断源的优先级别分为高级和低级 几个同一优先级别的中断源同时向CPU请求中断 首先响应自然优先级较高的中断源的中断请求 中断可实现两级中断嵌套 高优先级中断源可中断正在执行的低优先级中断服务程序 同级或低优先级的中断不能中断正在执行的中断服务程序 高级和低级里中断源的顺序是从上到下依次降低 中断响应 中断响应过程首先 将相应的优先级状态触发器置1 以屏蔽同级别中断源的中断请求 其次 硬件自动生成长调用指令 LCALL 把断点地址压入堆栈保护 但不保护状态寄存器PSW及其他寄存器内容 然后将中断源对应的中断入口地址装入程序计数器PC中 使程序转向该中断入口地址 并执行中断服务程序 中断处理 中断处理就是执行中断服务程序 从中断入口地址开始执行 直到函数结束为止 此过程一般包括三部分内容 一是保护现场 二是处理中断源的请求 三是恢复现场 主程序和中断服务程序都会用到累加器A 状态寄存器PSW及其他一些寄存器 在执行中断服务程序时 CPU若用到上述寄存器 就会破坏原先存在这些寄存器中的内容 中断返回 将会造成主程序的混乱 因此 在进入中断服务程序后 一般要先保护现场 然后再执行中断处理程序 在返回主程序以前 再恢复现场 中断处理 在编写中断服务程序时要注意以下几个方面 调用中断函数是硬件自动完成的 若要求禁止更高优先级中断源的中断请求 应先用软件关闭CPU中断或屏蔽更高级中断源的中断 在中断返回前再开放被关闭或被屏蔽的中断 在保护现场和恢复现场时 为了不使现场数据受到破坏而造成混乱 在保护现场之前要关中断 在保护现场之后再开中断 在恢复现场之前关中断 在恢复现场之后再开中断 中断返回 1 中断返回是指中断服务完成后 CPU返回到原程序的断点 即原来断开的位置 继续执行原来的程序 2 中断请求的撤除 CPU响应某中断请求后 在中断返回前 应该撤消该中断请求 否则会引起另一次中断 不同中断源中断请求的撤除方法是不一样的 定时器溢出中断请求的撤除CPU在响应中断后 硬件会自动清除中断请求标志TF0或TFl 串行口中断的撤除在CPU响应中断后 硬件不能清除中断请求标志TI和RI 而要由软件来清除相应的标志 外部中断的撤除 外部中断为边沿触发方式时 CPU响应中断后 硬件会自动清除中断请求标志IE0或IEl 外部中断为电平触发方式时 CPU响应中断后 硬件会自动清除中断请求标志IE0或IEl 但由于加到INT0或INT1引脚的外部中断请求信号并未撤除 中断请求标志IE0或IEl会再次被置1 所以在CPU响应中断后应立即撤除INT0或INT1引脚上的低电平 否则会在引起中断 一般采用加一个D触发器和几条指令的方法来解决这个问题 由下图可知 外部中断请求信号直接加到D触发器的CP端 当外部中断请求的低电平脉冲信号出现在CP端时 D

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论