LED显示器接口技术及实验.doc_第1页
LED显示器接口技术及实验.doc_第2页
LED显示器接口技术及实验.doc_第3页
LED显示器接口技术及实验.doc_第4页
LED显示器接口技术及实验.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

LED显示器接口技术及实验在单片机系统中,经常用LED(发光二极管)数码显示器来显示单片机系统的工作状态、运算结果等各种信息,LED数码显示器是单片机与人对话的一种重要输出设备。16.1 LED数码显示器的构造及特点图16-1是LED数码显示器的构造。它实际上是由8个发光二极管构成,其中7个发光二极管排列成“8”字形的笔画段,另一个发光二极管为圆点形状,安装在显示器的右下角作为小数点使用。通过发光二极管亮暗的不同组合,从而可显示出09的阿拉伯数字符号以及其它能由这些笔画段构成的各种字符。图16-1 LED数码显示器的构造LED数码显示器的内部结构共有两种不同形式,一种是共阳极显示器,其内部电路见图16-2,即8个发光二极管的正极全部连接在一起组成公共端,8个发光二极管的负极则各自独立引出。另一种是共阴极显示器,其内部电路见图16-3,即8个发光二极管的负极全部连接在一起组成公共端,8个发光二极管的正极则各自独立引出。 图16-2 共阳极显示器内部电路图16-3 共阴极显示器内部电路LED数码显示器中的发光二极管共有两种连接方法:共阳极接法。把发光二极管的阳极连在一起,使用时公共阳极接+5V,这时阴极接低电平的段发光二极管就导通点亮,而接高电平的则不点亮。共阴极接法。把发光二极管的阴极连在一起,使用时公共阴极接地,这时阳极接高电平的段发光二极管就导通点亮,而接低电平的则不点亮。驱动电路中的限流电阻R,通常根据LED的工作电流计算而得到,R=(Vcc-Vled)/Iled。式中,Vcc为电源电压(+5V),Vled为LED压降(一般取2V左右),Iled为工作电流(可取120mA)。R通常取数百欧姆。我们实验中使用的89C51单片机,其P0P3口具有20mA的灌电流输出能力,因此可直接驱动共阳极的LED数码显示器。为了显示数字或符号,要为LED数码显示器提供代码,因为这些代码是为显示字形的,因此称之为字形代码。七段发光二极管,再加上一个小数点位,共计8位代码,由一个数据字节提供。各数据位的对应关系如下所示:数据位D7D6D5D4D3D2D1D0显示段hgfedcbaLED数码显示器的字形(段)码表如下所示:显示字形字形码(共阳极)字形码(共阴极)0C0H3FH1F9H06H2A4H5BH3B0H4FH499H66H592H6DH682H7DH7F8H07H880H7FH990H6FHA88H77HB83H7CHCC6H39HDA1H5EHE86H79HF8EH71H熄灭FFH00H16.2 LED数码显示器的显示方法在单片机应用系统中,LED数码显示器的显示方法有两种:静态显示法和动态扫描显示法。16.2.1 静态显示法所谓静态显示,就是每一个显示器各笔画段都要独占具有锁存功能的输出口线,CPU把欲显示的字形代码送到输出口上,就可以使显示器显示出所需的数字或符号,此后,即使CPU不再去访问它,显示的内容也不会消失(因为各笔画段接口具有锁存功能)。静态显示法的优点是显示程序十分简单,显示亮度大,由于CPU不必经常扫描显示器,所以节约了CPU的工作时间。但静态显示也有其缺点,主要是占用的I/O口线较多,硬件成本也较高。所以静态显示法常用在显示器数目较少的应用系统中。图16-4为静态显示示意图。图16-4中由74LS273(8D锁存器)作扩展输出口,输出控制信号由P2.0和/WR合成,当二者同时为0时,或门输出为0,将P0口数据锁存到74LS273中,口地址为FEEEH。输出口线的低4位和高4位分别接BCD-7段显示译码驱动器74LS47,它们驱动两位数码管作静态的连续显示。图16-4 静态显示示意图16.2.2 动态扫描显示法动态扫描显示是单片机应用系统中最常用的显示方式之一。它是把所有显示器的8个笔画段ah的各同段名端互相并接在一起,并把它们接到字段输出口上。为了防止各个显示器同时显示相同的数字,各个显示器的公共端COM还要受到另一组信号控制,即把它们接到位输出口上。这样,对于一组LED数码显示器需要由两组信号来控制:一组是字段输出口输出的字形代码,用来控制显示的字形,称为段码;另一组是位输出口输出的控制信号,用来选择第几位显示器工作,称为位码。在这两组信号的控制下,可以一位一位地轮流点亮各个显示器显示各自的数码,以实现动态扫描显示。在轮流点亮一遍的过程中,每位显示器点亮的时间则是极为短暂的(15mS)。由于LED具有余辉特性以及人眼视觉的惰性,尽管各位显示器实际上是分时断续地显示,但只要适当选取扫描频率,给人眼的视觉印象就会是在连续稳定地显示,并不察觉有闪烁现象。动态扫描显示由于各个数码管的字段线是并联使用的,因而大大简化了硬件线路。图16-5为动态显示示意图。图16-5 动态显示示意图在实际的单片机系统中,LED显示程序都是作为一个子程序供监控程序调用,因此各位显示器都扫过一遍之后,就返回监控程序。返回监控程序后,进行一些其它操作,再调用显示扫描程序。通过这种反复调用来实现LED数码显示器的动态扫描。动态扫描显示接口电路虽然硬件简单,但在使用时必须反复调用显示子程序,若CPU要进行其它操作,那么显示子程序只能插入循环程序中,这往往束缚了CPU的工作,降低了CPU的工作效率。另外扫描显示电路中,显示器数目也不宜太多,一般在12个以内,否则会使人察觉出显示器在分时轮流显示。16.3 做静态显示实验16.3.1 实现方法在LED数码管输出试验板上做一个静态显示实验,通电后左边两个数码管静态显示56,右边两个数码管则作累加显示16.3.2 源程序文件在我的文档中建立一个文件目录(S16-1),然后建立一个S16-1.uv2的工程项目,最后建立源程序文件(S16-1.asm)。输入下面的程序:序号: 1 ORG 0000H2 LJMP MAIN3ORG 030H4MAIN:MOV 20H,#00H5MOV A,20H6MOV P3,#92H7MOV P2,#82H8GOON:CLR C9ANL A,#0FH10MOV DPTR,#TAB11MOVC A,A+DPTR12MOV P0,A13MOV A,20H14SWAP A15ANL A,#0FH16MOVC A,A+DPTR17MOV P1,A18ACALL DEL19MOV A,20H20INC A21DA A22MOV 20H, A23AJMP GOON24DEL: MOV R7,#014H25DEL1:MOV R6,#0FFH26DEL2: MOV R5,#01FH27DEL3:DJNZ R5,DEL328DJNZ R6,DEL229DJNZ R7,DEL130RET31ORG 0100H32TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H33DB 80H,90H,88H,83H,0C6H,0A1H,86H,08EH34END编译通过后,将S16-1文件夹中的hex文件烧录到89C51芯片中,将芯片插入到LED数码管输出试验板上,通电运行。可看到左边两个数码管静态显示56,右边两个数码管则从0099作累加显示。16.3.3 程序分析解释序号1:程序开始。序号2:跳转到MAIN主程序处。序号3:主程序MAIN从地址0030H开始。序号4:将立即数00H传送给20H单元中。序号5:将20H单元中的内容传送给累加器A。序号6:将立即数92H送P3口,使最左的数码管显示5。序号7:将立即数82H送P2口,使左边第二个数码管显示6。序号8:进位位CY置0。序号9:屏蔽累加器A中高4位。序号10:将数据表格的首地址(0100H)存入16位数据地址指针DPTR中。序号11:查表。序号12:将累加器A中内容传送给P0输出口,点亮“个”位数码管。序号13:再将20H单元中的内容传送给累加器A。序号14:交换累加器A中的高、低4位。序号15:屏蔽A中高4位。序号16:查表。序号17:将累加器A中内容传送给P1输出口,点亮“十”位数码管。序号18:调用延时子程序,便于观察。序号19:20H单元中的内容传送给累加器A。序号20:累加器A内容加1。序号21:2-10进制调整。序号22:累加器A中的内容传送给20H单元。序号23:跳转到标号GOON处继续执行。序号2430:延时子程序。序号31:数据表格的首地址为0100H。序号3233:数据表格内容。序号34:程序结束。可以看出,一开始CPU对P3、P2口置数点亮左边两个数码管(显示56),以后CPU不再访问P3、P2口。由于P3、P2口具有锁存作用,因此左边两个数码管被持续点亮,处于静态显示状态。下面再在LED数码管输出试验板上做慢速扫描动态显示与快速扫描动态显示的对此实验。16.4 P3P0口的数码管依次慢速(显示时间为0.5S)显示1234四个字的实验16.4.1 源程序文件在我的文档中建立一个文件目录(S16-2),然后建立一个S16-2.uv2的工程项目,最后建立源程序文件(S16-2.asm)。输入下面的程序:序号: 1 ORG 0000H2LJMP MAIN3ORG 030H4MAIN:MOV P3,# 0F9H5ACALL DEL0_5S6MOV P3,#0FFH7MOV P2,# 0A4H8ACALL DEL0_5S9MOV P2,#0FFH10MOV P1,#0B0H11ACALL DEL0_5S12MOV P1,#0FFH13MOV P0,#99H14ACALL DEL0_5S15MOV P0,#0FFH16AJMP MAIN17DEL0_5S:MOV R5,#04H18DEL1:MOV R6,#0FFH19DEL2:MOV R7,#0FFH20DEL3:DJNZ R7,DEL321DJNZ R6,DEL222DJNZ R5,DEL123RET24END编译通过后,将S16-2文件夹中的hex文件烧录到89C51芯片中,将芯片插入到LED数码管输出试验板上,通电运行。可看到左边第一个(千位)数码管显示“1”字0.5秒,随即熄灭;接下来百位数码管显示“2”字0.5秒,随即熄灭;再下来十位数码管显示“3”字0.5秒,随即熄灭;最后个位数码管显示“4”字0.5秒,随即熄灭。重复循环,反复不已。显示过程采用了分时动态扫描的方法依次点亮四位数码管,但由于每位数码管在点亮0.5秒的过程中,其它三位数码管处于熄灭状态,扫描频率太低,因此观察起来很不舒服。16.4.2 程序分析解释序号1:程序开始。序号2:跳转到MAIN主程序处。序号3:主程序MAIN从地址0030H开始。序号4:将立即数F9H送P3口,使千位数码管显示1。序号5:调用0.5秒延时子程序,维持千位数码管点亮。序号6:将立即数FFH送P3口,熄灭千位数码管。序号7:将立即数A4H送P2口,使百位数码管显示2。序号8:调用0.5秒延时子程序,维持百位数码管点亮。序号9:将立即数FFH送P2口,熄灭百位数码管。序号10:将立即数B0H送P1口,使十位数码管显示3。序号11:调用0.5秒延时子程序,维持十位数码管点亮。序号12:将立即数FFH送P1口,熄灭十位数码管。序号13:将立即数99H送P0口,使个位数码管显示4。序号14:调用0.5秒延时子程序,维持个位数码管点亮。序号15:将立即数FFH送P0口,熄灭个位数码管。序号16:跳转到MAIN处循环运行。序号1723:0.5秒延时子程序。序号24:程序结束。16.5 P3P0口的数码管依次快速(显示时间为1mS)显示1234四个字的实验16.5.1 源程序文件在我的文档中建立一个文件目录(S16-3),然后建立一个S16-3.uv2的工程项目,最后建立源程序文件(S16-3.asm)。输入下面的程序:序号: 1 ORG 0000H3 LJMP MAIN3ORG 030H4MAIN:MOV P3,# 0F9H5ACALL DEL1mS6MOV P3,#0FFH7MOV P2,# 0A4H8ACALL DEL1mS9MOV P2,#0FFH10MOV P1,#0B0H11ACALL DEL1mS12MOV P1,#0FFH13MOV P0,#99H14ACALL DEL1mS15MOV P0,#0FFH16AJMP MAIN17DEL1mS:MOV R6,#02H18DEL1:MOV R7,#0FFH19DJNZ R7,$20DJNZ R6,DEL121RET22 END编译通过后,将S16-3文件夹中的hex文件烧录到89C51芯片中,将芯片插入到LED数码管输出试验板上,通电运行。可看到四个(个、十、百、千位)数码管同时稳定地显示1234四个字,没有闪烁感。这次尽管也采用了分时动态扫描的方法依次点亮四位数码管,但由于每位数码管点亮的时间仅为1mS,扫描频率较高,故显示效果十分理想。16.5.2 程序分析解释序号1:程序开始。序号2:跳转到MAIN主程序处。序号3:主程序MAIN从地址0030H开始。序号4:将立即数F9H送P3口,使千位数码管显示1。序号5:调用1毫秒延时子程序,维持千位数码管点亮。序号6:将立即数FFH送P3口,熄灭千位数码管。序号7:将立即数A4H送P2口,使百位数码管显示2。序号8:调用1毫秒延时子程序,维持百位数码管点亮。序号9:将立即数FFH送P2口,熄灭百位数码管。序号10:将立即数B0H送P1口,使十位数码管显示3。序号11:调用1毫秒延时子程序,维持十位数码管点亮。序号12:将立即数FFH送P1口,熄灭十位数码管。序号13:将立即数99H送P0口,使个位数码管显示4。序号14:调用1毫秒延时子程序,维持个位数码管点亮。序号15:将立即数FFH送P0口,熄灭个位数码管。序号16:跳转到MAIN处循环运行。序号1721:1毫秒延时子程序。序号22:程序结束。16.6 做一个综合实验,让LED数码管输出试验板成为一个实时时钟16.6.1 实现方法设计一个电子钟程序的基本思路为:让定时器T0作为时钟基准,每50mS产生一次定时中断。此外,我们还需建立50mS计数单元、秒计数单元、分计数单元、时计数单元各一个。每次定时中断时50mS计数单元加1。还要建立一个走时转换子程序,其工作是判断走时,50mS计数单元满20时令秒计数单元加1,秒计数单元满60时令分计数单元加1,分计数单元满60时令时计数单元加1,时计数单元满24时令时、分计数单元清零。另外分别建立一个数码管显示子程序及一个按键判断子程序,用于显示及调整时间。主程序的工作是:先判有无键按下?若有则调用按键判断子程序,随后分别调用走时转换子程序、数码管显示子程序,反复执行。16.6.2 源程序文件在我的文档中建立一个文件目录(S16-4),然后建立一个S16-4.uv2的工程项目,最后建立源程序文件(S16-4.asm)。输入下面的程序:序号: 1FLAG BIT 25H.02DI_DA DATA 20H3SEC DATA 21H4MIN DATA 22H5HOUR DATA 23H;*6ORG 0000H7LJMP MAIN8ORG 000BH9LJMP CLOCK10ORG 030H11MAIN:MOV TMOD,#01H12MOV TL0,#0B0H13MOV TH0,#3CH14SETB ET015SETB TR016MOV DI_DA,#00H17SETB EA18BEGIN:MOV P3,#7FH19MOV A,P320CJNE A,#7FH,NEXT21SETB P3.722ACALL CONV23ACALL DIS24JB FLAG,FLAG_SEC25SETB P2.726AJMP BEGIN27FLAG_SEC:CLR P2.728AJMP BEGIN29NEXT:ACALL KEY30 AJMP BEGIN;*31KEY:ACALL DEL10MS32JB P3.0,HOUR_KEY33MIN_ADJ:CLR C34MOV A,MIN35INC A36DA A37CJNE A,#60H,X138CLR A39X1:MOV MIN,A40ACALL DIS41ACALL DEL200MS42MOV P3,#7FH43JNB P3.0,MIN_ADJ44HOUR_KEY:JB P3.1,X245HOUR_ADJ:CLR C46MOV A,HOUR47INC A48DA A49CJNE A,#24H,X350CLR A51X3:MOV HOUR,A52ACALL DIS53ACALL DEL200MS54X2:MOV P3,#7FH55JNB P3.1,HOUR_ADJ56SETB P3.757 RET;*58CONV:MOV A,DI_DA59CJNE A,#0AH,F160SETB FLAG61F1:CJNE A,#14H,DONE62CLR FLAG63MOV DI_DA,#00H64MOV A,SEC65ADD A,#01H66DA A67MOV SEC,A68CJNE A,#60H,DONE69MOV SEC,#00H70MOV A,MIN71ADD A,#01H72DA A73MOV MIN,A74CJNE A,#60H,DONE75MOV MIN,#00H76MOV A,HOUR77ADD A,#01H78DA A79MOV HOUR,A80CJNE A,#24H,DONE81MOV HOUR,#00H82DONE:RET;*83DIS:MOV A,MIN84ANL A,#0FH85MOV DPTR,#TAB86MOVC A,A+DPTR87MOV P0,A88ACALL DEL1MS89MOV A,MIN90SWAP A91ANL A,#0FH92MOVC A,A+DPTR93MOV P1,A94ACALL DEL1MS95MOV A,HOUR96ANL A,#0FH97MOVC A,A+DPTR98MOV P2,A99ACALL DEL1MS100MOV A,HOUR101SWAP A102ANL A,#0FH103MOVC A,A+DPTR104MOV P3,A105ACALL DEL1MS106 RET;*107CLOCK:MOV TL0,#0B0H108MOV TH0,#3CH109INC DI_DA110 RETI;*111DEL1MS:MOV R6,#02H112DEL1:MOV R7,#0FFH113DJNZ R7,$114DJNZ R6,DEL1115RET116DEL10MS:MOV R5,#10H117TX1:MOV R4,#0FFH118DJNZ R4,$119DJNZ R5,TX1120RET121DEL200MS:MOV R3,#14H122TX2:ACALL DEL10MS123DJNZ R3,TX2124RET;*125TAB:DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H126DB 080H,090H,088H,083H,0C6H,0A1H,086H,08EH127END编译通过后,将S16-4文件夹中的hex文件烧录到89C51芯片中,将芯片插入到LED数码管输出试验板上,通电运行。可看到四个(个、十、百、千位)数码管显示0000,同时百位数码管的小数点每秒闪动一次(作秒点显示)。按下3#键(S9),可调整个位、十位显示的“分”;按下6#键(S10),可调整百位、千位显示的“时”。16.6.3 程序分析解释序号1:定义25H.0为秒点闪烁的位标志FLAG。序号2:定义20H单元为50mS计数单元DI_DA。序号3:定义21H单元为秒计数单元SEC。序号4:定义22H单元为分计数单元MIN。序号5:定义23H单元为时计数单元HOUR。序号6:程序从地址0000H开始。序号7:跳转到MAIN处。序号8:定时器T0中断入口地址000BH。序号9:跳转到CLOCK处。序号10:主程序从地址0030H开始。序号11:主程序开始。置定时器T0方式1。序号12:定时器T0装入50mS初值。序号13:定时器T0装入50mS初值。序号14:开放T0中断。序号15:启动定时器T0。序号16:清除50mS计数单元。序号17:开放总中断。序号18:向P3口送立即数7FH,即P3.7为低电平。序号19:读取P3口状态至累加器A。序号20:若A中内容不为7FH,转NEXT;否则顺序执行。序号21:置P3.7为高电平。序号22:调用走时转换子程序。序号23:调用数码管显示子程序。序号24:判秒点标志FLAG,若FLAG为1,转FLAG_SEC;若FLAG为0,顺序执行。序号25:置P2.7为高电平,熄灭秒点。序号26:跳转到BEGIN处循环执行。序号27:置P2.7为低电平,点亮秒点。序号28:跳转到BEGIN处循环执行。序号29:调用按键判断子程序。序号30:跳转到BEGIN处循环执行。序号31:按键判断子程序开始。调用10mS延时子程序。序号32:若P3.0为0(即按下3#键),顺序执行;否则跳转到HOUR_KEY处。序号33:清除进位CY。序号34:将分计数单元MIN送累加器A。序号35:累加器A加1。序号36:2-10进制调整。序号37:若A不为60H,跳转到X1处;若A为60H,则顺序执行。序号38:清除累加器A。序号39:调整后的累加器A内容送回分计数单元MIN。序号40:调用显示子程序。序号41:调用200mS延时子程序。序号42:向P3口送立即数7FH,即P3.7为低电平。序号43:若P3.0为0(即仍按下3#键),跳转到MIN_ADJ处继续进行“分”调整;否则顺序执行。序号44:若P3.1为0顺序执行;否则跳转到X2处。序号45:清除进位CY。序号46:将时计数单元HOUR送累加器A。序号47:累加器A加1。序号48:2-10进制调整。序号49:若A不为24H,跳转到X3处;若A为24H,则顺序执行。序号50:清除累加器A。序号51:调整后的累加器A内容送回时计数单元HOUR。序号52:调用显示子程序。序号53:调用200mS延时子程序。序号54:向P3口送立即数7FH,即P3.7为低电平。序号55:若P3.1为0(即仍按下6#键),跳转到HOUR_ADJ处继续进行“时”调整;否则顺序执行。序号56:置P3.7为高电平。序号57:按键判断子程序返回。序号58:走时转换子程序开始。50mS计数单元内容送累加器A。序号59:若A为0AH(十进制为10),顺序执行;否则跳转到F

温馨提示

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

评论

0/150

提交评论