与键盘、显示器的接口设计.ppt
第10章 MCS-51与键盘、显示器的接口设计,在单片机应用系统中,使用的显示器主要有LED(发光二极管显示器)和LCD(液晶显示器)。一、LED显示器的结构 LED显示器是由发光二极管来显示字段的器件。,10.1 LED显示器及接口原理,共阴极与共阳极的段选码互为反码。,1、设置显示缓冲区,存放待显示数据和字符(位置码)。2、显示译码:程序存储器中建立字形码常数表,查表得出对应数据和字符的字形码。3、输出显示:输出字形码到显示端口。,例:MOV DPTR,#WTAB;指向字形码表首地址MOV A,R0;取显示缓冲区中数据MOVC A,A+DPTR;查表显示译码MOV P1,A;输出显示WTAB:DB3FH,06H,5BH;字形代码表(共阴极),二、显示器的显示方式(1)、静态显示方式 静态显示方式就是当显示器显示某一个字符时,相应的发光二极管恒定地导通或截止,直到显示另一个字符为止。静态显示时的亮度较高,编程容易,管理也较简单,但占用I/O口资源较多,因此在显示位数较多时,一般采用动态显示方式。设8255的PA、PB、PC三个8位I/O口输出分别显示字符“1”、“2”、“3”的程序如下(设8255控制口地址为7FFFH):MOVDPTR,#7FFFH;8255控制口MOVA,#80HMOVDPTR,A;设8255 PA、PB、PC都为输出口MOVDPTR,#7FFCH;指向8255 PA口地址,MOVA,#0F9HMOVXDPTR,A;显示字符“1”MOVDPTR,#7FFDH;指向8255 PB口地址MOVA,#0A4HMOVXDPTR,A;显示字符“2”MOVDPTR,#7FFEH;指向8255 PC口地址MOVA,#0B0HMOVXDPTR,A;显示字符“3”RET,例:,显示80C51片内RAM中以30H为首地址的8位字形数的程序:,程序:,DIR:PUSHACC;保护现场 PUSHDPH PUSHDPL MOVR2,#08H;显示8个数 MOVR0,#30H;显示缓冲区地址送入R0DL0:MOVA,R0;取要显示的数作查表偏移量 MOVDPTR,#TAB;指向字形码表首 MOVCA,A+DPTR;查表得字形码 MOVSBUF,A;发送显示DL1:JNBTI,DL1;等待发送完一桢数据 CLRTI;清标志,准备继续发送 INCR0;更新显示单元 DJNZR2,DL0;重复显示所有数码管 POPDPL;恢复现场 POPDPH POPACC RETTAB:DB0C0H,0F9H,0A4H,0B0H,99H;0,1,2,3,4 DB92H,82H,0F8H,80H,90H,88H;5,6,7,8,9,A DB83H,0C6H,0A1H,86H,8EH;B,C,D,E,F,共阳极,(2)、动态显示方式 在多位LED显示时,为了节省I/O口线,一般采用动态显示方式。动态显示方式是一位一位地分时轮流点亮各位显示器,对每一位显示器来说,每隔一段时间轮流点亮一次。显示器的亮度既与导通电流有关,也与点亮和熄灭时间的比例有关。调整导通电流和时间参数,可实现亮度较高较稳定的显示。这种显示方式将七段LED显示器的所有段选位并联在一起,由一个8位I/O口控制,而共阴极或共阳极的公共端分别由相应的I/O口控制,实现各位显示器的分时选通。,图中设6位显示器的显示缓冲器单元为内部RAM 79H7EH,分别存放6位显示器的显示数据。显示程序如下:,DIR6:MOV R0,#79H;置显示缓冲区首地址 MOV DPTR,#7F00H;设8155的命令字寄存器地址;为7F00H MOV A,#03H MOVX DPTR,A;设8155 PA、PB口为输出口 MOV R3,#01 MOV A,R3;为PA口输出准备数据LD0:MOV DPTR,#7F01H;指向8155 PA口地址 MOVX DPTR,A;设一个显示器的公共端为0 INC DPTR;指向8155 PB口地址 MOV A,R0;取显示缓冲区的数据 ADD A,#0DH MOVC A,A+PC;查表找出与该显示器显示缓;冲区对应的字符数据DIR1:MOVX DPTR,A;从8155 PB口输出数据,ACALL delay;进行适当的延时,延时程序从略 INC R0;指向下一个显示缓冲区地址 MOV A,R3 JB ACC.5,LD1;是否显示到第6个显示器?RL A;为显示下一个数据准备PA口数据 MOV R3,A SJMP LD0;6个数据未显示完,则继续显示 LD1:RET DSEG:DB 3FH,06H,5BH,4FH,66H,6DH;0、1、2、3、4、5 DSEG1:DB 7DH,07H,7FH,6FH,77H,7CH;6、7、8、9、A、b DSEG2:DB 39H,5EH,79H,71H,73H,3EH;C、D、E、F、P、U DSEG3:DB 31H,6EH,1CH,23H,40H,03H;、y、;、DSEG4:DB 18H,00,00,00;、,10.2 键盘及接口原理,键盘是由若干个按键组成的开关矩阵,是实现人机会话或人机通信的常用工具。由硬件识别键的闭合编码键盘,由软件识别键的闭合未编码键盘。在由单片机组成的测控系统及智能化仪器中,用得较多的是未编码键盘。通常按键开关为机械弹性开关,机械开关在闭合及断开瞬间均伴随有一连串的抖动,时间一般为520ms。,消除键抖动可用硬件和软件两种方法,一、独立式未编码键盘接口及处理程序,独立式键盘是各按键相互独立地接通一条输入数据线。,START:MOVA,#0FFH MOVP1,A;P1口作为输入时,其口锁存;器必须保持为1 MOVA,P1;取P1口的值,即读键状态 JNBACC.0,K0;0号键按下转K0 JNBACC.1,K1;1号键按下转K1 JNBACC.2,K2;2号键按下转K2 JNBACC.3,K3;3号键按下转K3 JNBACC.4,K4;4号键按下转K4 JNBACC.5,K5;5号键按下转K5 JNB ACC.6,K6;6号键按下转K6 JNBACC.7,K7;7号键按下转K7 JMPSTART;无键按下返回K0:LJMPPK0;转0号键按下处理程序K1:LJMPPK1;转1号键按下处理程序 K7:LJMPPK7;转7号键按下处理程序,PK0:;0号键处理程序JMPSTARTPK7:;7号键处理程序JMPSTART,二、行列式未编码键盘原理及处理程序,对于未编码键盘一般排列成nm矩阵形式,即由n行m列组成。当无键按下时,Xi均为高电平;当有键按下时,Xi的电平由Yi决定。如果把行线接单片机的输入口,列线接单片机的输出口,则可在单片机的控制下,先使,列线Y0为低电平,其它列线为高电平,读行线状态,如所有行线均为高电平,则表明Y0这一列没有键闭合;如读出的行线状态不全为高电平,则为低电平的行线和Y0相交的键闭合。依次类推可获得与其它列线相交的闭合键。获取键状态的方式有:CPU空闲时扫描键盘;定时扫描键盘;中断方式扫描键盘。,三、行列式未编码键盘与MCS51的接口方法,1,7,2,8,3,9,4,10,5,11,6,12,KD1:MOVA,#03H MOVDPTR,#7F00H;设8155命令字地址为7F00H MOVXDPTR,A;PA、PB为输出,PC为输入KEY1:ACALLKS1;调用判别有无键闭合子程序 JNZLK1;有键闭合,则转LK1 ACALLdelay;无键闭合,调用显示延时 AJMPKEY1;返回继续判键是否闭合LK1:ACALLdelay;调用显示程序延时消除抖动 ACALLdelay ACALLKS1;消抖后,再次判键是否闭合 JNZLK2;有键闭合,则转LK2 ACALLdelay AJMPKEY1;无键闭,继续判键是否闭合LK2:MOVR2,#01H;先扫描第一列 MOVR4,#00H;设第一列键序号为0 LK4:MOV DPTR,#7F01H;指向8155 PA口地址MOV A,R2,MOVX DPTR,A;8155 PA输出 INC DPTR INC DPTR;指向PC口地址 MOVX A,DPTR;读PC口的内容 JB ACC.0,LONE;表明0行无键按下 MOV A,#0;0行有键按下,行起始键号为0 AJMP LKP;跳转至LKP,计算键号LONE:JB ACC.1,NEXT;表明1行无键按下 MOV A,#6;1行有键按下,行起始键号为6 AJMP LKPLKP:ADD A,R4;行起始键号与列号之和为键号 PUSH ACC;保存键号LK3:ACALLdelay;延时 ACALLKS1;判键是否释放 JNZLK3;等待键释放 POPACC;取键号;对应的键处理程序从略,RET NEXT:INCR4;指向下一列,列号加1 MOVA,R2 JBACC.5,KND;是否6列全部扫描一遍 RLA;没有,则准备扫描下一列 MOVR2,A;即准备扫描下一列 AJMPLK4KND:AJMPKEY1;继续扫描键盘KS1:MOVDPTR,#7F01H;指向8155 PA口 MOVA,#0FFH MOVXDPTR,A;输出0FFH,即选中全部键盘列 INCDPTR INCDPTR;指向8155 PC口 MOVXA,DPTR;读8155 PC口内容 CPLA;读出的内容取反 ANLA,#03H;只有低位两行键 RET,以上键盘扫描程序,CPU需不停的扫描键盘,影响其它功能的执行,工作效率较低。在实际使用键盘时常采用定时扫描键盘的方式或中断方式。图671为一个44键盘与MCS51采用中断方式的一种接口电路。当键盘上有任一个键闭合时P3.3变为低电平,向CPU发出中断请求。,可假定地址:段控(PA):0101H;位控(PC):0103H。在内部RAM中设置显示缓冲区,其单元个数与LED显示位数相同。设6个显示器的缓冲单元是7AH7FH。,3、用8155作LED显示器接口:,动态显示,“0”,“1”,LED显示程序:,DIS:MOV R0,#7AH;指向显示缓冲区起始单元 MOV R3,#01H;从右数第一位显示器开始 MOV A,R3;取位控码初值DLP:MOV DPTR,#0103H;指向字位口(PC口)MOVX DPTR,A;输出字位码,显示其中1位 MOVDPTR,#0101H;段控码地址(PA口)MOV A,R0;取一个显示数据 ADD A,#0BH;查表偏移量 MOVC A,A+PC;取出字形码 MOVX DPTR,A;输出字形码 ACALL DLY1MS;延时1ms INC R0;指向显示缓冲区下一单元 MOV A,R3;修改字位码 RL A;显示下一位 MOV R3,A JNB ACC.5,DLP;未显示到最左边LED,继续显示 RET;全部扫描一遍,结束DTAB:DB 0C0H,0F9H,0A4H;字形代码表(共阳极)DB 0B0H,99H,DLY1MS:;延时1ms子程序,1B2B1B1B1B1B3B1B,实际是一种可编程的集成监控器件。可为64键提供键阵扫描式接口。可以自动消抖,自动识别按键,给出键码。可对双键和多键同时按下实行保护。对发光二极管荧光屏及其他显示器提供扫描式接口。对于LED数码管可显示多达16位的字符 和数字显示。,目 录,2.3 专用键盘、显示接口芯片8279的应用,一、8279内部结构和电路工作原理,目 录,(1)、I/O控制及数据缓冲器 I/O控制是计算机对8279进行控制的引线,包括读、写、片选以及数据/命令(状态)控制A0。数据缓冲器是计算机与8279之间传送数据或命令。,(2)、控制与定时寄存器及定时控制 控制与定时寄存器用来寄存键盘及显示的工作方式,以及由CPU编程的其它操作方式。定时控制决定一个由软件编程的分频数(值为231),以便从外部时钟CLK分频得到内部所需要的100KHz时钟。然后再经过分频,为键盘扫描提供适当的逐行扫描频率和显示扫描时间。,目 录,(3)、扫描计数器 编码方式,扫描计数器作二进制计数。4位计数状态从扫描线SL0SL3输出,经外部译码器译码后,为键盘和显示器提供扫描线(十六选一);,译码方式,扫描计数器的最低二位被译码后,从SL0SL3输出(四选一)。在编码方式下,扫描线为输出高电平有效,在译码方式下扫描线为输出低电平有效。,目 录,(4)、回复缓冲器、键盘去抖及控制,a、键盘工作方式寻找一行中是否有闭合键 消抖:若发现RL70中某行有键按下,则延时10ms,再查RL70,仍有则形成键描述码,放入先进先出寄存器(FIFO)。,描述码格式,目 录,b、选通方式 回复线的内容在CNTL/STB信号的脉冲上升沿被送入到FIFO存贮器。,c、传感器开关状态矩阵方式 回复线的内容在每次按键扫描时被直接存贮到传感器RAM(即FIFO存贮器)的相应单元中。,(5)、FIFO/传感器RAM及其状态寄存器,a、盘或选通工作方式 FIFO/传感器 RAM是双重功能得88RAM。此时FIFO状态寄存器存放FIFO的工作状态,如空、满、多少字符、是否出错等。当FIFO装有内容时,状态逻辑产生IRQ1,向CPU发出中断请求。,目 录,b、传感器开关状态矩阵方式 FIFO/传感器RAM为传感器RAM,检测到一个传感器的状态变化,则IRQ变为高电平向CPU。,(6)、显示RAM和显示地址寄存器,a、显示RAM 显示RAM用来存放显示数据,容量为168位。在显示过程中,存贮的显示数据轮流从显示寄存器输出。显示寄存器分为A、B两组,OUTA03和OUTB03可以单独送数,也可以组成一个8位的字。,b、显示地址寄存器 用来寄存由CPU进行读/写显示RAM的地址。它可以由命令设定设置成每次读出或写入之后自动递增或递减。,目 录,二、8279的管脚、引线与功能,目 录,图215 键盘、显示接口芯片8279引脚图,三、命令字及命令字格式,(1)、键盘/显示方式设置命令字,目 录,预分频器对外部输入CLK端的时钟信号进行PPPPP分频,分频取值范围为231。,该命令只在传感器方式时使用,在键盘工作方式中,读出操作严格按照先入先出顺序进行。,AI(D4)为自动增量特征位。当AI=1时,则每次读出传感器RAM后地址自动加1使地址指针指向下一个存贮单元,下一个数据便从该地址读出。,X(D3)为无关位。,AAA(D2 D1 D0)为传感器RAM中的字节地址。,目 录,AI(D4)为自动增量特征位。AI=1时,每次读出后地址自动加1,指向下一次读地址。,AAAA(D3 D2 D1 D0)为读显示RAM中的存贮单元地址。,X(D4)为无关位。,当IW/A=1或IW/B=1时,可分别屏蔽该组端口,这样CPU送信息到显示RAM时就不影响该端口的内容。,目 录,当BL/A=1或BL/B=1时,表示该组的显示输出被消隐。当BL/A=0或BL/B=0时,表示该组的显示输出恢复显示。,CF(D1)=1用来置空FIFO存贮器,传感器RAM的读出地址也被置为0。,CA(D0)为总清除位。当CA=1时,则同时清除FIFO与显示用RAM,目 录,在N键轮回工作方式时,E=1则8279将以一种特定的错误方式工作。其特点是:在8279的消抖周期内,若有多个键同时按下,则置位FIFO状态字中的错误特征位S/E,并产生中断请求信号和阻止写入FIFO RAM。,在传感器工作方式中使用,每当传感器状态出现变化时,使IRQ变高,向CPU请求中断,禁止写入传感器RAM。,目 录,DU:显示无效特征位,DU1表示显示无效。S/E:传感器信号结束/错误特征值。传感器方式:S/E1表示最后一个传感器信号已经进入传感器RAM中。特殊错误方式时:S/E1表示出现多键同时按下错误。O:FIFO溢出特征位:若FIFO已满还企图写入,则出现超出错误,置O为1。U:不足错误特征位:若FIFO已经空,还要读出,则出现不足错误,置U为1。F:F1表示FIFO已经满。NNN:FIFO RAM中的字符数,最多8个。,目 录,五、数据输入/输出,在键盘扫描方式中,发读FIFO命令后,从数据口读入数据的格式为:,CNTL(D7)为控制键CNTL的状态位。,SHIFT(D6)为控制键SHIFT的状态位。,扫描值(D5D4D3)为指示输入键所在列(行)号(由SL2SL0的状态确定)。,回送值(D2D1D0)为指示输入键所在行(列)号(由RL7RL0的状态确定)。,目 录,六、MCS51与8279的接口,目 录,MAIN:MOVSP,#60H CLREA MOVDPTR,#7FFFH;指向8279命令口地址 MOVA,#0D1H MOVXDPTR,A;送总清除命令LP:MOVXA,DPTR;读状态字 JBACC.7,LP;等待清除完毕 MOVA,#00 MOVXDPTR,A;8字符显示,左入口 MOVA,#34H MOVXDPTR,A;20分频至100KHz MOVDPTR,#DISBH;指向提示字符首地址 LCALLDIS;显示提示符 MOV20H,#80H;(20H).7=1为无键,目 录,SETBIT1 SETBEX1RKJMP:SETBEA MOVB,#03H ACALLRKEY;调用获取键子程序 MOVDPTR,#KPRG;赋键功能入口首地址 MULAB JMPA+DPTR;转至键功能处理程序INT1P:MOVA,#40H MOVDPTR,#7FFFH MOVXDPTR,A;送读FIFO RAM命令 MOVDPTR,#7FFEH MOVXA,DPTR;读FIFO RAM键值 MOV20H,A;键值送20H单元保存 RETI,目 录,RKEY:MOVA,20H JNBACC.7,K1;判是否有键 SJMPRKEY;键盘缓冲器空则继续读键K1:MOV20H,#80H;有键,重置键盘缓冲器为空 CLREA;关中断,准备键盘命令处理 RETKPRG:LJMPKPRG0;跳转至0数字键处理 LJMPKPRGF;跳转至15数字键处理KPRG0:;0数字键处理程序 LJMPRKJMP KPRGF:;15数字键处理程序 LJMPRKJMP,目 录,DIS:PUSHDPH;提示符代码地址压栈 PUSHDPL MOVR2,#08;8个提示字符 MOVA,#90H MOVDPTR,#7FFFH MOVXDPTR,A;送写显示器命令 POPDPL;弹出提示符代码地址 POPDPHREDS:MOVA,#0 MOVCA,A+DPTR;查表取提示符代码 PUSHDPH;提示符代码地址压栈 PUSHDPL MOVDPTR,#TAB MOVCA,A+DPTR;查表取段选码 MOVDPTR,#7FFEH,目 录,MOVXDPTR,A;段选码送显示RAM POPDPL POPDPH INCDPTR;指向下一个提示符代码地址 DJNZR2,REDS;循环至提示符显示完 RETDISBH:DB0BH,12H,14H,07H,00H,06H,17H,17H;“bH706”地址TAB:DB 3FH,06H,5BH,4FH,66H,6DH;“0 1 2 3 4 5”段选码数据 DB 7DH,07H,7FH,6FH,77H,7CH;“6 7 8 9 A b”段选码数据 DB 39H,5EH,79H,71H,73H,3EH;“C D E F P U”段选码数据 DB 76H,38H,40H,6EH,FFH,00H;“H L y 8.灭”段选码数据,目 录,