第7章2+MCS-51与键盘的接口课件_第1页
第7章2+MCS-51与键盘的接口课件_第2页
第7章2+MCS-51与键盘的接口课件_第3页
第7章2+MCS-51与键盘的接口课件_第4页
第7章2+MCS-51与键盘的接口课件_第5页
已阅读5页,还剩79页未读 继续免费阅读

下载本文档

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

文档简介

7.4MCS-51与键盘的接口7.4.1MCS-51单片机与键盘接口7.4.2MCS-51单片机与LED显示器接口7.4.3MCS-51单片机与行程开关、晶闸管、继电器的接口单片机7.4MCS-51与键盘的接口7.4.1MCS-57.4.1MCS-51单片机与键盘接口7.4.1键盘的工作原理

键盘实际上是一组按键开关的集合,平时按键开关总是处于断开状态,当按下键时它才闭合。它的结构和产生的波形如图所示。P1.1VCCGND(a)KP1.1(b)抖动时间<10ms开关动作时间>100ms“断开”“闭合”<10ms“断开”7.4.1MCS-51单片机与键盘接口7.4.1键/S为=0,R=l,可得出A=l,A=0。当按压按键时,/S=l,/R=0,可得出A=0,A=1,改变了输出信号A的状态。若由于机械开关的接触抖动,则/R的状态会在0和1之间变化多次,若/R=l,由于A=0,因此G2门仍然是“有低出高”,不会影响输出的状态。同理,当松开按键时,/S端出现的接触抖动亦不会影响输出的状态。因此,图1所示的电路,开关每按压一次,A点的输出信号仅发生一次变化。/S为=0,R=l,可得出A=l,A=0。键盘的处理主要涉及三个方面:1.按键的识别通过检测输出线电平的高低判断键位有无按下:键位未按下,输出为高键位按下,输出为低

键盘的处理主要涉及三个方面:1.按键的识别通过检测输出线电2.抖动的消除消除按键盘抖动通常有两种方法:硬件消抖和软件消抖。

硬件消抖是通过在按键输出电路上加一定的硬件线路来消除抖动,一般采用R-S触发器或单稳态电路。软件消抖是利用延时来跳过抖动过程。&I/O接口&+5v+5v消除抖动电路开关单片机2.抖动的消除消除按键盘抖动通常有两种方法:硬件消抖和软件消3.键位的编码(也叫扫描码)

当软件实现查找到一个键被按下后,为了要确定该键,一般事先用该键对应的行、列的值(行值和列值)或者利用该键对应的IO线先组装一个关键字-----编码。

然后通过按键编码进入该键对应的按键处理程序;3.键位的编码(也叫扫描码)矩阵式键盘通常有两种方法编码。(1)用连接键盘的I/O线的二进制组合进行编码。如(a)图。(2)顺序排列编码。如(b)图。处理方法如下:编码值=行首编码值X+列号Y。P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0FEDCBA9876543210(b)第0列第1列第0行第1行P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.088848281484442412824222118141211(a)+5V逐列输出0以检查行线行线0,1,2,3分别编码:80,40,20,10列线0,1,2,3分别编码:08,04,02,01行线0,1,2,3分别编码:0,1,2,3列线0,1,2,3分别编码:0,1,2,3第0行第0列4×行号+列号组装扫描码行号+列号组装扫描码矩阵式键盘通常有两种方法编码。(1)用连接键盘的I/O线的二7.4.2独立式键盘与单片机的接口键盘的结构形式一般有两种:独立式键盘与矩阵式键盘。

独立式键盘就是各按键相互独立,每个按键各接一根I/O口线,每根I/O口线上的按键都不会影响其它的I/O口线。GNDVCCGNDVCC与(b)查询方式工作的独立式键盘的结构形式8051(a)中断方式工作的独立式键盘的结构形式INT08051P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7按键编码可为:FEH或01H7.4.2独立式键盘与单片机的接口键盘的结构形式一般有

下面是针对图7.4(b)图查询方式的汇编语言形式的键盘程序。总共有8个键位,KEY0~KEY7为8个键的功能程序。START:MOVA,#0FFH;

MOVP1,A;置P1口为输入状态

MOVA,P1;键状态输入

CPLA JZSTART;没有键按下,则转开始

JBACC.0,K0;检测0号键是否按下,按下转

JBACC.1,K1;检测1号键是否按下,按下转

JBACC.2,K2;检测2号键是否按下,按下转

JBACC.3,K3;检测3号键是否按下,按下转

JBACC.4,K4;检测4号键是否按下,按下转

JBACC.5,K5;检测5号键是否按下,按下转

JBACC.6,K6;检测6号键是否按下,按下转

JBACC.7,K7;检测7号键是否按下,按下转

JMPSTART;无键按下返回,再顺次检测下面是针对图7.4(b)图查询方式的汇编语言形式的键K0:AJMPKEY0K1:AJMPKEY1……K7:AJMPKEY7KEY0:…… ;0号键功能程序

JMPSTART;0号键功能程序执行完返回KEY1:…… ;1号键功能程序

JMPSTART;1号键功能程序执行完返回

……KEY7:…… ;7号键功能程序

JMPSTART;7号键功能程序执行完返回K0:AJMPKEY07.4.3矩阵键盘与单片机的接口

矩阵式键盘又叫行列式键盘。用I/O口线组成行、列结构,键位设置在行列的交点上。例如4×4的行、列结构可组成16个键的键盘,比一个键位用一根I/O口线的独立式键盘少了一半的I/O口线。7.4.3矩阵键盘与单片机的接口矩阵式键

矩阵键盘的连接方法有多种:1可直接连接于单片机的I/O口线;2可利用扩展的并行I/O口(8255、8155等)连接;3也可利用可编程的键盘、显示专用接口芯片

(8279等)进行连接等等。其中,利用扩展的并行I/O口连接方便灵活,在单片机应用系统中比较常用。矩阵键盘的连接方法有多种:下图就是通过8255A芯片扩展的并行I/O口连接48的矩阵键盘。P2.7=0:A口地址为:7F00H;C口地址为:7F02H。扫描法:列线输出,行线输入。列线逐列输出0,某行有按键,行线输入就为0;若无按键,行线输入全部为1。PA7PA6PA5PA4PA3PA2PA1PA0PC0PC1PC2PC3012345678910111213141516171819202122232425262728293031CS74LS373WRRDA1A0P2.7WRRDALEP0.0~P0.7D0~D7RESET1K20F+5V+5V82555.1K48051编码值=行首编码值X+列号Y=8×行号+列号键码=行首键号+列号(键号必须依次是从左至右书写)

或键码=列首键号+行号(键号必须依次是从上至下书写)下图就是通过8255A芯片扩展的并行I/O口连接48的矩阵一.矩阵键盘的工作过程对矩阵键盘的工作过程可分两步:第一步是CPU首先检测键盘上是否有键按下;第二步是再识别是哪一个键按下(通过扫描码)。1.检测键盘上是否有键按下处理方法是:将列线送入全扫描字,读入行线的状态来判别。其具体过程如下:PA口输出00H,即所有列线置成低电平,然后将行线电平状态读入累加器A中。如果有键按下,总会有一根行线电平被拉至低电平,从而使行输入状态不全为"1"。一.矩阵键盘的工作过程对矩阵键盘的工作过程可分两步:2.识别键盘中哪一个键按下处理方法是:

将列线逐列置低电平,检查行输入状态,称为逐列扫描。从PA0开始,依次输出“0”,置对应的列线为低电平,然后从PC口读入行线状态,如果全为“1”,则按下的键不在此列;如果不全为“1”,则按下的键必在此列,而且是该列与“0”电平的行线相交的交点上的那个键。为求取编码,用计数器记录下当前扫描列的列号,检测到第几行有键按下,就用该行的首键码加列号得到当前按键的编码。2.识别键盘中哪一个键按下处理方法是:1.查询工作方式

主程序循环中插入键盘检测子程序,主程序每循环一次则键盘检测子程序被执行一次,对键盘进行检测一次,如果没有键按下,则跳过键识别,直接执行主程序;如果有键按下,则通过键盘扫描子程序识别按键,得到按键的编码值,然后根据编码值进行相应的处理,处理完后再回到主程序执行。二.矩阵键盘的工作方式开始有键按下否?调用12ms延时子程序有键按下否?判闭合键,编码入栈保护闭合键释放否?编码A返回否否否是是是

键盘扫描子程序1.查询工作方式主程序循环中插入键盘检测子程

键盘扫描子程序如下:(硬件线路如图7.4,8255A的A口、B口、C口和控制口地址分别为7F00H、7F01H、7F02H、7F03H,设8255A已在主程序中初始化。已设定为A口方式0输出,C口的低4位方式0输入。)KEY1:ACALLKS1

;调用判断有无键按下子程序

JNZLK1;有键按下时,(A)≠0转消抖延时KEY2:ACALLTM6ms AJMPexit: ;无键按下返回LK1:ACALLTM12ms;调12ms延时子程序

ACALLKS1;查有无键按下,若有则真有键按下

JNZLK2 ;键(A)≠0逐列扫描

AJMPexit ;不是真有键按下,返回LK2:MOVR2,#0FEH;初始列扫描字(0列)送入R2 MOVR4,#00H;初始列(0列)号送入R4LK4:MOVDPTR,#7F00H;DPTR指向8255PA口

MOVA,R2 ;列扫描字送至8255PA口

MOVX@DPTR,A INCDPTR ;DPTR指向8255PC口

INCDPTR键盘扫描子程序如下:(硬件线路如图7.4,8 MOVXA,@DPTR ;从8255PC口读入行状态

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→ALKP:ADDA,R4 ;求键码,键码=行首键码+列号

PUSHACC ;键码进栈保护LK3:ACALLKS1 ;等待键释放

JNZLK3 ;键未释放,等待

POPACC ;键释放,键码→AEXIT: RET ;键扫描结束,出口状态(A)=键码 MOVXA,@DPTR ;从8255PC口NEXT:INCR4 ;准备扫描下一列,列号加1 MOVA,R2 ;取列扫描字送累加器A JNBACC.7,KEND;判断8列扫描否?扫描完返回

RLA ;扫描字左移一位,变为下一列扫描字

MOVR2,A ;扫描字送入R2保存

AJMPLK4 ;转下一列扫描KEND:AJMPKEY1

KS1:

MOVDPTR,#7F00H;DPTR指向8255的PA口

MOVA,#00H ;全扫描字→A MOVX@DPTR,A;全扫描字送往8255的PA口

INCDPTR ;DPTR指向8255的PC口

INCDPTR MOVXA,@DPTR ;读入PC口行状态

CPLA

;变正逻辑,以高电平表示有键按下

ANLA,#0FH ;屏蔽高4位,只保留低4位行线值

RET ;出口状态:(A)≠0时有键按下执行KS1子程序的结果是:有闭合键则(A)≠0;无闭合键则(A)=0。CPLA;负逻辑不直观,常采取行列线加反相器或软件求反的方法把键盘改成正逻辑。NEXT:INCR4TM12ms:MOVR7,#18H;延时12ms子程序TM: MOVR6,#0FFHTM6: DJNZR6,TM6 DJNZR7,TM RETTM6ms:MOVR7,#0CH;延时6ms子程序TM2: MOVR6,#0FFHTM62:DJNZR6,TM6 DJNZR7,TM RETC语言键盘扫描子程序:略2.定时扫描工作方式3.中断处理方式TM12ms:MOVR7,#18H;延时1C子程序:#include<reg51.h>#include<absacc.h>#defineucharunsignedchar#defineuintunsignedintVoiddelay(uint);Uchar

checkkey(void);Uchar

keyscan(void);Voidmain(void{ucharkey;While(1){key=keyscan();delay(2000);}}Voiddelay(uinti){uintj;For(j=0;j<I;j++){}}Ucharcheckkey(){UcharI;XBYTE[0x7f00]=0;i=XBYTE[7f02];i=i&0x0f;If(i==0x0f)return(0);Elsereturn(0xff);}C子程序:Ucharcheckkey()Ucharkeysan(){ucharscancode;//列扫描码变量

Ucharcodevalue;//键值Ucharm;//行首编码变量Uchark;//行检测码UcharI,j;If(checkkey()==0)return(0xff);//无,返回ffElse{ delay(200);//延时

If(checkkey()==0)return(0xff);else{scancode=0xfe;m=0;//for(i=0;i<8;i++){

k=0x01;//行检测码

XBYTE[0x7f00]=scancode;

for(j=0;j<4;j++){

if((XBYTE[0x7f02]&k])==0){codevalue=m+i;注意书错

while(checkkey()!=0);//等待按键释放

return(codevalue);//返回编码

}else

{m=m+8;//下一行首编码

k=k<<1;}

}

scancode=~((~scancode)<<1);注意书错

}}}Ucharkeysan()fo7.5MCS-51单片机与LED显示器接口7.5.1LED显示器的结构与原理

在单片机应用系统中通常使用的是8段式LED数码管显示器,它有共阴极和共阳极两种,如图所示。abcdefgdpcomabcdefgdpcomabcdefgdp10987612345gfcomabedcomcdp(a)共阴极结构(c)管脚图(b)共阳极结构代码位D7D6D5D4D3D2D1D0显示段hgfedcbaLED(LightEmitingDiode)7.5MCS-51单片机与LED显示器接口7.5.1

其中:(a)为共阴极结构。(b)为共阳极结构。(c)图为管脚图,从a~g管脚输入不同的8位二进制编码,可显示不同的数字或字符。共阴极和共阳极的字段码互为反码。其中:(a)为共阴极结构。(b)为共阳极结构7.5.2LED数码管显示器的译码方式一.硬件译码方式译码方式是指由显示字符转换得到对应的字段码的方式。

硬件译码方式是指利用专门的硬件电路来实现显示字符到字段码的转换,这样的硬件电路有很多,比如MOTORLA公司生产的MC14495芯片就是其中的一种,MC14495是共阴极一位十六进制数——字段码转换芯片,能够输出用四位二进制表示形式的一位十六进制数的七位字段码,不带小数点。它的内部结构如图。4锁存器地址译码和字段码ROM阵列ABCDLE569107VssVDD816abcdefgh+iVCR11121314151234二.软件译码方式

软件译码方式就是通过编写软件译码程序,通过译码程序来得到要显示的字符的字段码。7.5.2LED数码管显示器的译码方式一.硬件译码方式7.5.3LED数码管的显示方式

显示多位数据的两种电路:1.静态显示;2.动态显示。

对应字位线:D0D1D2D3D4D5

abhCOM

abhCOM

abhCOMafbge

cdh段控和位控静态显示动态显示7.5.3LED数码管的显示方式显示多位数据的一、LED静态显示LED静态显示时,其公共端直接接地(共阴极)或接电源(共阳极),各段选线分别与I/O口线相连。要显示字符,直接在I/O线送相应的字段码。abcdefgdpI/O(1)abcdefgdpI/O(2)特点:显示亮度大,硬件和软件都较简单,应用广泛。

显示缓冲区与多位LED对应关系:每个LED需要一个8位并行口。共阴极一、LED静态显示LED静态显示时,其公共端直例:显示80C51片内RAM中以30H为首地址的8位字形数的程序:静态显示电路“0”例:显示80C51片内RAM中以30H为首地址的8位静态显示DIR:PUSH ACC ;保护现场

PUSH DPH PUSH DPL MOV R2,#08H ;显示8个数

MOV R0,#30H ;显示缓冲区地址送入R0DL0:MOV A,@R0 ;取要显示的数作查表偏移量

MOV DPTR,#TAB ;指向字形码表首

MOVC A,@A+DPTR ;查表得字形码

MOV SBUF,A ;发送显示DL1:JNB TI,DL1 ;等待发送完一桢数据

CLR TI ;清标志,准备继续发送

INC R0 ;更新显示单元

DJNZ R2,DL0 ;重复显示所有数码管

POP DPL ;恢复现场

POP DPH POP ACC RETTAB:DB 0C0H,0F9H,0A4H,0B0H,99H;0,1,2,3,4

DB 92H,82H,0F8H,80H,90H,88H;5,6,7,8,9,A

DB 83H,0C6H,0A1H,86H,8EH;B,C,D,E,F程序:DIR:PUSH ACC ;保护现场程序:二、LED动态显示方式LED动态显示是将所有的数码管的段选线并接在一起,用一个I/O口控制,公共端不是直接接地(共阴极)或电源(共阳极),而是通过相应的I/O口线控制。D3D2D1D0I/O(1)I/O(2)

分时轮流选通数码管的公共端,使得各数码管轮流导通,在选通相应LED后,即在显示字段上得到显示字形码。特点:提高数码管的发光效率,可简化硬件线路。多位LED共用一个8位字段口(共阴极或共阳极),各位LED公共端用字位口控制,扫描输出显示不同字形。二、LED动态显示方式LED动态显示是将所有

设数码管为共阳极,工作过程:

第一步使右边第一个管的公共端D0为1,其余管的公共端为0,同时在I/O(1)上送右边第一个数码管的字段码,这时,只有右边第一个数码管显示,其余不显示;

第二步使右边第二个管的公共端D1为1,其余的公共端为0,同时在I/O(1)上送右边第二个数码管的字段码,这时,只有右边第二个数码管显示,其余不显示,

依此类推,直到最后一个,这样四个数码管轮流显示相应的信息,一个循环完后,下一循环又这样轮流显示,由于人的视觉滞留,只要循环的周期足够快,看起来所有的数码管都是一起显示的了。这就是动态显示的原理。而这个循环周期对于计算机来说很容易实现。所以在单片机中经常用到动态显示。设数码管为共阳极,工作过程:三、LCD显示LCD(LiquidCrystalDisplay):它是一种被动式的显示器,即液晶本身并不发光,而是利用液晶经过处理后能改变光线通过方向的特性,而达到白底黑字或黑底白字显示的目的。

LCD只能工作在静态显示方式。并要求加上专门的驱动芯片4056。

原理与LED类似!!三、LCD显示LCD(LiquidCrystalDisp串行口控制的静态LCD显示(2位)输出2位显示,即1字节。串行口控制的静态LCD显示(2位)输出2位显示,即1字节。程序:#include<reg51.h>#defineucharunsignedcharucharbyte=0x59;voiddisplay(ucharx){ SBUF=x; /*由串行口输出*/ while(TI==0); /*等待8位发送结束*/ TI=0;}voidmain(void){ display(byte);}

因4056是BCD的LCD驱动芯片,故byte中包含的BCD码可直接输出显示。程序:#include<reg51.h>因4一.硬件译码静态显示下图是一个两位数码管硬件译码静态显示的接口电路图。abcdefgMC14495abcdefgabcdefgABCDLEMC14495abcdefgABCDLEP1.0P1.1P1.2P1.3P1.4P1.580517.5.4LED显示器与单片机的接口LED显示器从译码方式上有硬件译码方式和软件译码方式。从显示方式上有静态显示方式和动态显示方式。在使用时可以把它们组合起来。在实际应用时,如果数码管个数较少,通常用硬件译码静态显示,在数码管个数较多时,则通常用软件译码动态显示。一.硬件译码静态显示下图是一个两位数码管硬件译码静态显示的接二.软件译码动态显示

下图是一个8位软件译码动态显示的接口电路图。用8255A扩展并行I/O口接数码管,数码管采用动态显示方式,8位数码管的段选线并联与8255A的A口通过74LS373相连,8位数码管的公共端通过74LS373分别与8255A的B口相连。也即8255A的B口输出位选码选择要显示的数码管,8255A的A口输出字段码使数码管显示相应的字符,8255A的A口和B口都工作于方式0输出。

A口、B口、C口和控制口的地址分别为7F00H、7F01H、7F02H和7F03H。二.软件译码动态显示下图是一个8位软件译码动态显示D0D1D2D7Q0Q1Q2Q3Q4Q5Q6Q7D0D1D2D3D4D5D6D7GOEVCC74LS373Q0Q1Q2Q3Q4Q5Q6Q7D0D1D2D3D4D5D6D7GOEVCC74LS373PA0PA1PA2PA3PA4PA5PA6PA7PB0PB1PB2PB3PB4PB5PB6PB7CSWRRD74LS373P2.7WRRDALEP0.0~P0.78051D0~D7A1A0GA1A08255地址:A口:7F00HB口:7F01HC口:7F02H控制口:7F03H

………共阴极D0D1D2D7Q0D0GOEVCC74LS373Q0D0显示完毕?NY8255初始化动态显示初始化送段码和位扫描码让第一个数码管亮1ms生成下一个数码管的位码指针指向下一个显示单元指针指向显示缓冲区(8字节)首单元从显示缓冲区取数码管要显示的数查表求该数对应的共阴极段码12345678显示完毕?NY8255初始化动态显示初始化送段码和位扫描码让

软件译码动态显示汇编语言程序为:(设8个数码管的显示缓冲区为片内RAM的57H~50H单元)DISPLAY:MOVA,#10000000B ;8255初始化

MOVDPTR,#7F03H;使DPTR指向8255控制寄存器端口

MOVX@DPTR,A MOVR0,#57H;动态显示初始化,使R0指向缓冲区首址

MOVR3,#7FH

;首位位选字送R3 MOVA,R3LD0:MOVDPTR,#7F01H ;使DPTR指向PB口

MOVX@DPTR,A ;选通显示器高位(最右端一位) DECDPTR ;使DPTR指向PA口

MOVA,@R0 ;读要显示数

ADDA,#0DH ;调整距段选码表首的偏移量

MOVCA,@A+PC ;查表取得段选码

MOVX@DPTR,A ;段选码从PA口输出

ACALLDL1 ;调用1ms延时子程序

DECR0 ;指向缓冲区下一单元

MOVA,R3 ;位选码送累加器A软件译码动态显示汇编语言程序为: JNBACC.0,LD1;判断8位是否显示完毕,显示完返回

RRA ;未显示完,把位选字变为下一位选字

MOVR3,A;修改后的位选字送R3 AJMPLD0;循环实现按位序依次显示LD1:RETTAB:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H

;共阴极字段码表DB:7FH,6FH,77H,7CH,39H,5EH,79H,71HDL1:MOVR7,#02H ;延时子程序DL:MOVR6,#0FFHDL0:DJNZR6,DL0DJNZR7,DLRET JNBACC.0,LD1;判断8位是软件译码动态显示C语言程序为:#include<reg51.h>#include<absacc.h> //定义绝对地址访问#defineucharunsignedchar#defineuintunsignedintvoiddelay(uint); //声明延时函数voiddisplay(void); //声明显示函数uchardisbuffer[8]={0,1,2,3,4,5,6,7};//定义显示缓冲区voidmain(void){XBYTE[0x7f03]=0x80;//8255A初始化while(1){display(); //设显示函数}}//************延时函数************voiddelay(uinti) //延时函数{uintj;for(j=0;j<i;j++){}}软件译码动态显示C语言程序为://***********显示函数************voiddisplay(void) //定义显示函数{ucharcodevalue[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

//0~F的共阴极字段码表ucharchocode[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //位选码表uchari,p,temp;for(i=0;i<8;i++){p=disbuffer[i]; //取当前显示的字符temp=codevalue[p]; //查得显示字符的字段码XBYTE[0x7f00]=temp; //送出字段码(PA口)temp=chocode[i]; //取当前的位选码XBYTE[0x7f01]=temp; //送出位选码(PB口)delay(20); //延时1ms}}//***********显示函数************7.6MCS-51单片机与行程开关、晶闸管、继电器的接口7.6.1行程开关、继电器与MCS-51单片机的接口行程开关和继电器常开触点与单片机的接口如图所示。E1E2S10K10K10K10F光电耦合器件单片机的I/O引脚开关7.6MCS-51单片机与行程开关、晶闸管、继电器的接口7.6.2晶闸管与MCS-51单片机的接口8051P1.0P1.1过零电路大功率晶闸管及负载5V5V740774079118012126546410K1000.1F~220V4N40MOC3041RsCs7.6.2晶闸管与MCS-51单片机的接口8051P17.6.3继电器与MCS-51单片机的接口8051P1.17406VD1R+5VVCCVD2S1V18051P1.1R+5VS174064N25R1R2V1VD1VCC7.6.3继电器与MCS-51单片机的接口8051P17.6.4蜂鸣器与MCS-51单片机的接口8051P1.07406+5VPB2130UP002A8051P1.0+5VPB2130UP002AR1R2V17.6.4蜂鸣器与MCS-51单片机的接口8051P1.第7章2+MCS-51与键盘的接口课件7.4MCS-51与键盘的接口7.4.1MCS-51单片机与键盘接口7.4.2MCS-51单片机与LED显示器接口7.4.3MCS-51单片机与行程开关、晶闸管、继电器的接口单片机7.4MCS-51与键盘的接口7.4.1MCS-57.4.1MCS-51单片机与键盘接口7.4.1键盘的工作原理

键盘实际上是一组按键开关的集合,平时按键开关总是处于断开状态,当按下键时它才闭合。它的结构和产生的波形如图所示。P1.1VCCGND(a)KP1.1(b)抖动时间<10ms开关动作时间>100ms“断开”“闭合”<10ms“断开”7.4.1MCS-51单片机与键盘接口7.4.1键/S为=0,R=l,可得出A=l,A=0。当按压按键时,/S=l,/R=0,可得出A=0,A=1,改变了输出信号A的状态。若由于机械开关的接触抖动,则/R的状态会在0和1之间变化多次,若/R=l,由于A=0,因此G2门仍然是“有低出高”,不会影响输出的状态。同理,当松开按键时,/S端出现的接触抖动亦不会影响输出的状态。因此,图1所示的电路,开关每按压一次,A点的输出信号仅发生一次变化。/S为=0,R=l,可得出A=l,A=0。键盘的处理主要涉及三个方面:1.按键的识别通过检测输出线电平的高低判断键位有无按下:键位未按下,输出为高键位按下,输出为低

键盘的处理主要涉及三个方面:1.按键的识别通过检测输出线电2.抖动的消除消除按键盘抖动通常有两种方法:硬件消抖和软件消抖。

硬件消抖是通过在按键输出电路上加一定的硬件线路来消除抖动,一般采用R-S触发器或单稳态电路。软件消抖是利用延时来跳过抖动过程。&I/O接口&+5v+5v消除抖动电路开关单片机2.抖动的消除消除按键盘抖动通常有两种方法:硬件消抖和软件消3.键位的编码(也叫扫描码)

当软件实现查找到一个键被按下后,为了要确定该键,一般事先用该键对应的行、列的值(行值和列值)或者利用该键对应的IO线先组装一个关键字-----编码。

然后通过按键编码进入该键对应的按键处理程序;3.键位的编码(也叫扫描码)矩阵式键盘通常有两种方法编码。(1)用连接键盘的I/O线的二进制组合进行编码。如(a)图。(2)顺序排列编码。如(b)图。处理方法如下:编码值=行首编码值X+列号Y。P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0FEDCBA9876543210(b)第0列第1列第0行第1行P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.088848281484442412824222118141211(a)+5V逐列输出0以检查行线行线0,1,2,3分别编码:80,40,20,10列线0,1,2,3分别编码:08,04,02,01行线0,1,2,3分别编码:0,1,2,3列线0,1,2,3分别编码:0,1,2,3第0行第0列4×行号+列号组装扫描码行号+列号组装扫描码矩阵式键盘通常有两种方法编码。(1)用连接键盘的I/O线的二7.4.2独立式键盘与单片机的接口键盘的结构形式一般有两种:独立式键盘与矩阵式键盘。

独立式键盘就是各按键相互独立,每个按键各接一根I/O口线,每根I/O口线上的按键都不会影响其它的I/O口线。GNDVCCGNDVCC与(b)查询方式工作的独立式键盘的结构形式8051(a)中断方式工作的独立式键盘的结构形式INT08051P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7按键编码可为:FEH或01H7.4.2独立式键盘与单片机的接口键盘的结构形式一般有

下面是针对图7.4(b)图查询方式的汇编语言形式的键盘程序。总共有8个键位,KEY0~KEY7为8个键的功能程序。START:MOVA,#0FFH;

MOVP1,A;置P1口为输入状态

MOVA,P1;键状态输入

CPLA JZSTART;没有键按下,则转开始

JBACC.0,K0;检测0号键是否按下,按下转

JBACC.1,K1;检测1号键是否按下,按下转

JBACC.2,K2;检测2号键是否按下,按下转

JBACC.3,K3;检测3号键是否按下,按下转

JBACC.4,K4;检测4号键是否按下,按下转

JBACC.5,K5;检测5号键是否按下,按下转

JBACC.6,K6;检测6号键是否按下,按下转

JBACC.7,K7;检测7号键是否按下,按下转

JMPSTART;无键按下返回,再顺次检测下面是针对图7.4(b)图查询方式的汇编语言形式的键K0:AJMPKEY0K1:AJMPKEY1……K7:AJMPKEY7KEY0:…… ;0号键功能程序

JMPSTART;0号键功能程序执行完返回KEY1:…… ;1号键功能程序

JMPSTART;1号键功能程序执行完返回

……KEY7:…… ;7号键功能程序

JMPSTART;7号键功能程序执行完返回K0:AJMPKEY07.4.3矩阵键盘与单片机的接口

矩阵式键盘又叫行列式键盘。用I/O口线组成行、列结构,键位设置在行列的交点上。例如4×4的行、列结构可组成16个键的键盘,比一个键位用一根I/O口线的独立式键盘少了一半的I/O口线。7.4.3矩阵键盘与单片机的接口矩阵式键

矩阵键盘的连接方法有多种:1可直接连接于单片机的I/O口线;2可利用扩展的并行I/O口(8255、8155等)连接;3也可利用可编程的键盘、显示专用接口芯片

(8279等)进行连接等等。其中,利用扩展的并行I/O口连接方便灵活,在单片机应用系统中比较常用。矩阵键盘的连接方法有多种:下图就是通过8255A芯片扩展的并行I/O口连接48的矩阵键盘。P2.7=0:A口地址为:7F00H;C口地址为:7F02H。扫描法:列线输出,行线输入。列线逐列输出0,某行有按键,行线输入就为0;若无按键,行线输入全部为1。PA7PA6PA5PA4PA3PA2PA1PA0PC0PC1PC2PC3012345678910111213141516171819202122232425262728293031CS74LS373WRRDA1A0P2.7WRRDALEP0.0~P0.7D0~D7RESET1K20F+5V+5V82555.1K48051编码值=行首编码值X+列号Y=8×行号+列号键码=行首键号+列号(键号必须依次是从左至右书写)

或键码=列首键号+行号(键号必须依次是从上至下书写)下图就是通过8255A芯片扩展的并行I/O口连接48的矩阵一.矩阵键盘的工作过程对矩阵键盘的工作过程可分两步:第一步是CPU首先检测键盘上是否有键按下;第二步是再识别是哪一个键按下(通过扫描码)。1.检测键盘上是否有键按下处理方法是:将列线送入全扫描字,读入行线的状态来判别。其具体过程如下:PA口输出00H,即所有列线置成低电平,然后将行线电平状态读入累加器A中。如果有键按下,总会有一根行线电平被拉至低电平,从而使行输入状态不全为"1"。一.矩阵键盘的工作过程对矩阵键盘的工作过程可分两步:2.识别键盘中哪一个键按下处理方法是:

将列线逐列置低电平,检查行输入状态,称为逐列扫描。从PA0开始,依次输出“0”,置对应的列线为低电平,然后从PC口读入行线状态,如果全为“1”,则按下的键不在此列;如果不全为“1”,则按下的键必在此列,而且是该列与“0”电平的行线相交的交点上的那个键。为求取编码,用计数器记录下当前扫描列的列号,检测到第几行有键按下,就用该行的首键码加列号得到当前按键的编码。2.识别键盘中哪一个键按下处理方法是:1.查询工作方式

主程序循环中插入键盘检测子程序,主程序每循环一次则键盘检测子程序被执行一次,对键盘进行检测一次,如果没有键按下,则跳过键识别,直接执行主程序;如果有键按下,则通过键盘扫描子程序识别按键,得到按键的编码值,然后根据编码值进行相应的处理,处理完后再回到主程序执行。二.矩阵键盘的工作方式开始有键按下否?调用12ms延时子程序有键按下否?判闭合键,编码入栈保护闭合键释放否?编码A返回否否否是是是

键盘扫描子程序1.查询工作方式主程序循环中插入键盘检测子程

键盘扫描子程序如下:(硬件线路如图7.4,8255A的A口、B口、C口和控制口地址分别为7F00H、7F01H、7F02H、7F03H,设8255A已在主程序中初始化。已设定为A口方式0输出,C口的低4位方式0输入。)KEY1:ACALLKS1

;调用判断有无键按下子程序

JNZLK1;有键按下时,(A)≠0转消抖延时KEY2:ACALLTM6ms AJMPexit: ;无键按下返回LK1:ACALLTM12ms;调12ms延时子程序

ACALLKS1;查有无键按下,若有则真有键按下

JNZLK2 ;键(A)≠0逐列扫描

AJMPexit ;不是真有键按下,返回LK2:MOVR2,#0FEH;初始列扫描字(0列)送入R2 MOVR4,#00H;初始列(0列)号送入R4LK4:MOVDPTR,#7F00H;DPTR指向8255PA口

MOVA,R2 ;列扫描字送至8255PA口

MOVX@DPTR,A INCDPTR ;DPTR指向8255PC口

INCDPTR键盘扫描子程序如下:(硬件线路如图7.4,8 MOVXA,@DPTR ;从8255PC口读入行状态

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→ALKP:ADDA,R4 ;求键码,键码=行首键码+列号

PUSHACC ;键码进栈保护LK3:ACALLKS1 ;等待键释放

JNZLK3 ;键未释放,等待

POPACC ;键释放,键码→AEXIT: RET ;键扫描结束,出口状态(A)=键码 MOVXA,@DPTR ;从8255PC口NEXT:INCR4 ;准备扫描下一列,列号加1 MOVA,R2 ;取列扫描字送累加器A JNBACC.7,KEND;判断8列扫描否?扫描完返回

RLA ;扫描字左移一位,变为下一列扫描字

MOVR2,A ;扫描字送入R2保存

AJMPLK4 ;转下一列扫描KEND:AJMPKEY1

KS1:

MOVDPTR,#7F00H;DPTR指向8255的PA口

MOVA,#00H ;全扫描字→A MOVX@DPTR,A;全扫描字送往8255的PA口

INCDPTR ;DPTR指向8255的PC口

INCDPTR MOVXA,@DPTR ;读入PC口行状态

CPLA

;变正逻辑,以高电平表示有键按下

ANLA,#0FH ;屏蔽高4位,只保留低4位行线值

RET ;出口状态:(A)≠0时有键按下执行KS1子程序的结果是:有闭合键则(A)≠0;无闭合键则(A)=0。CPLA;负逻辑不直观,常采取行列线加反相器或软件求反的方法把键盘改成正逻辑。NEXT:INCR4TM12ms:MOVR7,#18H;延时12ms子程序TM: MOVR6,#0FFHTM6: DJNZR6,TM6 DJNZR7,TM RETTM6ms:MOVR7,#0CH;延时6ms子程序TM2: MOVR6,#0FFHTM62:DJNZR6,TM6 DJNZR7,TM RETC语言键盘扫描子程序:略2.定时扫描工作方式3.中断处理方式TM12ms:MOVR7,#18H;延时1C子程序:#include<reg51.h>#include<absacc.h>#defineucharunsignedchar#defineuintunsignedintVoiddelay(uint);Uchar

checkkey(void);Uchar

keyscan(void);Voidmain(void{ucharkey;While(1){key=keyscan();delay(2000);}}Voiddelay(uinti){uintj;For(j=0;j<I;j++){}}Ucharcheckkey(){UcharI;XBYTE[0x7f00]=0;i=XBYTE[7f02];i=i&0x0f;If(i==0x0f)return(0);Elsereturn(0xff);}C子程序:Ucharcheckkey()Ucharkeysan(){ucharscancode;//列扫描码变量

Ucharcodevalue;//键值Ucharm;//行首编码变量Uchark;//行检测码UcharI,j;If(checkkey()==0)return(0xff);//无,返回ffElse{ delay(200);//延时

If(checkkey()==0)return(0xff);else{scancode=0xfe;m=0;//for(i=0;i<8;i++){

k=0x01;//行检测码

XBYTE[0x7f00]=scancode;

for(j=0;j<4;j++){

if((XBYTE[0x7f02]&k])==0){codevalue=m+i;注意书错

while(checkkey()!=0);//等待按键释放

return(codevalue);//返回编码

}else

{m=m+8;//下一行首编码

k=k<<1;}

}

scancode=~((~scancode)<<1);注意书错

}}}Ucharkeysan()fo7.5MCS-51单片机与LED显示器接口7.5.1LED显示器的结构与原理

在单片机应用系统中通常使用的是8段式LED数码管显示器,它有共阴极和共阳极两种,如图所示。abcdefgdpcomabcdefgdpcomabcdefgdp10987612345gfcomabedcomcdp(a)共阴极结构(c)管脚图(b)共阳极结构代码位D7D6D5D4D3D2D1D0显示段hgfedcbaLED(LightEmitingDiode)7.5MCS-51单片机与LED显示器接口7.5.1

其中:(a)为共阴极结构。(b)为共阳极结构。(c)图为管脚图,从a~g管脚输入不同的8位二进制编码,可显示不同的数字或字符。共阴极和共阳极的字段码互为反码。其中:(a)为共阴极结构。(b)为共阳极结构7.5.2LED数码管显示器的译码方式一.硬件译码方式译码方式是指由显示字符转换得到对应的字段码的方式。

硬件译码方式是指利用专门的硬件电路来实现显示字符到字段码的转换,这样的硬件电路有很多,比如MOTORLA公司生产的MC14495芯片就是其中的一种,MC14495是共阴极一位十六进制数——字段码转换芯片,能够输出用四位二进制表示形式的一位十六进制数的七位字段码,不带小数点。它的内部结构如图。4锁存器地址译码和字段码ROM阵列ABCDLE569107VssVDD816abcdefgh+iVCR11121314151234二.软件译码方式

软件译码方式就是通过编写软件译码程序,通过译码程序来得到要显示的字符的字段码。7.5.2LED数码管显示器的译码方式一.硬件译码方式7.5.3LED数码管的显示方式

显示多位数据的两种

温馨提示

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

最新文档

评论

0/150

提交评论