《单片机的接口技术》PPT课件.ppt

上传人:za****8 文档编号:16099238 上传时间:2020-09-19 格式:PPT 页数:152 大小:4.67MB
返回 下载 相关 举报
《单片机的接口技术》PPT课件.ppt_第1页
第1页 / 共152页
《单片机的接口技术》PPT课件.ppt_第2页
第2页 / 共152页
《单片机的接口技术》PPT课件.ppt_第3页
第3页 / 共152页
点击查看更多>>
资源描述
51单片机的I/O外设的接口,本章内容,51单片机的键盘与显示器接口 键盘、显示器接口芯片8279,9.1 LED数码管的接口,LED(Light Emitting Diode)发光二极管缩写。 LED数码管是由发光二极管构成的。,9.1.1 LED数码管的结构 常见的LED数码管为“8”字型的,共计8段。每一段对应一个发光二极管。有共阳极和共阴极两种,如图9-1所示。 共阴极发光二极管的阴极连在一起,通常公共阴极接地。当阳极为高电平时,发光二极管点亮。 共阳极LED数码管的发光二极管的阳极连接在一起,公共阳极接正电压,当某个发光二极管的阴极接低电平时,发光二极管被点亮,相应的段被显示。,图9-1 8段LED数码管结构及外形,8段LED数码管结构,8段LED数码管的字型码,为了使数码管显示不同的符号或数字,要把某些段发光二极管点亮,就要为LED数码管提供段码(字型码)。 LED数码管共计8段。正好是一个字节。习惯上是以“a”段对应段码字节的最低位。各段与字节中各位对应关系如表9-1所示。,按照上述格式,显示各种字符的8段LED数码管的段码如表10-2所示。,显示各种字符的8段LED数码管的段码如表9-2所示,表9-2 8段LED段码,其它显示器,除 “8”字型的LED数码管外,市面上还有“1”型、“米”字型和“点阵”型LED显示器,如图9-2所示。本章均以“8”字型的LED数码管为例。,图9-2 其他各种字型的LED显示器,9.1.2 LED数码管工作原理,图9-3所示为显示4位字符的LED数码管的结构原理图。N位位选线和8N条段码线。段码线控制显示字型,而位选线控制着该显示位的LED数码管的亮或暗。,图9-3 4位LED数码管的结构原理图,LED静态显示方式 无论多少位LED数码管,同时处于显示状态。 静态显示方式,各位的共阴极(或共阳极)连接在一起并接地(或接+5V);每位的段码线(adp)分别与一个8位的I/O口锁存器输出相连。如果送往各个LED数码管所显示字符的段码一经确定,则相应I/O口锁存器锁存的段码输出将维持不变,直到送入另一个字符的段码为止。正因为如此,静态显示方式的显示无闪烁,亮度都较高,软件控制比较容易。 图9-4为4位LED数码管静态显示器电路,各位可独立显示,静态显示方式接口编程容易,但是占用口线较多。 对图9-4电路,若用I/O口线接口,要占用4个8位I/O口。因此在显示位数较多的情况下,所需的电流比较大,对电源的要求也就随之增高,这时一般都采用动态显示方式。,LED数码管有静态显示和动态显示两种显示方式,图9-4 4位LED静态显示电路,LED静态显示方式,LED动态显示方式,无论在任何时刻只有一个LED数码管处于显示状态,即单片机采用“扫描”方式控制各个数码管轮流显示。 在多位LED显示时,为简化硬件电路,通常将所有显示位的段码线的相应段并联在一起,由一个8位I/O口控制,而各位的共阳极或共阴极分别由相应的I/O线控制,形成各位的分时选通。 图9-5所示为一个4位8段LED动态显示电路。其中段码线占用一个8位I/O口,而位选线占用一个4位I/O口。必须采用动态的“扫描”显示方式。即在某一时刻,只让某一位的位选线处于选通状态,而其他各位的位选线处于关闭状态,同时,段码线上输出相应位要有显示的字符的段码。,图9-5 4位8段LED动态显示电路,LED动态显示方式,虽然这些字符是在不同时刻出现,而在同一时刻,只有一位显示,其他各位熄灭,由于余辉和人眼的“视觉暂留”作用,只要每位显示间隔足够短,则可以造成“多位同时亮”的假象,达到同时显示的效果。 LED不同位显示的时间间隔(扫描间隔)应根据实际情况而定。显示位数多,将占大量的单片机时间,因此动态显示的实质是以牺牲单片机时间来换取I/O端口的减少。 图9-6所示为8位LED动态显示2009.10.10的过程。图9-6(a)所示为显示过程,某一时刻,只有一位LED被选通显示,其余位则是熄灭的; 图9-6(b)所示为实际的显示结果,人眼看到的是8位稳定的同时显示的字符。 动态显示的优点是硬件电路简单,显示器越多,优势越明显。缺点是显示亮度不如静态显示的亮度高。如果“扫描”速率较低,会出现闪烁现象。,LED动态显示方式,图9-6 8位LED动态显示过程和结果,LED动态显示方式,9. 2 单片机键盘接口技术,键盘输入需解决三个问题 (1)判别是否有键按下?若有,进入下一步工作。 (2)识别哪一个键被按下,并求出相应的键值。 (3)根据键值,找到相应键值的处理程序入口。,9.2.1 键盘接口的任务,键盘输入的特点,常见键盘:触摸式键盘、薄膜键盘和按键式键盘,最常用的是按键式键盘。按键实质上就是一个开关。如图9-7(a)所示,按键开关的两端分别连接在行线和列线上,通过键盘开关机械触点的断开、闭合,其行线电压输出波形如图9-7(b)所示。,图9-7 键盘开关及其行线波形,键盘输入的特点,图9-7(b)所示的t1和t3分别为键的闭合和断开过程中的抖动期(呈现一串负脉冲),抖动时间长短与开关的机械特性有关,一般为510ms,t2为稳定的闭合期,其时间由按键动作确定,一般为十分之几秒到几秒,t0、t4为断开期。,图9-7 键盘开关及其行线波形,按键的识别,键的闭合与否,行线输出电压上就是呈现高电平或低电平。高电平,表示键断开,低电平则表示键闭合,通过对行线电平的高低状态的检测,可确认按键按下以及按键释放与否。 为了确保对一次按键动作只确认一次按键有效,必须消除抖动期t1和t3的影响。通常t1和t3小于10ms。按键闭合时的电压抖动波形见图9-8。,图9.8 键闭合和断开时的电压抖动,如何消除按键的抖动,按键去抖动的方法有两种: 一种软件延时,思想是:在检测到有键按下时,该键所对应的行线为低电平,执行一段延时10ms的子程序后,确认该行线电平是否仍为低电平,如果仍为低电平,则确认该行确实有键按下。当按键松开时,行线的低电平变为高电平,执行一段延时10ms的子程序后,检测该行线为高电平,说明按键确实已经松开。采取本措施,可消除两个抖动期t1和t3的影响。 另一种是采用专用的键盘/显示器接口芯片,这类芯片中都有自动去抖动的硬件电路,9. 2.2 键盘工作原理,键盘可分为两类:非编码键盘和编码键盘。 非编码键盘 非编码键盘是利用按键直接与单片机相连接而成,它通常使用在按键数量较少,系统功能较简单,需处理的任务较少的场合,可以降低成本、简化电路设计。非编码键盘可分为独立式和矩阵式。 (1)独立式键盘: 结构:一组相互独立的键盘,每个键盘都与单片机的I/O口的一条口线连接,相互独立。独立式键盘的结构见图9-9。 原理:当任何一个键被按下时,与其相连的输入线被置成 “0”,平时该线为“1”。通过检测I/O输入线的电平状态,判断哪个按键被按下。 特点:接口简单,但若键较多,将占用许多I/O线。,图9-9 独立式键盘结构,对于图9-8的键盘,图中的上拉电阻保证按键释放时,输入检测线上有稳定的高电平。,键处理子程序,KEYIN: MOVA,#0FFH;置P1口为“1”,设置P1口为输入状态 MOVP1,A MOVA,P1 ;输入键状态 CJNEA,#0FFH,QUDOU;有键按下,跳去抖动 LJMPRETURN;无键按下,返回 QUDOU: MOV R3,A;8个按键的状态送R3保存 LCALL DELAY10;调用延时子程序,软件去键抖动 MOVA,P1;再一次读入8个按键的状态 CJNEA,R3,RETURN;两次键值比较,不同,是抖动引起,转RETURN JNBACC.0,P0F;查询0号键 JNBACC.1,P1F;查询1号键 JNBACC.2,P2F;查询2号键 JNBACC.3,P3F;查询3号键 JNBACC.4,P4F;查询4号键 JNB ACC.5,P5F;查询5号键 JNB ACC.6,P6F;查询6号键 JNB ACC.7,P7F;查询7号键,键处理程序(续),LJMPRETURN P0F:LJMPPROM0;入口地址表 P1F:LJMPPROM1 P6F:LJMPPROM6 P7F:LJMPPROM7 PROM0:;0号键功能程序 LJMPRETURN;0号键处理完返回键盘扫描 PROM7: ;7号键功能程序 LJMPRETURN;7号键处理完返回键盘扫描 RETURNRET,(2)矩阵式(行列式)键盘,结构:键的数目多,将键按行列排成矩阵形式。矩阵式键盘由行线和列线组成,按键位于行、列线的交叉点上。图9-10为44的矩阵式键盘结构。 优点:在按键数目较多的场合,节省I/O口线,图9-10 44矩阵式键盘结构,矩阵式(行列式)键盘的按键识别,矩阵式键盘按键的识别方法分为扫描法和反转法。 扫描法 第1步,识别键盘有无键按下: 列线输出全0 然后输入行线状态,若行线状态为全1( 1111 )则没有键按下; 若行线状态一定不为全为1,则一定有任一键按下。 第2步,识别出具体的键位: 逐列扫描,先第一列输出为0,其他列为1,列编码为1110。然后输入行线状态,若行线状态为全1( 1111 ),即按键不在此列线交叉点上,继续扫描。 第二列输出为0,其他列为1,列编码为1101,再输入行线状态,若行状态不是全1,即按键在该列交叉点上,否则继续扫描。,扫描法识别按键,将此时的扫描列码与行码组合得到的按键码,即可确定按键的位置。 如图9-10所示的“3”键,它位于第4列和第1行交叉点上,其列码为:0111,行码为:1110,键码为:0111,1110B = 7EH,图9-10 44矩阵式键盘结构,每个键的键码,负逻辑表示-行列线数据求反组合,上例中的各键值分别为: 88H84H82H81H 48H44H42H41H 28H24H22H21H 18H14H12H11H,正逻辑表示-行列线数据直接组合,图9-10中的各键码分别为: 77H7BH7DH7EH B7HBBHBDHBEH D7HDBHDDHDEH E7HEBHEDHEEH,线反转法,让行线编程为输入线,列线编程为输出线,并使输出线输出为全低电平,则行线中电平由高变低的所在行为按键所在行。 再把行线编程为输出线,列线编程为输入线,并使输出线输出为全低电平,则列线中电平由高变低所在列为按键所在列。 线反转法只需经过两步便能获得此按键所在的行列值,比较简练。 下面以图9-11所示的矩阵式键盘为例,介绍线反转法的具体步骤。,图9-11 采用线反转法的矩阵式键盘,线反转法,假设键3被按下。 第一步,P1.0P1.3输出全为“0”,然后,读入P1.4P1.7线的状态,结果P1.4=0,而P1.5P1.7均为1,因此,第1行出现电平的变化,说明第1行有键按下; 第二步,让P1.4P1.7输出全为“0”,然后,读入P1.0P1.3位,结果P1.0=0,而P1.1P1.3均为1,因此第4列出现电平的变化,说明第4列有键按下。 综上所述,即第1行、第4列按键被按下,此按键即键3按下。,图9-11 采用线反转法的矩阵式键盘,键盘接口完成的主要功能:,键盘扫描:判断是否有键按下; 键识别:确定闭合键的行列位置; 产生闭合键键码; 排除多键、串键(复按)及去抖动。,键的识别和键功能实现,键的识别由接口电路完成,即键盘接口问题; 键的功能实现由中断程序完成。,键处理子程序,在计算机中每一个键都对应一个处理子程序,得到闭合键的键码后,转相应的健处理子程序,实现该键所设定的功能。,键处理程序的流程如图9-12,图9-12键处理流程图,9.3 51单片机键盘接口和键功能的实现,单片机的键盘键接口可以有多种方法实现。 使用单片机本身的并行口或串行口; 使用通用接口芯片(8255、8155等); 使用专用接口芯片如8279,周立功公司的ZLG7289A,ZLG7290B,MAX7219,南京沁恒公司的CH451,HD7279和BC7281等。 在单片机应用系统设计中,一般都是把键盘和显示器放在一起考虑。也有的系统仅单独需要键盘或显示器。介绍几种实用的键盘/显示器接口的设计方案。,9.3.1 利用AT89S51串行口实现的键盘/显示器接口(举例),使用AT89S51的串行口的方式0的输出方式,构成键盘/显示器接口,如图9-13所示。 8个74LS164:74LS164(0)74LS164(7)作为8位LED数码管的段码输出口,AT89S51的P3.4、P3.5作为两行键的行状态输入线,P3.3作为TXD引脚同步移位脉冲输出控制线,P3.3=0时,与门封死,禁止同步移位脉冲输出。这种方案主程序可不必扫描显示器,软件设计简单,使单片机有更多的时间处理其他事务。 下面列出显示子程序和键盘扫描子程序。,图9-13 用AT89S51串行口扩展键盘/显示器,显示子程序:,DIR: SETBP3.3; P3.3=1,允许TXD脚同步移位脉冲输出 MOVR7,08H; 送出的段码个数 MOVR0,7FH; 7FH78H为显示数据缓冲区 DL0: MOV A,R0; 取出要显示的数送A ADD A,0DH; 加上偏移量 MOVC A,APC; 查段码表SEGTAB, 取出段码 MOV SBUF ,A; 将段码送串行口的SBUF DL1: JNB TI,DL1; 查询1个字节的段码输出完否? CLRTI; 1字节的段码输出完,清TI标志 DECR0; 指向下一个显示数据单元,DJNZR7,DL0;段码个数计数器R7是否为0,如不 ;为0,继续送段码 CLR P3.3; 8个段码输出完毕,关闭显示器输出 RET ; 返回 SEGTAB: DB 0C0H,0F9H,0A4H,0B0H;共阳极段码表 DB99H,92H,82H,0F8H,90H DB88H,83H,0C6H,0A1H,86H DB8FH,0BFH,8CH,0FFH,0FFH,显示子程序:,键盘扫描子程序:,KEYI:MOVA,00H; 判断有无键按下, 使所有列线为0 MOVSBUF,A; 扫描键盘的(8)号74LS164输出为 ;00H,使所有列线为0 KL0: JNBTI,KL0; 串行输出完否? CLRTI; 串行输出完毕,清TI KL1:JNBP3.4,PK1; 第1行有闭合键吗?如有,跳PK1进行处理 JB P3.5,KL1; 在第2行键中有闭合键吗?无闭合键跳KL1 PK1: ACALL DL10; 调用延时10ms子程,软件消抖动 JNB P3.4,PK2; 判断是否由抖动引起? JB P3.5,KL1 PK2: MOV R7,08H; 不是抖动引起的 MOV R6,0FEH;判别是哪一个键按下,FEH为最左1列为低 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 PKONE:MOV R4,00H;1行键中有键按下,行首键号00H送R4 PK3: MOV SBUF,00H;等待键释放,发送00H使所有列线为低 KL3: JNB TI,KL3; 判1个字节是否发送完毕 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列键都检查完否? AJMP KEYI; 8列扫描完,开始下一个键盘扫描周期 DL10: MOV R7,0AH; 延时10ms子程序 DL: MOV R6,0FFH DL6: DJNZ R6,DL6 DJNZ R7,DL RET,键盘扫描子程序:,本例中,如只需LED数码管显示部分,可把键盘部分的电路去掉即可;如只需键盘,可把LED数码管部分的电路去掉。,9.3.2 使用8155作为键盘接口,接口电路逻辑图(见图9-14),图9-14 8031用8155扩展I/O口组成的矩阵式键盘连线图,8155 PA口地址7F01H PC口地址7F03H,判断有无键按下,PA口输出00H,PC口输入行状态信号; 若PC3PC01111,有键按下,去抖动,延时510ms后再判断有无键按下,确认哪个键被按下及其键号,8155的PA口依次输出下列扫描字:,键扫描及识别过程,8155:PA口输出列扫描信号,PC口输入行状态信号,,,则每个键的键值(列行组合),FE E 、FD E 、 FB E 、F7 E 、EF E 、DE E 、BF E 、 7F E FE D 、FD D 、 FB D 、F7 D 、EF D 、DE D 、BF D 、7F D FE B 、FD B 、 FB B 、F7 B 、EF B 、DE B 、BF B 、 7F B FE 7 、 FD 7 、 FB 7 、F7 7 、EF 7 、 DE 7 、 BF 7 、 7F 7,每个键的键号(自己安排),N = 行首键号+列号,确认哪个键被按下及其键号(续),8155的PC口输入行状态可能为下列之一:,等待键释放后再进行进一步处理。,键扫描程序框图,入口,有键按下?,延时12ms,有键按下?,N,Y,N,Y,键号入栈保存,按键抬起?,N,Y,键号送A,返回,判断按键是否抬起(以防止重复进行键处理),键扫描程序,ORG1000H KEY1: ACALLKS1;调用判断有无键按下子程序 JNZLK1;有键按下,转去抖动 AJMPKEY1 ;无键按下,返回 LK1: ACALLTM12S ;延时12ms ACALLKS1;再查有无键按下 JNZLK2;确实有键按下,逐行扫描,确定具体键 AJMPKEY1;无键按下,返回 LK2: MOVR2 ,#0FEH;首列扫描字送R2 MOVR4 ,#00H;首列号R4 LK4: MOVDPTR ,#7F01H;首列扫描字送8155的PA口 MOVA ,R2;第一列扫描 MOVXDPTR ,A;使第i列为0(R2中Di位为0),键扫描程序(续),INCDPTR INCDPTR;指向8155的PC口 MOVXA ,DPTR;读入行状态 JBACC.0 ,LONE;0行无键按下,转查1行 MOVA ,#00H;0行有键按下,行首键号#00H送A AJMPLKP;求键号 LONE: JBACC.1 ,LTWO;1行无键按下,转查2行 MOVA ,#08H;1行有键按下,行首键号#08H送A AJMPLKP;求键号 LTWO: JBACC.2 ,LTHR;2行无键按下,转查3行 MOVA ,#10H;2行有键按下,行首键号#10H送A AJMPLKP;求键号 LTHR: JBACC.3 ,NEXT;3行无键按下,转查下一列 MOVA ,#18H;3行有键按下,行首键号#18H送A,键扫描程序(续),LKP: ADDA ,R4;求键号 = 行首键号+列号 PUSHACC;键号入栈 LK3: ACALLKS1;等待键释放 JNZLK3;未释放,继续等待 POPACC;已释放,键号送A RET NEXT: INCR4;指向下一列,列号加1 MOVA ,R2;判断8列扫描完没有 JNBACC.7,KND;8列扫描完,返回 RLA;没扫描完,置下一列扫描字 MOVR2 , A;扫描字送A AJMPLK4;继续下列扫描 KND: AJMPKEY1;8列扫描完,返回,键扫描程序(续),KS1: MOVDPTR,#7F01H;查有无键按下子程序 MOVA,#00H MOVXDPTR,A;8155 PA口输出全扫描字#00H INCDPTR INCDPTR;指向8155的PC口 MOVXA,DPTR;读入行状态,若有键按下,则A0FFH CPLA;改成正逻辑,若有键按下,则A00H ANLA,#0FH;屏蔽高四位 RET;子程序返回,当有键按下时,AA00H T12sm: MOVR7,#18H;12sm延时子程序 TM: MOVR6,#0FFH TM6: DJNZR6,TM6;td=1+(1+255*2+2)*24+2*MC DJNZR7,TM RET,键操作及功能处理,求出键号后要进行键处理: 先判断是何种键,然后: 对数字键-送显示缓冲区显示; 对功能键-执行相应的功能键处理程序。,设: 015号键为数字键,即键号10H的是数字键; 1631号键为功能键,即键号10H的是功能键; 其功能键处理程序入口地址分别为: AAA、BBB、CCC、PPP。,键操作及功能处理(续),ORG8000H KEYADR: MOVA,BUFF;键号送A CLRC SUBBA,#10H;Y与10H比较 JCDIGPRO;10H,数字键,转 KEYTBL: MOV DPTR,#JMPTBL RLA;使键值为0、2、4、6、偶数 AJMPA+DPTR,则转入功能键处理程序清单如下:,键操作及功能处理(续),JMPTBL: AJMPAAA;2 字节指令散转到16个功能键处理 AJMPBBB; 程序入口 AJMPCCC AJMPDDD AJMPEEE AJMPFFF AJMPGGG AJMPHHH AJMPIII AJMPJJJ AJMPKKK AJMPLLL AJMPMMM AJMPNNN AJMPOOO AJMPPPP,9.3.2 各种专用的键盘/显示器接口芯片简介,使用键盘接口专用芯片,可省去编写键盘/显示器动态扫描程序以及键盘去抖动程序编写的繁琐工作。 目前各种专用接口芯片种类繁多,各有特点,总体趋势是并行接口芯片逐渐退出,串行接口芯片越来越多的得到应用。 早期的较为流行的键盘/显示器芯片8279,目前流行的键盘/显示器接口芯片均采用串行通信方式,占用口线少。常见的芯片有:周立功公司的ZLG7289A、ZLG7290B、MAX7219、南京沁恒公司的CH451、HD7279和BC7281等。,可编程键盘/显示器接口芯片8279,8279是一种专用于键盘/显示器的可编程接口电路,能对键盘自动扫描,给出闭合键的键码,能自动向数码管显示器输出显示代码和位代码。 其中键盘接口电路可与64键点阵式键盘联接,具有二键封锁或N键巡回功能,可自动消除按键抖动。 显示器接口电路可与8位或16位数码管显示器联接。,8279内部结构,电路逻辑分为三个部分: (1)芯片接口控制逻辑 数据缓冲器 I/O控制电路 (2)键盘接口控制逻辑 扫描计数器 扫描回送电路 键盘去抖动与控制电路 88FIFO/传感器RAM与状态电路 控制与时序寄存器及时序控制电路,8279内部结构,(3)显示器接口控制逻辑 168显示用RAM 显示寄存器 显示地址寄存器,电路逻辑结构示于图9-15,8279内部结构,图9-15 8279的逻辑结构,8279内部结构图,控制与定时寄存器:寄存键盘及显示器工作方式,完成控制功能 定时控制:包括基本的计数器是可编程N计数器,N由编程指定(231),对CLK分频,获得内部所需100kHz工作时钟;其他再分频,为键盘及显示器扫描提供扫描时钟,4位的计数器,有译码、编码两种方式,由编程设定 译码方式:最低两位经译码,由SL03输出,作为键盘及显示器的扫描信号.(任何时刻, SL03只有一个信号有效,实现4选1) 编码方式:计数器的状态由SL03直接输出,再经外部译码,才能作为扫描信号.(实现16选1),(1)芯片接口控制逻辑,实现 8279 和单片机接口,主要包括: 数据缓冲器 双向、三态的数据缓冲器用于芯片内部总线和系统总线的连接,进行单片机和 8279 之间的数据传送,信号引脚为 DBODB7。 I/O控制电路 I / O 控制电路用于接收单片机方面送来的控制信号,并产生所需的8279内部控制信号,例如控制数据缓冲器的数据输入输出等。 中断请求产生电路 根据键盘存储区的状态产生中断请求信号。,(2)键盘接口控制逻辑,扫描计数器 扫描计数器电路用于为键盘提供扫描信号, 4 位扫描信号从扫描线 SL3SL0输出,并具有两种输出形式 译码方式(也称内部译码形式) 指扫描代码直接由扫描线SL0SL3输出,每次只有1位是低电平(4选1) 编码方式(也称外部译码形式) 指扫描代码经SL0SL3外接译码器输出 SL3SL0输出波形见图9-16,图9-16 扫描输出波形,(2)键盘接口控制逻辑(续),控制与时序寄存器及时序控制电路 用于对键盘扫描进行控制。 时序控制部件包括基本定时计数器,其中第一个N计数器是一个N预分频定标器,可通过编程使内部时序与CPU相适应。 预分频定标器的分频系数可由程序设定为231。使内部计数频率为100KHz时,给出5.1mS的键盘扫描时间和10.3mS的去抖动时间。 其它计数器将此基本计数频率再分频,以提供适当的键扫描、行扫描、键盘矩阵扫描及显示器扫描时间。,(2)键盘接口控制逻辑(续),回送缓冲器与键盘去抖动和控制电路 输入每次扫描的列线RL0 RL7状态,以进行闭合键的搜索。 回送缓冲器具有锁存功能,对回送线RL7RL0上的信息进行缓冲和锁存。 在键盘工作方式下,对回送线逐条扫描,以确定该行中哪一个键闭合。当去抖动电路测得某一按键闭合后,等待10mS,然后再重新检查该键是否闭合,如果仍然闭合,那么该键在阵列中的地址及SHIFT和CNTL的状态被送入先进先出寄存器FIFO。 在扫描传感器矩阵方式下,每次扫描按键时直接把回送线上的内容送入传感器RAM的相应单元中去。 在选通输入方式下,回送线的状态将在控制/选通线上的脉冲上升沿送入先进先出寄存器。,(2)键盘接口控制逻辑(续),FIFO/传感器RAM与状态电路 FIFO/传感器RAM是一个双功能88 RAM,在键盘或选通输入方式下是一个先进先出寄存器(FIFO); 信息输入时,每一组信息写入RAM中的下一单元,然后按写入顺序读出; FIFO状态电路存放FIFO中的字符数目以及FIFO满或空的状态; FIFO写入或读出次数超过FIFO的容量时,视为出错; 在扫描传感器矩阵方式下,该存储器用作传感器RAM; 当检测到一个传感器状态发生变化时,IRQ变为高电平,向CPU发中断请求,(3)显示器接口控制逻辑,显示存储区 8279 可连接8位和16位的 LED 显示器; 为给每位显示器提供显示数据,在8279 芯片中有一个168的RAM存储区,其中每一个8位 RAM 单元对应一位LED显示器,即0 到 15 地址对应 LED 显示器的015 位,显示器的0位在最左边, 15 位在最右边。 显示缓冲器(显示更新寄存器) 用于为显示器提供段控数据; 使用时,8279 自动对显示器扫描,将显示缓冲器中的数据输出在显示器上显示出来。,显示器地址寄存器及显示用RAM,显示器地址寄存器用来存放CPU正在读/写的字节地址,以及正在显示的两个4位的半字节地址。 读/写地址由编程设定,也可设定每次读/写后地址自动加1。 在设定适当的工作方式和地址以后,CPU可直接读出显示用RAM中的内容。 A、B两个半字节地址由8279自动刷新,以便与CPU输出值相对应。 A、B两半字节可以分别输出,也可作为一个字节输出,由工作方式确定。 数据送显示器的方式可设定为左端送入,也可以设定为右端输入。,8279 的信号引脚,8279共有40个引脚,采用双列直插式封装(见图9-17),图9-17 8279引脚与逻辑符号图,8279的引脚功能如下:,(1)数据线 DB7DB0:数据输入/输出线,双向,在接口电路中与系统数据总线相连,用以传送CPU和8279之间的数据和命令。 (2)地址线 CS#:片选线。CS#=0,选中8279。 A0:信息特征线。当A0=1时,为命令字及状态字地址;当A0=0时,为片内数据地址,故8279芯片占用2个端口地址。 (3)控制线 CLK:时钟脉冲输入端。,(3)控制线,RD#:读信号,输入,低电平有效,将缓冲器中的数据读出,送外部数据总线。 WR#:写信号,输入,低电平有效,将外部数据总线上的数据写入内部单元。 IRQ:中断请求,输出,高电平有效。当键被按下,FIFO RAM中有数据时,该信号有效。 SL3SL0:扫描输出线,用来扫描按键开关或传感器矩阵以及显示器的各位数字。 RL7RL0:键扫描输入(回送)线,通过按键或传感器开关与扫描线联接,内设上拉电路,使之保持为高电平。当某一按键闭合时,其中一条变为低电平。在选通输入方式下可作为8条输入线。,(3)控制线,SHIFT:换档线。来自外部键盘或传感器矩阵的输入信号,它是8279键盘数据的次高位即D6位的状态,该位状态控制键盘上/下档功能。在传感器方式和选通方式中,该引脚无用。 CNTL/STB:控制/选通输入线,高电平有效。键盘方式时,键盘数据最高位(D7)的信号输入到该引脚,以扩充键功能;选通方式时,当该引脚信号上升沿到时,把RL0RL7的数据存入FIFO RAM中。 OUTA30,OUTB30:是164显示器更新寄存器的两个输出端,输出数据与扫描线(SL3SL0)同步,以供多路转换数字显示器使用。两个端口可并为一个8位端口使用。 OUTA30:通常作为显示信号的高4位输出线; OUTB30:通常作为显示信号的低4位输出线。,(3)控制线,BD#:空格显示,输出,低电平有效。在数字切换过程中使显示器熄灭,或者由显示熄灭命令使显示器熄灭。 RESET:复位信号输入端,高电平有效。 Vcc:5V电源。 Vss:地。,8279的工作方式,(1) 键盘工作方式 8279在键盘工作方式时,可设置为双键互锁方式和N键循回方式 双键互锁方式: 若有两个或多个键同时按下时,不管按键先后顺序如何,只能识别最后一个被释放的键,并把该键值送入FIFO RAM中。 N键循回方式: 一次按下任意个键均可被识别,按键值按扫描次序被送入FIFO RAM中。,(2)传感器(扫描)方式,FIFO RAM中8个单元用于寄存传感器的现时状态,又称传感器RAM,其地址编号与扫描线顺序一致; 传感器方式是把传感器的开关状态送入传感器RAM中。 当CPU对传感器阵列扫描时,一旦发现传感器阵列(最多为88位)中某一位状态发生变化时,产生IRQ(高电平),中断响应后转入中断处理程序。,(3)选通输入方式 与8255A通输入端口的功能完全一样,CNTL/STB作为选通信号,上升沿锁存RL0RL7到FIFO RAM;,(4) 显示方式,8279的显示方式又可分为左端入口和右端入口方式; 显示数据只要写入显示RAM则可由显示器显示出来,因此显示数据写入显示RAM的顺序,决定了显示的次序; 左端入口方式:显示位置从显示器最左端1位(最高位)开始,以后显示的字符逐个向右顺序排列; 显示器位置编号与显示RAM地址一一对应(0号单元显示在0号显示器上); 右端入口方式:显示位置从显示器最右端1位(最低位)开始,已显示的字符逐个向左移位。 但无论左右入口,后输入的总是显示在最右边。,8279的寄存器,8279共有三个寄存器: 命令寄存器 状态寄存器 数据寄存器 命令和状态寄存器对应同一个地址。 (1)命令寄存器 命令寄存器是8位寄存器,只能写,不能读; 高3位( D7 、 D6、 D5)是命令的特征位,8种不同的状态组合代表着不同的命令。 命令的格式见表9-8,8279的寄存器(续),(2)状态寄存器 8279 的状态寄存器为 8 位寄存器,只能读,不能写; 用于在键输入及选通输入方式中,指出键数据缓冲器 FIFO RAM 中的数据字节个数和是否出错。 状态字格式如表9-3,DU:显示无效标志, 当清除命令尚未完成时,该位置1 S/E:键盘输入方式下作特殊错误标志,=1:多键同时按下 O:溢出标志,向已满的FIFO RAM写时置1 U:不足标志,从已空的FIFO RAM读时置1 F:表示 FIFO RAM 已满(存有 8 个键码) N2N1N0:FIFO RAM中字符的个数,表9-3 8279的状态字格式,8279的寄存器(续),状态寄存器各位的意义 D2,D1,D0(N2,N1,N0):其值为 FIFO RAM 中数据的个数; D3(F):D3=1,表示 FIFO RAM 已满(存有 8 个键码) D4(U):D4=1,表示“不足”错误; D5(O):D5=1,表示“超出”错误; D6(S/E):用于传感器矩阵输入方式,D6=1表示多键同时闭合; D7(Du):显示无效标志。 当清除命令尚未完成时,该位置1。,8279的寄存器(续),(3)数据寄存器 数据寄存器实际上就是 FIFO RAM 中最前面的那个单元,其内容为被按键的信息,通过读它把键盘信息输入单片机。 该寄存器的数据格式如表9-4所示: D2D1D0:闭合键的列号(由RL7 RL0值确定); D5 D4D3:闭合键的行号(扫描计数值); D6: 换挡健 SHIFT 的状态; D7:控制健 CNTL 的状态。 注意,在传感器扫描方式和选通输入方式中,输入数据即为 RL7RL0的输入状态。,8279数据输入/输出格式,输入/输出数据不仅要先确定地址口,而且数据存放也要按一定格式,其格式在键盘和传感器方式有所不同。,(1) 键盘扫描方式数据输入格式(见表9-4),D7:控制键 “CNTL”状态 D6:控制键 “SHIFT”状态 D5 D4 D3:被按键所在列号(由SL0-SL2)状态确定) D2 D1 D0:被按键所在行号(由RL0-RL7)状态确定,表9-4 键盘扫描方式数据输入格式,8279数据输入/输出格式(续),(2)传感器方式及选通方式数据输入格式,此种方式8位输入数据为RL0-RL7的状态 数据输入格式见表9-5,表9-5 传感器及选通方式的数据输入格式,8279的命令字及其格式,8279的各种工作方式都要通过对命令寄存器的设置来实现。 8279共有8种命令,通过这些命令设置工作寄存器,选择各种工作方式。 命令寄存器共8位,格式如下:,8279的命令字及其格式(续),8279的一条命令由两大部分组成; 命令寄存器高3位D7D5为命令特征位,表征命令类型。D7D5三位的状态可组合出8种形式,对应8类命令。 命令寄存器的低5位D4D0为命令的具体内容。,8279的命令字类型设置,每种特征所代表的命令如表9-6所示,表9-6 8279命令特征,(1) 键盘/显示命令:(特征位 D7D6D5=000),D4、D3两位用来设定4种显示方式; D2、D1、D0三位用以设定8种键盘/显示扫描方式 键盘/显示命令格式见表9-7,设置工作方式,00:8字符,左入口 01:16字符,左入口 10:8字符,右入口 11:16字符,右入口,00:键盘,双键锁定 01:键盘,N键轮回 10:传感器扫描 11:选通输入,0:编码扫描 1:译码扫描,表9-7 8279的键盘/显示命令格式,显示器方式设置(见表9-8),(1) 键盘/显示命令(续),键盘方式设置:,(1) 键盘/显示命令(续),译码扫描(内译码):指扫描代码直接由扫描线SL0SL3输出,每次只有1位是低电平(4选1); 编码扫描(外译码):是指扫描代码经SL0SL3外接译码器输出 由于键盘最大88=64个键,由SL0SL2接3:8译码器,译码器的8位输出作为键盘扫描输出线(列线),RL0RL7为输入线(行线)。 8279最多驱动16位显示器,故可由SL0SL3接4:16译码器,译码器的16位输出作为显示扫描输出线(16选1),决定第几位显示。 显示字段码由OUTA0OUTA3和OUTB0OUTB3输出。,例9-1:若希望设置8279为键盘译码扫描方式、N键轮回,显示8个字符、右端入口方式,确定其命令字。 根据题目要求可进行分析,因为具有下列条件: 是键盘/显示命令特征位:D7 D6 D5=000 (表9-6) ; 8个字符右端入口显示:D4 D3=10(表9-8); 键盘译码扫描,N键轮回:D2 D1 D0=011(表9-9); 所以8位命令器存器状态D7D0=00010011B,即该命令字13H送入命令寄存器口地址则可满足题目要求。 例9-2:若已知命令字为08H,判断8279工作方式。 因为命令字为08H,即D7D0=00001000B,显然D7 D6 D5=000,该条命令为键盘/显示命令,D4D3=01为16字符左端入口显示方式,D2D1D0=000,键盘为编码扫描、双键锁定方式。,(2)内部时钟设置命令( D7D6D5001 ),例9-3:若8279 CLK的输入信号频率为3.1 MHz,则分频系数应为31D=1FH,于是 D4D0=11111,控制字为:D7D0=00111111B=3FH,分频目的:得到100KHz的基本工作时钟,(2)内部时钟设置命令(续)(D7D6D5001),8279的内部时钟信号是由外部输入的时钟信号经过分频产生; 分频系数由D4D0来设定,分频系数范围在231之间 有的设计会用单片机的ALE端接8279的CLK端,但ALE端输出的脉冲频率比8279所需工作时钟频率(100KHz)高出很多,通过设置分频系数就可使8279得到所需的时钟频率。,例9-4 已知80C51的fosc=12MHz,要求8279的内部时钟信号频率为100kHz,求分频系数N。 【解】: fosc=12MHz,fALE=1/6 fosc=2MHz = fCLK N=2MHz/100kHz =20D=10100B 因此,时钟编程命令字:00110100B=34H。,(3)读FIFO/传感器RAM命令(D7D6D5=010)(表9-12),D2D0:为8279中FIFO及传感器RAM的首地址 D3: 无效位。 D4 :控制RAM地址自动加1位: D4=1时,CPU读完一个数据,RAM地址自动加1,准备读下一个单元数据; D4=0时,CPU读完一个数据,地址不变。,键盘方式无效,写0,0:读出后地址不变 1:每次读出地址自动加1,例9-5:欲编程使单片机连续读8279内FIFO/传感器RAM中000-111单元的数据,设置读命令。,分析: 因为要连续读数,地址又连续。所以最好设置为自动加1方式,即D4=1; RAM内首地址000,即D2D0=000,再加上特征位,所以该命令控制字为:D7D0=01010000B=50H (无用位D3设为0); 送入50H控制字,在执行读命令时,先从FIFO/传感器RAM中000单元读数,读完一个数,地址自动加1,又从001单元读数,依次类推,直到读完所需数据。,(4)读显示缓冲器(RAM)命令(D7D6D5011),从 8279 向单片机读出显示数据(用于检查)之前,应先执行该命令。命令格式如前表9-11 命令中 D3D0表示起始地址, D4位为自动增量标志 D41时,每次读出后,RAM地址自动加 1 D40时,每次读出后,RAM地址不加 1,例9-6 欲读显示RAM中1000单元地址,求命令字。 分析:因为只读一个数,地址不需自动加1,即设置: D4=0,特征位为011,地址为1000, 所以其控制命令字为:D7D0=01101000B=68H。,(5)写显示RAM命令(D7D6D5 = 100),从单片机向 8279 写入显示数据之前应先执行该命令命令中 D3D0表示起始地址,数据写入按左输入或右输入方式进行; D4:地址自动加1控制位,为自动增量标志 D41时,每次写入后地址自动加 1。 D4=0,地址不加1。,D3D0是欲写入的RAM地址,若连续写入则表示RAM的首地址。 命令格式同读显示RAM(参考表9-11)。,(6)写入和消隐屏蔽命令( D7D6D5101 )格式见表9-12,1:相应显示RAM禁止写入,1:消隐,(6)写入和消隐屏蔽命令(续),设置了这条命令使接口的四位显示器相互独立。 D3、 D2位用于写入屏蔽; D31时,屏蔽A组,B可以写入数据且不影响A组; D21时,屏蔽B组,A可以写入数据且不影响B组; 两位同时为“ 1 ”时则不进行写入屏蔽。 D1、D0位用于消隐屏蔽; D11 时,消隐A组; D01 时,消隐B组; 两位同时为“ 1 ”时则不进行消隐屏蔽。,例9-6 假设A、B两组灯均已被点亮,现在希望A组灯继续亮,B组灯熄灭,确定其命令字。,分析: 根据命令格式,A组灯继续亮应禁止A组RAM再写入其他数据,故D3=1; B组显示熄灭D0=1, 除特征位外其余位设为“0”。 故其控制命令字为:D7D0=10101001B=A9H,(7)清除显示RAM和FIFO中的内容命令(D7D6D5110),该命令用于清除显示、清除键输入标志和中断请求标志 命令中的 D4、D3 、D2位用于设置清除方式 D4D3D210,将显示RAM 置成00H; D4D3D2110 ,将显示RAM置成20H; D4D3D2111 ,将显示RAM置成FFH; D4D3D20,不清除显示 RAM 。 D1:清除标志位。 D11,清除FIFO 状态标志,FIFO被置为空状态(无数据),并复位中断请求线 IRQ 。 D0:总清除。D01,清除包括FIFO RAM和显示RAM。 清除显示RAM 大约需100s,在此期间,单片机不能向显示RAM写入数据。,例:将全部显示RAM清0, 其命令字为:D7D0=11010001B=D1H,(7)清除(显示RAM和FIFO中的内容)命令(续),(8)结束中断错误方式设置命令(D7D6D5111),在传感器工作方式下,该命令用于结束传感器 RAM 的中断请求。 此外,该命令还用于设置一种特定的错误工作方式。 命令字格式如表9-13所示,D4=1时(其D3-D0位任意)有两种不同作用。,结束中断错误方式设置命令的作用,作为结束中断命令。在传感器工作方式中,每当传感器状态出现变化时,扫描检测电路接将其状态写入传感器RAM,并启动中断逻辑,使IRQ变高,向CPU请求中断。并且禁止写入传感器RAM。此时,如传感器RAM读出地址的自动递增特征没有置位(AI=0),则中断请求IRQ在CPU第一次从传感器RAM读出数据时就被清除。若自动递增特征已置位(AI=1),则CPU对传感器RAM的读出并不能清除IRQ,而必须通过给8279写入结束中断/错误方式设置命令才能使IRQ变低。因此,在传感器工作方式中,此命令用来结束传感器RAM的中断请求。,结束中断错误方式设置命令的作用,作为特定错误方式的设置命令。在8279已被设定为键盘扫描N键轮回方式以后,如果CPU给8279又写入结束中断/错误方式设置命令(E=1)。则8279的消振周期内,如果发现有多个键被同时按下,则FIFO状态字中的错误特征位S/E将置位。并产生中断请求信号和阻止写入FIFO RAM。 错误特征位S/E在读出FIFO状态字时被读出。而在执行CF=1的清除命令时被复位,8279的编程通常编3个程序段:初始化、键盘服务程序和显示器服务程序,(1) 初始化:写入3个命令字 清除控制字: 考虑到应允许清除显示器,并将FIFO和RAM复位或清零(0D1H)。 设置键盘和显示方式控制字 设置时钟频率控制字:(34H) 设内部时钟时钟频率100KHZ,CLK输入时钟频率2MHZ,8279的编程使用,(2) 键盘服务程序:3个部分,写入读FIFO/传感器RAM控制字,由按下键产生的的字符允许通过FIFO读取; 写入上述控制字后,再从状态口读取状态字,查询FIFO/传感器RAM的状态(是否有数据), 若有,则从数据口读取扫描值SL0SL3,回送RL0RL7,形成一个字节数据; 修改地址指针,依次输入n个键盘字,形成一个n字节的数据块 。,(3) 显示器服务程序,写入显示RAM控制字 将字形码从数据口用指令输出,才能实现显示,8279与单片机的一般接口方法(连线图见图9-17),图9-17 51单片机用8279扩展I/O连接键盘与8段显示器,初始化8279; 把显示字符送到8279内部的一个16字节寄存器内; 将字符转换成段码,经A0A3、B0B3线把段码送到显示器; 同时经SL0SL3线发出4位数位选通码; 4-16译码器对选通码进行译码后轮流选通各位显示器。 SL0SL2线同时连到3-8译码器,该译码器的输出用于扫描键盘8行; 8279经8根返回线(RL0RL7)读取键盘的状态; 如果发现按键闭合则等待10ms,颤动过去后再检验按键是否闭合;,工作流程,若按键仍然闭合,则把被按键的键值选通输入8279内部的先进先出(FIFO)存储器,同时经INT线发出一个高电平,指出FIFO内已经有一个字符; INT线连接到CPU的中断请求输入线。当单片机接收到中断请求后,若开中断,则转到键盘服务程序,从FIFO中读取按键的键值。 在这种接口中,单片机要做的事仅是初始化8279、送出要显示的字符、接到中断请求后读取按键的键值,其它工作均由8279自动完成。,工作流程,8279应用举例(连线图见图9-18),接口与地址,P2.0=1,对应命令/状态寄存器; P2.0=0,对应数据寄存器。,P2.7=0:8279被选通,则 命令/状态寄存器的地址:7FFFH(A0=1); 数据寄存器的地址:7EFFH(A0=0)。,图9-18 用8279扩展I/O口连接键盘与8段显示器,按照图设计一个程序,在6位LED数码管上依次显示从05这6个数,START:MOVDPTR ,#7FFFH;8279命令口地址 MOVA,#90H ;8279写显示RAM命令字 MOVXDPTR ,A;送命令字 MOVR0 ,#0;清零 MOVR1 ,#6;显示位数 D1:MOVDPTR ,#TAB;调用显示数据 MOVA ,R0 MOVCA ,A+DPTR MOVDPTR ,#7EFFH;8279数据口地址 MOVXDPTR ,A ;写显示RAM INC R0;寄存器内容加1 DJNZR1 ,D1;R1内容减1不为0则继续执 LJMPSTART;D1,为零则结束。 TAB:DB 3FH,06H,5BH,4FH,66H DB 6DH, 7DH,07H,7FH,6FH,按照图设计一个程序,读入键盘输入,并判断是哪个按键被按下。,MOVDPTR, #7FFFH ;8279命令口地址 MOVA,#0D1H ;8279清显示RAM命令字 MOVXDPTR,A LOOP:MOVXA,DPTR;读状态字 ANLA,#0FH JZLOOP;有键按下?没有则返回 MOVA,#0A0H;显示/消隐命令 MOVXDPTR,A MOV A,#40H;读FIFO命令 MOVXDPTR,A MOVDPTR, #7EFFH ;读键值 MOVXA,DPTR MOVR1,A,单片机与8279的具体接口电路(见图9-19),图9-19 51单片机用8279扩展I/O接口连接键盘与8段显示器,分析,8031的P2.7接到8279的片选端,最低位地址A0接到8279的C/D端,因此该接口对用户来说只有二个口地址: 命令口地址:7FFFH 数据口地址:7FFEH 图中8279外接48键盘和8位共阴极LED显示器,采用编码扫描方式,译码器74LS138对扫描线译码后一方面接键盘的列线,同时通过驱动器接到显示器上。,INI79:MOVDPTR ,7FFFH ;清除命令8279 MOVA ,0D1H MOVXDPTR,A WNDU:MOVXA,DPTR;等8279清除结束 JBACC.7,WNDU MOVA,0 ;方式命令8279 MOVXDPTR,A MOVA,34H;扫描频率设置命令8279 MOVXDPTR,A MOVIE,84H;允许8031中断 RE
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!