您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 酒店餐饮 > 单片机-第10章-MCS-51与键盘、显示器、拨盘、打印机的接口设计
第10章MCS-51与键盘、显示器、拨盘、打印机的接口设计输入外设:键盘、BCD码拨盘等;输出外设:LED显示器、LCD显示器、打印机等。10.1LED显示器接口原理LED(LightEmittingDiode):发光二极管的缩写。显示器前面冠以“LED”。10.1.1LED显示器的结构常用的LED显示器为8段(或7段,8段比7段多了一个小数点“dp”段)。有共阳极和共阴极两种。如图10-1所示。为使LED显示不同的符号或数字,要为LED提供段码(或称字型码)。提供给LED显示器的段码(字型码)正好是一个字节(8段)。各段与字节中各位对应关系如下:按上述格式,8段LED的段码如表10-1所示。显示字符共阴极段码共阳极段码显示字符共阴极段码共阳极段码03FHC0Hc39HC6H106HF9Hd5EHA1H25BHA4HE79H86H34FHB0HF71H8EH466H99HP73H8CH56DH92HU3EHC1H67DH82HT31HCEH707HF8Hy6EH91H87FH80HH76H89H96FH90HL38HC7HA77FH88H“灭”00HFFHb7CH83H………表10-1LED段码(8段)表10-1只列出了部分段码,可根据实际情况选用。另外,段码是相对的,它由各字段在字节中所处的位决定。例如表10-1中8段LED段码是按格式:而形成的,“0”的段码为3FH(共阴)。反之,如将格式改为下列格式:则“0”的段码为7EH(共阴)。字型及段码由设计者自行设定,习惯上还是以“a”段对应段码的最低位。N个LED显示块有N位位选线和8×N根段码线。10.1.2LED显示器工作原理图10-2是4位LED显示器的结构原理图。段码线控制显示的字型,位选线控制该显示位的亮或暗。静态显示和动态显示两种显示方式。1.静态显示方式各位的公共端连接在一起(接地或+5V)。每位的段码线(a~dp)分别与一个8位的锁存器输出相连。显示字符一确定,相应锁存器的段码输出将维持不变,直到送入另一个段码为止。显示的亮度高。图10-3:4位静态LED显示器电路。该电路各位可独立显示。2.动态显示方式所有位的段码线相应段并在一起,由一个8位I/O口控制,形成段码线的多路复用,各位的公共端分别由相应的I/O线控制,形成各位的分时选通。图10-4:4位8段LED动态显示电路。其中段码线占用一个8位I/O口,而位选线占用一个4位I/O口。图10-5为8位LED动态显示2003.10.10的过程。图(a)是显示过程,某一时刻,只有一位LED被选通显示,其余位则是熄灭的;图(b)是实际显示结果,人眼看到的是8位稳定的同时显示的字符。10.2键盘接口原理1.键盘输入的特点键盘:一组按键开关的集合。行线电压信号通过键盘开关机械触点的断开、闭合,输出波形如图10-6。2.按键的确认检测行线电平,便可确认按键按下与否。高电平:断开;低电平:闭合,常用软件来消除按键抖动。基本思想:检测到有键按下,键对应的行线为低,软件延时10ms后,行线如仍为低,则确认该行有键按下。3.如何消除按键的抖动当键松开时,行线变高,软件延时10ms后,行线仍为高,说明按键已松开。采取以上措施,躲开了两个抖动期t1和t3的影响。10.2.2键盘接口的工作原理独立式按键接口和行列式键盘接口。1.独立式键盘接口各键相互独立,每个按键各接一根输入线,通过检测输入线的电平状态可很容易判断那个键被按下。此种接口适于键数较少或操作速度较高的场合。图10-7(a)为中断方式的独立式键盘工作电路图10-7(b)为查询方式的独立式键盘工作电路。图10-8为8255A扩展I/O口的独立式按键接口电路。图10-9用三态缓冲器扩展的I/O口的按键接口电路。对图10-9独立式键盘编程,软件消抖,查询方式检测键的状态。仅有一键按下时才有效才处理。KEYIN:MOVDPTR,#0BFFFH;键盘端口地址BFFFHMOVXA,@DPTR;读键盘状态ANLA,#1FH;屏蔽高三位MOVR3,A;保存键盘状态值LCALLDELAY10;延时10ms去键盘抖动MOVXA,@DPTR;再读键盘状态ANLA,#1FH;屏蔽高三位CJNEA,R3,RETURN;两次不同,抖动引起转RETURNCJNEA,#1EH,KEY2;相等,有键按下,不等转KEY2LJMPKEY1;是K1键按下,转K1键处理;子程序PKEY1KEY2:CJNEA,#1DH,KEY3;S2键未按下,转KEY3LJMPKEY2;S2键按下,转PKEY2处理KEY3:CJNEA,#1BH,KEY4;S3未按下,转KEY4LJMPKEY3;S3按下,转PKEY3处理KEY4:CJNEA,#17H,KEY5;S4键未按下,转KEY5LJMPKEY4;S4按下,转PKEY4处理KEY5:CJNEA,#0FH,PASS;S5未按下,转RETURNLJMPKEY5;S5按下,转PKEY5处理RETURN:RET;重键或无键按下,从子程序返回识别和编程简单,用在按键数较少的场合。2.行列式(矩阵式)键盘接口用于按键数目较多的场合,由行线和列线组成,按键位于行、列的交叉点上。如图10-10所示。按键数目较多的场合,行列式键盘与独立式键盘相比,要节省很多的I/O口线。(1)行列式键盘工作原理无键按下,该行线为高电平,当有键按下时,行线电平有列线的电平来决定。由于行、列线为多键共用,各按键彼此将相互发生影响,必须将行、列线信号配合起来并作适当的处理,才能确定闭合键的位置。(2)按键的识别方法a.扫描法图10-10(b)中3号键被按下为例,来说明此键时如何被识别出来的。识别键盘有无键被按下的方法,分两步进行:第1步:识别键盘有无键按下;第2步:如有键被按下,识别出具体的按键。把所有列线置0,检查各行线电平是否有变化,如有变化,说明有键按下,如无变化,则无键按下。上述方法称为扫描法,即先把某一列置低电平,其余各列为高电平,检查各行线电平的变化,如果某行线电平为低,可确定此行列交叉点处的按键被按下。b.线反转法只需两步便能获得此按键所在的行列值,线反转法的原理如图10-11。第1步:列线输出为全低电平,则行线中电平由高变低的所在行为按键所在行。第2步:行线输出为全低电平,则列线中电平由高变低所在列为按键所在列。结合上述两步,可确定按键所在行和列。(3)键盘的编码根据实际需要灵活编码。10.2.3键盘的工作方式单片机在忙于各项工作任务时,如何兼顾键盘的输入,取决于键盘的工作方式。原则:即要保证能及时响应按键操作,又不要过多占用CPU的工作时间。通常,键盘工作方式有3种,即编程扫描、定时扫描和中断扫描。1.编程扫描方式只有当单片机空闲时,才调用键盘扫描子程序,扫描键盘。工作过程:(1)在键盘扫描子程序中,先判断有无键按下。方法:PA口8位输出全0,读PC口低4位状态,若PC0~PC3为全1,则说明键盘无键按下;若不全为1,则说明键盘可能有键按下。(2)用软件来消除按键抖动的影响。如有键按下,则进行下一步。(3)求按下键的键号。(4)等待按键释放后,再进行按键功能的处理操作。2.定时扫描工作方式利用单片机内的定时器,产生10ms的定时中断,对键盘进行扫描。3.中断工作方式只有在键盘有键按下时,才执行键盘扫描程序,如无键按下,单片机将不理睬键盘。键盘所做的工作分为三个层次,如图10-13。第1层:单片机如何来监视键盘的输入。三种工作方式:①编程扫描②定时扫描③中断扫描。第2层:确定具体按键的键号。体现在按键的识别方法上就是:①扫描法;②线反转法。第3层:执行键处理程序。10.3键盘/显示器接口设计实例一般把键盘和显示器放在一起考虑。10.3.1利用并行I/O芯片实现键盘/显示器接口图10-14:8031用扩展I/O接口芯片8155H实现的6位LED显示和32键的键盘/显示器接口电路。图中的8155H也可用8255A来替代。8031外扩一片8155H。RAM地址为7E00H~7EFFH。I/O口地址为7F00H~7F05H。PA口为输出口,控制键盘列线的扫描,同时又是6位共阴极显示器的位扫描口。PB口作为显示器段码输出口,PC口作为键盘的行线状态的输入口。75452:反相驱动器,7407:同相驱动器。1.动态显示程序设计8031内部RAM设置6个显示缓冲单元79H~7EH,存放要显示的6位数据。8155H的PB口输出相应位的段码,依次的改变PA口输出为高的位使某一位显示某一字符,其它位为暗。动态地显示出由缓冲区中显示数据所确定的字符。程序流程如图10-15。参考程序如下:DIR:MOVR0,#79H;置缓冲器指针初值MOVR3,#01H;位选码的初值送R3MOVA,R3LD0:MOVDPTR,#7F01H;位选码→PA口(PA.0位);最左边LED亮MOV@DPTR,AINCDPTR;数据指针指向PB口MOVA,@R0;显示数据→AADDA,#0DH;加偏移量(下条指令到表首间;所有指令占的单元数)MOVCA,@A+PC;根据显示数据来查表取段码DIR1:MOVX@DPTR,A;段码→8155HPB口ACALLDL1ms;该位显示1msINCR0;指针指向下一个数据单元MOVA,R3;位选码送入A中JBAcc.5,LD1;判断是否扫描到最右边的;LED,如到最右边则返回RLA;位选码向左移一位,准备让;右边的下一位LED亮位选码MOVR3,A;送R3中保存AJMPLD0;LD1:RET;DSEG:DB3FH,06H,5BH,4FH,66H,6DH;共阴极段码表DB7DH,07H,7FH,6FH,77H,7CHDB39H,5EH,79H,71H,73H,3EHDB31H,6EH,1CH,23H,40H,03HDB18H,00HDL1ms:MOVR7,#02H;延时1ms子程序DL:MOVR6,#0FFHDL6:DJNZR6,DL6DJNZR7,DLRET2.键盘程序设计(1)判别键盘上有无键闭合(2)去除键的机械抖动(3)判别闭合键的键号(4)使CPU对键的一次闭合仅作一次处理键盘程序的流程如图10-16。键盘子程序如下:KEYI:ACALLKS1;调用判有无键闭合子程序JNZLK1;有键闭合,跳LK1NI:ACALLDIR;无键闭合,调用显示子程序,延;迟6ms后,跳KEYIAJMPKEYILK1:ACALLDIR;可能有键闭合,延迟12ms,软件去抖ACALLDIRACALLKS1;调用判有无键闭合子程序JNZLK2;经去抖,判键确实闭合,跳LK2处理ACALLDIR;调用显示子程序延迟6msAJMPKEYI;抖动引起,跳KEYILK2:MOVR2,#0FEH;列选码→R2MOVR4,#00H;R4为列号计数器LK4:MOVDPTR,#7F01H;列选码→8155H的PA口MOVA,R2;MOVX@DPTR,A;INCDPTR;数据指针增2,指向PC口INCDPTR;MOVXA,@DPTR;读8155HPC口JBAcc.0,LONE;0行线为高,无键闭合,跳LONE,转判1行MOVA,#00H;0行有键闭合,首键号0→AAJMPLKP;跳LKP,计算键号LONE:JBAcc.1,LTW0;1行线为高,无键闭合,跳LTW0,;转判2行MOVA,#08H;1行有键闭合,首键号8→AAJMPLKPLTW0:JBA.2,LTHR;2行线为高,无键闭合,跳LTHR,;转判3行MOVA,#10H;2行有键闭合,首键号10H→AAJMPLKP;跳LKP,计算键号LTHR:JBAcc.3,NEXT;3行线为高,无键;闭合,跳NEXT,准备下一列扫描MOVA,#18H;3行有键闭合,首键号18H→ALKP:ADDA,R4;计算键号:首键号+列号=键号PUSHA;键号进栈保护LK3:ACALLDIR;调用显示子程序,延时6msACALLKS1;调用判有无键闭合子程序,延时;6msJNZLK3;判键释放否,未释放,则循环POPA;键已释放,键号出栈→ARETNEXT:INCR4;列计数器加1,为下一列扫描作准备M
本文标题:单片机-第10章-MCS-51与键盘、显示器、拨盘、打印机的接口设计
链接地址:https://www.777doc.com/doc-4910914 .html