《单片机技术及应用项目化教程》课件第5章_第1页
《单片机技术及应用项目化教程》课件第5章_第2页
《单片机技术及应用项目化教程》课件第5章_第3页
《单片机技术及应用项目化教程》课件第5章_第4页
《单片机技术及应用项目化教程》课件第5章_第5页
已阅读5页,还剩119页未读 继续免费阅读

下载本文档

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

文档简介

项目五模/数转换接口及应用

任务1数字电压表的设计

任务2简易数控电源任务1数字电压表的设计

知识目标:了解和掌握单片机的外围基本芯片的搭接,掌握转换模块、数据处理模块及显示模块。

能力目标:A/D转换采用ADC0808对输入的模拟信号进行转换,控制核心AT89C51再对转换的结果进行运算处理,最后驱动输出装置LED显示数字电压信号。

1.任务要求

(1)以MCS-51系列单片机为核心器件,组成一个简单的直流数字电压表。

(2)采用一路模拟量输入,能够测量0~5V之间的直流电压值。

(3)电压显示用4位一体的LED数码管显示,至少能够显示两位小数。

(4)尽量使用较少的元器件。

2.硬件电路的设计与制作

1)设计方案

硬件电路设计由6个部分组成:A/D转换电路、AT89C51单片机、LED显示系统、时钟电路、复位电路以及测量电压输入电路。硬件电路设计框图如图5-1所示。图5-1数字电压表系统硬件设计框图复位电路设计:单片机在启动运行时都需要复位,使CPU和系统中的其他部件都处于一个确定的初始状态,并从这个状态开始工作。MCS-51单片机有一个复位引脚RST,采用施密特触发输入。当振荡器起振后,只要该引脚上出现2个机器周期以上的高电平即可确保使器件复位。复位完成后,如果RST端继续保持高电平,MCS-51就一直处于复位状态,只有RST恢复低电平后,单片机才能进入其他工作状态。单片机的复位方式有上电自动复位和手动复位两种,图5-2是51系列单片机系统常用的上电复位和手动复位组合电路,只要Vcc上升时间不超过1ms,它们都能很好的工作。时钟电路设计:电路中的器件选择可以通过计算和实验确定,也可以参考一些典型电路的参数。如图5-3所示时钟电路中,电容器C1和C2对振荡频率有微调作用,通常的取值范围是30pF ± 10pF,在这个系统中选择了33pF;石英晶振选择范围最高可选24MHz,它决定了单片机电路产生的时钟信号振荡频率,在本系统中选择的是12MHz,因而时钟信号的振荡频率为12MHz。图5-2复位电路图5-3时钟电路

2)硬件电路的总体设计

数字电压表硬件电路总体设计如图5-4所示。此电路的工作原理是:+5V模拟电压信号通过变阻器VR1分压后,由ADC0808的IN0通道进入(由于使用的IN0通道,所以ADDA、ADDB、ADDC均接低电平);经过模/数转换后,产生相应的数字量经过其输出通道D0~D7传送给AT89C51芯片的P1口,AT89C51负责把接收到的数字量经过数据处理,产生正确的7段数码管的显示段码传送给四位LED,同时它还通过其四位I/O口P2.0、P2.1、P2.2、P2.3产生位选信号控制数码管的亮灭。此外,AT89C51还控制ADC0808的工作。其中,单片机AT89C51通过定时器中断从P2.4输出方波接到ADC0808的CLOCK,P2.6发正脉冲启动A/D转换,P2.5检测A/D转换是否完成,转换完成后,P2.7置高,从P1口读取转换结果送给LED显示出来。图5-4硬件电路总体设计简易数字直流电压表的硬件电路已经设计完成,就可以选取相应的芯片和元器件,利用Proteus软件绘制出硬件的原理,并仔细地检查修改,直至形成完善的硬件原理图。但要真正实现电路对电压的测量和显示的功能,还需要有相应的软件配合,才能达到设计要求。

3.应用程序设计

根据模块的划分原则,将该程序划分为初始化模块、A/D转换子程序和显示子程序,这三个程序模块构成了整个系统软件的主程序,如图5-5所示。图5-5数字式直流电压表主程序框图

1)初始化程序

所谓初始化,是对将要用到的MCS-51系列单片机内部部件或扩展芯片进行初始工作状态设定,初始化子程序的主要工作是设置定时器的工作模式、初值预置、开中断和打开定时器等。

2) A/D转换子程序

A/D转换子程序用来控制对输入的模块电压信号的采集测量,并将对应的数值存入相应的内存单元,其转换流程图如图5-6所示。图5-6A/D转换流程图

3)显示子程序

显示子程序采用动态扫描实现四位数码管的数值显示,在采用动态扫描显示方式时,要使得LED显示的比较均匀,又有足够的亮度,需要设置适当的扫描频率,当扫描频率在70Hz左右时,能够产生比较好的显示效果,一般可以采用间隔10ms对LED进行动态扫描一次,每一位LED的显示时间为1ms。

在本设计中,为了简化硬件设计,主要采用软件定时的方式,即用定时器0溢出中断功能实现11μs定时,通过软件延时程序来实现5ms的延时。

4.系统调试

软件调试的主要任务是排查错误,错误主要包括逻辑和功能错误,这些错误有些是显性的,而有些是隐性的,可以通过仿真开发系统发现并逐步改正。Proteus软件可以对基于微控制器的设计连同所有的周围电子器件一起仿真,用户甚至可以实时采用诸如LED/LCD、键盘、RS232终端等动态外设模型来对设计进行交互仿真。Proteus支持的微处理芯片包括8051系列、AVR系列、PIC系列、HC11系列及Z80系列等。Proteus可以完成单片机系统原理图电路绘制、PCB设计,更为显著的特点是可以与μVisions3IDE工具软件结合进行编程仿真调试[8]。本系统的调试主要以软件为主,其中,系统电路图的绘制和仿真采用的是Proteus软件,而程序方面,采用的是汇编语言,用Keil软件产生、Hex文件并通过烧录软件将程序写入单片机。

1)显示结果分析

(1)当IN0口输入电压值为0V时,显示结果如图5-7所示,测量误差为0V。

(2)当IN0输入电压值为1.50V时,显示结果如图5-8所示,测量误差为0.01V。

(3)当IN0口输入电压值为3.50V时,显示结果如图5-9所示,测量误差为0V。图5-7输入电压为0V时LED的显示结果图5-8输入电压为1.50V时LED的显示结果图5-9输入电压为3.50V时LED的显示结果

2)误差分析

通过以上仿真测量结果可得到简易数字电压表与“标准”数字电压表对比测试表,如表5-1所示。

由于单片机AT89C51为8位处理器,当输入电压为5.00V时,ADC0808输出数据值为255(FFH),因此单片机最高的数值分辨率为0.0196V(5/255)。这就决定了电压表的最高分辨率只能到0.0196V,从上表可看出,测试电压一般以0.01V的幅度变化。表5-1简易数字电压表与“标准”数字电压表对比测试表

从表5-1可以看出,简易数字电压表测得的值基本上比标准电压值偏大0~0.01V,这可以通过校正ADC0808的基准电压来解决。因为该电压表设计时直接用5V的供电电源作为电压,所以电压可能有偏差。当要测量大于5V的电压时,可在输入口使用分压电阻,而程序中只要将计算程序的除数进行调整就可以了。

程序清单:

ORG 0000H

SJMP MAIN

ORG 0003H

LJMP PINT0

MAIN: MOV 50H,#19H

MOV 54H,#78H

MOV DPTR,#7FF8H

MOV 51H,DPH

MOV 52H,DPL

MOV R0,#04H

MOV 53H,#00H

MOV R7,#00H

SETB EA

SETB IT0

SETB EX0

L4: MOV R1,#00H;R1存放十六进制转换成十进制后的低两位

MOV R2,#00H;R2存放十六进制转换成十进制后的高两位

MOV R3,#0FFH ;循环显示十进制数

MOV R4,#00H ;存放A/D转换后的十六进制数

MOV R5,#00H ;存放0.5相加后的数

MOVX @DPTR,A ;开始A/D转换

LCALL DELAY ;调用延时大于A/D转换的时间

MOVX A,@DPTR ;取A/D转换后的十六进制数

INC DPTR ;A/D转换芯片的地址加一

PUSH DPL ;压入堆栈

PUSH DPH

DEC R0 ;4路转换的次数减一

JZ SB2 ;判断是否是0V

MOV R4,A

L1: MOV A,R1;进行十六进制到十进制的调整

ADD A,50H ;每次加19

DA A

MOV R1,A

JC L2 ;如果溢出则跳转到L2

MOV A,R5 ;进行0.5V相加

ADD A,54H

DAA

MOV R5,A

JC L3;如果溢出则跳转到L3

SB1: DJNZ R4,L1;判断十六进制数是否转换完成,如果没有则循环

MOV A,R5

SWAP A

ANL A,#0FH

MOV B,R1

ADD A,B

DA A

MOV R1,A

SB2: LCALL DISP

LCALL DJW

DJNZ R3,SB2

POP DPH

POP DPL

MOV A,53H

INC A

MOV 53H,A

CJNE R0,#00H,L4

LJMP MAIN

L2:CLR C

MOV A,R2

ADD A,#01H

DAA

MOV R2,A

LJMP SB1

L3:CLR C ;0.5V相加溢出后进位

MOV A,R1

ADD A,#01H

DA A

MOV R1,A

LJMP SB1

DISP: MOV A,R1 ;显示电压子程序

SWAP A

ANL A,#0FH

MOV DPTR,#TAB1

MOVC A,@A+DPTR

CLR P3.0

MOV P1,A

LCALL DELAY

SETB P3.0

MOV A,R2

ANL A,#0FH

MOV DPTR,#TAB1

MOVC A,@A+DPTR

CLR P3.1

MOV P1,A

LCALL DELAY

SETB P3.1

MOV A,R2

SWAP A

ANL A,#0FH

MOV DPTR,#TAB2

MOVC A,@A+DPTR

CLR P3.4

MOV P1,A

LCALL DELAY

SETB P3.4

RET

DJW: MOV A,53H ;显示第几路转换电压子程序

MOV DPTR,#TAB1

MOVC A,@A+DPTR

CLR P3.5

MOV P1,A

LCALL DELAY

SETB P3.5

RET

INTV: PUSH ACC ;只显示其中一路中断

PUSH 53H

MOV 53H,#00H

CX2: MOV R1,#00H

MOV R2,#00H

MOV R3,#0FFH

MOV R4,#00H

MOV DPH,51H

MOV DPL,52H

MOVX @DPTR,A

LCALL DELAY

MOVX A,@DPTR

MOV R4,A

JZ SB22

L11: MOV A,R1

ADD A,50H

DA A

MOV R1,A

JC L22

MOV A,R5;进行0.5V相加

ADD A,54H

DA A

MOV R5,A

JC L33

SB11: DJNZ R4,L11

MOV A,R5

SWAP A

ANL A,#0FH

MOV B,R1

ADD A,B

DA A

MOV R1,A

SB22: LCALL DISP

LCALL DJW

JNB P3.3,EXIT

DJNZ R3,SB22

JNB P3.2,CX1

LJMP CX2

L22: CLR C

MOV A,R2

ADD A,#01H

DA A

MOV R2,A

LJMP SB11

L33: CLR C

MOV A,R1

ADD A,#01H

DA A

MOV R1,A

LJMP SB11

CX1: INC R7

MOV A,53H

INC A

MOV 53H,A

MOV DPH,51H

MOV DPL,52H

INC DPTR

MOV 51H,DPH

MOV 52H,DPL

CJNE R7,#04H,CX2

MOV R7,#00H

MOV 53H,#01H

MOV DPTR,#7FF8H

MOV 51H,DPH

MOV 52H,DPL

LJMP CX2

EXIT: POP 53H

POP ACC

RETI

DELAY: MOV R6,#1H ;延时子程序

D1: MOV R5,#50H

D2: NOP

NOP

DJNZ R5,D2

DJNZ R6,D1

RET

TAB1: DB3FH,06H,5BH,4FH,66H ;码表

DB6DH,7DH,07H,7FH,6FH

TAB2: DB0BFH,86H,0DBH,0CFH,0E6H;小数点的段码表

DB0EDH,0FDH,87H,0FFH,0EFH

END

5.知识链接(本任务涉及到的新知识介绍)

1)

ADC0808的引脚及功能介绍

(1)芯片概述:ADC0808是一种典型的A/D转换器。它是由8位A/D转换器、一个8路模拟量开关、8位模拟量地址锁存译码器和一个三态数据输出锁存器组成;+5 V单电源供电,转化时间在100 μs左右;内部没有时钟电路,故需外部提供时钟信号。芯片模型如图5-10所示。

(2)引脚简介:

①IN0~IN7——8路模拟量输入端。

②D0~D7——8位数字量输出端口。图5-10ADC0808芯片模型③START——A/D转换启动信号输入端。

④ALE——地址锁存允许信号,高电平有效。

⑤EOC——输出允许控制信号,高电平有效。

⑥OE——输出允许控制信号,高电平有效。

⑦CLOCK——时钟信号输入端。

⑧A、B、C——转换通道地址,控制8路模拟通道的切换。A、B、C分别与地址线或数据线相连,三位编码对应8个通道地址端口,A、B、C = 000~111分别对应IN0~IN7通道的地址端口。

(3) ADC0808的转换原理:ADC0808采用逐次比较的方法完成A/D转换,由单一的+5 V电源供电。片内带有锁存功能的8路选1的模拟开关,由A、B、C的编码来决定所选的通道。ADC0808完成一次转换需100μs左右,它具有输出TTL三态锁存缓冲器,可直接连接到AT89C51的数据总线上。通过适当的外接电路,ADC0808可对0~5V的模拟信号进行转换。

2) 74LS373芯片的引脚及功能

(1)芯片概述:74LS373是一种带有三态门的8D锁存器,其在本设计中是锁存P0口的低8位地址,芯片模型如图5-11所示。

图5-1174LS373芯片模型

(2)引脚介绍:

①D0~D7——8位数据输入线。

②Q0~Q7——8位数据输出线。

③G——数据输入锁存选通信号。当加到该引脚的信号为高电平时,外部数据选通到内部锁存器,负跳变时,数据锁存到锁存器中。

④——数据输出允许信号,低电平有效。当该信号为低电平时,三态门打开,锁存器中的数据输出到数据输出线上,当该信号为高电平时,输出线为高阻态。

3) LED数码管的控制显示

(1) LED数码管的模型如图5-12所示。

(2) LED数码管的接口简介:LED的段码端口A~G分别接至AT89C51的P1.0~P1.7口,位选端1~4分别接至P3.5、P3.4、P3.1、P3.0,如图5-13所示。图5-12LED数码管模型图5-13LED与AT89C51的硬件连线

6.任务总结

基于单片机的简易数字电压表基本完成。但设计中的不足之处仍然存在。本次设计用Proteus实现了仿真。在电路设计过程中,对单片机的使用等都有了新的认识。通过这次设计,更进一步的学习了Proteus和Keil软件的使用方法,掌握了从系统的需要、方案的设计、功能模块的划分、原理图的设计和电路图的仿真的设计流程。

本次设计主要实现了简易数字电压表测量1路电压的功能,详细说明了从原理图的设计、电路图的仿真再到软件的调试。设计中除了单片机还用到了模/数转换芯片ADC0808,设计基本上达到了功能要求。

任务2简易数控电源

知识目标:了解和掌握单片机的外围基本芯片的搭接,掌握数/模转换模块、数据处理模块及显示模块。

能力目标: D/A转换采用ADC0832对输出的数字量信号进行转换,学习OP-07和LF356运算放大器,TIP122和TIP127构成闭环推挽输出电路的运用。

1.任务要求

(1)以MCS-51系列单片机为核心器件,组成一个简单的数控电源。

(2)采用1路数字量输出,能够测量0~10V之间的直流电压值。

(3)电压显示用4位一体的LED数码管显示,至少能够显示三位小数。

(4)尽量使用较少的元器件。

2.硬件电路的设计

本系统的硬件电路设计共包括三个模块:电源模块、数控模块、稳压输出模块。

1)电源模块

设计的芯片供电的电源电路如图5-14所示。电源部分输入220V/50Hz交流电,输出全机所需要的三种电压:+5V,+15V和-15V。+5V主要供数控部分和D/A转换芯片使用,电流最大约为400mA;+15V作为运放的正电源,同时也是稳压输出电路的主电源,最大电流约650mA;-15V作为运放的负电源,同时也给基准电压源(LM336,-5V)供电,该电流较小,不超过50mA。

电路中,7805和7815负载重,功耗大,应加装散热片。图5-14电源模块

(1) ±15V电源(0.6A):其电路如图5-14所示。

对于滤波电容的选择,要考虑三点:整流管的压降、7815/7915最小允许压降Ud、电网波动10%。由此而计算得允许纹波的峰-峰值:

按近似电流放电计算,并设⊙ = 00(通角),则

故选取滤波电容C = 2200μF/30V。

(2) +5V电源(1A):其电路如图2-1所示。计算允许的最大纹波峰-峰值:

故选取滤波电容C = 4700μF/16V。

2)数控模块

该模块主要由数字电路构成,完成键盘控制、预置拔码开关输入控制、电压控制字输出、数码管显示控制、电流过流保护等功能。由于控制功能多,选用89S52最小应用系统,如图5-15所示。

3)稳压输出模块

稳压输出模块原理图如图5-16所示。这部分将控制部分送来的电压控制字数据转换成稳定电压输出。它由数/模转换器(DAC0832)、集成运放OP-07、LF356、晶体三极管VT8(TIP122)、VT9(127)、VT10(9014)、VT11(9015)和基准电压源LM336-5组成。图5-15数控模块图5-16稳压输出模块

(1)主电路的工作原理及参数计算。

电压输出范围0~9.9V,步进0.1V,共有100种状态,8位字长的D/A转换器具有256种状态,能满足要求。设计中用两个电压控制代表0.1V,当电压控制字为0、2、4、…、198时,电源输出为0V、0.1V、0.2V、…、9.9V。电路选用的D/A转换芯片是DAC0832,该芯片价廉且精度较高。DAC0832属于电流输出型D/A,输出的电流随输入的电压控制字线性变化。若要得到电压,还需要外接一片运放来实现电流到电压的转换。该运放输入端的输入电流对转换精度影响很大,DAC0832输出的电流有几十微安的变化,若运放输入端的输入电流为0.1μA,如UA741的输入电流约为此值,且有一定变化,则会引入相当于1~2个电压控制字的误差,因此应选用高输入阻抗的运放,如JFETL输入的运放LF356(或OP07),它的输入电流可以忽略。DAC0832需外接基准电压,具有高稳定度和低通方波,故选取LM336-5作为基准源。当DAC0832采用5V基准电压时,D/A转换电路的满幅输出为5V(电压控制字为255)。由于实际用到的最大电压控制字为198,因此D/A部分最大输出电压为V将它写成通式,即

D/A转换部分输出电压Ui作为电源功放级的输入电压。功率级由U9(LF356)和VT8(TIP122)、VT9(TIP127)构成闭环推挽输出电路。该电路属于典型的电压串联负反馈电路。于是可以写出输出电压Uo与输入电压Ui的关系式,即将式代入得

当Ui = 3.882V、R2 = 10kΩ、R3 = 9.1kΩ、Vo = 9.9V时,由上述方程可求得

RP1 = 6.402kΩ

现选取RP1 = 10kΩ的精密多圈电位器。当CPU输入电压控制字(10111100)2 = (198)10时,Ui = 3.882V,调节RP1,使Uo = 9.9V。由图5-16所示,VT10、VT11构成过流保护电路。当正常工作时,VT10集成电路电压为-15V,使VT8截止,A点输出高电平,不触发中断。当输出电流过大(如Io>500mA)时,取样电阻R16上的压降大于0.75 V。调节RP3使VT7的UBE>0.6V时,VT7管会导通,VT7的等电极电平提高,于是VT8也导通,A点呈现低电平,触发9031中断,执行中断保护程序。

3.软件设计

1)主程序流程图

主程序流程图如图5-17所示。

2)电压步进增减流程图

电压步进增减流程图如图5-18所示。图5-17主程序流程图图5-18电压步进增减流程图程序清单:

PORT EQU0FE00H

PORTA EQU0FE01H

PORTB EQU0FE02H

PORTC EQU0FE03H

DISP0 EQU30H

DISP1 EQU31H

DISP2 EQU32H

DISP3 EQU33H

DISP4 EQU34H

DISP5 EQU35H

DISP6 EQU36H

DISP7 EQU37H

WEI EQU38H ;位码

DATB1 EQU27;乘0.54

DATB EQU50;除

PPPP EQU85

ADADH EQU0FB00H;AD地址

DAADH EQU ;DA地址

DBUFH EQU3CH;DA高四位

DBUFL EQU3DH;DA低八位

LENG1 EQU24;双字节二进制变BCD,40H~44H

LENG2 EQU4

LENG3 EQU3

NUMB1 EQU40H

NUMB2 EQU43H

ORG 0000H

AJMP MAIN

ORG 000BH

AJMP LED

ORG 0013H

AJMP KEYSCAN

MAIN: CLR P1.1

SETB P1.1

CLR P1.1

MOV R0,#00H

MOV R1,#00H

MOV SP,#50H

SETB PT0

MOV TMOD,#01H

MOV TH0,#0F8H ;2ms,显示扫描间隔

MOV TL0,#30H

SETB EA

SETB ET0

SETB TR0

SETB IT1

SETB EX1

CLR 00H ;电流千位合法位

CLR 01H ;显示闪烁

MOV 3EH,#00H ;显示数据

MOV 3FH,#00H

MOV 39H,#00H ;合字暂存

MOV 3CH,#00H

MOV 3DH,#00H

MOV 45H,#00H ;拆字暂存

SETB P1.0 ;过载

MOV DPTR,#PORT ;AB出C口入

MOV A,#03H

MOVX @DPTR,A

MOV DPTR,#PORTA ;列扫描输出低电平

MOV A,#0H

MOVX @DPTR,A

MOV 3AH,#00H

MOV 3BH,#00H

MOV 30H,#0

MOV 31H,#0

MOV 32H,#0

MOV 33H,#0

MOV 34H,#0

MOV 35H,#0

MOV 36H,#0

MOV 37H,#0

MOV WEI,#00H

SETB RS0

SETB RS1

MOV R0,#DISP0;显示指针,一定要用两组

MOV R6,#8 ;显示位数

MOV R1,#DISP0;键盘指针

MOV R7,#4 ;键盘位数

CLR RS0

CLR RS1

LOOP: ACALL LOOPP

ACALL DTOA

ACALL ATOD

AJMP LOOP

;******************电流设置子程序***************

LOOPP: MOV A,3AH

CJNE A,#15,PASS1

ACALL SETONE

PASS1: CJNE A,#10,PASS2

ACALL JIA

PASS2: CJNE A,#11,PASS3

ACALL JIAN

PASS3:

RET

;******************DA转换子程序*****************

DTOA: PUSH PSW

SETB RS0

MOV R2,3CH

MOV R3,3DH

;MOV R2,#00H

;MOV R3,#00H

CLR P3.5

SETB P3.5

SETB P2.3

CLR C

CLR A

MOV A,R2

MOV R7,#4

LOOP11: RLC A

DJNZ R7,LOOP11

MOV R7,#4

LOOP22: LCALL PRD

DJNZ R7,LOOP22

CLR C

CLR A

MOV A,R3

MOV R7,#8

LOOP34: LCALL PRD

DJNZ R7,LOOP34

CPL P2.3

POP PSW

RET

PRD: RLC A

MOV P3.0,C

SETB P3.1

CPL P3.1

RET

;*****************************AD采样子程序******************************

ATOD:

HUMID: MOV DPTR,#0FB00H

CLR A

MOVX @DPTR,A

WAIT: JNB P3.4,READ ;转换结束信号

SJMP WAIT

READ: MOVX A,@DPTR

MOV B,#8

MUL AB

MOV 40H,A ;低位

MOV 41H,B ;高位

;MOV 40H,#0F8H

;MOV 41H,#07H

MOV 42H,#00H

;双字节二进制变BCD

;入口二进制42H,41H,40H由高到低

;出口44H~43H,由高到低

MUBTD: MOV R0,#NUMB2

MOV R7,#LENG2

CLR A

LOOP18: MOV @R0,A

INC R0

DJNZ R7,LOOP18

MOV R7,#LENG1

LOOP48: MOV R1,#NUMB1

MOV R6,#LENG3

CLR C

LOOP28: MOV A,@R1

RLC A

MOV @R1,A

INC R1

DJNZ R6,LOOP28

MOV R5,#LENG2

MOV R0,#NUMB2

LOOP38: MOV A,@R0

ADDC A,@R0

DA A

MOV @R0,A

INC R0

DJNZ R5,LOOP38

DJNZ R7,LOOP48

;拆字程序*************

MOV R0,#DISP4

MOV A,44H

ACALL SEPA1

MOV R0,#DISP6

MOV A,43H

ACALL SEPA1

RET

SEPA1: MOV 45H,A

ANL A,#0F0H

SWAP A

MOV @R0,A

INC R0

MOV A,45H

ANL A,#0FH

;SWAP A

MOV @R0,A

;RET

MOV DPTR,#0FB01H

CLR A

MOVX @DPTR,A

WAIT1: JNB P3.4,READ1 ;转换结束信号

SJMP WAIT1

READ1: MOVX A,@DPTR

CLR C

;MOV A,#68

CJNE A,#PPPP,LLI

LLI: JNC LL2 ;集电极电压大于5V则不报警

CLR P1.0 ;负载电压大于10V

RET

LL2: SETB P1.0

RET

;闭环*****************************

CLR C

MOV A,43H

SUBB A,3FH

MOV 46H,A ;低

MOV A,44H

SUBB A,3EH

MOV 47H,A ;高

;***********键盘显示中断程序*****************

;用定时中断0显示扫描,30H~37H是段码存放地址,38H是位码地址

;8155PB0~PB3段码输出,PB4~PB7位码输出

;用外部中断1键盘扫描,PA0~PA3列扫描输出,PC0~PC3;输入,P2.0接CS,P2.1接IO/M

;出口数值是0~15,存在3AH中,3BH用作放键暂存

;用寄存器第3组

;已用R0,R2,R3,R4,R5,R6,其中R0,R6为显示用,R1,R2,R3,R7为键盘用,R4,R5延时用

;*******************中断显示扫描子程序*****************

LED: PUSH PSW

PUSH ACC

PUSH B

PUSH DPH

PUSH DPL

SETB RS0

SETB RS1

MOV TH0,#0F8H;2MS

MOV TL0,#30H

MOV A,@R0

ADD A,WEI

MOV DPTR,#PORTB

MOVX @DPTR,A

MOV A,WEI

ADD A,#10H

MOV WEI,A

INC R0

;ACALL DELAY

DJNZ R6,LED1

MOV WEI,#00H

MOV R0,#DISP0

MOV R6,#8

LED1: POP DPL

POP DPH

POP B

POP ACC

POP PSW

RETI

;**************中断键盘扫描子程序************

KEYSCAN: PUSH PSW

PUSH ACC

PUSH B

PUSH DPH

PUSH DPL

SETB RS0

SETB RS1

ACALL DELAY1 ;消抖延时

JNB P3.3,LIST

MOV DPTR,#PORTA ;恢复B口输出低电平

MOV A,#00H

MOVX @DPTR,A

POP DPL

POP DPH

POP B

POP ACC

POP PSW

RETI ;没有按

LIST:MOV DPTR,#PORTC

MOVX A,@DPTR

MOV 3BH,A

MOV R2,#0FEH

MOV R3,#00H

LINE0:MOV DPTR,#PORTA

MOV A,R2

MOVX @DPTR,A

MOV DPTR,#PORTC

MOVX A,@DPTR

JB ACC.0,LINE1

MOV A,#0

AJMP TRYK

LINE1:JB ACC.1,LINE2

MOV A,#1

AJMP TRYK

LINE2:JB ACC.2,LINE3

MOV A,#2

AJMP TRYK

LINE3:JB ACC.3,NEXT

MOV A,#3

AJMP TRYK

NEXT:INC R3

MOV A,R3

ADD A,#4

MOV R3,A

MOV A,R2

JNB ACC.3,EXIT

RL A

MOV R2,A

AJMP LINE0

EXIT:MOV DPTR,#PORTA ;恢复B口输出低电平

MOV A,#00H

MOVX @DPTR,A

POP DPL

POP DPH

POP B

POP ACC

POP PSW

RETI ;没有按

TRYK:ADD A,R3

MOV 3AH,A

LETK:MOV DPTR,#PORTC

MOVX A,@DPTR

XRL A,3BH

JZ LETK

MOV DPTR,#PORTA ;恢复B口输出低电平

MOV A,#00H

MOVX @DPTR,A

POP DPL

POP DPH

POP B

POP ACC

POP PSW

RETI

;*******************电流设置****************

SETONE:

SETB RS0

SETB RS1

;SETB 01H ;置显示闪烁位

SETONE1:MOV A,3AH

CJNE A,#10,L1

L1:JNC SETONE1

JB 00H,L3

CJNE A,#2,L2 ;2000MA

MOV DISP0,#2

MOV DISP1,#0

MOV DISP2,#0

MOV DISP3,#0

;CLR 01H

CLR RS0

CLR RS1

PUSH PSW

SETB RS1

ACALL BCDHEX;十六位BCD变十六进制

ACALL SUBBV ;*2再送DA

POP PSW

CLR A

RET

L2:MOV 3AH,#0FFH

JNC SETONE1

SETB 00H

L3:MOV @R1,A ;即时刷新显示缓冲区

INC R1

MOV 3AH,#0FFH

DJNZ R7,SETONE

MOV R7,#4

MOV R1,#30H

CLR 00H

;CLR 01H

CLR RS0

CLR RS1

PUSH PSW

SETB RS1

ACALL BCDHEX ;16字节BCD变二进制

ACALL SUBBV ;*5/8

POP PSW

CLR A

RET

;**********加电流

JIA:MOV 3AH,#0FFH

MOV A,DISP3

INC A

MOV DISP3,A

CJNE A,#10,OUT

MOV DISP3,#0

MOV A,DISP2

INC A

MOV DISP2,A

CJNE A,#10,OUT

MOV DISP2,#0

MOV A,DISP1

INC A

MOV DISP1,A

CJNE A,#10,OUT

MOV DISP1,#0

MOV A,DISP0

INC A

MOV DISP0,A

CJNE A,#2,OUT

MOV DISP0,#1

MOV DISP1,#9

MOV DISP2,#9

MOV DISP3,#9

OUT:PUSH PSW

SETB RS1

ACALL BCDHEX

ACALL SUBBV

POP PSW

CLR A

RET

;**********减电流

JIAN:MOV 3AH,#0FFH

MOV A,DISP3

DEC A

MOV DISP3,A

CJNE A,#0FFH,OUT1

MOV DISP3,#9

MOV A,DISP2

DEC A

MOV DISP2,A

CJNE A,#0FFH,OUT1

MOV DISP2,#9

MOV A,DISP1

DEC A

MOV DISP1,A

CJNE A,#0FFH,OUT1

MOV DISP1,#9

MOV A,DISP0

DEC A

MOV DISP0,A

CJNE A,#0FFH,OUT1

MOV DISP0,#0

MOV DISP1,#0

MOV DISP2,#0

MOV DISP3,#0OUT1:

PUSH PSW

SETB RS1

ACALL BCDHEX

ACALL SUBBV

POP PSW

CLR A

RET

BCDHEX:

MOV R7,#03H

MOV R0,#DISP0

CLR A

MOV R1,A

MOV R2,A

MOV R4,A

MOV R5,A

MOV R3,A

MOV A,@R0

MOV R1,A

CLR C

LOOP16:MOV A,R1

ADD A,R1

MOV R1,A

MOV A,R2

ADDC A,R2

MOV R2,A

MOV A,R1

MOV R3,A

MOV A,R2

MOV R4,A

MOV A,R1

ADD A,R1

MOV R1,A

MOV A,R2

ADDC A,R2

MOV R2,A

MOV A,R1

ADD A,R1

MOV R1,A

MOV A,R2

ADDC A,R2

MOV R2,A

MOV A,R1

ADD A,R3

MOV R1,A

MOV A,R2

ADDC A,R4

MOV R2,A

INC

温馨提示

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

评论

0/150

提交评论