1 / 100

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

第10章 MCS-51 与键盘、显示器、拨盘、打印机的接 口设计. 输入外设: 键盘、 BCD 码拨盘等;. 输出外设: LED 显示器、 LCD 显示器、打印机等。. 10.1 LED 显示器接口原理. LED (Light Emitting Diode) :发光二极管的缩写。 显示器前面冠以 “ LED ” 。. 10.1.1 LED 显示器的结构. 常用的 LED 显示器为 8段 (或 7段 ,8段比7段多了一 个小数点 “ dp ” 段)。. 有 共阳极 和 共阴极 两种。如图10-1所示。.

arnie
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与键盘、显示器、拨盘、打印机的接 口设计 输入外设:键盘、BCD码拨盘等; 输出外设:LED显示器、LCD显示器、打印机等。 10.1 LED显示器接口原理 LED(Light Emitting Diode):发光二极管的缩写。 显示器前面冠以“LED”。 10.1.1 LED显示器的结构 常用的LED显示器为8段(或7段,8段比7段多了一 个小数点“dp”段)。 有共阳极和共阴极两种。如图10-1所示。

  2. 为使LED显示不同的符号或数字,要为LED提供段码为使LED显示不同的符号或数字,要为LED提供段码 (或称字型码)。 提供给LED显示器的段码(字型码)正好是一个字 节(8段)。各段与字节中各位对应关系如下: 按上述格式,8段LED的段码如表10-1所示。

  3. 表10-1 LED段码(8段)

  4. 表10-1只列出了部分段码,可根据实际情况选用。表10-1只列出了部分段码,可根据实际情况选用。 另外,段码是相对的,它由各字段在字节中所处的 位决定。例如表10-1中8段LED段码是按格式: 而形成的, “0”的段码为3FH(共阴)。反之,如 将格式改为下列格式: 则 “0”的段码为7EH(共阴)。 字型及段码由设计者自行设定,习惯上还是以“a” 段对应段码的最低位。

  5. 10.1.2 LED显示器工作原理 图10-2是4位 LED显示器的结构原理图。 N个LED显示块有N位位选线和8×N根段码线。

  6. 段码线控制显示的字型, 位选线控制该显示位的亮或暗。 静态显示和动态显示两种显示方式。 1. 静态显示方式 各位的公共端连接在一起(接地或+5V)。 每位的段码线(a~dp)分别与一个8位的锁存器 输出相连。 显示字符一确定,相应锁存器的段码输出将维持 不变,直到送入另一个段码为止。显示的亮度高。 图10-3: 4位静态LED显示器电路。该电路各位可独立显示。

  7. 2. 动态显示方式 所有位的段码线相应段并在一起,由一个8位I/O 口控制,形成段码线的多路复用,各位的公共端分别由 相应的I/O线控制,形成各位的分时选通。

  8. 图10-4:4位8段LED动态显示电路。其中段码线占用一个8位I/O口,而位选线占用一个4位I/O口。图10-4:4位8段LED动态显示电路。其中段码线占用一个8位I/O口,而位选线占用一个4位I/O口。

  9. 图10-5为8位LED动态显示2003.10.10的过程。 图(a)是显示过程,某一时刻,只有一位LED被选通 显示,其余位则是熄灭的; 图(b)是实际显示结果,人眼看到的是8位稳定的 同时显示的字符。

  10. 10.2 键盘接口原理 1. 键盘输入的特点 键盘:一组按键开关的集合。 行线电压信号通过键盘开关机械触点的断开、闭合, 输出波形如图10-6。

  11. 2. 按键的确认 检测行线电平 高电平:断开;低电平:闭合, 3.如何消除按键的抖动 常用软件来消除按键抖动。 基本思想:检测到有键按下,键对应的行线为低,软 件延时10ms后,行线如仍为低,则确认该行有键按下。 当键松开时,行线变高,软件延时10ms后,行线仍为 高,说明按键已松开。 采取以上措施,躲开了两个抖动期t1和t3的影响。

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

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

  14. 图10-9用三态缓冲器扩展的I/O口的按键接口电路。图10-9用三态缓冲器扩展的I/O口的按键接口电路。

  15. 对图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

  16. 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 ;重键或无键按下,从子程序返回 识别和编程简单,用在按键数较少的场合。

  17. 2. 行列式(矩阵式)键盘接口 用于按键数目较多的场合,由行线和列线组成, 按键位于行、列的交叉点上。如图10-10所示。 按键数目较多的场合,行列式键盘与独立式键盘 相比,要节省很多的I/O口线。

  18. (1)行列式键盘工作原理 无键按下,该行线为高电平,当有键按下时,行线电平由列线的电平来决定。 由于行、列线为多键共用,各按键彼此将相互发 生影响,必须将行、列线信号配合起来并作适当的处 理,才能确定闭合键的位置。 (2)按键的识别方法 a. 扫描法 图10-10(b)中3号键被按下为例,来说明此键 时如何被识别出来的。

  19. 识别键盘有无键被按下的方法,分两步进行: 第1步:识别键盘有无键按下; 第2步:如有键被按下,识别出具体的按键。 把所有列线置0,检查各行线电平是否有变化,如有变化,说明有键按下,如无变化,则无键按下。 上述方法称为扫描法,即先把某一列置低电平, 其余各列为高电平,检查各行线电平的变化,如果某 行线电平为低,可确定此行列交叉点处的按键被按 下。 b. 线反转法 只需两步便能获得此按键所在的行列值,线反转 法的原理如图10-11。

  20. 第1步:列线输出为全低电平,则行线中电平由高变低第1步:列线输出为全低电平,则行线中电平由高变低 的所在行为按键所在行。 第2步:行线输出为全低电平,则列线中电平由高变低 所在列为按键所在列。 结合上述两步,可确定按键所在行和列。 (3)键盘的编码 根据实际需要灵活编码。 10.2.3 键盘的工作方式 单片机在忙于各项工作任务时,如何兼顾键盘的输 入,取决于键盘的工作方式。

  21. 原则:即要保证能及时响应按键操作,又不要过多占原则:即要保证能及时响应按键操作,又不要过多占 用CPU的工作时间。 通常,键盘工作方式有3种,即编程扫描、定时扫 描和中断扫描。 1. 编程扫描方式 只有当单片机空闲时,才调用键盘扫描子程序, 扫描键盘。 工作过程: (1)在键盘扫描子程序中,先判断有无键按下。 方法:PA口8位输出全0,读PC口低4位状态,若PC0~ PC3为全1,则说明键盘无键按下;若不全为1,则说明 键盘可能有键按下。

  22. (2)用软件来消除按键抖动的影响。如有键按下,则(2)用软件来消除按键抖动的影响。如有键按下,则 进行下一步。 (3)求按下键的键号。 (4)等待按键释放后,再进行按键功能的处理操作。 2. 定时扫描工作方式 利用单片机内的定时器,产生10ms的定时中断,对 键盘进行扫描。 3.中断工作方式 只有在键盘有键按下时,才执行键盘扫描程序,如 无键按下,单片机将不理睬键盘。 键盘所做的工作分为三个层次,如图10-13。

  23. 第1层:单片机如何来监视键盘的输入。三种工作方第1层:单片机如何来监视键盘的输入。三种工作方 式:①编程扫描②定时扫描③中断扫描。 第2层:确定具体按键的键号。体现在按键的识别方 法上就是:①扫描法;②线反转法。 第3层:执行键处理程序。 10.3 键盘/显示器接口设计实例 一般把键盘和显示器放在一起考虑。 10.3.1 利用并行I/O芯片实现键盘/显示器接口 图10-14:8031用扩展I/O接口芯片8155H实现的 6位LED显示和32键的键盘/显示器接口电路。图中 8155H也可用8255A来替代。

  24. 8031外扩一片8155H。RAM地址:7E00H~7EFFH。 I/O口地址:7F00H~7F05H。 PA口为输出口,控制键盘列线的扫描,同时又是6位共阴极显示器的位扫描口。 PB口作为显示器段码输出口,PC口作为键盘的行线状态的输入口。 75452:反相驱动器,7407:同相驱动器。 1.动态显示程序设计 8031内部RAM 6个显示缓冲单元:79H~7EH,存 放要显示的6位数据。 8155H的PB口输出相应位的段码,依次改变PA口 输出为高的位使某一位显示某一字符,其它位为暗。 动态地显示出由缓冲区中显示数据所确定的字符。程 序流程如图10-15 。

  25. 参考程序: 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,#0DH ;加偏移量(下条指令到表首间 ;所有指令占的单元数) MOVC A,@A+PC ;根据显示数据来查表取段码

  26. DIR1:MOVX @DPTR,A ;段码→8155HPB口 ACALL DL1ms ;该位显示1ms INC R0 ;指针指向下一个数据单元 MOV A,R3 ;位选码送入A中 JB Acc.5,LD1 ;判断是否扫描到最右边的 ; LED,如到最右边则返回 RL A ;位选码向左移一位,准备让 ; 右边的下一位LED亮 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

  27. DB 31H,6EH,1CH,23H,40H,03H DB 18H,00H DL1ms: MOV R7,#02H ;延时1ms子程序 DL: MOV R6,#0FFH DL6: DJNZ R6,DL6 DJNZ R7,DL RET 2.键盘程序设计 (1)判别键盘上有无键闭合 (2)去除键的机械抖动 (3)判别闭合键的键号 (4)使CPU对键的一次闭合仅作一次处理 键盘程序的流程如图10-16。

  28. 键盘子程序如下: KEYI:ACALL KS1 ;调用判有无键闭合子程序 JNZ LK1 ;有键闭合,跳LK1 NI: ACALL DIR ;无键闭合,调用显示子程序,延 ;迟6ms后,跳KEYI 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为列号计数器

  29. 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

  30. LTW0:JB A.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 A ;键号进栈保护 LK3: ACALL DIR ;调用显示子程序,延时6ms ACALL KS1 ;调用判有无键闭合子程序,延时 ;6ms JNZ LK3 ;判键释放否,未释放,则循环 POP A ;键已释放,键号出栈→A RET

  31. NEXT:INC R4 ;列计数器加1,为下一列扫描作准备 MOV A,R2 ;判是否已扫到最后一列(最右一列) JNB Acc.7,KND ;键扫描已扫到最后一列,跳KND, ;重新进行整个键盘扫描 RL A ;键扫描未扫到最后一列,,位选码左移 ;一位 MOV R2,A ;位选码→R2 AJMP LK4 ; KND: AJMP KEYI ; KS1: MOV DPTR ,#7F01H;判有无键闭合子程序,全“0”→ ;扫描口(PA口) MOV A,#00H ;即列线全为低电平 MOVX @DPTR,A ; INC DPTR ;DPTR增2,指向PC口

  32. INC DPTR ;指针增1,指向PC口 MOVX A,@DPTR ;从PC口读行线的状态 CPL A ;行线取反,如无键按下,则A为0; ANL A,#0FH ;屏蔽无用的高4位 RET 10.3.2 利用8031的串行口实现键盘/显示器接口 串口未作它用,可用来外扩键盘/显示器。 串口为方式0输出,串口外接移位寄存器74LS164。 接口电路如图10-17。 74LS164(0)~74LS164(7):作为8位LED的段码输出, 8031的P3.4、P3.5:两行键的行状态输入 P3.3(TXD):同步移位脉冲输出控制线,

  33. 优点:亮度大,容易做到显示不闪烁,且CPU不必 频繁的为显示服务,从而使单片机有更多的时间处理 其它事务。 显示子程序: DIR: SETB P3.3 ;P3.3=1允许TXD脚同步移位 ;脉冲输出 MOV R7,#08H ;送出的段码个数,R7为段 ;码个数计数器 MOV R0,#7FH ;7FH~78H为显示数据缓冲区 DL0: MOV A,@R0 ;取出要显示的数送A ADD A,#0DH ;加上偏移量 MOVC A,@A+PC ;查段码表SEGTAG,取出段码 MOV SBUF ,A ;将段码送SBUF

  34. DL1: JNB TI,DL1 ;输出段码,查询TI状态,1个字节 ;的段码输出完否? CLR TI ;1个字节的段码输出完,清TI标志 DEC R0 ;指向下一个显示数据单元 DJNZ R7,DL0 ;段码个数计数器R7是否为0, 如不 ; 为0,继续送段码 CLR P3.3 ;8个段码输出完毕,关显示器输出 RET ;返回 SEGTAB:DB 0C0H,0F9H,0A4H,0B0H,99H ;共阳极段码表, ;0,1,2,3,4 DB 92H,82H,0F8H,90H ;5,6,7,8,9 DB 88H,83H,0C6H,0A1H,86H ;A,B,C,D,E DB 8FH,0BFH,8CH,0FFH,0FFH ;F,-,P,暗

  35. 键盘扫描子程序: KEYI:MOV A,#00H ;判有无键按下,使所有列线为0 ;的编码送A MOV SBUF,A ;扫描键盘的(8)号74LS164输 ;出为00H,使所有列线为0 KL0: JNB TI,KL0 ;串行输出完否? CLR TI ;串行输出完毕,清TI KL1: JNB P3.4,PK1 ;第1行有闭合键吗?如有,跳 ;PK1进行处理 JB P3.5,KL1 ;在第2行键中有闭合键吗?无闭 ;合键跳KL1 PK1: ACALL DL10 ;调用延时10ms子程序DL10,软 ;件消除抖动 JNB P3.4,PK2 ;判是否抖动引起的?

  36. JB P3.5,KL1 PK2: MOV R7,#08H ;不是抖动引起的 MOV R6,#0FEH ;判别是哪一个键按下,FEH为最 ;左一列为低 MOV R3,#00H ;R3为列号寄存器 MOV A,R6 ; KL5: MOV SBUF,A ;列扫描码从串行口输出 KL2: JNB TI,KL2 ;等待串行口发送完 CLR TI ;串行口发送完毕,清TI标志 JNB P3.4,PKONE ;读第1行线状态,第1行有键闭 ;合,跳PKONE处理 JB P3.5,NEXT ;读第2行状态,是第2行某键否? MOV R4,#08H ;第2行键中有键被按下,行首键 ;号08H送R4 AJMP PK3 ;

  37. PKONE:MOV R4,#00H ;第1行有键按下,行首键号00H送R4 PK3: MOV SBUF,#00H ;等待键释放,发送00H使所有列 ;线为低 KL3: JNB TI,KL3 ; CLR TI ;发送完毕,清标志 KL4: JNB P3.4,KL4 ;判行线状态 JNB P3.5,KL4 ; MOV A,R4 ;两行线均为高,说明键已释放 ADD A,R3 ;计算得到键码→A RET NEXT: MOV A,R6 ;列扫描码左移一位,判下列键 RL A ; MOV R6,A ;记住列扫描码于R6中 INC R3 ;列号增1 DJNZ R7,KL5 ;列计数器R7减1,8列键都检查 ;完?

  38. AJMP KEYI ;8列键扫描完毕,开始下一个键 ;盘扫描周期 DL10: MOV R7,#0AH ;延时10ms子程序 DL: MOV R6,#0FFH DL6: DJNZ R6,DL6 DJNZ R7,DL RET 10.3.3 利用通用键盘/显示器接口芯片8279实现键盘/ 显示器接口 Intel 8279芯片:通用可编程键盘/显示器接口芯片。 对键盘部分提供扫描工作方式,能对64个键键盘阵 列不断扫描,自动消抖,自动识别出闭合的键并得到键 号,能对双键或N键同时按下进行处理。

  39. 扫描方式的显示接口,可显示多达16位的字符。扫描方式的显示接口,可显示多达16位的字符。 1.8279的引脚及内部结构

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

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

More Related