单片机与键盘显示器的接口.ppt
第7章 MCS-51单片机与键盘、显示器的接口,主要内容,7.4 MCS-51单片机与键盘接口7.5 MCS-51单片机与LED显示器接口7.6 MCS-51单片机与行程开关、晶闸管、继电器的接口,7.4 MCS-51单片机与键盘接口,键盘是人机接口的重要部件,键盘实际上是由排列成矩阵形式的一系列按键开关组成,用户通过键盘可以向CPU输入数据、地址和命令。,7.4.1 键盘的工作原理,7.4 MCS-51单片机与键盘接口,键盘实际上是一组按键开关的集合,平时按键开关总是处于断开状态,当按下键时它才闭合。,键盘的处理主要涉及三个方面:,1按键的识别:根据输出信号的高低电平来确定,2抖动的消除,消除按键盘抖动通常有两种方法:硬件消抖和软件消抖。,软件消抖是利用延时来跳过抖动过程,7.4 MCS-51单片机与键盘接口,3键位的编码,通常有两种方法编码。,(1)用连接键盘的I/O线的二进制组合进行编码。如(a)图,(2)顺序排列编码。如(b)图,处理方法:编码值=行首编码值X+列号Y。,7.4 MCS-51单片机与键盘接口,7.4 MCS-51单片机与键盘接口,7.4.2 独立式键盘与单片机的接口键盘的安装方式有两种:独立式键盘:当按键个数为14个 矩阵式键盘:当按键个数4,独立式键盘就是各按键相互独立,每个按键各接一根I/O口线,每根I/O口线上的按键都不会影响其它的I/O口线。图(a)为中断方式工作的独立式键盘的结构形式,(b)为查询方式工作的独立式键盘的结构形式,7.4 MCS-51单片机与键盘接口,针对查询方式的汇编语言形式的键盘程序。总共有8个键位,KEY0KEY7为8个键的功能程序。START:MOV A,#0FFH;MOV P1,A;置P1口为输入状态MOV A,P1;键状态输入CPL AJZ START;没有键按下,则转开始JB ACC.0,Key0;检测0号键是否按下,按下转JB ACC.1,Key1;检测1号键是否按下,按下转JB ACC.2,Key2;检测2号键是否按下,按下转JB ACC.3,Key3;检测3号键是否按下,按下转JB ACC.4,Key4;检测4号键是否按下,按下转JB ACC.5,Key5;检测5号键是否按下,按下转JB ACC.6,Key6;检测6号键是否按下,按下转JB ACC.7,Key7;检测7号键是否按下,按下转JMP START;无键按下返回,再顺次检测,7.4 MCS-51单片机与键盘接口,KEY0:;0号键功能程序JMP START;0号键功能程序执行完返回KEY1:;0号键功能程序JMP START;1号键功能程序执行完返回KEY7:;7号键功能程序JMP START;7号键功能程序执行完返回,7.4 MCS-51单片机与键盘接口,下图就是通过8255A芯片扩展的并行I/O口连接48的矩阵键盘。,7.4 MCS-51单片机与键盘接口,7.4.3 矩阵式键盘与单片机的接口,1矩阵键盘的工作过程,对矩阵键盘的工作过程可分两步:第一步是CPU首先检测键盘上是否有键按下;第二步是再识别是哪一个键按下。检是否有键按下:将列线送入全扫描字,读入行线的状态来判别 其具体过程如下:PA口输出00H,即所有列线置成低电平,然后将行线电平状态读入累加器A中。如果有键按下,总会有一根行线电平被拉至低电平,从而使行输入状态不全为1。,7.4 MCS-51单片机与键盘接口,识别哪一个键按下:将列线逐列置低电平,检查行输入状态,称为逐列扫描。从PA0开始,依次输出“0”,置对应的列线为低电平,然后从PC口读入行线状态,如果全为“1”,则按下的键不在此列;如果不全为“1”,则按下的键必在此列,而且是该列与“0”电平行线相交的交点上的那个键。为求取编码,在逐列扫描时,可用计数器记录下当前扫描列的列号,检测到第几行有键按下,就用该行的首键码加列号得到当前按键的编码。,7.4 MCS-51单片机与键盘接口,7.4 MCS-51单片机与键盘接口,2.矩阵式键盘的工作方式 查询工作方式 定时扫描工作方式 中断工作方式查询工作方式:在主程序中插入键盘检测子程序主程序每执行一次则键盘检测子程序被执行一次,对键盘进行检测一次,如果把没有键按下,则跳过键识别,直接执行主程序;如果有键按下,则通过键盘扫描子程序识别按键,得到按键的编码值,然后根据编码值进行相应的处理,处理完后再回到主程序执行。,7.4 MCS-51单片机与键盘接口,键盘扫描子程序流程图,8255A的A口、B口、C口和控制口地址分别为7F00H、7F01H、7F02H、7F03H,设8255A已在主程序中初始化。已设定为A口方式0输出,C口的低4位方式0输入。),KEY1:ACALL KS1;调用判断有无键按下子程序 JNZ LK1;有键按下时,(A)0转消抖延时KEY2:ACALL TM6ms AJMP KEY1;无键按下返回 LK1:ACALL TM12ms;调12 ms延时子程序 ACALL KS1;查有无键按下,若有则真有键按下 JNZ LK2;键(A)0逐列扫描 AJMP KEY2;不是真有键按下,返回 LK2:MOV R2,#0FEH;初始列扫描字(0列)送入R2 MOV R4,#00H;初始列(0列)号送入R4 LK4:MOV DPTR,#7F00H;DPTR指向8155PA口 MOV A,R2;列扫描字送至8155PA口 MOVX DPTR,A INC DPTR;DPTR指向8155PC口 INC DPTR,7.4 MCS-51单片机与键盘接口,7.4 MCS-51单片机与键盘接口,MOVX A,DPTR;从8155 PC口读入行状态JB ACC.0,LONE;查第0行无键按下,转查第1行MOV A,#00H;第0行有键按下,行首键码#00HAAJMP LKP;转求键码LONE:JB ACC.1,LTWO;查第1行无键按下,转查第2行 MOV A,#08H;第1行有键按下,行首键码#08HA AJMP LKP;转求键码LTWO:JB ACC.2,LTHR;查第2行无键按下,转查第3行 MOV A,#10H;第2行有键按下,行首键码#10HA AJMP LKP;转求键码 LTHR:JB ACC.3,NEXT;查第3行无键按下,转该查下一列 MOV A,#18H;第3行有键按下,行首键码#18HA LKP:ADD A,R4;求键码,键码=行首键码+列号 PUSH ACC;键码进栈保护 LK3:ACALL KS1;等待键释放 JNZ LK3;键未释放,等待POP ACC;键释放,键码A RET;键扫描结束,出口状态(A)=键码,7.4 MCS-51单片机与键盘接口,NEXT:INC R4;准备扫描下一列,列号加1 MOV A,R2;取列扫描字送累加器A JNB ACC.7,KEND;判断8列扫描否?扫描完返回 RL A;扫描字左移一位,变为下一列扫描字 MOV R2,A;扫描字送入R2保存 AJMP LK4;转下一列扫描KEND:AJMP KEY1 KS1:MOV DPTR,#7F00H;DPTR指向8155PA口 MOV A,#00H;全扫描字A MOVX DPTR,A;全扫描字送往8155PA口 INC DPTR;DPTR指向8155PC口 INC DPTR MOVX A,DPTR;读入PC口行状态 CPL A;变正逻辑,以高电平表示有键按下 ANL A,#0FH;屏蔽高4位,只保留低4位行线值 RET;出口状态:(A)0时有键按下,7.4 MCS-51单片机与键盘接口,TM12ms:MOV R7,#18H;延时12 ms子程序TM:MOV R6,#0FFHTM6:DJNZ R6,TM6DJNZ R7,TMRETTM6ms:MOV R7,#0CH;延时6 ms子程序TM2:MOV R6,#0FFHTM62:DJNZ R6,TM6DJNZ R7,TMRET,7.4 MCS-51单片机与键盘接口,ANL A,#0FH;屏蔽高4位,只保留低4位行线值RET;出口状态:(A)0时有键按下TM12ms:MOV R7,#18H;延时12 ms子程序TM:MOV R6,#0FFHTM6:DJNZ R6,TM6 DJNZ R7,TM RETLKP:ADD A,R4 RET,7.4 MCS-51单片机与键盘接口,2 定时扫描工作方式3 中断工作方式,7.5.1 LED显示器的结构与原理,图 七段显示块管脚与结构图,共阴数码管,共阳数码管,管脚配置,7.5 单片机与显示器LED接口,7.5 单片机与显示器LED接口,各段码位的对应关系如下:,表 七段LED的段选码,7.5 单片机与显示器LED接口,7.5.2 LED数码管显示器的译码方式译码方式是指由显示字符转换得到对应的字段码的方式硬件译码方式 利用专门的硬件电路实现显示字符到字段码的转换。软件译码方式 就是通过编写软件译码程序,通过译码程序来得到要显示的字符的字段码。,7.5 单片机与显示器LED接口,硬件译码方式CD4511:BCD转换、消隐和锁存控制、七段译码及驱动共阴极数码管,7.5.3 LED数码管的显示方式,1LED静态显示,LED静态显示时,其公共端直接接地(共阴极)或接电源(共阳极),各段选线分别与I/O口线相连。要显示字符,直接在I/O线送相应的字段码。,7.5 单片机与显示器LED接口,2LED动态显示方式,LED动态显示是将所有的数码管的段选线并接在一起,用一个I/O口控制,公共端不是直接接地(共阴极)或电源(共阳极),而是通过相应的I/O口线控制。,7.5 单片机与显示器LED接口,7.5.4 LED显示器与单片机的接口,LED显示器从译码方式上有硬件译码方式和软件译码方式。从显示方式上有静态显示方式和动态显示方式。在使用时可以把它们组合起来。在实际应用时,如果数码管个数较少,通常用硬件译码静态显示,在数码管个数较多时,则通常用软件译码动态显示。,7.5 单片机与显示器LED接口,1硬件译码静态显示,下图是一个两位数码管硬件译码静态显示的接口电路图。,7.5 单片机与显示器LED接口,2软件译码动态显示,图中用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。,7.5 单片机与显示器LED接口,7.5 单片机与显示器LED接口,软件译码动态显示汇编语言程序为:(设8个数码管的显示缓冲区为片内RAM的57H50H单元)DISPLAY:MOV A,#10000000B;8255初始化MOV DPTR,#7F03H;使DPTR指向8155控制寄存器端口MOVX DPTR,AMOV R0,#57H;动态显示初始化,使R0指向缓冲区首址MOV R3,#7FH;首位位选字送R3MOV A,R3LD0:MOV DPTR,#7F01H;使DPTR指向PB口MOVX DPTR,A;选通显示器低位(最右端一位)DEC DPTR;使DPTR指向PA口MOV A,R0;读要显示数ADD A,#0DH;调整距段选码表首的偏移量,7.5 单片机与显示器LED接口,MOVC A,A+PC;查表取得段选码MOVX DPTR,A;段选码从PA口输出ACALL DL1;调用1 ms延时子程序DEC R0;指向缓冲区下一单元MOV A,R3;位选码送累加器AJNB ACC.0,LD1;判断8位是否显示完毕,显示完返回RR A;未显示完,把位选字变为下一位选字MOV R3,A;修改后的位选字送R3AJMP LD0;循环实现按位序依次显示LD1:RETTAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H;字段码表DB 7FH,6FH,77H,7CH,39H,5EH,79H,71HDL1:MOV R7,#02H;延时子程序DL:MOV R6,#0FFHDL0:DJNZ R6,DL0DJNZ R7,DLRET,7.5 单片机与显示器LED接口,软件译码动态显示C语言程序为:#include#include/定义绝对地址访问#define uchar unsigned char#define uint unsigned intvoid delay(uint);/声明延时函数void display(void);/声明显示函数uchar disbuffer8=0,1,2,3,4,5,6,7;/定义显示缓冲区void main(void)XBYTE0 x7f03=0 x80;/8255A初始化while(1),7.5 单片机与显示器LED接口,display();/设显示函数/*延时函数*void delay(uint i)/延时函数uint j;for(j=0;ji;j+)/*显示函数void display(void)/定义显示函数uchar codevalue16=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71;/0F的字段码表,7.5 单片机与显示器LED接口,uchar chocode8=0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf,0 xbf,0 x7f;/位选码表uchar i,p,temp;for(i=0;i8;i+)p=disbufferi;/取当前显示的字符temp=codevaluep;/查得显示字符的字段码XBYTE0 x7f00=temp;/送出字段码temp=chocodei;/取当前的位选码XBYTE0 x7f01=temp;/送出位选码delay(20);/延时1ms,7.6 单片机与行程开关、晶闸管、继电器的接口,7.6.1 行程开关、继电器与MCS-51单片机接口,行程开关和继电器常开触点与单片机的接口如图所示。,7.6.2 晶闸管与MCS-51单片机接口,7.6 单片机与行程开关、晶闸管、继电器的接口,7.6.3 继电器与MCS-51单片机接口,7.6 单片机与行程开关、晶闸管、继电器的接口,7.6.4 蜂鸣器与1单片机接口,7.6 单片机与行程开关、晶闸管、继电器的接口,