1 / 34

8.1 键盘接口技术

8.1 键盘接口技术. 8.1.1 行列式非编码键盘的工作原理 行列式键盘又叫矩阵键盘,如图 8-1 所示,按键设置在行列的交叉点上,如用 2×2 的行列结构可构成四个键的键盘, 4×4 的行列结构可构成 16 个键的键盘。在按键数量较多时,矩阵键盘可节省 I/O 口线。. 图 8-1 矩阵键盘与 AT89C51 接口连接图. 图 8-2 键闭合及断开时的电压抖动. 综上所述,对于非编码键盘,按键处理程序应具有如下四个功能: (1) 判断键盘上有无键按下。 (2) 去除键的机械抖动。 (3) 求按下键的键码。

archer
Télécharger la présentation

8.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. 8.1 键盘接口技术 • 8.1.1 行列式非编码键盘的工作原理 • 行列式键盘又叫矩阵键盘,如图8-1所示,按键设置在行列的交叉点上,如用2×2的行列结构可构成四个键的键盘,4×4的行列结构可构成16个键的键盘。在按键数量较多时,矩阵键盘可节省I/O口线。

  2. 图8-1 矩阵键盘与AT89C51接口连接图

  3. 图8-2 键闭合及断开时的电压抖动

  4. 综上所述,对于非编码键盘,按键处理程序应具有如下四个功能: • (1) 判断键盘上有无键按下。 • (2) 去除键的机械抖动。 • (3) 求按下键的键码。 • (4) 闭合一次,只进行一次键功能操作。 • 8.1.2 单片机对非编码键盘的控制方式 • 1. 查询方式 • 这种方式是指在单片机完成其它工作后的空余时间,调用键盘扫描子程序,来响应键盘输入的要求,在执行键功能程序时,CPU不再响应键输入要求。

  5. [例8.1] 用查询法按图8-1读取行列键盘键码,并将键码存入内部RAM 32H单元。 • 图中P1.4~P1.7用于控制行线,P1.0~P1.3用于控制列线。行、列线通过上拉电阻接+5 V,没有键按下时,被钳在高电平状态。通过发送扫描字确定键码,具体方法如下: • (1) 由列线输出0,然后读入P1口的值存入内部RAM 30H单元。

  6. (2) 由行线输出0,然后读入P1口的值存入内部RAM 31H单元。 • (3) 把30H的低4位与31H的高4位的值相加存入累加器A。 • (4) 最后判断累加器A的值,如果累加器A的数据全为1,说明无键按下,否则说明有键按下,且累加器A的数据就是被按下键的键值(程序中对累加器A取反,目的是用JNZ指令判断是否有键按下)。如图中圆圈所指键的键值为10111110B。

  7. 键扫描程序如下: • BOAD:LCALL BOADD • JNZ BOAD1 ;无键按下转BOAD • LCALL DELAY ;调延时子程序 • AJMP BOAD ;继续扫描键盘 • BOAD1:LCALL DELAY ;消除键抖动(延时子程序略) • LCALL BOADD ;确认是否有键按下 • JNZ BOAD2 • LCALL DELAY • SJMP BOAD ;转键扫描

  8. BOAD2: CPL A • MOV 32H,A ;取键值 • BOAD3: LCALL DELAY • LCALL BOADD • JNZ BOAD3 ;等待键松开 • B2: RET ;返回 • ;获取键值子程序

  9. BOADD: MOV P1,#0FH ;置行线为0 • MOV A,P1 • MOV 30H,A • MOV P1,#0F0H ;置列线为0 • MOV A,P1 • MOV 31H,A • ANL 30H,#0FH ;取列值

  10. MOV A,30H • ANL 31H,#0F0H ;取行值 • ADD A,31H ;行值加列值 • CPL A ;A全0无键按下 • RET

  11. 2. 定时扫描工作方式 • 定时扫描工作方式是利用单片机内部定时器产生定时中断,CPU响应中断后对键盘进行扫描,当有键按下时,转入键功能的处理程序。 • 定时扫描在本质上是中断方式,只不过是定时扫描键盘,以中断的方式处理键盘,它的硬件电路与编程扫描工作方式相同。 • 3. 中断工作方式 • 单片机应用系统工作时,并不经常需要键输入。因此,无论是编程工作方式或是定时工作方式,CPU经常处于空扫描状态。 • 图8-3是AT89C51利用中断扫描方式实现的一个2×8矩阵式键盘的硬件接口电路。

  12. 图8-3 利用中断扩展2×8键盘电路图

  13. 通过前面的原理分析可知,完成键盘管理的程序主要有主程序和中断服务程序,主程序主要完成初始化和键值处理任务,中断服务程序主要完成键盘扫描和键值读入任务。对应的程序流程图如图8-4所示(INT1中断流程图与INT0类似,略)。通过前面的原理分析可知,完成键盘管理的程序主要有主程序和中断服务程序,主程序主要完成初始化和键值处理任务,中断服务程序主要完成键盘扫描和键值读入任务。对应的程序流程图如图8-4所示(INT1中断流程图与INT0类似,略)。

  14. 程序如下: • ORG 0000H • LJMP BEGIN ;转主程序 • ORG 0003H • LJMP WZD0 ;转外中断0程序 • ORG 0013H • LJMP WZD1 ;转外中断1程序

  15. BEGIN: ORG 0100H • MOV SP,#60H ;设置堆栈 • MOV R1,#00H ;R1存放键值 • SETB IT1 ;设INT0、INT1为边沿触发 • SETB IT0 • SETB EA ;开中断 • SETB EX0 • SETB EX1 • MOV P1,#00H

  16. 键值处理程序(略) • 其它主程序(略) • WZD0: PUSH PSW ;保护现场 • PUSH A • CLR EX0 ;关中断INT0 • LCALL DELAY ;调延时程序去抖动 • JNB P3.2,WZD01 • ;再次确认是INT0中断吗

  17. SETB EX0 ;不是,则恢复现场退出中断 • POP A • POP PSW • RETI • WZD01: MOV A,#01H ;置S1键的键值为1 • MOV P1,#0FEH ;扫描P1.0 • JNB P3.2,KEYR1 ;是S1键则转移

  18. INC A ;不是S1键,键值加1 • MOV P1,#0FDH ;扫描P1.1,以下同P1.0类似 • JNB P3.2,KEYR1 • INC A • MOV P1,#0FBH • JNB P3.2,KEYR1 • INC A • MOV P1,#0F7H • JNB P3.2,KEYR1 • INC A

  19. MOV P1,#0EFH • JNB P3.2,KEYR1 • INC A • MOV P1,#0DFH • JNB P3.2,KEYR1 • INC A • MOV P1,#0BFH • JNB P3.2,KEYR1 • INC A • MOV P1,#7FH

  20. JNB P3.2,KEYR1 • LJMP KEYR2 • KEYR1:MOV R1,A ;将键值存入R1中 • KEYR2:CLR IE0 ;清中断标志(因扫描中可能使IE0置位) • SETB EX0 ;开中断INT0 • POP A ;恢复现场 • POP PSW • RETI ;中断返回 • WZD1: …;外中断1程序与中断0相似(略) • DELAY: …;延时程序(略)

  21. 图8-4 中断方式扩展键盘流程图 (a) 主程序流程图;(b)  INT0中断服务程序流程图

  22. 8.2 LED显示器接口技术 • 8.2.1 LED显示器的结构原理 • LED显示器用发光二极管显示字段,分为共阴极和共阳极两种。图8-5给出了八段LED数码显示器的结构图和原理图。图8-5(a)是八段共阴极LED显示器,它将八个发光二极管阴极共地。当某发光二极管要点亮时,只需在该发光二极管的阳极加高电平即可。图8-5(b)是八段共阳极LED显示器,它的操作与共阴极相反。LED显示器也有七段的,它只比八段LED少一只发光二极管DP,其它结构与八段LED完全相同。

  23. 图8-5 七段LED显示器 (a) 共阴性;(b) 共阳性;(c) 管脚配置

  24. 字形码 3F 06 5B 4F 66 6D 7D 07 7F 6F 显示字符 0 1 2 3 4 5 6 7 8 9 • 表8-1 共阴极LED数码管字形码表 图8-6 字形码数据格式

  25. 8.2.2 LED显示器的显示方式 • 1.静态显示方式 • 在静态显示方式中,各位的共阴或共阳极连接在一起接地或接+5 V,每位的段选线(a~dp)与一个8位并行口相连。如图8-7所示,它是一个4位的静态显示电路,之所以称之为静态显示电路,是由于显示器的各位相互独立,而且各位的显示字符一经确定,相应的输出将维持不变,直到显示另一个字符为止。

  26. 图8-7 4位LED静态显示电路图

  27. 2. 动态方式 • 为了克服静态显示方式的缺点,节省I/O口线,人们常常使用动态显示方式。它将所有数码管的a、b、c、d、e、f、g、sp引线并联在一起,由一个8位I/O口控制,而公共端由另一个I/O口控制。应用时,轮流送入每个LED的字形码与位选码,利用人的视觉暂留现象来显示各位的字符。图8-8是一个8位LED动态显示电路图.

  28. 图8-8 8位LED动态显示电路图

  29. [例8.2] 根据图8-9编写程序显示内部RAM 50H~57H单元中的数据。 图8-9 AT89C51与动态显示LED接口连接图

  30. 图8-9是用8255A对8位动态显示器的接口电路。图中LED为八段共阴数码管,A口输出字形码,B口输出位选码,片选端直接接地。根据图中连接可知,8255A的A口地址为FFFCH,B口地址为FFFDH,控制口地址为FFFFH,由于A、B口均为输出,因此控制字为80H。下面是一个动态显示内部RAM 50H~57H单元数据的子程序。

  31. DIR:MOV A,#10000000B • ;设置8255的工作方式,A、B口为输出 • MOV DPTR,#0FFFFH • ;8255的命令口地址送DPTR • MOVX @DPTR,A • MOV R0,#50H ;50H~57H为显示缓冲区 • MOV R3,#7FH ;第一位的位选码 • MOV A,R3

  32. SCAN: MOV DPTR,#0FFFDH ;指向B口 • MOVX @DPTR,A ;位选码送B口 • MOV A,@R0 ;取显示数据 • MOV DPTR,#TAB ;取字形码表首址 • MOVC A,@A+DPTR ;取字形码 • MOV DPTR,#0FFFCH ;指向A口

  33. MOVX @DPTR,A ;字形码送A口 • ACALL DL1ms ;调延时1 ms子程序 • INC R0 ;指向下一显示数据单元 • MOV A,R3 • JNB ACC.0,ED ;8位显示完,退出 • RR A ;指向下一位 • MOV R3,A • AJMP SCAN ;继续显示下一位

  34. ED:RET • TAB:DB 3FH,06H,5BH,4FH,66H • ;共阴0~F的字型码表 • DB 6DH,7DH,07H,7FH,6FH • DL1ms: MOV R7,#01H ;延时1 ms子程序 • DL0: MOV R6,#0FFH • DL1: DJNZ R6,DLI • DJNZ R7,DLO • RET

More Related