1 / 34

1. 单个按键的连接与应用

一、键盘及其接口. 1. 单个按键的连接与应用. 常用的按键,都存在两种状态:断开和闭合。当某一键被按下,则为闭合状态;键释放,则为断开状态。键盘电路的功能就是将键的闭合和断开状态用“ 0” 和“ 1” 来表示,然后通过数据总线送到 CPU 内部进行键的识别。. 图 9 - 18 为单个键的输入电路。用下列两条指令可以识别按键是否被按下:. IN AL, 20H. AND AL, 01H. 程序执行结果若 AL 内容为零( ZF=1 ),说明键被按下;若 AL 内容为非零( ZF=0 ),则说明键未被按下。. 在键处理过程中,有二个问题必须注意:.

Télécharger la présentation

1. 单个按键的连接与应用

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. 一、键盘及其接口 1. 单个按键的连接与应用 常用的按键,都存在两种状态:断开和闭合。当某一键被按下,则为闭合状态;键释放,则为断开状态。键盘电路的功能就是将键的闭合和断开状态用“0”和“1”来表示,然后通过数据总线送到CPU内部进行键的识别。

  2. 图9-18为单个键的输入电路。用下列两条指令可以识别按键是否被按下:图9-18为单个键的输入电路。用下列两条指令可以识别按键是否被按下: IN AL, 20H AND AL, 01H 程序执行结果若AL内容为零(ZF=1),说明键被按下;若AL内容为非零(ZF=0),则说明键未被按下。

  3. 在键处理过程中,有二个问题必须注意: (1)键抖动的处理 在实际按键操作中,由于按键动作是一个机械动作,键在闭合或断开的过程会发生抖动,如图9-19所示。

  4. 键抖动时间的长短与开关的机械特性有关,一般为5ms~10ms左右,然后达到稳定状态。在键盘接口,为了保证CPU对键的闭合作一次且仅作一次处理,必须去除抖动,使CPU在键的稳定闭合或断开状态时读取键值。键抖动时间的长短与开关的机械特性有关,一般为5ms~10ms左右,然后达到稳定状态。在键盘接口,为了保证CPU对键的闭合作一次且仅作一次处理,必须去除抖动,使CPU在键的稳定闭合或断开状态时读取键值。

  5. 在键盘接口中,使用更普遍的是采用软件延时的方法来完成消抖。其基本思想是:在检测到按键按下或释放时,记录按键的状态,延时10ms~20ms,再次检测按键的状态,若与前一次的状态相同,说明按键的状态已稳定,可进行处理;否则,表示键的状态不稳定,可能是误动作,不应被处理。在键盘接口中,使用更普遍的是采用软件延时的方法来完成消抖。其基本思想是:在检测到按键按下或释放时,记录按键的状态,延时10ms~20ms,再次检测按键的状态,若与前一次的状态相同,说明按键的状态已稳定,可进行处理;否则,表示键的状态不稳定,可能是误动作,不应被处理。

  6. 对于图9-18电路中单个键的处理,可以使用如下程序:对于图9-18电路中单个键的处理,可以使用如下程序: IN AL, 20H ;读取键状态 AND AL, 01H JNZ EXIT ;无键按下,退出键处理程序 CALL Delay ;延时10ms IN AL, 20H ;再次读取键状态 AND AL, 01H JNZ EXIT ;无键按下,退出键处理程序 键处理程序 …

  7. (2)单个按键动作的确认 由于CPU的程序执行比按键的机械动作快得多,使得一次按键动作期间,CPU检测到有按键并执行了相应的键处理程序以后,按下的键可能还没有被释放,因此,在CPU再一次测试键盘状态时,该键又被认为是按下状态,从而出现按一次键而CPU进行二次或多次键处理的情况。这是一个明显的误操作。解决方法有多种,最简便的解决方法是CPU在测试到有键接下时,一直等到键释放才作相应的键处理。

  8. 对于图9-18,可采用如下程序段来实现单个按键动作的确认:对于图9-18,可采用如下程序段来实现单个按键动作的确认: IN AL, 20H ;读取键状态 AND AL, 01H JNZ EXIT ;没有键按下,退出键处理程序 CALL Delay ;延时10毫秒 IN AL, 20H ;再次读取键状态 AND AL, 01H JNZ EXIT ;无键按下,作为误动作退出键处理程序

  9. L1: IN AL, 20H ;读取键状态 AND AL, 01H ;等待键释放 JZL1 CALL Delay ;键释放时消抖 IN AL, 20H AND AL, 01H JZ L1  键处理程序

  10. 2. 线性键盘及其接口 线性键盘由若干独立的按键组成。每个按键将其一端与微机系统中某输入端口的一位数据线相连,另一端接地。其接口程序简单,只要查询该输入端口各位的状态,便可判断是否有键按下,以及按下的具体是哪一个键。

  11. IN AL, 20H SHR AL, 1 JNC K0 ;转键K0的处理程序 SHR AL, 1 JNC K1 ;转键K1的处理程序 SHR AL, 1 JNC K2, ;转键K2的处理程序 SHR AL, 1 JNC K3 ;转键K3的处理程序

  12. 当然,上述程序段只是完成键识别的工作。在实际应用中,还要考虑键抖动问题的处理以及单个按键动作的确认问题。当然,上述程序段只是完成键识别的工作。在实际应用中,还要考虑键抖动问题的处理以及单个按键动作的确认问题。 线性键盘有多少按键,就有多少根连线与微机输入端口相连,因此只适合于按键少的应用场合,常用于某些微机化仪器或专用微机系统中。

  13. 3.矩阵键盘及其接口 矩阵键盘的按键排成n行m列,每个按键占据行列的一个交叉点,需要的输入输出线为n+m,最大按键数为n×m。显然,在按键较多的应用场合,矩阵键盘可以减少与微机系统接口的连线,是一般微机常用的键盘结构。

  14. 图9-21为一个3×4矩阵键盘及其接口电路。 图9-213×4矩阵键盘的接口

  15. 图9-22 是实现键处理工作的程序流程。 设图9-21中8255A的端口地址为00H(A口)、02H(B口)、04H(C口)和06H(控制口),键处理的程序如下:

  16. ;确定按键闭合,等待键按下 MOV AL,82H OUT 06H,AL ;8255A初始化,选择方式0,A口为输 ;出,B口为输入 MOV AL,0 OUT 00H,AL ;使各行线接地(为0电平) LOP1: IN AL,02H ;读列线状态 AND AL,0FH ;屏蔽无用位,保留列线位 CMP AL,0FH ;有列线为0电平吗? JZ LOP1 ;无,则继续查列线状态,等待键按下

  17. ;识别按下的键 MOV BL,3 ;行数送BL MOV BH,4 ;列数送BH MOV AL,11111110B ;起始扫描码,第一次使行线0接地 MOV CH,0FH ;设置屏蔽码 MOV CL,0FFH ;取键号初值为FFH

  18. LOP2: OUT 00H,AL ;逐行扫描 ROL AL ;修改扫描码,准备扫描下一行 MOV AH,AL ;扫描码送AH保存 IN AL,02H ;读列线数据 AND AL,CL ;屏蔽无用位,保留列线位 CMP AL,CL ;有列线接地吗? JNZ LOP3 ;有,转去找该列线 ADD CH,BH ;否,修改键号,使适合下一行 MOV AL,AH ;扫描码送AL DEC BL ;行数减1 JNZ LOP2 ;未扫描完,转下一行 JMP BEGIN

  19. LOP3: INC CH ;键号加1 RCR AL ;带进位循环右移一位 JC LOP3 ;C=1,说明该列未接地,转去检查下一列线 MOV AL,CH ;是,键号送AL CMP AL,0 ;是0号键吗? JZ KEY0 ;转0号键处理程序 CMP AL,1 ;是1号键吗? JZ KEY1 ;转1号键处理  CMP AL,0BH ;是B号键吗? JZ KEY口 ;转B号键处理

  20. 二. LED(发光二极管)显示器及其接口 1、七段LED显示器的结构

  21. a b f g D7 D6 D5 D4 D3 D2 D1 D0 p g f e d c b a c e  p d 共阳极LED,使a, b, g, e, d段为低电平,其他段为高电平,即显示“ 2”。(显示代码A4H)。 共阴极LED,使a, f, g, c, d为高电平,其他段为低电平,即显示“ 5”(显示代码6DH)。

  22. 数字0~9,对应的七段显示代码如下表1所示 十六进制表示的七段显示码 数 码 共阳极 共阴极 0123456789 C0F9A4B0999282F88098 3F065B4F666D7D077F67

  23. 2. 七段显示吗的译码方法 (1)采用专用芯片,即采用专用的带驱动器的LED段译码器,比如CD4511,可以实现对BCD码的译码,但不能对大于9的二进制数译码。CD4511有4位显示数据输入,7位显示段输出,3位控制信号输入。使用时,只要将CD4511的输入端与微机系统输出端口的某4个数据位相连,而CD4511的的输出直接与LED的a~g相接,便可实现对1位BCD码的显示。具体电路如图9-24所示。

  24. (2)软件译码法。图9-25所示的采用8255A的LED接口,在软件设计时,在数据段定义0~F共16个数字(也可以为0~9或其他符号)的显示代码表,在程序中利用XLAT指令进行软件译码。假设用共阳极LED来显示数据,0~F的显示代码表就可以按0~F的顺序定义如下:(2)软件译码法。图9-25所示的采用8255A的LED接口,在软件设计时,在数据段定义0~F共16个数字(也可以为0~9或其他符号)的显示代码表,在程序中利用XLAT指令进行软件译码。假设用共阳极LED来显示数据,0~F的显示代码表就可以按0~F的顺序定义如下:

  25. DISPCODE DB 0C0H,0F9H,…,06H,0EH;

  26. 利用8086的换码指令XLAT,便可方便地实现数字到显示代码的译码。利用8086的换码指令XLAT,便可方便地实现数字到显示代码的译码。 假设要显示的数据存放的BL的低四位中,利用下面几条指令就可实现软件译码。 MOV AL,BL ;把要显示的数据送入AL AND AL,0FH ;屏蔽无用位 LEA BX,DISPCODE ;显示代码表的首地址送BX XLAT ;换码,相应的显示代码即被存入AL

  27. 3.一种实用的多位LED显示接口 实际使用时,往往要用几个数码管实现多位显示。这时,如果每一个数码管占用一个独立的输出端口,那么,将占用太多的端口;而且,驱动电路的数目也很多。所以,要从硬件和软件两方面想办法节省硬件电路。

  28. 图9-26是一种多位显示的接口电路,这是一种常用的方案。在这种方案中,硬件上用公用的驱动电路来驱动各数码管;软件上用扫描方法实现数字显示。图9-26是一种多位显示的接口电路,这是一种常用的方案。在这种方案中,硬件上用公用的驱动电路来驱动各数码管;软件上用扫描方法实现数字显示。

  29. 图9-26 多位数码管显示接口示意图

  30. 下面是一段实现8位数码管依次显示一遍的子程序。实际应用中,只要按一定频率重复调用它,就可以获得稳定的显示效果。下面是一段实现8位数码管依次显示一遍的子程序。实际应用中,只要按一定频率重复调用它,就可以获得稳定的显示效果。 MOV DI,OFFSET BUFDATA ;指向数字缓冲区 MOV CL,0FEH ;指向最左边数码管

  31. DISP: MOV AL,[DI] ;取出数字 MOV BX,OFFSET TABLE ;指向显示代码表 XLAT ;得到显示代码 MOV DX,SEGPORT ;segport为段控制端口 OUT DX,AL ;送出段码 MOV AL,CL ;取出位显示代码 MOV DX,BITPORT ;bitport为位控制端口 OUT DX,AL ;送出位码 CALL DELAY ;实现数码管延时显示 INC DI ;指向下一个数字

  32. ROL CL,1 ;指向下一个数码管 CMP CL,0FEH ;是否指向最右边的数码管 JNZ DISP ;没有,显示下一个数字 RET ;8位数码管都显示一遍, 返回 TABLE: DB 0C0H, 0F9H, 0A4H, 0B0H ;显示代码表 DB 99H, 92H, 82H, 0F8H DB 80H, 90H, 88H, 83H DB 0C6H, 0C1H 86H, 8EH BUFDATA DB 8 DUP(0) ;数字缓冲区

More Related