单片机并行接口与应用及键盘接口

上传人:正** 文档编号:56854237 上传时间:2018-10-16 格式:PPT 页数:45 大小:379KB
返回 下载 相关 举报
单片机并行接口与应用及键盘接口_第1页
第1页 / 共45页
单片机并行接口与应用及键盘接口_第2页
第2页 / 共45页
单片机并行接口与应用及键盘接口_第3页
第3页 / 共45页
单片机并行接口与应用及键盘接口_第4页
第4页 / 共45页
单片机并行接口与应用及键盘接口_第5页
第5页 / 共45页
点击查看更多>>
资源描述

《单片机并行接口与应用及键盘接口》由会员分享,可在线阅读,更多相关《单片机并行接口与应用及键盘接口(45页珍藏版)》请在金锄头文库上搜索。

1、1,第8章 键盘与LED显示接口,并行接口的扩展已学过 可编程并行接口芯片8255自己看 * 独立键盘接口 * 矩阵键盘接口 静态LED数码显示接口 * 动态LED数码显示接口 *,2,8.1 并行接口的基本概念,MCS-51单片机有四个并行I/O口。当用MCS-51单片机组成的应用系统需外扩程序存储器和数据存储器时,真正可用的并行口,就只有一个P1口了。,3,8.2 并行接口的扩展,输入接口 (1) 使用三态门在前面已经介绍过,例如用74LS244.74LS245等。,(2)使用可编程扩展芯片内8255 已学过,不在重复,忘了就看一下微机原理相关章节。,4,应用举例,nCS=8000H,LS

2、244 三态 缓冲器,5,并行输出接口 (1) 使用锁存器,(2) 使用可编程接口芯片,例如8255自己复习相关内容,如果负载需要较大电流(功率),则锁存器输出端还需要加放大器晶体管、功率场效应管,6,应用举例,nCS=8000H,LS244 三态 缓冲器,7,8.3 键盘接口,8.3.1 键盘接口 1、按键电路和抖动的消除 键盘中的每一个按键在没有按下时为常开状态,如下图所示。,8,9,按键在触点转变状态时会出现一段时间的抖动,如图所示,10,可以利用RS触发器去抖动,对于单触点按键,如何使用该方法? 能否用软件消除抖动?,11,软件消抖动方法,一般抖动时间小于10ms,可以使用软件来校抖动

3、,方法是: (1) 在1020ms内检测两次按键状态, (2)如果两次状态相同,所检测到的状态就认为是按键的真实状态。 (3)如果两次状态不相同,则认为按键在抖动状态,返回步骤(1)继续检测。会不会在抖动过程中,正好两次检测状态相同,但该状态又不是按键的真实状态? 有这种可能,但在实际使用中,极少出现这种巧合,因此,计算机系统中还是普遍采用这种软件消抖动方法。,12,程序流程图,没建按下,应该去执行其他功能 有键按下,进行处理,13,可以将消抖动作为子程序 入口: A中为第一次键状态。 出口:消抖动后的键状态。 经过最多次检测,一定会得到真实的键状态。,消抖动子程序的程序代码,14,;A中是读

4、入的键状态 XDD_SUB:PUSH BMOV B,A XDD_S01: LCALL DLY_10MS ;延时10MSMOV A,P1XCH A,B ;交换,将新的状态送BXRL A,B ;判断相邻两次是否相同JNZ XDD_SUB ;不同,转去继续延时检测MOV A,B ;相同,不是抖动状态,恢复APOP BRET,15,A 键盘状态,有键按下否?,识别、处理按键,Y,N,其它程序,调用XDD_SUB,前面的程序改画为:,16,前面的方法,使用延时子程序,它要耗费CPU时间。 也可以利用定时中断检测按键每隔1020mS产生一次中断,在中端服务程序中检测按键状态,用一个单元K_S存储前一次的状

5、态。 如果本次读入的状态与前一次状态K_S相同,说明是真实状态,进行处理识别是否有键按下,是那一个键按下,并转去处理。 否则,将新的状态K_S,下一次再进行检测。 定时中断方式的程序,包括主程序、中断服务程序等。,17,一个键盘接口,当它连接的按键中某一个按键按下,如果能直接向CPU提供一个的编码这样的键盘接口叫编码键盘接口。 CPU只要识别读取的编码值,就能识别是那个按键按下。如果不能提供这样的编码,需要计算机利用读回来的闭和/断开状态,用软件来识别非编码键盘接口。 非编码键盘接口分为独立式非编码键盘,和矩阵式非编码键盘。,8.3.2. 非编码键盘接口,18,1 独立式非编码键盘,独立式非编

6、码键盘,是每个按键独立地占用一条数据输入线。如下图所示。当某一按键闭合时,相应的I/O线变为低电平。,19,P1口内部有上拉电阻,外部上拉电阻可以不要,20,如果P口不够用了,则可以利用三态门扩展并行输入口做独立键盘接口。我们前面也讨论过利用三态门扩展输入接口的例子。,21,独立式按键处理程序举例教材215页也给出了一种程序,进行消抖动后,识别是那个键按下按下的哪一位=0,按下的哪一位,读入的状态为0。 假设不处理多键同时按下,如果有多键同时按下,只识别为编号小的键。,既然有键按下,又查不到是哪个键按下,报错,22,KB_SUB:PUSH PSWJB ACC.0, KB_S01 ;S1没按下,

7、转去判断S2LCALL S1_SUB ;S1按下,调处理程序LJMP KB_END ;转结束点 KB_S01: JB ACC.1, KB_S02 ;S2没按下,转去判断S3LCALL S2_SUB ;S2按下,调处理程序LJMP KB_END ;转结束点 KB_S02: JB ACC.2, KB_S03 ;S3没按下,转去判断S4LCALL S3_SUB ;S3按下,调处理程序LJMP KB_END ;转结束点 KB_S03: JB ACC.3, KB_S04 ;S4没按下,转去判断S5LCALL S4_SUB ;S4按下,调处理程序LJMP KB_END ;转结束点 KB_S04: JB A

8、CC.4, KB_S05 ;S5没按下,转去判断S6LCALL S5_SUB ;S5按下,调处理程序LJMP KB_END ;转结束点,23,KB_S05: JB ACC.5, KB_S06 ;S6没按下,转去判断S7LCALL S6_SUB ;S6按下,调处理程序LJMP KB_END ;转结束点 KB_S06: JB ACC.6, KB_S07 ;S7没按下,转去判断S8LCALL S4_SUB ;S7按下,调处理程序LJMP KB_END ;转结束点 KB_S07: JB ACC.7, KB_S08 ;S8没按下,转去KB_S08LCALL S5_SUB ;S8按下,调处理程序LJMP

9、KB_END ;转结束点 KB_S08: LCALL KB_ERRLJMP KB_END KB_END: POP PSWRET,24,ORG 0LJMP STARTORG 03HORG 0100H START:MOV SP,#6FHLCALL INIT_SUB ;初始化子程序 LOOP: LCALL FUN_SUB ;其它功能子程序LCALL DISP_SUB ;显示子程序MOV A,P1 ;键盘状态读入CJNE A,#0FFH, MA_KB ;A、=0FFH,有键按下 LJMP NO_KB MA_KB: LCALL XDD_SUB ;软件延时消抖动LCALL KB_SUB NO_KB: ;其

10、它功能程序LJMP LOOP,主程序举例,25,各键按下的处理子程序,S1_SUB: RET S2_SUB: RET S8_SUB: RET KB_ERR: RET,每个按键有不同的作用,执行不同的功能程序。例如 如果是数据键,将数据读入保存到缓冲区; 如果是功能键,执行相应的功能处理程序。,26,对于有很多按键的情况,独立键盘接口有困难需要很多接口,硬件太复杂。 于是换一种方式独立键盘接地的一端不是直接接低电平而是通过逻辑电路控制是低还是高如下图所示。4*4 键盘,更多键的键盘类似。例如4*8的矩阵键盘。,2 非编码矩阵键盘,27,从CPU来的扫描控制信号,输入端口X可以使用P端口,如果P端

11、口已被用完,则可以像独立键盘接口一样扩展一个并行输入端口。 输出端口Y可以使用P端口,如果P端口已被用完,则可以像独立键盘接口一样扩展一个并行输出端口用锁存器。,28,键越多,矩阵键盘优势越明显,29,键盘程序应具备的基本功能,判断有无键按下 消抖动 识别是哪个键按下 判断键是否释放,30,键盘的工作方式,两种 编程扫描法:在CPU完成其它程序功能的空闲时间,通过执行一段程序来扫描键盘。 可以是在主程序循环中执行一段键盘扫描程序。这要求主程序的循环周期不能太长。 也可以是定时执行一段扫描程序通过设置一个定时器每隔10ms20ms产生一次定时中断,在定时中断程序中扫描键盘。中断扫描法:有键按下,

12、产生一个中断请求信号,CPU执行中断服务程序来扫描键盘。,31,按键的识别有两种方法,(1)扫描法:列为扫描输出,行为输入首先判断是否有键按下全部列输出为零,度行状态,如果是全1无键按下通过逐列输出低电平,看读回的行信号低电平的位置,则有列=0的位置,行=0的位置,就可确定按键位置优点:接口硬件简单,灵活 缺点:软件扫描时间长,32,Vcc,33,Vcc,34,(2)线反转法: 行/列都可以作为输出和输入 列全0输出,读回行状态,判断是哪个行信号=0按下键所在的行信号=0 行全0输出,读回行状态,判断是哪个列信号=0,35,列驱动全0,输入行信号,Vcc,36,行驱动全0,输入列信号,Vcc,

13、37,有了行、列各自的位置,就知道哪个键按下。优点查找键快 缺点硬件复杂,行/列都是三态输入/锁存输出接口后面主要讨论扫描接口。,38,判断是否有键按下 全部 输出控制信号 On=0,读入输入接口In,如果全不为“1”,则没有键按下。 消抖动 在全部Qn=0时,类似于独立键盘的消抖动间隔1020mS读入两次,如果两次状态相同,则读入的是真实状态; 识别是那个键按下 这时不能全部Qn都输出0,而是逐位输出0对应列编号 Q0=0,读入I,如果与Q0连接的这一列键有按下的,则读入的I中一定有一位=0,记录是哪一位=0行编号 没有键按下,改变列编号送下一Q=0,扫描式矩阵键盘的处理,39,对I/O口中

14、的O3Q0依次输出下列扫描信号 :D3 D2 D1 D0 第一次 1 1 1 0 第二次 1 1 0 1 第三次 1 0 1 1 第四次 0 1 1 1,利用读入的I,识别按下的键的行编号R 键位置=4*R+H,40,例如: 列编号H=1, 行编号R=2 键位置编号=4*R+H=9,41,这样,有了列编号,行编号,就知道是哪个键按下。 就能进行处理了。上面都是利用程序查询方式进行键盘扫描看是否有键按下。 可以使用中断方式有键按下,产生中断请求。,42,只要有键按下,则与门输出=0 产生有效中断请求信号,43,对于矩阵键盘,一样可以使用中断,44,矩阵键盘的程序就不具体介绍要求能比较熟练掌握独立键盘接口和处理程序。,45,8.3.3 编码键盘接口,可以利用编码键盘接口芯片构成,例如8279等。 这类芯片,一般具有中断功能,当接到它上面的按键有按下时,会产生中断请求,同时每一个键有一个唯一的编码。 CPU通过读取该编码,就知道是那个键按下。具体电路不作介绍,这部分内容不作特别要求,今后如果用到,知道有这类芯片可以选用。,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号