资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,并行输入与输出,学习情景四,学习目标:,了解并行通信的基本概念;,掌握键盘的基本组成及工作原理;,掌握七段,LED,显示器的基本组成及工作原理。,技能目标:,能够正确在,AT89S52,外连接键盘和显示设备。,能够灵活应用典型键盘、显示电路构成各种实际电路,串行通信与并行通信,项目一 矩阵式键盘电路设计,第一部分 项目要求,设计一个,44,矩阵键盘与,AT89S52,接口电路。要求用查询法读取行列键盘键码,并将键码存入内部,RAM 32H,单元。,第二部分 相关知识,在单片机应用系统中,经常使用简单的键盘和数码管显示电路作为系统的输入和输出,完成人机对话活动,即人机通道。实际上是单片机与键盘和数码管显示器的接口电路。,键盘接口应有以下功能:,键扫描功能,即检测是否有键闭合;,键识别功能,确定被闭合键所在的行列位置;,产生相应的键值功能;,消除按键抖动功能。,一、键盘工作原理,键盘是一组按键的集合,它是最常用的单片机输入设备,操作人员可以通过键盘输入数据或命令,实现简单的人机通信。,根据按键的识别方法分类,键盘有,编码和非编码,的两种。,编码键盘是通过一个编码电路来识别闭合键的键码,,如,BCD,码键盘、,ASCII,码键盘等;,通过软件来识别键码为非编码键盘。,由于非编码键盘的电路简单,可以方便地增减键的数量,因此在单片机应用系统中得到广泛的应用。,1,、按键电路和抖动的消除,键盘中每个按键都是一个常开关电路。,开关为机械弹性开关,当机械触点断开、闭合时有抖动。,消除的办法:,硬件,单脉冲触发器,即双稳态触发器或基本,R-S,触发器。,软件,延时,用子程序,2,、键盘连接方式,键盘可分为独立式和行列(矩阵式)两类。,(,1,)独立式非编码键盘,电路:见图,4,只按键分别接到,89S52 P1,口的,4,条,I/O,线上。在没有键按下的情况下,,89S52,由于上拉电阻的作用,,P1.0P1.3,线上输入均为高电平。当有某键按下时,与其相连的,I/O,线将得到低电平,其他未按之键的输入线上,仍维持其原来的高电平输入。,这种键盘结构的优点是电路简单,编程简单,;,缺点是当键盘数较多时,要占用较多的,I/O,线。,这种键盘结构可用程序去掉抖动。,(,2,)非编码行列式键盘,为了减少键盘与单片机接口时所占用,I/O,线的数目,在键数较多时,通常都将键盘排列成行列矩阵形式。,即将,I/O,线的一部分作为,行线,,另一部分作为,列线,,按键设置在行线和列线的,交叉点上。,行列式键盘的数量为:,行线数,m,乘以列线数,n,,即可组成,mn,个按键的键盘。见图。,这是一个,44,行列式键盘,按键数量为,16,个。,矩阵式键盘接口处理的内容:,判断键盘中有无键按下的方法是,:,先向所有连接列线的,I/O,线输出,0,;,然后,,将连接行线的按键状态,由相应的,I/O,线读入累加器,A,中。,有键按下时对应的行线,输入为,0,;没有键按下时对应的,行线,输入为,1,。,X,3,求键码的过程是:,依次从一条列线上输出低电平,然后检查各行线的状态。若都为,1,,说明闭合键不在该列;若有的行线为,0,,则说明闭合键在该列与为,0,的行线的交点上。由于每个按键所在的行号和列号不相同,所以,每个按键都按行列号赋予了一个键号。(键值),列,Y3 Y2 Y1 Y0,行,X3 X2 X1 X0,1 1 1 0 E 1 1 1 0 E,1 1 0 1 D 1 1 0 1 D,1 0 1 1 B 1 0 1 1 B,0 1 1 1 7 0 1 1 1 7,键号:列,行,EE ED EB E7,DE DD DB D7,BE BD BB B7,7E 7D 7B 77,键值,N=,行首键号,+,列号,3.,编码键盘按键的处理过程,处理程序分为:程序扫描方式和中断扫描方式。,(,1,)程序扫描方式,即查询方式。,在单片机应用系统中,对键盘的处理只是,CPU,工作的一部分。为了能及时发现有键按下,,CPU,要不断,地调用键盘处理程序,对键盘进行扫描。这种,CPU,主动调用键盘处理程序的方式,称为程序扫描方式。,程序控制扫描工作方式的工作过程与键盘扫描子程序。,(,),判断键盘上有无键按下。,其方法为:,D0 D3,输出,0000B,(列线),读,D4 D7,状态(行线),若,D4 D7,为全“,1”,则键盘无键按下,若不全为“,1”,则有键按下。,(,),去除键的机械抖动影响:,在判断有键按下后,软件延时一段时间(,5 10mS,)后再判断键盘状态,如果仍为有键按下状态,则认为有一个稳定的键按下,否则按照键抖动处理。,(,),判别闭合键的键号:,对键盘的列线进行扫描,再相应地顺序读出,D4 D7,的可能状态。,(,),CPU,对键的一次闭合仅作一次处理,采用的方法为等待键释放以后再将键号送入累加器,A,中。,(,2,)中断扫描方式,为了提高,CPU,的效率,可以让键盘工作在中断扫描方式。有键闭合,产生中断请求信号。,消抖、求键号等工作由中断服务子程序完成。,采用中断方式的键盘接口电路。,89S52,二、键盘接口控制方式,1,、判别键盘上有无键闭合;,2,、键盘去抖,3,、判别闭合键的键号;,N=,行首键号,+,列号,4,、判断闭合键是否释放。,三、应用举例,【,例,4.1】,硬件连接如图所示,编程完成如下功能:按键按下后,对应的小灯亮,再按下,对应的小灯灭。,89S52,编程如下:,KEY,:,MOV P1,#0FFH,;灯全灭,MOV P2,#0FFH,;,P2,口为输入状态,MOV A,P2,;读键值,键按下相应位为,0,CPL A,;取反,键按下相应位为,1,ANL A,#0FH,;屏蔽高,4,位,保留低,4,位,JZ LRET,;全零,无键按下,返回,LCALL DEL20,;非全零,有键按下,延,时,软件去抖,MOV A,P2,;重读键值,CPL A,ANL A,#0FH,JZ LRET,;全零,无键按下,返回,JB ACC.0,K0,;,K0,按下,转,K0,程序,JB ACC.1,K1,;,K1,按下,转,K1,程序,JB ACC.2,K2,;,K2,按下,转,K2,程序,JB ACC.3,K3,;,K3,按下,转,K3,程序,SJMP LRET,K0,:,CPL P1.0,;,P1.0,状态取反,小灯,LED0,亮变灭,灭变亮,SJMP LRET,K1,:,CPL P1.1,;,P1.1,状态取反,小灯,LED1,亮变灭,灭变亮,SJMP LRET,K2,:,CPL P1.2,;,P1.2,状态取反,小灯,LED2,亮变灭,灭变亮,SJMP LRET,K3,:,CPL P1.3,;,P1.3,状态取反,小灯,LED3,亮变灭,灭变亮,LRET,:,RET,DEL20,:,MOV R7,#27H,;延时,20ms,左右,LOOP1,:,MOV R6,#0FFH,LOOP2,:,DJNZ R6,LOOP1,DJNZ R7,LOOP2,RET,第三部分 项目实施,(一)硬件电路,图中,P1.4P1.7,用于控制行线,,P1.0P1.3,用于控制列线。行、列线通过上拉电阻接,+5V,,没有键按下时,被钳在高电平状态。通过发送扫描字确定键码,具体方法如下:,89S52,+5V,P1.0,5.1 k,W,4,P1.7,P1.6,P1.5,P1.4,+5V,5.1 k,W,4,P1.3,P1.2,P1.1,(1),由列线输出,0,,然后读入,P1,口的值存入内部,RAM 30H,单元。,(2),由行线输出,0,,然后读入,P1,口的值存入内部,RAM 31H,单元。,(3),把,30H,的低,4,位与,31H,的高,4,位的值相加存入累加器,A,。,(4),最后判断累加器,A,的值,如果累加器,A,的数据全为,1,,说明无键按下,否则说明有键按下,且累加器,A,的数据就是被按下键的键值,(,程序中对累加器,A,取反,目的是用,JNZ,指令判断是否有键按下,),。,(二)参考程序,键扫描程序如下:,BOAD,:,LCALL BOADD,JNZ BOAD1,;无键按下转,BOAD,LCALL DELAY,;调延时子程序,AJMP BOAD,;继续扫描键盘,BOAD1,:,LCALL DELAY,;消除键抖动,(,延时,子程序略,),LCALL BOADD,;确认是否有键按下,JNZ BOAD2,LCALL DELAY,SJMP BOAD,;转键扫描,BOAD2,:,CPL A,MOV 32H,,,A,;取键值,BOAD3,:,LCALL DELAY,LCALL BOADD,JNZ BOAD3,;等待键松开,B2,:,RET,;返回,;获取键值子程序,BOADD,:,MOV P1,,,#0FH,;置行线为,0,MOV A,,,P1,MOV 30H,,,A,MOV P1,,,#0F0H,;置列线为,0,MOV A,,,P1,MOV 31H,,,A,ANL 30H,,,#0FH,;取列值,MOV A,,,30H,ANL 31H,,,#0F0H,;取行值,ADD A,,,31H,;行值加列值,CPL A,;,A,全,0,无键按下,RET,键盘扫描程序的运行结果是把闭合键的键码放在,32,单元中。,项目二 字符显示,第一部分 项目要求,设计一个八位显示电路,要求,8,只数码管从左到右顺序显示,1,、,2,、,3,、,4,、,5,、,6,、,7,、,8,共,8,个字符;将内存,10H,、,11H,、,12H,、,13H,中存放的压缩,BCD,码显示出来。,第二部分 相关知识,单片机应用系统中使用的显示器主要有:,发光二极管显示器(,LED,);液晶显示器(,LCD,);阴极射线管显示器(,CTR,)。,一、发光二极管及,LED,显示器,发光二极管,LED,显示器,由发光二极管组成,不同的发光段亮,可组成不同字型,电流太大,耗电量大,电流太小,发光度不够,一般各管电流在,10mA,较合适。,7,段,LED,字型码(段码),显示,字形,h a b c d e f g,共阳极段,选码,共阴极段选码,0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,“,灭”,1 1 0 0 0 0 0 0,1,1 1 1 1 0 0 1,1,0 1 0 0 1 0 0,1,0 1 1 0 0 0 0,1,0 0 1 1 0 1 0,1,0 0 1 0 0 1 0,1,0 0 0 0 0 1 0,1,1 1 1 1 0 0 0,1,0 0 0 0 0 0 0,1,0 0 1 0 0 0 0,1,0 0 0 1 0 0 0,1,0 0 0 0 0 1 1,1,1 0 0 0 1 1 0,1,0 1 0 0 0 0 1,1,0 0 0 0 1 1 0,1,0 0 0 1 1 1 0,1 1 1 1 1 1 1 1,C0H,F9H,A4H,B0H,99H,92H,82H,F8H,80H,90H,88H,83H,C6H,A1H,86H,8EH,FFH,3FH,06H,5BH,4FH,06H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H,00H,LED,显示器接口,LED,显示器用于显示工业控制参数、过程状态。,1.LED,数码管,共阴极,LED,和共阳极,LED,当,LED,字段引线与数据线连接,每个显示字形对应一个字形码。,COM,P,1.0,1.7,89S52,a,f b,g,e,c,d h,a,b,h,a b h,COM,D,7,D,6,D,5,D,4,D,3,D,2,D,1,D,0,h g f e d c b a,显示程序任务:,1),设置显示缓冲区,存放待显示数据。,2),显示译码:程序存储器中建立字形码常数表,查表得出对应数据的字形码。,3),输出显示:输出字形码到显示端口。,例:,MOV DPTR,,,#WTAB,;,指向字形码表首地址,MOV A,,,R0,;,取显示缓冲区中数据,MOVC A,,,A+DPTR,;,查表显示译码,MOV P1,,,A,;,输出显示,WTAB,:,DB3FH,,,06H,,,5BH,;,字形码表,COM,P,1.0,1.7,89S52,a,f b,g,e,c,d h,a,b,h,二、七段,LED,显示器工作原理,LED,显示器有,静态显示,和,动态显示,两种方式,1.,静态显示器,多位,LED,分别用一组,8,位字段口,各位,LED,公共端接地,分别输出显示不同字形。,a b h,COM,a,f b,g,e,c,d h,a b h,COM,a b h,COM,在,AT89S52,的串行口上扩展多片串行输入并行输出的移位寄存器,74LS164,作为静态显示器接口,图中给出了,8,位共阳极静态显示器的逻辑接口。设要显示的数据放在,78H-7FH,中。,89S52,静态显示程序如下:,DISPLAY,:,MOV R7,,,8,;,8,位显示计数器,MOV R0,,,78H,;,78H-7FH,为显示器缓冲区,MOV DPTR,,,TABLE,;显示字形码表首地址,LOOP1,:,MOV A,,,R0,;取出要显示的数据,INC R0,;指向缓冲区下一地址,MOVC A,,,A,DPTR,;取出显示字形码,MOV SBUF,,,A,;送出该,LED,上的字形码,LOOP2,:,JNB TI,,,LOOP2,;输出完否?,CLR TI,;完,清发送中断标志,DJNZ R7,,,LOOP1,;,8,位显示未完,继续,RET,TABLE,:,DB 0C0H,,,0F9H,,,0A4H,,,0BH,,,99H,DB 92H,,,82H,,,0FBH,,,80H,,,90H,DB 88H,,,83H,,,0C6H,,,0A1H,,,86H,DB 8EH,,,0FFH,;,F,,暗,2.LED,动态显示,动态显示方式是各位数码管的,a,h,端分别连在一起,并与单片机系统的一个,I/O,口相连。从该,I/O,口输出显示代码。每只数码管的共阴极端或共阳极端则与另一个,I/O,口相连,控制该位的点亮。,每一时刻,只有一位数码管被点亮,各位之间,依次轮流被点亮,对每位来说,每隔一段时间点亮一次。,利用发光二极管的余辉和人眼的驻留效应,并通过适当调整每位数码管点亮的时间和时间间隔,便可以得到稳定的显示输出。,在单片机系统应用中,广泛采用动态显示方式。,第三部分 项目实施,(一)硬件电路分析,P1,口输出与对应显示位的关系,端口,P1.0,P1.1,P1.2,P1.3,P1.4,P1.5,P1.6,P1.7,位码,01H,02H,04H,08H,10H,20H,40H,80H,数码管,L1,L2,L3,L4,L5,L6,L7,L8,89S52,(二)程序清单:,DPLAY,:,MOV R0,,,78H,;显示数据缓冲区首,地址送,R0,MOV R3,,,00000001B,;使显示器最右边位亮,LPl,:,MOV A,,,R3,MOV P1,,,A,;扫描值送,P1,口,MOV A,,,R0,;取欲显示数据,ADD A,,,0EH,;加上查表指令地址偏移量,MOVC A,,,A+PC,;取出段码,MOV P2,,,A,;送出显示,ACALL DELAY,;调用延时子程序,INC R0,;指向下一个显示缓冲区地址,MOV A,,,R3,JB ACC,0,,,LP2,;扫描到第八个显示器否?,RR A,;未到,扫描码右移,1,位,MOV R3,,,A,AJMP,LPl,LP2,:,RET,TAB,:,DB 0C0H,,,0F9H,,,0A4H,,,0B0H,,,99H,,,92H,;,0,,,1,,,2,,,3,,,4,,,5,DB 82H,,,0F8,,,80H,,,90H,,,0C8H,,,83H,;,6,,,7,,,8,,,9,,,A,,,B,DB 0C6H,,,0A1H,,,86H,,,8EH,;,C,,,D,,,E,,,F,DELAY,:,MOV R7,,,02H,;延时子程序,DL1,:,MOV R6,,,0FFH,DL2,:,DJNZ R6,,,DL2,DJNZ R7,,,DLl,RET,设计一个数码管显示电路,要求数码管以闪光方式轮流显示,0,F,共,16,个字符,闪光频率为,2Hz,,每个字符显示,1s,。(要求显示时间用中断方式实现),讨论题,
展开阅读全文