3、显示器的接口方法与接口电路
LED数码显示器的接口方法 单片机与LED数码显示器有以硬件为主和以软件为主的两种接口方法。
从图上可看出,在数据总和LED显示器之间,必须有锁存器或I/O接口电路,此外还应有专用的译码器/驱动器,通过译码器把1位十六进制数(4位二进制数)或BCD码译码为相应的显示段码,然后由驱动器提供足够的功率去驱动发光二极管。 4、以软件为主的接口方法 这种接口方法的电路如图所示,它是以软件查表代替硬件,不但省去了译码器,而且还能显示更多的字符。但是驱动器是必不可少的,因为仅靠接口提供不了较大的电流供LED显示器使用。 实际使用的LED数码显示器位数较多,为了简化线路、降低成本,大多采用以软件为主的接口方法。对于多位LED数码显示器,通常采用动态扫描显示方法,即主个地循环地点亮各位显示器。这样虽然任一时刻只有1位显示器被点亮,但是由于人眼具有视觉残留效应,看起来与全部显示器持续点亮的效果基本一样(在亮度上要有差别)。 为了实现LED显示器的动态扫描显示,除了要给显示段码之外,还要对显示器进行位的控制。即通常所说的'段控 `和'位控'。因此对于多位LED数码显示器的接口电路来说,需要有两个输出口,其中一个用于输出显示段码;另一个用于输出位控信号。'位控'实际上就是对LED显示器的公共端进行控制,位控信号的数目与显示器的位数相同。 8051的P1口为输出口(段控口),用以输出8位显示段码(包括小数点)。考虑到LED显示器的段电流为8mA左右,不能用8051的P1口直接驱动,因此要加1级电流驱动。电流驱动器既可以用反相的,也可以用同相的。反相电流驱动器经常使用7406;同相电流驱动器则常用7407或74LS244。P3口作为输出口(位控口),以P3.1、P3.2 、P3.3 输出位控信号。由于位控信号控制的是LED显示器的公共端,驱动电流较大,8段全亮时需约40--60mA。这里需要说明两点:第一,当LED显示器的段码与位控信号均采用反相驱动以后,其控制规律也要颠倒过来,即共阳极的LED显示器要按共阴极来控制;而共阴极的LED显示器则要按共阳极来控制。当然,也可以采用1个同相和1个反相驱动器,其控制规律也应作相应的变动。第二, LED显示器的段码是并联连接的,即在同一时刻,6个数码管的显示段码是完全一样的,这点需要特别加以注意。 5、 LED数码显示器的显示方法 对于多位数码显示器来说,为了简化线路、降低成本,往往采用以软件为主的接口方法,即不使用专门的硬件译码器,而采用软件程序进行译码。如前所述,由于各位数码管的显示段码是互相并联的,因此在同一时刻只能显示同一种字符。对于这种接口电路来就,其显示方法有静态显示和动态显示两种。 本设计采用的是动态显示, 如果要在同一时刻显示不同的字符,从电路上看,这是办不到的。因此只能利用人眼对视觉的残留效应,采用动态扫描显示的方法, 逐个地循环点亮各个数码管,每位显示1ms左右,使人看起来就好像在同时显示不同的字符一样。 在进行动态扫描显示时,往往事先并不知道应显示什么内容,这样也就无从选择被显示字符的显示段码。为此,一般采用查表的方法,由待显示的字符通过查表得到其对应的显示段码。 2.6系统运行与精度调试 将调试好程序的目标代码,通过编程器写入AT89C51中,并将AT89C51插入用户板上,接通电源,显示器上应显示“000”这3个数字。然后将温度探头放在要测试温度的环境中,观察数字温度计与传统的温度计是否测量数据是一致的,一致则说明系统运行正常。 在系统的硬件和软件分别调试成功后,可以进行系统的整体调试。先用仿真器进行调试,插好仿真头,接好电源,启动仿真器,将本数字温度计的系统软件装入仿真器中,并运行,调试系统的整体配合的正确性,直到满意为止。 下图是AD590的封装形式和用于测量热力学温度的基本应用电路。因为流过AD590的电流与热力学温度成正比,当电阻R1和电位器R2的电阻之和为1k时,输出电压VO随温度的变化为1mV/K。但由于AD590的增益有偏差,电阻也有误差,因此应对电路进行调整。调整的方法为:把AD590放于冰水混合物中,调整电位器R2,使VO=273.2mV。或在室温下(25℃)条件下调整电位器,使VO=273.2+25=298.2(mV)。但这样调整只可保证在0℃或25℃附近有较高精度。 软件的设计
程序的设计是先利用AD590温度传感器将稳定的变化转化为电压的变化,然后送给ADC0809,在通过ADC0809将模拟信号转化为数字信号在送给AT89C51,通过AT89C51进行数据处理,然后推动数码管来显示。 3.1软件设计的总框图
程序的匡图如下;
将70H~78H内存循环清,P0、P1、P3端口置1,清累加器A,清P2口,转换值存放首址,转换8次控制 , 启动测试,等A/D转换结束信号后转MOVD ,P3.7为0等待,数据处理和显示 8090输出允许,将A/D转换值移入A,放入内存单元,关闭8090输出,内存地址加1,通道地址移入A,通道地址加1,通道地址送8090,清进位标志,通道地址不等于8转TESTCONT再测试,通道地址小于8转TESTCONT再测试大于或等于8,A/D转换结束 ,取A/D转换数据结束,跳至WAIT等待A/D转 换结束信号
3.2 A/D转换的框图
A/D转换数据框图;
3.3显示电路的框图
LED共阳显示子程序;
赋显示数据单元首址,扫描字,关显示,取扫描字,开显示,取显示数据,取段码表首 , 查显示数据对应段码,址段码放入P1口,显示1MS,指向下一地址,取P3口扫描字,四位显示完转ENDOUT结束,扫描字循环左移,扫描字放入R5暂存,显示暂停,转PLAY循环,显示结束,端口置1
3.4 CPU数据处理的框图
AT89C51进行数据的处理;
显示数据初址(70H-77H),显示通道路数(0-7),显示数据转为三位十进制BCD码存入,7AH、79H、78H显示单元内 , 显示数据除100,商入7AH, A放入数10,余数与数10交换,余数除10 ,商入79H,余数入78H,每路显示时间控制 4MS*255,调四位LED显示程序,每路显示时间控制,显示下一路,通道显示数值加1, 8路显示未完转DISLOOP1再循环
;* 主程序和中断程序入口 * ORG 0000H ;程序执行开始地址 LJMP START ;跳至START执行 ORG 0003H ;外中断0中断入口地址 RETI ;中断返回(不开中断) ORG 000BH ;定时器T0中断入口地址 RETI ;中断返回(不开中断) ORG 0013H ;外中断1中断入口地址 RETI ;中断返回(不开中断) ORG 001BH ;定时器T1中断入口地址 RETI ;中断返回(不开中断) ORG 0023H ;串行口中断入口地址 RETI ;中断返回(不开中断) ORG 002BH ;定时器T2中断入口地址 RETI ;中断返回(不开中断) ;* 初始化程序中的各变量 * CLEARMEMIO: CLR A ; MOV P2,A ;P2口置0 MOV R0,#70H ;内存循环清0(70H-7BH) MOV R2,#0CH ; LOOPMEM: MOV @R0,A ; INC R0 ; DJNZ R2,LOOPMEM ; MOV A,#0FFH ; MOV P0,A ;P0、P1、P3端口置1 MOV P1,A ; MOV P3,A ; RET ;子程序返回 ;* 主 程 序 * START: LCALL CLEARMEMIO ;初始化 MAIN: LCALL DISPLAY ;显示数据一次 LCALL TEST ;测量一次 AJMP MAIN ;返回MAIN循环 NOP ;PC值出错处理 NOP ;空操作 NOP ;空操作 LJMP START ;重新复位起动 DISPLAY: MOV R3,#08H ;8路信号循环显示控制 MOV R0,#70H ;显示数据初址(70H-77H) MOV 7BH,#00H ;显示通道路数(0-7) DISLOOP1: MOV A,@R0 ;显示数据转为三位十进制BCD码存入 MOV B,#100 ;7AH、79H、78H显示单元内 DIV AB ;显示数据除100 MOV 7AH,A ;商入7AH MOV A,#10 ;A放入数10 XCH A,B ;余数与数10交换 DIV AB ;余数除10 MOV 79H,A ;商入79H MOV 78H,B ;余数入78H MOV R2,#0FFH ;每路显示时间控制 4MS*255 DISLOOP2: LCALL DISP ;调四位LED显示程序 DJNZ R2,DISLOOP2 ;每路显示时间控制 INC R0 ;显示下一路 INC 7BH ;通道显示数值加1 DJNZ R3,DISLOOP1 ;8路显示未完转DISLOOP1再循环 RET ;8路显示完子程序结束 ; LED共阳显示子程序,显示内容在78H-7BH,数据在P1输出,列扫描在P3.0-P3.3口 DISP: MOV R1,#78H ;赋显示数据单元首址 MOV R5,#0FEH ;扫描字 PLAY: MOV P1,#0FFH ;关显示 MOV A,R5 ;取扫描字 ANL P3,A ;开显示 MOV A,@R1 ;取显示数据 MOV DPTR,#TAB ;取段码表首址 MOVC A,@A+DPTR ;查显示数据对应段码 MOV P1,A ;段码放入P1口 LCALL DL1MS ;显示1MS INC R1 ;指向下一地址 MOV A,P3 ;取P3口扫描字 JNB ACC.3,ENDOUT ;四位显示完转ENDOUT结束 RL A ;扫描字循环左移 MOV R5,A ;扫描字放入R5暂存 MOV P3,#0FFH ;显示暂停 AJMP PLAY ;转PLAY循环 ENDOUT: MOV P3,#0FFH ;显示结束,端口置1 MOV P1,#0FFH ; RET ;子程序返回 ;LED数码显示管用共阳段码表,分别对应0-9,最后一个是"熄灭符" TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH ; 1MS延时子程序,LED显示用 DL1MS: MOV R6,#14H ; DL1: MOV R7,#19H DL2: DJNZ R7,DL2 DJNZ R6,DL1 RET ;模数转换测量子程序 TEST: CLR A ;清累加器A MOV P2,A ;清P2口 MOV R0,#70H ;转换值存放首址 MOV R7,#08H ;转换8次控制 LCALL TESTART ;启动测试 WAIT: JB P3.7,MOVD ;等A/D转换结束信号后转MOVD AJMP WAIT ;P3.7为0等待 TESTART: SETB P2.3 ;锁存测试通道地址 NOP ; 延时2微秒 NOP ; CLR P2.3 ;测试通道地址锁存完毕 SETB P2.4 ; 启动测试,发开始脉冲 NOP ; 延时2微秒 NOP ; CLR P2.4 ; 发启动脉冲完毕 NOP ;延时4微秒 NOP ; NOP ; NOP ; RET ;子程序调用结束 ; 取A/D转换数据至70H-77H内存单元 MOVD: SETB P2.5 ;8090输出允许 MOV A,P0 ;将A/D转换值移入A MOV @R0,A ;放入内存单元 CLR P2.5 ;关闭8090输出 INC R0 ;内存地址加1 MOV A,P2 ;通道地址移入A INC A ;通道地址加1 MOV P2,A ; 通道地址送8090 CLR C ;清进位标志 CJNE A,#08H,TESTCON ; 通道地址不等于8转TESTCONT再测试 JC TESTCON ; 通道地址小于8转TESTCONT再测试 CLR A ; 大于或等于8,A/D转换结 MOV P2,A ; P2口置0 MOV A,#0FFH ; MOV P0,A ; P0口置1 MOV P1,A ; P1口置1 MOV P3,A ; P3口置1 RET ; 取A/D转换数据结束 TESTCON: LCALL TESTART ; 再发测试启动脉冲 LJMP WAIT ; 跳至WAIT等待A/D转换结束信号 END ; 程序结束
元件清单;
名称 规格 数量 备注 单片机 AT89C51 1 DIP40 A/D转换器 ADC0809 1 DIP28 温度探头 AD590 1 DIP8 D触发器 74LS74 1 DIP14 运放放大器 LM741 3 DIP8 数码管 共阳 3 八段 晶振 6MHZ 1 三极管 PNP 3 9012 电阻 10Ω 4 电阻 20Ω 1 电阻 470Ω 8 电阻 1K 2 电阻 2K 1 电阻 4.7K 3 电阻 5K 1 电阻 9K 1 电阻 50K 1 开关 1 电容 30P 2 瓷片
首页 上一页 1 2 3 4 5 下一页 尾页 4/5/5 相关论文
首页 上一页 1 2 3 4 5 下一页 尾页 4/5/5