第8章人机接口_第1页
第8章人机接口_第2页
第8章人机接口_第3页
第8章人机接口_第4页
第8章人机接口_第5页
已阅读5页,还剩107页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

“单片机与控制技术”

多媒体课程课件武汉工程大学电气信息学院自动化研究所杨宁教授主

第8章人—机接口8.1键盘接口方法8.1.1非编码键盘键盘是由若干个按键组成的开关矩阵,它是单片机最简单的信息输入装置,操作员通过键盘向单片机系统输入数据或命令,实现简单的人-机通信,按键是以开关的状态来设置控制功能和输入数据。若键盘上闭合键的识别是由专用硬件实现的,称为编码键盘;若靠软件实现的便为非编码键盘。非编码键盘是由一些按键排列成的一个行、列矩阵。按键的作用只是简单地实现开关的接通或断开,但必须有一套相应的程序与之配合,来解决按键的识别,防止抖动以及键值的产生等工作。因此,键盘接口电路和软件程序必须解决以下一些问题。(1)检查是否有键按下。(2)若有键按下,判断是哪一个键并确定其键号或键值。(3)去抖动。目前,按键是利用机械触点,一个电压信号通过机械触点的闭合、断开过程。波形如图8.1.1所示。(4)处理多键同时按下。对于同时有两个以上的键被按下的情况,有三种处理方法:第一,“双键同时按下”。第二,“N键锁定”。(5)键输入软件处理。图8.1.2是单片机键输入处理流程图。图8.1.1按键闭合及断开时的电压抖动图8.1.2单片机键输入处理流程图在图8.1.3中;用P1口8根I/O线连接8个按键。图8.1.3中键值输入采用查询方式。不包括延时去抖动程序。只包括按键查询、键功能转移和8个键号处理程序入口等三部分。程序清单如下:START:MOVA,#0FFH;置P1为输入状态,读引脚MOVP1,A;P1口锁存器写1,读引脚有效MOVA,P1;输入按键状态供查询用JNBACC.0,P10;0号键按下转JNBACC.1,P11;1号键按下转JNBACC.2,P12;2号键按下转JNBACC.3,P13;3号键按下转JNBACC.4,P14;4号键按下转JNBACC.5,P15;5号键按下转JNBACC.6,P16;6号键按下转JNBACC.7,P17;7号键按下转JMPSTART;返回接着查询P10:LJMPPORT0;转0~7号键处理程序入口P11:LJMPPORT1;…P17:LJMPPORT7;以下是各功能键处理程序结构:PORT0:…;0号键处理程序…LJMPSTART;从0号键程序执行完返回PORT1:…;1号键处理程序…LJMPSTART;返回…PORT7:…;7号键处理和程序…LJMPSTART;返回2.矩阵式连接非编码键盘矩阵式又称为行列式键盘。(1)矩阵式键盘工作原理4行×4列键盘工作原理如图8.1.4所示。图8.1.44×4简单键盘结构列线Y行线X01111011→100000100=84HCPU操作时,先输出行有效信号,再输入列信号,经过拼装、求反得到键值,由于这种对应是唯一的,所以可用来识别键盘上所有的键,根据上述关系可求出其它键的键值如下:键盘上的字符0123456789ABCDEF键字81H82H42H22H84H44H24H88H48H28H18H14H12H11H21H41H

(2)矩阵式非编码键盘接口及程序设计键盘接口如图8.1.5所示。设A口地址0101H,C口地址0103H。图8.1.5用8155作矩阵式非编码键盘接口电路

1.子程序键盘扫描程序中要调用两个子程序:DIRLED显示器显示子程序(程序略)。该程序具有延时功能,其延时时间为6ms。KS1判断子程序。该程序判断是否有键闭合。程序如下:KS1: MOV DPTR, #0101H;MOV A, #00H;A口送00HMOVX @DPTR, A;INC DPTR;INC DPTR;建立C口地址MOVX A, @DPTR;读C口CPL A,;A取反,无键按下则全0ANL A, #0FH;屏蔽A高半字节RET执行KS1判断子程序的结果是:有键闭合则(A)≠0,无键闭合则(A)=0。2.键盘扫描程序KEY1: ACALL KS1 ;检查有键闭合否JNZ LK1 ;A非0则转移NI: ACALL DIR ;显示一次(延时6ms)AJMP KEY1 LK1: ACALL DIR ;有键闭合二次延时ACALL DIR ;共12ms去抖动ACALL KS1 ;再检查有键闭合否JNZ LK2 LK2ACALL DIR AJMP KEY1 ;无键闭合,延时6ms后转KEY1LK2: MOV R2, #0FEH ;扫描初值送R2MOV R4,#00H;扫描行号送R4LK4: MOV DPTR,#0101H;设A口地址MOV A,R2MOVX @DPTR,A;扫描初值送A口INC DPTRINC DPTR ;指向C口MOVX A,@DPTR;读C口JB ACC.0,LONE;ACC.0=1,第1列无键闭合,转LONEMOV A,#00H ;装第1列列值AJMP LKPLONE:JB ACC.1,LTWO;ACC.1=1,第2列无键闭合,转LTWOMOV A,#08H ;装第2列列值AJMP LKPLTWO:JB ACC.2,LTHR;ACC.2=1,第3列无键闭合,转LTHRMOV A,#10H ;装第3列列值AJMP LKPLTHR:JB ACC.3,NEXT;ACC.3=1,第4列无键闭合,转NEXTMOV A,#18H ;装第4列列值LKP:ADD A,R4 ;计算键值PUSH A ;保护键值LK3:ACALL DIR ;延时6msACALL KS1 ;查键是否继续闭合,若闭合再延时JNZ LK3 ;若键起,键值送APOP ARETNEXT: INC R4 ;扫描行号加1MOV A,R2JNB ACC.7,KND;第7位为0,已扫完最高列,转KNDRL A ;循环左移1位MOV R2,AAJMP LK4 ;扫描下一行KND: AJMP KEY1 ;扫描完毕,开始新的一次扫描8.1.2编码键盘表8.1.1具有优先级的8位编码器CD4532BD真值表状输输入编码输出EinI7I6I5I4I3I2I1I0GSO2O1O0Eout0××××××××00000100000000000011×××××××1100001××××××10100101×××××100101001××××1000101101×××10000110001××100000110101×10000001110011000000011110图8.1.6是一种采用两片CD4532B构成的16个按键的

为了消除键盘按下时产生的抖动干扰,该接口电路还设置了单稳态电路(B1、B2、R2和C2)与延时电路(A4、R3和C1),电路中E、F、G和H这四点的波形如图8.1.7所示。图8.1.7消抖电路波形图8.2数码显示方法8.2.1发光二极管LED显示1.7段LED显示器结构与原理图8.2.17段LED显示器件2.LED显示器两种显示方式点亮LED显示器有两种方式:静态显示和动态显示。下面以共阴极接法为例说明。表8.2.1LED段选码和显示字符之间关系显示字符共阴极段选码共阳极段选码显示字符共阴极段选码共阳极段选码03FHC0HA77H88H106HF9HB7CH83H25BHA4HC39HC6H34FHB0HD5EHA1H466H99HE79H86H56DH92HF71H8EH67DH82HP73H82H707HF8H·80H7FH87FH80H=·C8H37H96FH90H“全灭”00HFFH

(1)LED静态显示方式所谓静态显示就是将N位共阴极LED显示器的阴极连在一起接地,每一位LED的8位段选线与一个8位并行口相连,当显示某一个字符时,相应的发光二极管就恒定地导通或截止。一个4位静态显示电路如图8.2.2所示。图8.2.24位静态LED显示电路

(2)LED动态显示方式所谓动态显示就是用扫描方式一位一位地轮流点亮LED显示器的各个位。图8.2.3是一个8位动态显示原理图。按图8.2.3从左向右的顺序轮流显示8位LED的位选码为左1→7FH→BFH→DFH→EFH→F7H→FBH→FDH→FEH→循环图8.2.38位LED动态显示原理图用8031右移循环指令可实现:MOVA,#7FH;点亮左1LED的位选码LOOP:MOVX@DPTR,A;从I/O(2)口输出位选码RRA;右移一位,指向下一个LED位LCALLDELAY;调延时3ms子程序LJMPLOOP;返回显示下一位LED3.用硬件译码的8位静态LED显示接口电路(1)MC14495使用功能介绍该芯片为16条引脚。内部结构如图8.2.4所示。由图8.2.4可见:4位锁存器对A、B、C和D端输入的BCD码进行锁存。由选通线LE控制锁存器,当LE=0时,允许输入数据,在LE=1时,锁存输入数据。输入译码电路将输入的BCD码:0000~1001、1010~1111译成7段a、b、c、d、e、f、g输出,0~9、A~F等16个字符。电路特点是用字母A、B、C、D、E、F、来显示对应的十进制数10、11、12、13、14、15。引脚h+i为输入数据值指示端:当输入值>10时h+i=1;输入数值<10时,h+i=0。当输入ABCD=1111(15)时,VCR=0。驱动器输出10mA电流,并有内部输出限流电阻,可直接与显示器相连接,故LED不须外加限流电阻。MC14495输入、输出及显示字符关系由表4.2.2所示。图8.2.4MC14495BCD-7段16锁存译码驱动器

(2)MC14495与8031单片机和显示器接口使用8片MC14495和8位7段LED显示器与8031单片机接口电路如图8.2.5。

由图8.2.5可见:8个7段LED采用共阴极接法。用P1口的低4位输出BCD待显示的数字到A、B、C、D公共输入端。由P1口高4位P1.4~P1.7控制74LS138译码器的输出Y0~Y7分别决定MC14495哪一个输入锁存器LE有效。这样由P1口一次输出8位代码即可完成一位LED静态显示图8.2.5使用MC14495的8位静态LED显示接口表8.2.2MC14495输入、输出及显示字符表输入状态输出段选码引脚显示字符DCBAh+igfedcba0000001111110000100000110100100101101120011010011113010001101101401010111110150110000001116011101111111710000110111181001011111009101011110111A101111111100B110010111001C110111011110D111011111001E111111110001F若使1#LED显示0字符,则P1口输出10000000B=80H,用程序实现:MOVA,#80H;选中1#LED,显示0字符MOVP1,A;输出,Y0=0,ABCD=0000其它位的选择和显示0~F字符可根据需要按上述规律编写。

4.用软件译码的8位动态LED显示接口电路(1)软件译码的动态显示硬件接口设计8位7段LED显示器需要两个8位并行输出口,一个输出段选码,另一个输出8位位选码。用8031扩展一片8155I/O接口可满足要求,用PB口输出段选码,PA口由动态扫描方式输出位选码,用7407作为驱动器,实现上述功能的硬件接口电路如图8.2.6所示。图8.2.6通过8155扩展I/O口控制的8位LED动态显示接口电路

(2)8位动态LED显示程序设计动态显示程序设计要点有三方面:1.8155初始化2.代码转换3.码的形成。如图8.2.7所示。图8.2.7LED数字显示缓冲区

图8.2.88位动态LED显示子程序流程图根据图8.2.8编写的程序清单如下:DIS:MOVA,#03H;8155命令字PA、PB口基本输出MOVDPTR,#7F00H;8155I/O命令口地址MOVX@DPTR,A;写入8155方式命令字MOVR0,#10H;送片内显示缓冲区RAM首地址MOVR3,#7FH;位选码,最左一位先亮MOVA,R3;暂存于A中LD0:MOVDPTR,#7F01H;指向PA口地址MOVX@DPTR,A;从PA口输出位选码MOVA,@R0;取待显示数据送AMOVDPTR,#TABLE;指向换码表首地址MOVCA,@A+DPTR;取出对应段选码MOVDPTR,#7F02H;指向PB口地址MOVX@DPTR,A;从PB口输出段选码ACALLDL1;调用延时1ms子程序MOVA,R3;JNBACC.0,LD1;判断8位LED显示完转(Acc.0=0)RRA;未显示完右移一位,变成下一位位选码MOVR3,A;暂存INCR0;指向下一个RAM显示地址LJMPLD0;转回,显示下一个数码LD1:RET;以下是待显示数据对应的段选码换码表:TABLE:DB3FH;对应字符0DB06H;对应字符1DB5BH;对应字符2DB4FH;对应字符3DB66H;对应字符4DB6DH;对应字符5DB7DH;对应字符6DB07H;对应字符7DB7FH;对应字符8DB6FH;对应字符9DB77H;对应字符ADB7CH;对应字符BDB39H;对应字符CDB5EH;对应字符DDB79H;对应字符EDB71H;对应字符F以下是软件延时1ms子程序(相对于8031为6MHz时钟):DL1:MOVR7,#64H;DLAY:NOP;2usNOP;2usNOP;2usDJNZR7,DLAY;4usRET述程序设计成子程序,一次只能从左向右显示一次。为了使显示字符稳定下来,必须反复调用该程序。8.2.2液晶显示器LCD显示1.LCD的基本结构及工作原理液晶显示器的结构如图8.2.9所示图8.2.9液晶显示器基本结构2.LCD的驱动方式图8.2.10LCD交流驱动原理图(a)驱动电路(b)驱动波形(c)真值表图8.2.11七段液晶显示器电极配置及译码驱动电路表8.2.3七段LCD译码及数字显示DCBAabcdefg显示字符000011111100000101100001001011011012001111010013010001100114010110110115011010111116011111100007100011111118100111110119

设8031片内RAM2OH――23H四个单元为显示缓冲区,每个显示缓冲区内为4位分离的BCD码,其显示子程序如下:LDIR:MOVR0,#20H;显示缓冲区首址送R0MOVR3,#00H;位选码送R3MOVR4,#04H;位数送R4LOOP:MOVA,R3;位选码送ASWAPA;位选码置入高四位MOVR2,A;保存位选码MOVA,@R0;取显示码ORLA,R2;位选码与BCD码组合ORLA,#80H;ACC。7置1MOVP1,A;输出组合码ANLP1,#7FH;清P1。7位ORLP1,#80H;P1。7再置1INCR3;指向下一位显示数INCR0;指向下一位显示缓冲单元DJNZR4,LOOP;四位未显示完返回RET图8.2.12给出了4位液晶显示电路接口图。图8.2.12四位LCD静态显示电路8.3键盘显示专用接口8.3.1串行口硬件译码键盘显示器接口MOS-LED译码驱动器MC148.3.1所示图8.3.1MC14499管脚配置图8.3.3串行硬件译码显示、键盘接口D:串行数据输入端;a,b,c,d,e,f,g:七段显示译码输出;Ⅰ,Ⅱ,Ⅲ,Ⅳ:字位选择端,用来产生LED选通信号;OSC:振荡器外接电容端,外接电容使片内振荡器产生200~800HZ扫描信号以防止LED显示器闪烁;CLK:时钟输入端,用以提供串行接收的控制时钟,标准时钟频率为250KHZ;EN:使能端,EN=0时,MC14499允许接收输入;EN=1时,片内的位移寄存器将数据送入锁存器中锁存。设要显示数据的BCD码按千、百、十、个位次序依次存放在@R0、@R0+1寻址的高低8位中。程序清单如下:显示子程序:DIS:MOVSCON,;设置串行口工作方式0MOVR0,#AD;待显示字节地址(千位百位)MOVR2,#02H;待显示字节数CLRP1.7

;启动MC1449,EN=0LOOP:MOVA,@R0MOVSBUF,A;发送一个显示WAIT1:JNBTI,WAIT1;未完等待CLRTI

;清标志INCR0

;修改地址DJNZR2,LOOP;发送下一个字节SETBP1.7

;关闭MC1449,EN=1键盘扫描子程序KEY:MOVA,#00H;送全扫描字MOVSBUF,ALOOP1:JNBTI,LOOP1;未送完等待CLRTI

;送完清标志KEY1:JBP1.0,KEY1

;等待键按下ACALLTIME;去抖延时JBP1.0,KEY1;是抖动返回MOVR7,#08H;置列线数MOVR6,#0FEH;置列扫描字MOVR4,#00H;置键初值MOVA,R6;KEY2:MOVSBUF,A;LOOP2:JNBTI,LOOP2;未完等待CLRTI;送完清标志JNBP1.0,KEY3;该列键按下,转该键处理MOVA,R6;该列无键按下,转下列扫描RLAMOVR6,AINCR4;键号加1DJNZR7,KEY2;8列未扫描完,继续ACALLDIS;8列扫完,调用一次显示AJMPKEY;未查到,重新键扫描KEY3:MOVA,#00H;再扫描MOVSBUF,ALOOP3:JNBTI,LOOP3CLRTILOOP4:JNBP1.0,LOOP4;等待键释放RETTIME:MOVR7,#0AH;返回结束,出口状态R4的内容为键值TM1:MOVR6,#0FFH;延时10ms子程序TM0:DJNZR7,TM0DJNZR7,TM1RET8.3.28279可编程键盘/显示器通用接口8279主要特性如下:(1)能同时执行键盘与显示器的管理操作。(2)扫描式键盘工作方式,可设置8×8=64个按键。(3)能自动消除按键去抖动及多个键同时按下保护。(4)可与8位或16位LED显示器连接。(5)由键盘输入产生中断信号,可向CPU申请中断。(6)和8位或16位单片机接线简单、容易。1.8279片内结构和工作原理8279片内结构如图8.3.4所示。各部分工作原理如下:(1)数据缓冲器和I/O控制器I/O控制器实现读、写、片选和信息类型的控制。A0用以区分信息特性。当A0=1时,CPU写入8279的信息为命令字,读出的为状态字;当A0=0时,CPU对8279写入或读出的均为数据。(2)定时与控制寄存器及定时与控制定时与控制寄存器用来寄存键盘及显示器的工作方式、锁存操作命令字,通过译码产生相应的控制信号,对8279的各个部件完成一定的控制功能。图8.3.48279的片内结构(3)扫描计数器.一种为编码方式另一种是译码方式(4)键输入控制回复缓冲器和去抖动控制。(5)FIFORAM(6)显示RAM2.8279引脚功能8279采用40条引脚。分三部分:连接键盘;连接显示器;连接CPU。引脚功能如图8.3.5所示。图8.3.58279引脚逻辑功能(1)与CPU连接的引脚8279与CPU连接的引脚有:D7~D08位数据总线;RD、WR;片选线CS等。与一般芯片功能相同。A0——数据类型选型输入线。A0与CS连接P0、P2口的两根线可确定8279地址。CLK——时钟输入线。为8279片内提供时钟输入,可连接8031的ALE端作为时钟输入。IRQ——中断请求输出线,高电平有效。RESET——复位输入线。当RESET=1时,8279复位,其复位状态为:选择16个LED显示位;选择编码扫描键盘、双键锁字;程序时钟选择为对CLK输入进行N分频。BD——消隐控制输出线,低电平有效,显示器切换或用消隐命令时,将显示消隐。(2)与键盘连接线RL0~RL7——键盘回复输入线。是对矩阵键盘行(或列)扫描由列(或行)输入的信号线。SHIFT——偏移输入线,键入和选通方式中不用此脚,可接地。CNTL/STB——控制或选通线。上升沿时读入回复输入线RL0~RL7上的数据。(3)与LED显示器连接线OUTB3~0、OUTA3~0——显示数据段选码输出线。OUTB3~0是低4位连接8段LED的d、c、b、a段;OUTA3~0是高4位,连接LED的dp、g、f、e段。SL3~SL0——扫描输出线。用来扫描键盘和显示器(输出位选码)。可以编程设定为编码:4中取1输出或译码输出16中取1。3.8279的操作命令字CPU通过对8279的编程来选择操作方式。8279共有8条命令字,在实际操作中不一定每一次都使用。(1)键盘/显示器方式命令字命令格式如下:D7D6D5D4D3D2D1D0000DDKKK

其中D7D6D5D=000为该字特征位;D4D3(DD)——用来设定显示方式。其定义如下:D4D3显示器方式008个LED显示字符,左入口输入开始0116个LED显示字符,左入口输入开始(复位后状态)108个LED显示字符,右入口输入开始1116个LED显示字符,右入口输入开始D2D1D0(KKK)——键盘工作方式选择位。用来设定8种键盘(附带显示器)工作方式。见表4.3.1所示:表8.3.1D2D1D0操作方式000外部编码扫描键盘(16取1),双键互锁001内部译码扫描键盘(4取1),双键互锁010外部编码扫描键盘N键依次读出011内部译码扫描键盘N键依次读出100外部编码扫描传感器矩阵方式101内部译码扫描传感器矩阵方式110选通输入方式,外部编码显示扫描111选通输入方式,内部译码显示扫描双键互锁:就是当键盘中同时有两个键被按下时,任何一个键的编值均不能进入FIFORAM中,直至仅剩一个键保持闭合时,该键的键值才能进入到FIFORAM中,这种工作方式可以避免误操作信号进入CPU而发生的故障。N键依次读出方式:是N个键同时按下的保护方法。当有若干个键同时按下时,在键盘的扫描过程中根据发现它们的顺序进行识别。依次将它们的状态送入FIFORAM中。(2)时钟编程命令字8279内部时钟由外部输入时钟CLK经过分频后产生内部要求的100kHz基本频率。分频系数由时钟编程命令字确定,其格式如下所示:D7D6D5D4D3D2D1D0001PPPPP

D7D6D5——001为时钟编程命令字的特征位。D4~D0(ppppp)——分频系数。用来设定对外部输入CLK端时钟进行N=2~31分频。按式N=CLK(频率)/100KHz计算。例如CLK=2MHz,则N=20,设定ppppp=10100(N=20),时钟编程命令字为00110100B=34H,可由CPU指令写入该寄存器。(3)读键字RAM命令该命令字只在读键字方式时使用。格式为:D7D6D5D4D3D2D1D0010AI­任意AAA

D7D6D5=010为该字特征位。CPU在读键字RAM之前,必须用这条命令来设定RAM的8个地址(每个地址一个字节)。D2D1D0(AAA)——为读键字RAM中的8个字节地址。D4(AI)——自动增量特征位。若AI=1,CPU则从RAM起始地址开始依次读出,每次读出后,地址自动加1;AI=0时,CPU仅读出一个RAM中单元的内容。(4)读显示缓冲器RAM命令字CPU在读(检查)显示数据之前,必须先输出读显示缓冲器RAM命令字。用来设定将要读出的显示RAM地址。格式:D7D6D5D4D3D2D1D0011AI­AAAA

D7D6D5=011为读显示RAM命令字特征位。D3~D0(AAAA)——用来寻址显示RAM中存储单元。由于位显示RAM有16个字节单元,故需要4位数寻址。D4(AI)——自动增量特征位。当AI=1时,CPU每次读出RAM数据后地址自动加1,指向下一个地址(5)写显示缓冲器RAM命令字当CPU要执行写入8279显示缓冲区RAM数据之前,先用该命令字给出要写入显示RAM地址。该命令字格式为:D7D6D5D4D3D2D1D0100AI­AAAA

D7D6D5=100为写显示RAM命令字特征位。D3~D0(AAAA)——用来寻址显示缓冲器RAM的16位存储单元。若AI=1,CPU除在第一次写入RAM时必须给出地址外,以后每次写入,地址自动加1,直至所有显示缓冲器RAM数据全部写完。(6)显示器禁止写入/熄灭命令字命令字格式为:D7D6D5D4D3D2D1D0101任意­IWAIWBIWAIWB

D7D6D5=101为该字特征位。D3D2(IWA,IWB)——表示禁止写入A、B组显示RAM。由于显示寄存器分成A、B两组,可以单独送数,故用两位来分别禁止。当IWA=D3=1,IWB=D2=0时,则A组的显示RAM禁止写入,但不影响B组的RAM写入。D1D0(BLA、BLB)——LED熄灭设置位。当D1D0=11时,则同时熄灭A、B两组LED显示。当D1D0=00时恢复显示。(7)清除命令字该命令字用来清除读键字RAM和显示缓冲器RAM。其格式如下:D7D6D5D4D3D2D1D0110CD­CDCDCFCA

D7D6D5=110为清除命令字特征位。D4D3D2(CDCDCD)——用来设定清除显示RAM方式。共有4种方式,见下表:D4D3D2清除方式10×将显示RAM全部清0110将显示RAM清成20H(A组=0010;B组=0000)111将显示RAM全部置10××不清除(CA=0);若CA=1时,则D3D2仍有效D1(CF)——用来置空键字RAM。当CF=1时,执行清除命令后,键字RAM被置空,使中断输出线IRQ复位。同时,RAM的读出地址也被置0。D0(CA)——是总清除的特征位。它兼有CD和CF的联合效用。当CA=1时,对显示RAM的清除方式由D3D2的编码确定。清除显示缓冲器RAM大约需160μs。在此时间,显示无效,CPU不能向显示缓冲器RAM写入数据。上述用于确定8279操作方式的命令字用户在使用时要注意以下几点:(1)由于是写入命令字,要求数据类型选择线A0=1,因此8个写入命令字占用一个口地址。(2)所有命令字类型皆由D7D6D5特征位确定区别。在CPU写入8279后能自动寻址相应的命令寄存器,与写入的先后顺序无关。(3)每次进行8279初始化不一定要求写入所有的控制命令字。而是根据要求写入相关的命令字。4.键盘输入数据格式在键盘扫描方式下,进入键字RAM中的键输入数据对应于该键所在键盘上的行、列位置。键输入数据的格式如下:D7D6D5D4D3D2D1D000­SCANRETURND7D6=00;表示引脚CNTL和SHIFT均接地,可与键盘的8×8=64个按键配合工作。D2D1D0(RETURN)——表示输入键所在的列号。由RL0~RL7的状态决定。D5D4D3(SCAN)——表示输入键所在行号,由扫描计数值SL2~SL0的状态确定。上述键盘输入数据格式组成按键的键值。图8.3.6给出了8×8键盘键号与键值。在键盘输入格式中,用D5D4D3表示SL2~SL0的8个译码状态,用D2D1D0表示RL7~RL0的8位状态。图8.3.68279的8×8键盘的键号与键值8.3.38279接口和编程方法1.硬件设计采用2行×8列=16个键盘。数字键为0~9,命令键采用A、B、C、D、E、F。双键互锁。键值与键号相同:00H~0FH。显示器采用8位8段LED,编码扫描(8中取1)。8279的OUTA0-OUTA3依次连接显示器a、b、c、d、e、f、g、dp段。这样可保证显示器所需要的段选码和程序中所列出的段选码表相一致。电路如图8.3.7所示。图8.3.7实用8279键盘/显示器接口电路2.软件设计软件程序包括:8279初始化程序,8279键盘经中断处理程序,8279显示程序,键盘散转分类程序。(1)8279初始化程序1)清除命令字。本命令码为D1H,D7D6D5=110为特征位;D4为清除显示有效。D0=1为全清,包括:显示RAM、显示器熄灭等。2)设置显示器/键盘工作方式。本命令字码为00H。选择8位LED显示器,左入口、双键互锁。3)时钟编程命令字。由ALE输入到CLK端为2MHz,则分频系数为N=2MHz/100KHz=20,因此本命令字为34H。

`4)允许INT1中断。根据上述分析,8279初始化程序框图如图8.3.8所示。图8.3.88279初始化程序框图(2)8279键盘中断程序若操作人员有按键,则键值自动进入8279FIFORAM中,然后8279的引脚IRQ=1,向INT1申请中断。在中断程序中,CPU先向8279写入读FIFORAM命令字40H,再读出键值送A中。中断返回后执行键盘分类程序。8279键盘中断程序框图如图4.3.9。(3)8279显示子程序显示子程序框图如图8.3.10所示。图8.3.98279键盘中断程序框图

图8.3.108279显示子程序框图根据上述分析,可编出8279键盘、显示器初始化及管理程序如下。初始化主程序:ORG0000HLJMPSTARTORG0100HSTART:MOVSP,#50H;设置堆栈指针MOVDPTR,#7FFFH;指向8279命令口地址MOVA,#0D1H;总清除显示RAM命令字MOVX@DPTR,A;总清除命令字写入8279LP1:MOVXA,@DPTR;读8279内状态字JBACC.7,LP1;等待清除显示RAMMOVA,#00H;设置键盘/显示器工作方式命令字MOVX@DPTR,A;命令字写入8279MOVA,#34H;对CLK20分频为100KHz命令字MOVX@DPTR,A;分频命令字写入8279MOVDPTR,#DISBH;显示提示符“bh–706”代码表首地址LCALLDIS;转提示符显示子程序MOV20H,#80H;20H为键盘数据缓冲单元,设D7=1为空SETBIT1;下降沿触发中断SETBEA;开放CPU中断SETBEX1;允许中断ATD:MOVB,#03H;扩展程序入口地址表间隔RDKEY:MOVA,20H;取键盘数据缓冲器内容JNBACC.7,K0;ACC.7=0,已有键值转K0SETBEASJMPRDKEY;键盘数据缓冲单元20H空,等待按键中断K0:MOV20H,#80H;键盘数据缓冲单元,置空标志,D7=1CLREA;关CPU中断,处理键值分类MOVDPTR,#K1;K1为键功能程序入口地址表首地址MULABJMP@A+DPTR;键功能程序散转操作者按键后,键号码的行、列进入8279FIFORAM单元,同时IRQ=1,向INT1=0申请中断,CPU执行下面读键值中断服务程序:ORG 0013H ;INT1中断矢量LJMP INT1 ORG 1000H INT1:MOV A,#40H ;读RAM键值命令字MOV DPTR,#7FFFH;8279命令字口地址MOVX @DPTR,A ;命令字写入8279MOV DPTR,#7FFEH;指向8279数据口地址MOVX A,@DPTR ;将RAM中键值读入AMOV 20H,A ;键值送缓冲单元20H,D7=0RETI ;中断返回以下为键盘散转程序:K1:LJMPG0;转0键处理程序入口LJMPG1;转1键处理程序入口……LJMPG9;转9键处理程序入口LJMPGA;转A键处理程序入口……LJMPGF;转F键处理程序入口以下为16个功能键处理程序结构:G0:……;0键功能处理程序……LJMPATD;返回G1:……;1键功能处理程序……LJMPATD;返回……GF:……;F键功能处理程序……LJMPATD;返回以下为显示子程序:DIS:PUSHDPH;提示符显示代码地址入栈保护PUSHDPLMOVR2,#08H;显示器LED位数送R2MOVA,#90H;写显示RAM命令字MOVDPTR,#7FFFH;8279命令口地址MOVX@DPTR,A;将命令字写入8279POPDPL;回恢复地址POPDPHTI:MOVA,#00H;采用固定偏移量查提示符表MOVCA,@A+DPTR;查提示符代码表相对偏移量PUSHDPHMOVDPTR,#TABA,@A+DPTR;指向段选码表首地址MOVCA,@A+DPTR

;取段选码送APUSHDPLMOVDPTR,#7FFEH;指向8279数据口地址MOVX@DPTR,A;段选码写入8279显示RAM中POPDPLPOPDPHINCDPTR;指向下一个提示符代码地址DJNZR2,TI;8位LED未显示完,继续送RET;送完返回以下为提示符“bH706”段选码查表的相对偏移量:DISBH:DB0BH,11H,13H,07H,00H,06H,13H,13H

以下为显示段码、字符和偏移量对应表TAB:DB3FH;000HDB06H;101HDB5BH;202HDB4FH;303HDB66H;404HDB6DH;505HDB7DH;606HDB07H;707HDB7FH;808HDB6FH;909HDB77H;A0AHDBTC1H;b0BHDB39H;C0CHDB5EH;D0DHDB79H;E0EHDB71H;F0FHDB73H;P10HDB76H;H11HDBFFH;曰12HDB00H;熄灭LED13HEND8.4微型打印机及接口电路8.4.1GP16微型打印机及接口GP16打印机的工作原理GP16为一种早期的智能微型打印机,机芯为Model-150-ІІ16行针打。机内控制器由8039单片机构成。GP16-ІІ为改进型,控制器由8031单片机实现。GP16微型打印机只有16根能外接口信号钱和3个控制开关,使用+5电源,可以打印字符串,数据和图表。图8.4.1为其接线示意图。K1K2K33333GP16微型打印机+5V+5VIO00IO01IO02IO03IO04IO05IO06IO07CSWRRDBUSY地地图8.4.1GP16微型打印机接线示意图IO0.0~IO0.7:双向三态数据总线,是CPU与打印机之间命令,数据和状态信息传输线。CS:设备选择线,低电平有效。BUSY:打印状态输出线,BUSY输出高电平表示GP16处于忙状态,不能接收CPU命令或数据。该信号可供CPU查询或向CPU发中断请求信号。K1:空走纸开关;K2:复位停机开关;K3:自检开关。GP16的打印命令占两个字节,格式为:

命令中的点行n是选择字符行之间的行距参数,字符本身占距7个点行,所以打印点行数应大于或等于8,若n=10则行距为3个点行数。打印行数NNH是指需要打印(或空走纸)的字符行数。表8.4.1是GP16的命令编码表。命令功能操作码空走纸1000字符串打印1001十六进制数据打印1010图形打印1011空走纸命令(8nNNH)执行空走纸命令时,打印机自动空走纸NN╳n点行。其间忙状态(BUSY)置1,执行完后清零。打印字符串命令(9nNNH)执行完该命令后,打印机等待CPU写入字符数据,当接收完16个字符(一行)后,转入打印,打印一行需时约一秒。若收到非法字符作空格处理。若收到换行(OAH)码,作停机处理。打完本行即停止印。当打印完规定的NNH行数后,忙状态(BUSY)清零。GP16可打印的字符编码如表8.4.2所示。(3)十六进制数据打印命令(AnNNH)本指令通常用来直接打印内存数据。当GP16接收到数据打印命令后,把CPU写入的数据字节分两次打印,先打印高4位,后打印低4位,一行打印4个字节数据。行首为相对地址。(4)图形打印(BnNNH)GP16接收到CPU的图形打印命令和行数以后,等待主机送来一行96个字节的数据便进行打印。把这些数据所确定的图形打印出来,然后再接受CPU的另一组图形数据,直到规定的行数打印完为止。GP16还有一个状态字可供CPU查询,格式为:错忙D7D0D0为忙位(BUSY),当CPU输入的数据命令没处理完时,或处于自检状态时均置1,空闲时置0。D7为错误位,当接收到非法命令时置1,接收到正确命令后复位。表8.4.2GP16打印的字符编码2.MCS-51单片机和GP16的接口电路GP16打印机其控制电路中自身有三态锁存器,在CS和WR控制下能锁存CPU总线数据,故GP16可以直接和MCS-51单片机数据总线相连。接线如图8.4.2所示。打印机地址为7FFFH。此种接法即可用于中断方式,以可用于查询工作方式。下面通过一个例子来说明打印程序的编制方法。图8.4.2GP16与8031数据总线的接口方法设8031RAM内20H~28H中分别存放一、二、三区水源压力的数据,单位为KPa。压力数据的前两个字节为整数部分,后一个字节为小数部分。压力数据均以压缩的BCD码形式存放,要求打印格式如下:一#:_××××.××Kpa__二#:_××××.××Kpa__三#:_××××.××Kpa__为了节省数据缓冲单元,常把表格中重复且固定不变的字符,如本例中“#:_”、“Kpa”以数据表格形式存放在EPROM中,而单次出现的常数可在程序中设置代码,如本例中的一、二、三字样。下面给出以查询方式编出的程序清单:PRINT:MOV DPTR,#7FFFH ;送地址WAIT0:MOVX A,@DPTR ;取打印机状态字ANL A,#81H ;保留D7、D0位JNZ WAIT0 ;“忙”或“错”时返回WAIT1:MOV A,#9CH ;送打印字符串命令,点行数为9CHMOVX @DPTR,AWAIT2: MOVX A,@DPTR ;查询打印机状态字JB ACC.7,WAIT1;有“错”重新送打印命令JB ACC.0,WAIT2 ;“忙”再查询MOV A,#03H ;送打印行数NNHWAIT3: MOVX A,@DPTR ;查“忙”JB ACC.0,WAIT3 ;“忙”等待MOV R1,#20H ;打印数据缓冲区首址送R1MOV R7,#00H ;行数初值送R7@DPTR,ALOOP2:MOVA,R7ADD

A,#81H

;构成一、二、三的代码、分别是81H,82H,83HMOVX @DPTR,A ;送打印字符WAIT4: MOVX A,@DPTR ;查状态码JB ACC.0,WAIT4 ;“忙”等待MOV R4,#e1 ;符号代码表TAB1首址偏移量送R4LOOP0: MOV A,R4;MOVC A,@A+PC ;取表中字符代码MOVX @DPTR,A ;送打印WAIT5: MOVX A,@DPTR ;查状态JB ACC.0,WAIT5 ;“忙“等待INC R4 ;指向下一个字符MOV

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论