键盘接口

百燕之家 / 信息详情

如何利用89C51单片机与8279实现键盘接口电路显示

第六章 单片机接口技术应用在设计各种单片机应用系统中,还需扩展很多外部接口器件才能充分发挥单片机的智能控制功能。如扩展键盘与显示器件接口,可实现人机对话功能;扩展A/D转换接口,可实现对外部各种模拟信号的检测与转换;扩展D/A转换接口可将数字信号转换为模拟信号,从而完成对控制对象的驱动。本章将主要介绍常见的键盘、显示(LED、LCD)、A/D和D/A转换接口电路。第一节 键盘接口电路键盘是计算机最常用的输入设备,是实现人机对话的纽带。按其结构形式可分为非编码键盘和编码键盘。编码键盘采用硬件方法产生键码。每按下一个键,键盘能自动生成键盘代码,键数较多,且具有去抖动功能。这种键盘使用方便,但硬件较复杂,PC机所用键盘即为编码键盘。非编码键盘仅提供按键开关工作状态,其键码由软件确定,这种键盘键数较少,硬件简单,广泛应用于各种单片机应用系统,本书主要介绍非编码键盘的设计与应用。一、 独立式键盘按照键盘与单片机的连接方式可分为独立式键盘与矩阵式键盘。独立式键盘相互独立,每个按键占用一根I/O口线,每根I/O口线上的按键工作状态不会影响其他按键的工作状态。这种按键软件程序简单,但占用I/O口线较多(一根口线只能接一个键),适用于键盘应用数量较少的系统中。图6-1为4个独立式按键的应用电路。其键盘程序如下: 1.键闭合测试,检查是否有键闭合KCS:MOV P1,#0FFHMOV A,P1CPL AANL A,#0FHRET若有键闭合,则(A≠0), 若无键闭合,则(A=0)。2.去抖动当测试到有键闭合后,需进行去抖动处理。由于按键闭合时的机械弹性作用,按键闭合时不会马上稳定接通,按键断开时也不会马上断开,由此在按键闭合与断开的瞬间 会出现电压抖动,如图6-2所示。键盘抖动的时间一般为5~10ms,抖动现象会引起CPU对一次键操作进行多次处理,从而可能产生错误,因而必须设法消除抖动的不良后果。通过去抖动处理,可以得到按键闭合与断开的稳定状态。去抖动的方法有硬件与软件两种:硬件方法是加去抖动电路,如可通过RS触发器实现硬件去抖动;软件方法是在第一次检测到键盘按下后,执行一段10ms的延迟子程序后再确认该键是否确实按下,躲过抖动,待信号稳定之后,再进行键扫描。通常多采用软件方法。 3.采用查询方式确定键位如图可见,若某键闭合则相应单片机引脚输入低电平。4.键释放测试键盘闭合一次只能进行一次键功能操作,因此必须等待按键释放后再进行键功能操作,否则按键闭合一次系统会连续多次重复相同的键操作。(对于开关式按键,可不必等待键释放)。程序如下:KEY:ACALL KCS ;检查有键闭合否 JZ RETURN ;无键闭合则返回 ACALL DELAY ;有键闭合,延时12ms消抖动KEY0:JNB ACC.0,KEY1 ;不是0号键,查下一键KSF0: ACALL DELAY ;是0号键,调延时等待键释放 ACALL KCS ;检查键释放否 JNZ KSF0 ;没释放等待 ACALL FUN0 ;若键已释放,执行0号键功能 JMP RETURN ;返回KEY1: JNB ACC.1,KEY2 ;检测1号键KSF1: ACALL DELAY ACALL KCS JNZ KSF1 ACALL FUN1…KEY3:JNB ACC.3,RETURN ;检测3号键KSF3:ACALL DELAY ACALL KCS JNZ KSF3ACALL FUN3RETURN: RET ;子程序返回二、矩阵式键盘矩阵式键盘又称行列式键盘,见图6-3。图中,P1口的8根口线分别作为4根行线与4根列线,在其行、列交汇点接有16个键盘。与独立式键盘相比,单片机口线资源利用率提高了一倍。但若需要更多的键盘,需采用接口扩展的方式,见图6-4。图中利用8155芯片进行键盘扩展,利用PA口作为输出口,8根口线作为列线,利用PC口作为输入口,4根口线作为行线,由此产生32键的矩阵式键盘。这种键盘采用扫描方式检测按键闭合情况及识别确定键码,因此称扫描方式键盘。(一)扫描方式键盘工作原理图6-4 32键矩阵式键盘应用电路1.键闭合测试图6-4中,键盘的行线一端经电阻接+5V电源,另一端通过8155 PC口送单片机。各列线的一端通过8155PA口连至单片机,另一端悬空。首先由PA口向所有列线输出低电平,然后再由PC口输入各行线状态。若行线状态皆为高电平,则表示无键闭合;若行线状态中有低电平则表明有键闭合。设8155A口地址为0101H,C口地址为0103H,键闭合测试子程序KCS如下:KCS:MOV DPTR,#0101H ;送A口地址 MOV A,#00H ;A口送00H MOVX @DPTR,A INC DPTR INC DPTR ;建立C口地址 MOV A,@DPTR ;读C口 CPL A ;A取反,无键闭合则全为0 ANL A,#0FH ;屏蔽A高半字节 RET该程序功能是检查是否有键闭合,若有键闭合则(A)≠0,否则(A)=0。2.去抖动仍采用软件延时的方法。3.键位识别为了准确判断闭合键的位置,要对每个按键进行编码。根据矩阵式键盘的结构,采用行扫描的键位识别方法。使某条列线为低电平,如果这条列线上没有闭合键,则各行线的状态都为高电平;如果列线上有键闭合,则相应的那条行线即变为低电平。于是就可以根据行线号与列线号计算出闭合键的键码。扫描时由第一列开始,即由PA口先输出0FEH,然后由PC口输入行线状态,判断哪一行有键闭合,若无键闭合,再输出0FDH检测下一列各行键闭合状态,由此一直扫描下去。根据图6-4 中各键的编号情况,各键的键码可按如下公式计算: 键码 = 行首键号+列号4.键释放测试(二)键盘扫描程序EKY: ACALL KCS ;检查有键闭合否 JNZ LK1 ;有键按下则转移至消抖动 AJMP KEY ;无键按下则返回LK1: ACALL DELAY ;12ms延时消抖动 ACALL KCS ;再查有键闭合否 JZ KEY ;有键闭合则进行键扫描计算键码 MOV R2,#0FEH ;置第一列扫描值 MOV R4,#00H ;置初始列号XYL: MOV DPTR,#0101H ;建立A口地址 MOV A,R2 MOVX @DPTR,A ;输出扫描初值 INC DPTR INC DPTR ;建立C口地址 MOVX A,@DPTR ;读C口 JB ACC.0,LINE1 ;第一行无键闭合,转查第二行 MOV A,#00H ;第一行有键闭全,置第一行首键值 AJMP KJS ;转到计算键码LINE1: JB ACC.1,LINE2 ;第二行无键闭合,转查第三行 MOV A,#08H ;第二行有键闭全,置第二行首键值 AJMP KJS ;转到计算键码LINE2: JB ACC.2,LINE3 ;第三行无键闭合,转查第四行 MOV A,#10H ;第三行有键闭全,置第三行首键值 AJMP KJS ;转到计算键码LINE3: JB ACC.3,NEXT ;第四行无键闭全,转查下一列 MOV A,#18H ;第四行有键闭全,置第四行首键值KJS: ADD A,R4 ;计算键码 PUSH ACC ;保存键码KSF: ACALL DELAY ACALL KCS ;键释放否,若仍闭合则延时等待 JNZ KSF POP ACC ;若键已释放,则键码送A RETNEXT: INC R4 ;列扫描号加1 MOV A,R2 JNB ACC.7,KEY ;第8列已扫描完则进行下一循环扫描 RL A ;置下一列列扫描值 MOV R2,A AJMP XYL ;扫描下一列 此程序执行后,键码保存在累加器A中。主程序可根据累加器A中的键码执行相应的功能程序。(三)键盘扫描的中断控制方式在单片机系统中,CPU除了对键盘进行处理外,还要进行数据处理、结果输出显示及其它各种控制,因此键盘处理不应占用CPU过多的时间,但又必须保证CPU能够检测到键盘的工作。为提高CPU的工作效率,可采用中断扫描方式。当无键闭合时,CPU处理自已的工作,当有键闭合时,产生中断请求,CPU转去执行键盘扫描子程序并执行相应的功能。图6-5 即为采用中断方式的键盘扫描电路。与图6-3相比,本电路采用4输入与门用于产生键盘中断,其输入端与各行线相连,输出端接至8031的外部中断输入端 。当无键盘闭合时,与门各输入端均为高电平,输出端为高电平;当有键闭合时, 为低电平,于是向CPU申请中断。若CPU开放中断,则会响应该键盘中断,转去执行键盘扫描子程序。第二节 LED显示接口电路一、LED显示器LED(Light Emitting Diode)显示器是由发光二极管作为显示字段的数码型显示器件,具有显示清晰、成本低廉、配置灵活、与单片机接口简单易行的特点,在单片机应用系统中得到了广泛的应用。1.LED显示器结构与分类LED显示器内部由7段发光二极管组成,因此亦称之为七段LED显示器,由于主要用于显示各种数字符号,故又称之为LED数码管。每个显示器还有一个圆点型发光二极管(用符号DP表示),用于显示小数点,图6-6为LED显示器的符号与引脚图。根据其内部结构,LED显示器可分为共阴极与共阳极两种LED显示器,见图6-7所示。(a)共阴极结构 (b)共阳极结构图6-6 LED显示器的符号与引脚图 图6-7 LED显示器内部结构图(1)共阴极LED显示器。图6-7(a)为共阴极LED显示器的内部结构。图中各二极管的阴极连在一起,公共端接低电平时,若某段阳极加上高电平则该段发光二极管就导通发光,而输入低电平的段则不发光。(2)共阳极LED显示器。图6-7(b)为共阳极LED显示器的内部结构。图中各二极管的阳极连在一起,公共端接高电平时,若某段阴极加上低电平则该段发光二极管就导通发光,而输入高电平的段则不发光。LED数码管通常有红色、绿色、黄色三种,以红色应用最多。由于二极管的发光材料不同,数码管有高亮与普亮之分,应用时根据数码管的规格与显示方式等决定是否加驱动电路。2.LED显示器的段码7段LED显示器可采用硬件译码与软件译码两种方式。在数字电路中曾介绍硬件译码显示方法,如利用74LS47等实现译码显示,这里主要介绍软件方式实现译码显示。加在显示器上对应各种显示字符的二进制数据称为段码。数码管中,七段发光二极管加上一个小数点位共计8段,因此段码为8位二进制数,即一个字节。由于点亮方式不同,共阴与共阳两种LED数码管的段码是不同的,详见表6-1。表6-1 LED数码管段码表字型 共阳极段码 共阴极段码 字型 共阳极段码 共阴极段码0 C0H 3FH 9 90H 6FH1 F9H 06H A 88H 77H2 A4H 5BH B 83H 7CH3 B0H 4FH C C6H 39H4 99H 66H D A1H 5EH5 92H 6DH E 86H 79H6 82H 7DH F 8EH 71H7 F8H 07H 灭 FFH 00H8 80H 7FH 二、LED并行显示技术1.利用8155做LED显示器并行接口电路在单片机应用系统中,通常具有多位LED显示器,在编程时采用动态显示方式。所谓动态显示是指利用单片机控制显示器逐位点亮,而不是同时点亮。由于人眼的视觉残留效应,仍然感觉显示器是同时点亮的,但要求显示器动态点亮的速度应足够快,否则会有闪烁感。图6-8 利用8155芯片扩展6位LED显示器在实现动态显示时,除了必须给各位数码管提供段码外还必须对各位显示器进行位的控制,即进行段控与位控。工作时,各位数码管的段控线对应并联在一起,由一个8位的I/O口控制;各位的位控线(公共阳极或阴极)由另一I/O控制。在某一时刻只选通一位数码管,并送出相应的段码。图6-8为利用8155扩展6位LED显示器接口电路。利用8155PC口作为位控输出口。7路达林顿反向驱动输出芯片MC1413作为位控驱动;利用8155PA口作为段控输出口,输出8位段码。为增加显示亮度,采用双向驱动芯片74LS245进行段码输出驱动。2.建立显示缓冲区显示缓冲区是指在内存中开辟的一块存储区域,专门用于存放待显示的数据,存储区域大小至少应与LED数码管位数相同。设显示缓存单元为30H~35H,显示内容自右至左为为1、2、3、4、5、6,则缓存与LED数码管对应关系如下表所示:数 码 管 LED5 LED4 LED3 LED2 LED1 LED0缓存单元 35H 34H 33H 32H 31H 30H显示数据 06H 05H 04H 03H 02H 01H3、显示子程序设计设8155A口地址(即段控口)为0101H,C口地址为0103H。寄存器R0作为地址指针,寄存器R3存放当前位控值,DELAY为延时子程序,延时时间大约为1ms。程序如下:DISPLAY: MOV R0,#30H ;建立显示缓冲区首址 MOV R3,#01H ;从右边第一位数码管开始显示 MOV A,R3 ;置位控码初值 LD0: MOV DPTR,#0103H ;置位控口地址 MOVX @DPTR,A ;输出位控码MOV DPTR,#0101H ;置段控口地址MOV A,@R0 ;取待显示数据DIS0: ADD A,#0DH ;计算查表偏移量 MOVC A,@R0 ;查表法得到对应段码DIS1: MOVX @DPTR,A ;输出段码 ACALL DELAY ;延时以使显示器作显示停留 INC R0 ;指向下一缓冲单元 MOV A,R3 JB ACC.5,DIS1 ;最后位显示完了吗,完则返回 RL A ;修改位控码,指向高位 MOV R3,A ;位控码送R3保存 AJMP DIS0 ;继续显示下一位 LD1: RETTAB: DB 3FH,06H,5BH,4FH … 00H ;段码表三、串行LED显示技术在单片机系统设计中,LED显示方式由于具有使用方便、价格低廉等优点而得到广泛应用。在采用并行显示方式时,显示电路的段码与位控码要占用单片机的较多口线,尽管可采用8155等接口芯片进行扩展,但口线利用率仍较低,不能满足大型控制系统的要求。采用串行显示方式则只需占用2至3根口线,节约单片机大量的I/O线,且使用效果很好。下面介绍一种基于74HC595A的LED串行显示技术。1.74HC595A工作原理74HC595A内部含有8位移位寄存器和8位D锁存器,内部结构见图6-9所示。串行移位寄存器接收外部输入串行数据,一方面可进行串行数据输出,同时向锁存器提供8位并行输入数据,并具有异步复位功能;8位锁存器可三态输出并行数据。该芯片具有串行输入、并行输出两个独立的时钟信号。表6-2为该芯片的逻辑功能表。表6-2 74HC595A逻辑功能表工作状态 输 入 输 出SER SRCLK RCLK SQH Q0-Q7复 位 L × × L H ↓ L L U串行输入 H D ↑ L H ↓ L SRG SRH U锁存输出 H × L H↓ ↑ L U N高 阻 × × × × H Z注:U:不变;N:数据刷新;Z:高阻。 输入数据在串行移位时钟SCLK上升沿由串行输入端SER输入到芯片内部串行移位寄存器中,同时SQH端串行输出;在锁存时钟信号LCLK上升沿到来时,芯片将内部串行移位寄存器8位数据并行输出。正常工作时,应将复位端 与使能端 分别接高电平、低电平。2.应用电路设计图6-10为12位LED显示器应用电路。若采用普通的LED并行显示方式需扩展单片机接口,电路复杂、成本高。本系统利用三片74HC595A芯片实现12位串行LED显示控制。使用时,在串行时钟的控制下,可将显示器位控码与段控码逐位串行输入至三个芯片中,然后利用锁存信号实现并行输出,完成12数数码显示更新。利用此显示方式仅占用单片机三根口线,极大节约单片机口线资源。采用串行数据输入,显示速度相对较慢,实际使用时显示效果稳定、可靠,完全满足设计要求。