1 / 53

第 10 章 MCS-51 与键盘、显示器、拨盘的接口设计

第 10 章 MCS-51 与键盘、显示器、拨盘的接口设计. 一、 键盘接口原理. 二、 键盘 / 显示器接口设计实例. 利用并行 I/O 芯片实现键盘 / 显示器接口. 利用 8031 的串行口实现键盘 / 显示器接口. 利用通用键盘 / 显示器接口芯片 8279 实现键盘 / 显示器接口. 10.2 键盘接口原理. 键盘输入的特点. 1) .按键的分类

alaire
Download Presentation

第 10 章 MCS-51 与键盘、显示器、拨盘的接口设计

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第10章 MCS-51与键盘、显示器、拨盘的接口设计 一、键盘接口原理 二、键盘/显示器接口设计实例 利用并行I/O芯片实现键盘/显示器接口 利用8031的串行口实现键盘/显示器接口 利用通用键盘/显示器接口芯片8279实现键盘/显示器接口

  2. 10.2 键盘接口原理 键盘输入的特点 1).按键的分类 按键按照结构原理可分为两类,一类是触点式开关按键,如机械式开关、导电橡胶式开关等;另一类是无触点式开关按键,如电气式按键,磁感应按键等。前者造价低,后者寿命长。目前,微机系统中最常见的是触点式开关按键。 按键按接口原理可分为键盘分编码键盘和非编码键盘。 这两类键盘的主要区别是识别键符及给出相应键码的方法。编码键盘主要是用硬件来实现对键的识别,非编码键盘主要是由软件来实现键盘的定义与识别。 键盘上闭合键的识别由专用的硬件译码器实现,并产生键编号或键值的称为编码键盘,如BCD码键盘、ASCII码键盘等;靠软件识别的称为非编码键盘。

  3. 2).键输入原理 微机键盘通常使用机械触点式按键开关,其主要功能是把机械上的通断转换成为电气上的逻辑关系。也就是说,它能提供标准的TTL逻辑电平,以便与通用数字系统的逻辑电平相容。 对于一组键或一个键盘,总有一个接口电路与CPU相连。CPU可以采用查询或中断方式了解有无将键输入,并检查是哪一个键按下,将该键号送入累加器ACC,然后通过跳转指令转入执行该键的功能程序,执行完后再返回主程序。

  4. 3).按键结构与特点 行线电压信号通过键盘开关机械触点的断开、闭合, 输出波形如图10-6。 为了克服按键触点机械抖动所致的检测误判,必须采取去抖动措施。这一点可从硬件、软件两方面予以考虑。在键数较少时,可采用硬件去抖,而当键数较多时,采用软件去抖。

  5. +5v +5v I/O 接 口 I/O 接 口 单片机 单片机 & & +5v +5v 开关 开关 消除抖动电路 消除抖动电路 & & 硬件去抖 在硬件上可采用在键输出端加R-S触发器(双稳态触发器)或单稳态触发器构成去抖动电路。右图是一种由R-S触发器构成的去抖动电路,当触发器一旦翻转,触点抖动不会对其产生任何影响。 图 10-6 硬件去抖电路 图 硬件去抖电路

  6. N 有按键信号? Y 延时等待10ms N 仍有按键信号? Y 键盘处理 N 按键释放? Y 软件去抖 如果按键较多,常用软件方法去抖动,即检测出键闭合后执行一个延时程序,产生5~10 ms的延时;让前沿抖动消失后,再一次检测键的状态,如果仍保持闭合状态电平,则确认为真正有键按下。当检测到按键释放后,也要给5~10 ms的延时,待后沿抖动消失后,才能转入该键的处理程序。 图10-7 软件去抖

  7. 10.2.1 非编码键盘接口的工作原理 独立式按键接口和行列式键盘接口。 1.独立式键盘接口 各键相互独立,每个按键各接一根输入线,通过检 测输入线的电平状态可很容易判断那个键被按下。 此种接口适于键数较少或操作速度较高的场合。 图10-7(a)为中断方式的独立式键盘工作电路 图10-7(b)为查询方式的独立式键盘工作电路。

  8. 图10-8为8255A扩展I/O口的独立式按键接口电路。 PA

  9. 图10-9用三态缓冲器扩展的I/O口的按键接口电路。图10-9用三态缓冲器扩展的I/O口的按键接口电路。 MOV DPTR,#0BFFFH MOVX A,@DPTR

  10. 对图10-9独立式键盘编程,软件消抖,查询方式检测键的状态。仅有一键按下时才有效才处理。对图10-9独立式键盘编程,软件消抖,查询方式检测键的状态。仅有一键按下时才有效才处理。 KEYIN: MOV DPTR,#0BFFFH ;键盘端口地址BFFFH MOVX A,@DPTR ;读键盘状态 ANL A,#1FH ;屏蔽高三位 MOV R3,A ;保存键盘状态值 LCALL DELAY10 ;延时10ms去键盘抖动 MOVX A,@DPTR ;再读键盘状态 ANL A,#1FH ;屏蔽高三位 CJNE A,R3,RETURN ;两次不同,抖动引起转RETURN ;确认是有键按下 CJNE A,#1EH,KEY2 ;相等,有键按下,不等转KEY2

  11. LJMP PKEY1 ;是K1键按下,转K1键处理 ;子程序PKEY1 KEY2: CJNE A,#1DH,KEY3 ;S2键未按下,转KEY3 LJMP PKEY2 ;S2键按下,转PKEY2处理 KEY3: CJNE A,#1BH,KEY4 ;S3未按下,转KEY4 LJMP PKEY3 ;S3按下,转PKEY3处理 KEY4: CJNE A,#17H,KEY5 ;S4键未按下,转KEY5 LJMP PKEY4 ;S4按下,转PKEY4处理 KEY5: CJNE A,#0FH,PASS ;S5未按下,转RETURN LJMP PKEY5 ;S5按下,转PKEY5处理 RETURN:RET ;重键或无键按下,从子程序返回 PKEY1: LJMP RETURN PKEY*的程序框架怎样

  12. 2. 行列式(矩阵式)键盘接口 按键数目较多的场合,行列式键盘与独立式键盘相比,要节省很多的I/O口线。 由行线和列线组成,按键位于行、列的交叉点上。 为了编程的需要,更准确的叫法:扫描线和回读线。为了读到确定的值,回读线被定义在有上拉电阻的线上。

  13. 4×4矩阵键盘接口图

  14. 首先判别键盘中有无键按下: 由单片机I/O口向键盘送(输出)全扫描字,然后读入(输入)列线状态来判断。方法是: 向扫描线(图中水平线)输出全扫描字00H,把全部行线置为低电平,然后将回读线的电平状态读入累加器A中。如果有按键按下,总会有一根列线电平被拉至低电平,从而使列输入不全为1。 判断键盘中哪一个键被按下: 通过将扫描线逐行置低电平后,检查回读线输入状态。方法是: 依次给扫描线送低电平,然后查所有回读线状态,称行扫描。如果全为1,则所按下的键不在此行;如果不全为1,则所按下的键必在此行,而且是在与零电平列线相交的交点上的那个键。

  15. 具体描述 行扫描法识别键号(值)的原理 • 将第0行变为低电平,其余行为高电平时,输出编码为1110。然后读取列的电平,判别第0行是否有键按下。在第0行上若有某一按键按下,则相应的列被拉到低电平,则表示第0行和此列相交的位置上有按键按下。若没有任一条列线为低电平,则说明0行上无键按下。 • 将第1行变为低电平,其余行为高电平时,输出编码为1101。然后通过输入口读取各列的电平。检测其中是否有变为低电平的列线。若有键按下,则进而判别哪一列有键按下,确定按键位置。 • 将第2行变为低电平,其余行为高电平时,输出编码为1011。判别是否有哪一列键按下的方法同上。 • 将第3行变为低电平,其余行为高电平时,输出编码为0111。判别是否有哪一列键按下的方法同上。

  16. 如何将你知道的第i行、第j列按键被按下的信息存放在A中?以什么形式存放?读图10-10如何将你知道的第i行、第j列按键被按下的信息存放在A中?以什么形式存放?读图10-10 在扫描过程中,当发现某行有键按下,也就是输入的列线中有一位为0时,便可判别闭合按键所在列的位置,根据行线位置和列线位置就能判断按键在矩阵中的位置,知道是哪一个键按下。 行首键号 读图并归纳,得出: 按键的值=行号×每行的按键个数+列号。计数译码法 第0行的键值为:0行×4+列号(0~3)为0、1、2、3; 第1行的键值为: 1行×4+列号(0~3)为4、5、6、7; 第2行的键值为: 2行×4+列号(0~3)为8、9、A、B; 第3行的键值为: 3行×4+列号(0~3)为C、D、E、F。 4×4键盘行首键号为0、4、8、C,列号为0,1,2,3。 此公式是针对例图,若行、列与扫描线、回读线的对应关系改变了,公式要改变。

  17. 键的位置码及键值的译码过程 按键扫描的工作过程如下: ① 判断键盘中是否有键按下; ② 进行行扫描,判断是哪一个键按下,若有键按下,则调用延时子程序去抖动; ③ 读取按键的位置码; ④ 将按键的位置码转换为键值(键的顺序号)0、1、2…、F。 这样编键号有何好处? 规划:行扫描过程结束后(发现有键按下)得到的行号存放在R0中,列号存放在R2中。

  18. 描述子程序为DECODE的功能,出、入口参数?

  19. 出口: EKEY键值(键号)在A中或? KEY: MOV P1,#0F0H ;令所有行为低电平 MOV A,P1 ;读列值 ORL A,#0FH ;取列值,A中有0则有键闭合 CPL A ;A中有1则有键按下则有键闭合 JZ EKEY;无键按下时退出 LCALL DEL20 ms ;延时20 ms去抖动 SKEY: MOV A,#00 ;下面进行行扫描,1行1行扫 MOV R0,A ;R0作为行计数器,开始为0 MOV R1,A ;R1作为列计数器,开始为0 MOV R3 #0FEH ;R3为行扫描字暂存,低4位为行扫描字 SKEY2:MOV A,R3 MOV P1,A ;输出行扫描字,高4位全1 MOV A,P1 ;读列值 MOV R1,A ;暂存列值 ORL A,#0F0H ;取列值 CPL A ;高电平则有键闭合 S123: JNZ SKEY3 ;有键按下转SKEY3,无键按下时进行一行扫描

  20. INC R0 ;行计数器加1 MOV A,R3 RL A MOV R3,A ;形成下一行扫描字→R3 MOV A,R0 CJNE A,#04H,SKEY2;最后一行扫(4次)完了吗? EKEY: RET 去SKEY2扫描下一行 EKEY是谁的出口? 若有键闭合,则去SKEY3

  21. 列号译码 SKEY3: MOV A,R1 JNB ACC.4,SKEY5 JNB ACC.5,SKEY6 JNB ACC.6,SKEY7 JNB ACC.7,SKEY8 AJMP EKEY SKEY5:MOV A,#00H MOV R2,A;存0列号 AJMP DKEY SKEY6:MOV A,#01H MOV R2,A;存1列号 AJMP DKEY SKEY7:MOV A,#02H MOV R2,A;存2列号 AJMP DKEY SKEY8:MOV A,#03H MOV R2,A;存3列号 AJMP DKEY 去DKEY做什么?

  22. ;键位置译码 DKEY: MOV A,R0 ;取行号 MOV A,R0 ;取行号送A MOV B,#04H ;每一行按键个数 MUL AB ;行号×按键数 ADD A,R2 ;行号×按键数+列号=键值,在A中 AJMP EKEY 解读子程序的框架。 问:何时调用?

  23. 练习:设计一个2×2行列式键盘,并编写键盘扫描子程序。练习:设计一个2×2行列式键盘,并编写键盘扫描子程序。 解: 原理如图9-8所示。 ① 判断是否有键按下: 将列线P1.0、P1.1送全0,查P0.0、P0.1是否为0。 ② 判断哪一个键按下: 逐列送0电平信号,再逐行扫描是否为0。 ③ 键号=行首键号+列号 键盘扫描原理图

  24. 10.2.3 键盘的工作方式 单片机在忙于各项工作任务时,如何兼顾键盘的输 入,取决于键盘的工作方式。 原则:即要保证能及时响应按键操作,又不要过多占用CPU的工作时间。 通常,键盘工作方式有3种,即编程扫描、定时扫描和中断扫描。

  25. 1. 编程扫描方式 只有当单片机空闲时,才调用键盘扫描子程序,扫描键盘。 工作过程: 事先写好键盘扫描子程序,在主程序中的适当位置安排调用子程序。如上所述,一旦有键按下,子程序会把键值算好,放如A中,主程序中应有相应的程序去对键值作出反应。 2. 定时扫描工作方式 利用单片机内的定时器,产生10ms的定时中断,在中断服务程序中对键盘进行扫描。

  26. 3.中断工作方式 只有在键盘有键按下时,才执行键盘扫描程序,如无键按下,单片机将不理睬键盘。 键盘所做的工作分为三个层次,如图10-13。 第1层:单片机如何来监视键盘的输入。三种工作方式:①编程扫描②定时扫描③中断扫描。 第2层:确定具体按键的键号。体现在按键的识别方法上就是:①扫描法;②线反转法。 第3层:执行键处理程序。

  27. 10.3 键盘/显示器接口设计实例 10.3.1 利用并行I/O芯片实现键盘/显示器接口 一般把键盘和显示器放在一起考虑。 图10-14:8031用扩展I/O接口芯片8155H实现的6位LED显示和32键的键盘/显示器接口电路。 8031外扩一片8155H。RAM地址:7E00H~7EFFH。 I/O口地址:7F00H~7F05H。 PA口为输出口,控制键盘列线的扫描,同时又是6位共阴极显示器的位选线。 PB口作为显示器段码输出口,PC口作为输入口,是键盘的回读线。 75452:反相驱动器,7407:同相驱动器。

  28. 1. 动态显示程序设计 内部RAM 6个显示缓冲单元: 79H~7EH存放要显示的6位数据。 8155H的PB口输出相应位的段码; 8155H的PA口输出位选码,如01H。 子程序流程如图10-15 。 8155H的初始化程序: MOV DPTR, #7F00H MOV A, #03H;P215 MOVX @DPTR, A

  29. 参考程序: DIR: MOV R0,#79H ;置缓冲器指针初值 MOV R3,#01H ;位选码的初值送R3 MOV A,R3 LD0: MOV DPTR,#7F01H ;位选码→PA口(PA.0位) ;最左边LED亮 MOVX @DPTR,A INC DPTR ;数据指针指向PB口 MOV A,@R0 ;显示数据→A ADD A,#0EH ;加偏移量(下条指令到表首间 ;所有指令占的单元数) MOVC A,@A+PC ;根据显示数据来查表取段码 MOVX @DPTR,A ;段码→8155H PB口 ACALL DL1ms ;该位显示1ms

  30. INC R0 ;指针指向下一个数据单元 MOV A, R3 ;位选码送入A中 JB Acc.5, LD1 ;判断是否扫描到最右边的 LED RL A ;位选码向左移一位 MOV R3,A ;位选码送R3中保存 AJMP LD0 ; LD1: RET ; DSEG: DB 3FH,06H,5BH,4FH,66H,6DH ;共阴极段码表 DB 7DH,07H,7FH,6FH,77H,7CH DB 39H,5EH,79H,71H,73H,3EH DB 31H,6EH,1CH,23H,40H,03H DL1ms: MOV R7,#02H ;延时1ms子程序 DL: MOV R6,#0FFH DL6: DJNZ R6,DL6 DJNZ R7,DL RET

  31. 2.键盘程序设计 (1)判别键盘上有无键闭合 (2)去除键的机械抖动 (3)判别闭合键的键号 (4)使CPU对键的一次闭合仅作一次处理 一直没有键闭合时程序的执行状况?影响显示吗? 键盘程序的流程如图10-16。

  32. 判有无键闭合子程序,全“0”→ KS1: MOV DPTR ,#7F01H ;扫描口(PA口) MOV A,#00H ;即列线全为低电平 MOVX @DPTR,A ; MOV DPTR ,#7F03H ;DPTR增2,指向PC口 MOVX A,@DPTR ;从PC口读行线的状态 CPL A ;行线取反,如无键按下,则A为0 ANL A,#0FH ;屏蔽无用的高4位 RET 出口参数:A非零则有键闭合。

  33. 键盘子程序如下: 寄存器分配: R4列选码 R2列号计数器 KEYI: ACALL KS1 ;调用判有无键闭合子程序 JNZ LK1 ;有键闭合,跳LK1 • NI: ACALL DIR ;无键闭合,调用显示子程序 • AJMP KEYI LK1: ACALL DIR ;可能有键闭合,软件延迟12ms去抖 ACALL DIR ACALL KS1 ;调用判有无键闭合子程序 JNZ LK2 ;经去抖,判键确实闭合,跳LK2 ACALL DIR ;调用显示子程序延迟6ms AJMP KEYI ;抖动引起,跳KEYI LK2: MOV R2,#0FEH ;列选码→R2 MOV R4,#00H ;R4为列号计数器

  34. LK4: MOV DPTR,#7F01H ;列选码→8155H的PA口 MOV A,R2 ; MOVX @DPTR,A ; INC DPTR ;数据指针增2,指向PC口 INC DPTR ; MOVX A,@DPTR ;读8155H PC口 JB ACC.0, LONE ;0行线为高,无键闭合,跳 ;LONE,转判1行 MOV A, #00H;0行有键闭合,首键号0→A AJMP LKP ;跳LKP,计算键号 LONE:JB ACC.1, LTW0 ;1行线为高,无键闭合,跳, ; LTW0转判2行 MOV A, #08H;1行有键闭合,首键号8→A AJMP LKP

  35. LTW0:JB ACC.2, LTHR ;2行线为高,无键闭合,跳 ;LTHR,转判3行 MOV A, #10H ;2行有键闭合,首键号10H→A AJMP LKP ;跳LKP,计算键号 LTHR:JB ACC.3,NEXT ;3行线为高,无键闭合, ;跳NEXT,准备下一列扫描 MOV A, #18H ;3行有键闭合,首键号18H→A LKP: ADD A,R4 ;计算键号:首键号+列号=键号 PUSH ACC ;键号进栈保护 LK3: ACALL DIR ;调用显示子程序,延时6ms ACALL KS1 ;调用判有无键闭合子程序 JNZ LK3 ;判键释放否,未释放,则循环 POP ACC ;键已释放,键号出栈→A RET

  36. NEXT:INC R4 ;列计数器加1,为下一列扫描作准备 MOV A, R2 ;判是否已扫到最后一列(最右一列) RL A ;键扫描未扫到最后一列,,位选码左移一位 JNB ACC.7, KND ;键扫描已扫到最后一列,跳KND, ;重新进行整个键盘扫描 MOV R2, A ;位选码→R2 AJMP LK4 KND: AJMP KEYI ; 出现了意外,返回读键。 思考题:若希望LED上显示键入的内容,应如何构建主程序? 若希望显示呈右滚屏,数据区应如何处理?

  37. 熟悉OC门的负载电阻与开关上拉电阻的典型值。熟悉OC门的负载电阻与开关上拉电阻的典型值。 读图练习

  38. 读图练习 10.3.2 利用8031的串行口实现键盘/显示器接口

  39. 10.3.3 利用通用键盘/显示器接口芯片8279实现键盘/ 显示器接口

  40. 读图猜8279的功能 1.键盘的形式以及对信号线的要求 SL0~SL3:输出信号 RL0~RL3:输入信号 2.键盘的形式以及对信号线的要求 SL0~SL3:输出信号 OUTA0~OUTA3:输出信号,输出段码 OUTB0~OUTB3:输出信号,输出段码 3.与8031之间的口线—并口 有读写控制线 有数据线 地址线A0及时钟线(锁存控制线)CLK 有中断请求线IRQ

  41. 1.8279的引脚及内部结构 8279的结构

  42. 8279的引脚及功能描述 • 8279是Intel公司为8位微处理器设计的通用键盘/显示器接口芯片,其功能是:接收来自键盘的输入数据并作预处理;完成数据显示的管理和数据显示器的控制。单片机应用系统采用8279管理键盘和显示器,软件编程极为简单,显示稳定,且减少了主机的负担。

  43. 2. 引脚功能介绍 (1)与CPU的接口引脚 • DB0~DB7:数据总线、双向、三态,与单片机数据 • 总线相连,在CPU和8279之间传送命令或数据。 • CLK:系统时钟,用于8279内部定时,以产生其工作 • 所需的时序。 • RESET:高电平时,8279被复位,复位后的状态如下: * 16个字符左边输入显示方式 * 编码扫描键盘、双键锁定方式 • CS*:片选

  44. A0:=1,写入的是命令字节; 读出的是状态字节。 十六个数据如何写入? =0,写入或读出的字节均为数据。 • RD*、WR*:读、写控制引脚 • IRQ:中断请求线。在键盘方式中,当键盘RAM(先进先出)中存有按下键的数据时,IRQ为高电平,向CPU提出中断申请。 CPU每次从键盘RAM中读出一个字节数据时,IRQ就变为低电平。如果键盘RAM中还有未读完的数据,IRQ将再次变为高电平,再次提出中断请求。

  45. (2)扫描信号输出引脚 • SL0~SL3 扫描输出。用来扫描键盘和显示器。可编程设定 为编码输出,即SL0~SL3需外接4-16译码器,输出16 取1的扫描信号,也可编程设定为译码输出,即由SL0 ~SL3直接输出4取1的扫描信号。 (3)与键盘连接的引脚 • RL0~RL7 键盘矩阵的行信号输入线。 • SHIFT 输入线,通常用作键盘上、下档功能的控制键。 • CNTL/STB 输入线,高电平有效。在键盘方式时,通常用来作为键盘控制功能键使用。

  46. (4)与显示器连接的引脚 • OUTA0~OUTA3(A组显示数据)、OUTB0~OUTB3(B • 组显示数据):向LED显示器输出的段码, 与扫描信号 • 线SL0~SL3同步。两组可独立使用,也可合并使用。 • BD*:消隐显示控制。 众多的功能要靠命令字来告知8279

  47. 8279的操作命令

  48. 3. 8279的基本功能部件 (1)扫描计数器 SL0~SL3 编码方式:扫描线SL0~SL3输出,经外部4-16译码器 译码后,为键盘和显示器提供16取1的扫描线。 译码方式:计数器的最低二位在8279内部译码后,从 SL0~SL3输出,为键盘和显示器提供4取1扫描线。 (2)键盘去抖动及回复缓冲器 RL0~RL7被接到键盘的行线。 在逐列扫描时,当某一键闭合,消抖电路延时等待10ms之后,再检验该键是否仍闭合。若闭合,则该键的行、列地址和附加的移位、控制状态一起形成键盘数据,送入8279内部的键盘RAM存储器。格式为:

More Related