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

下载本文档

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

文档简介

项目四 键盘设计与实现,教学目的,掌握键盘的接口方法和编程方法 。 了解中断的基本概念和功能。 掌握51单片机中断系统的结构和控制方式。 掌握中断系统的中断处理过程。,模块九 独立式键盘设计与实现,使用AT89S52单片机,设计一个具有8个按键的独立式键盘,每个按键对应一个发光二极管。功能要求:无键按下时,键盘输出全为“1”,发光二极管全部熄灭;有键按下时,其所对应发光二极管点亮。,认识键盘,键盘是单片机应用系统中人机交流不可缺少的输入设备。 键盘由一组规则排列的按键组成,一个按键实际上是一个开关元件。键盘通常使用机械触点式按键开关,其主要功能是把机械上的通断转换为电气上的逻辑关系(1和0)。 常见的种类有: 查询(独立)式键盘 矩阵式键盘,键盘分类,按键按照结构原理可分为两类 触点式开关按键,如机械式开关、导电橡胶式开关等; 无触点开关按键,如电气式按键,磁感应按键等。前者造价低,后者寿命长。按键按照接口原理可分为两类 按键按照接口原理可分为两类 编码键盘,主要是用硬件来实现对按键的识别,硬件结构复杂; 非编码键盘,主要是由软件来实现按键的定义与识别,硬件结构简单,软件编程量大。 这里我们主要介绍单片机中常用的触点式开关按键、非编码键盘。,独立式键盘电路,独立式键盘电路设计时,每个按键的一端与P0口的一个引脚相连,另一端接地。 无键按下时,P0的8个I/O口均通过电阻接高电平,信息为“1” ,键盘输出全为“1”发光二极管全部熄灭。 有键按下,将使对应的I/O口通过该键接地,信息为“0” ,对应发光二极管点亮。 CPU可以通过检测P0的8个I/O口线哪个是“0”就可以识别是否有键按下,并能识别出是哪一个键按下。,独立式键盘程序,程序要判断是否有2个或2个以上的键盘同时按下,以免键盘分析错误。 独立式键盘程序 假设8个按键分别为18,试一试能否用数码管显示按下的按键。,键盘设计应注意的问题,机械式按键在按下或释放时,由于机械弹性作用的影响,通常伴随有一定时间的触点机械抖动,然后其触点才稳定下来。 其抖动过程如右图所示,抖动时间的长短与开关的机械特性有关,一般为510ms。 若有抖动,按键按下会被错误地认为是多次操作。,按键触点的机械抖动,防抖动措施,为了克服按键触点机械抖动所致的检测误判,必须采取去抖动措施,可从硬件、软件两方面予以考虑。 键数较少时,采用硬件去抖; 键数较多时,采用软件去抖。 软件上采取的措施是在检测到有按键按下时,执行一个10ms左右(具体时间应视所使用的按键进行调整)的延时程序,再确认该键电平是否仍保持闭合状态电平,若仍保持闭合状态电平,则确认该键处于闭合状态,从而消除抖动的影响。,软件去抖,在检测到有按键按下时 执行一个10ms左右(具体时间应视所使用的按键进行调整)的延时程序后; 再确认该键电平是否仍保持闭合状态电平,若仍保持闭合状态电平,则确认该键是处于闭合状态。,技能训练4-1,一键多功能按键识别设计与实现 按键接在P3.0管脚上,在AT89S52单片机的P1 端口接有四个发光二极管。 上电的时候,接在P1.0管脚上的发光二极管D1在闪烁; 当第一次按下按键的时候,接在P1.1 管脚上的发光二极管D2在闪烁; 再按下按键的时候,接在P1.2 管脚上的发光二极管D3在闪烁,再按下按键的时候,接在P1.3 管脚上的发光二极管D4在闪烁,再按下按键的时候,又轮到D1 在闪烁了,如此轮流下去。,一键多功能按键识别电路设计,一键多功能按键识别程序设计,对于要通过一个按键来识别每种不同的功能,我们给每个不同的功能模块用不同的ID号标识,这样,每按下一次按键,ID 的值是不相同的,所以单片机就很容易识别不同功能的身份了。 从上面的要求我们可以看出,D1到D4发光二极管在每个时刻的闪烁的时间是受按键来控制,我们给D1到D4闪烁的时段,定义出不同的ID号: D1在闪烁时,ID0; D2在闪烁时,ID1; D3在闪烁时,ID2; D4在闪烁时,ID3; 很显然,只要每次按下按键时,分别给出不同的ID号我们就能够完成上面的任务了。 一键多功能按键识别程序,矩阵式键盘设计与实现,4X4小键盘,16个键分别对应09、AF; 有键按下,数码管显示; 无键按下,数码管无显示; 通过输出的列码和读取的行码来判断按下什么键; 有键按下,要有一定的延时,防止由于键盘抖动而引起误操作。,矩阵式键盘电路,键盘的结构与原理,矩阵式键盘 单片机系统中,若使用按键较多时,通常采用矩阵式键盘,其结构如下图所示。由图可知,一个44的行、列结构,可以构成一个含有16个按键的键盘,节省了很多I/O口。 控制方式:先判断是否有键按下。 如有,再判断哪一键按下,并得到 键码值,然后根据键码值转向不同 的功能程序。 最常用的识别方法是键盘扫描法。,判断按键按下的方法,判断是否有键按下的方法是: 向所有的列输出口线输出低电平(不能为高电平,因为若为高电平,按键按下与否都不会引起行线电平的变化),然后将行线的电平状态读入。 若无键按下,所有的行线仍保持高电平状态; 若有键按下,行线中至少应有一条线为低电平。 例如:第2行与第2列交叉点的键被按下,则第2行与第2列导通,第2行电平被拉低,读入的行信号就为低电平,表示有键按下。,识别按键的方法,按键识别的扫描方法: 往列线上按顺序一列一列的送出低电平。 先送第0列为低电平,其他列为高电平,读入的行的电平状态就表明了第0列的4个键的情况,若读入的行值全为高电平,则表示无键按下; 再送第1列为低电平,其他列为高电平,读入的行的电平状态则显示了该行上的4个按键的情况; 依次轮流给各列送出低电平,直至4列全部送完,再从第0列开始,依此循环。 采用键盘扫描,我们再来观察第2行与第2列交叉点的键按下时的判断过程,当第2列送出低电平时,读第2行为低电平,而其他列送出低电平时,读第2行却为高电平,由此即可断定按下的键应是第2行与第2列交叉点的键。,键盘扫描程序具体实现方法,判断有无键按下 去除按键的抖动 求按键的键值 判断闭合键是否释放,判断有无键按下,P0.4P0.7输出0,然后读P0口; 若低4位P0.0P0.3全为1,则键盘上没有键按下; 若P0.0P0.3不全为1,则有键按下。 while(tmp=0x0f) /循环判断是否有键按下 P0=0x0f; /所有列输出低电平 tmp=P0; /读行信号 ,去除按键的抖动,当判断到键盘上有键按下后; 延时一段时间再判断键盘的状态; 若仍为有键按下状态,则认为有一个键按下,否则当作按键抖动来处理。 delay10ms(); /延时10ms去抖 P0=0x0f; /所有列输出低电平 tmp=P0; /再次读键盘状态 if(tmp=0x0f) continue; /如果无键按下则认为是按键抖动,重新扫描键盘,求按键的键值,对键盘的列线进行扫描,P0.4P0.7循环输出1110、1101、1011和0111,依次读P0口,若低4位全为1,则断定该列上没有键按下; 否则,该列上就有键按下,并且就是行线为0,列线为0的交叉点,行号和列号按公式:rol*4+col 计算得到按下键的键值。 例如,P0.4P0.7输出1101时,P0口的低四位读入的值为1011,不全为1,就可以断定有键按下,并且是第2行和第1列交叉点的键。于是,该键的键值=24+1=9。按照相同的方法可以得到所有键的键值。如:return(rol*4+col);,判断闭合键是否释放,按键闭合一次只能进行一次功能操作,因此,等按键释放后才能根据键号执行相应的功能键操作。 key=scan_key( ); /有键按下,调用键盘扫描程序, 并把键值送key while(k!=-1) /判断闭合键是否释放,直到其释放 delay10ms(); k=scan_key(); ,矩阵式键盘程序,程序要判断是否有2个或2个以上的键盘同时按下,以免键盘分析错误。 16个按键分别为09、AF,用数码管显示按下的按键。 矩阵式键盘程序,工作模块11 中断方式矩阵键盘,独立式键盘识别键盘比较容易,编程也比较简单,很适合于功能键较少的单片机应用系统。 独立式键盘每一个按键上用一根口线,当按键较多时(超过8个)应采用矩阵式键盘。 无论是否按键,CPU都要按时扫描键盘,而单片机应用系统工作时,并非经常需要键盘输入。因此,很多扫描工作是不必要的,浪费了CPU的时间。 为了提高CPU的工作效率,可以采用中断扫描工作方式。,中断的概念,当CPU在执行程序时,由单片机内部或外部的原因引起的随机事件要求CPU暂时停止正在执行的程序,而转向执行一个用于处理该随机事件的程序,处理完后又返回被中止的程序断点处继续执行,这一过程就称为中断。 向CPU发出中断请求的来源,或引起中断的原因称为中断源。中断源可分为两大类: 一类来自单片机内部,称之为内部中断源; 一类来自单片机外部,称之为外部中断源。 中断源要求服务的请求称为中断请求。,中断的功能,中断系统是指能实现中断功能的硬件和软件。 中断系统的功能一般包括以下几个方面。 进行中断优先级排队 实现中断嵌套 自动响应中断 实现中断返回 中断的特点。 可以提高CPU的工作效率 实现实时处理 处理故障,进行中断优先级排队,通常,单片机中有多个中断源,设计人员能按轻重缓急给每个中断源的中断请求赋予一定的中断优先级。 当两个或两个以上的中断源同时请求中断时,CPU可通过中断优先级排队电路首先响应中断优先级高的中断请求,等到处理完优先级高的中断请求后,再来响应优先级低的中断请求。,实现中断嵌套,CPU在响应某一中断源中断请求而进行中断处理时,若有中断优先级更高的中断源发出中断请求,CPU会暂停正在执行的中断服务程序,转向执行中断优先级更高的中断源的中断服务程序,等处理完这个高优先级的中断请求后,再返回来继续执行被暂停的中断服务程序。这个过程称为中断嵌套。,自动响应中断,中断源向CPU发出的中断请求是随机的。 CPU总是在每条指令的最后状态对中断请求信号进行检测。 当某一中断源发出中断请求时,CPU能根据相关条件(如中断优先级、是否允许中断)进行判断,决定是否响应这个中断请求。 若允许响应这个中断请求,CPU在执行完相关指令后,会自动完成断点地址压入堆栈、中断矢量地址送入程序计数器PC、撤除本次中断请求标志,转入执行相应中断服务程序。,实现中断返回,CPU响应某一中断源中断请求,转入执行相应中断服务程序,在执行中断服务程序最后的中断返回指令时,会自动弹出堆栈区中保存的断点地址,返回到中断前的原程序中。,中断方式矩阵键盘,采用中断扫描工作方式 中断方式矩阵式键盘电路 中断方式矩阵式键盘程序,中断方式矩阵键盘电路,中断方式矩阵键盘程序,采用中断扫描工作方式,工作过程如下: 有按键按下时,产生中断请求,进入键盘扫描程序,并识别键码、显示,然后返回。 无键按下时,不执行键盘扫描程序。 中断扫描工作方式键盘程序,中断系统结构,8051单片机的中断系统主要由与中断有关的4个特殊功能寄存器和硬件查询电路等组成。 定时器控制寄存器TCON 主要用于保存中断信息。 串行口控制寄存器SCON 主要用于保存中断信息。 中断允许寄存器IE 主要用于控制中断的开放和关闭。 中断优先级寄存器IP主要用于设定优先级别。 硬件查询电路主要用于判定5个中断源的自然优先级别。 8051单片机的中断源有五个,可分为三类。 外部中断 定时中断 串行口中断,中断系统结构,外部中断,外部中断是由外部原因(如打印机、键盘、控制开关、外部故障)引起的,可以通过两个固定引脚来输入到单片机内的信号,即外部中断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,并申请中断。,定时器控制寄存器TCON,TCON的作用是控制定时器的启动与停止,并保存T0、T1的溢出中断标志和外部中断的中断标志。 TCON的格式: TCON 8FH 8EH 8DH 8CH 8BH 8AH 89H 88H (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(边沿触发方式)。,定时器控制寄存器TCON,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个时钟周期。,定时器控制寄存器TCON,IE0(TCON.1):外部中断0请求标志位。其功能同IE1。 IT0(TCON.0):外部中断0触发方式选择位。其功能同IT1。,中断允许寄存器IE,中断允许寄存器IE的作用是控制CPU对中断的开放或屏蔽以及每个中断源是否允许中断。 IE的格式: IE AFH ACH ABH AAH A9H A8H (A8H),中断允许寄存器IE,功能说明: 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中断。,中断优先级寄存器IP,中断优先级寄存器IP的作用是设定各中断源的优先级别。 IP的格式: IP BCH BBH BAH B9H B8H (B8H),中断优先级寄存器IP,功能说明: 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为低优先级中断。,中断处理过程,中断响应 中断处理 中断返回,中断响应,CPU的中断响应条件 CPU响应中断必须首先满足以下三个基本条件。 有中断源发出中断请求。 中断总允许位EA=1。 请求中断的中断源的中断允许位为1。 在满足以上条件的基础上,若有下列任何一种情况存在,中断响应都会受到阻断。 CPU正在执行一个同级或高优先级的中断服务程序。 正在执行的指令尚未执行完。 正在执行中断返回指令 RETI或者对专用寄存器IE、IP进行读/写的指令。CPU在执行完上述指令之后,要再执行一条指令,才能响应中断请求。,中断响应,中断优先级的判定 中断源的优先级别分为高级和低级。 几个同一优先级别的中断源同时向CPU请求中断,首先响应自然优先级较高的中断源的中断请求。 中断可实现两级中断嵌套。高优先级中断源可中断正在执行的低优先级中断服务程序。 同级或低优先级的中断不能中断正在执行的中断服务程序。,中断响应,中断响应过程 首先,将相应的优先级状态触发器置1,以屏蔽同级别中断源的中断请求; 其次,硬件自动生成长调用指令(LCALL),把断点地址压入堆栈保护(但不保护状态寄存器PSW及其他寄存器内容); 然后将中断源对应的中断入口地址装入程序计数器PC中,使程序转向该中断入口地址,并执行中断服务程序。,中断处理,中断处理就是执行中断服务程序,从中断入口地址开始执行,直到返回指令(RETI)为止。此过程一般包括三部分内容: 一是保护现场; 二是处理中断源的请求; 三是恢复现场。 主程序和中断服务程序都会用到累加器A、状态寄存器PSW及其他一些寄存器。在执行中断服务程序时,CPU若用到上述寄存器,就会破坏原先存在这些寄存器中的内容,中断返回,将会造成主程序的混乱。因此,在进入中断服务程序后,一般要先保护现场,然后再执行中断处理程序,在返回主程序以前,再恢复现场。,中断处理,在编写中断服务程序时要注意以下几个方面。 在中断入口地址区存放一条无条件转移指令,转向中断服务程序的起始地址。 若要求禁止更高优先级中断源的中断请求,应先用软件关闭CPU中断或屏蔽更高级中断源的中断,在中断返回前再开放被关闭或被屏蔽的中断。 在保护现场和恢复现场时,为了不使现场数据受到破坏而造成混乱,在保护现场之前要关中断,在保护现场之后再开中断;在恢复现场之前关中断,在恢复现场之后再开中断。,中断返回,中断返回是指中断服务完成后,CPU返回到原程序的断点(即原来断开的位置),继续执行原来的程序。 中断返回通过执行中断返回指令RETI来实现,该指令的功能是首先将相应的优先级状态触发器置0,以开放同级别中断源的中断请求;其次,从堆栈区把断点地址取出,送回到程序计数器PC中。因此,不能用RET指令代替RETI指令。,中断请求的撤除,CPU响应某中断请求后,在中断返回前,应该撤消该中断请求,否则会引起另一次中断。不同中断源中断请求的撤除方法是不一样的。 定时器溢出中断请求的撤除 CPU在响应中断后,硬件会

温馨提示

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

评论

0/150

提交评论