单片机课程设计数字电压表.docx

上传人:b****4 文档编号:3932767 上传时间:2022-11-26 格式:DOCX 页数:19 大小:318.15KB
下载 相关 举报
单片机课程设计数字电压表.docx_第1页
第1页 / 共19页
单片机课程设计数字电压表.docx_第2页
第2页 / 共19页
单片机课程设计数字电压表.docx_第3页
第3页 / 共19页
单片机课程设计数字电压表.docx_第4页
第4页 / 共19页
单片机课程设计数字电压表.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

单片机课程设计数字电压表.docx

《单片机课程设计数字电压表.docx》由会员分享,可在线阅读,更多相关《单片机课程设计数字电压表.docx(19页珍藏版)》请在冰豆网上搜索。

单片机课程设计数字电压表.docx

单片机课程设计数字电压表

1引言

随着微电子技术的不断发展,微处理器芯片的集成程度越来越高,单片机已可以在一块芯片上同时集成CPU、存储器、定时器/计数电路,这就很容易将计算机技术与测量控制技术结合,组成智能化测量控制系统。

数字电压表(DigitalVoltmeter)简称DVM,它是采用数字化测量技术,把连续的模拟量(直流输入电压)转换成不连续、离散的数字形式并加以显示的仪表。

与此同时,由DVM扩展而成的各种通用及专用数字仪器仪表,也把电量及非电量测量技术提高到崭新水平。

本章重点介绍单片机A/D转换器以及由它们构成的基于单片机的数字电压表的工作原目前,由各种单片A/D转换器构成的数字电压表,已被广泛用于电子及电工测量、工业自动化仪表、自动测试系统等智能化测量领域,示出强大的生命力理。

本设计AT89C51单片机的一种电压测量电路,该电路采用ADC0808一种基于A/D转换电路,测量范围直流0~5V的4路输入电压值,并在四位LED数码管上显示或单路选择显示。

测量最小分辨率为0.019V,测量误差约为正负0.02V。

2设计原理及要求

此次设计思路是利用单片机AT89C51与ADC0808设计一个数字电压表,测量0-5V之间的直流电压值,然后通过四位数码显示,为了设计简单化我使用的元器件数目较少。

2.1数字电压表的实现原理

ADC0808是8位的A/D转换器。

当输入电压为5.00V时,输出的数据值为255(0FFH),因此最大分辨率为0.0196(5/255)。

ADC0808具有8路模拟量输入端口,通过3位地址输入端能从8路中选择一路进行转换。

如每隔一段时间依次轮流改变3位地址输入端的地址,就能依次对8路输入电压进行测量。

LED数码管显示采用软件译码动态显示。

通过按键选择可对8路循环显示,也可单路显示,单路显示可通过按键选择显示的通道数。

2.2数字电压表的设计要求

可以测量0~5V范围内的3路直流电压值。

在4位LED数码管上轮流显示各路电压值或单路选择显示,其中3位LED数码管显示电压值,显示范围为0.00V~5.00V,1位LED数码管显示路数,3路分别为0-2。

要求测量的最小分辨率为0.02V。

3软件仿真电路设计

3.1设计思路

多路数字电压表应用系统硬件电路由单片机、A/D转换器、数码管显示电路和按键处理电路组成,由于ADC0808在进行A/D转换时需要有CLK信号,本试验中ADC0808的CLK直接由外部电源提供为500kHz的方波。

由于ADC0808的参考电压VREF=VCC,所以转换之后的数据要经过数据处理,在数码管上显示出电压值。

实际显示的电压值(D/256*VREF)ADC0808采用逐次逼近法转换,把模拟电压转换成16进制的D,由于是对直流电压0~5V进行采集,所以D对应的电压为V0 ,我们的目的就是要把V0显示在LED显示器上,因为单片机不好进行小数点计算,所以有:

V0=2*D扩大了100倍,扩大100倍后的结果高八位放寄存器B,低八位放寄存器A,分寄存器B为0或不为0的情况进行存取数据,得到的结果个位放入R0,十位放入R1,通过查表使之显示在LED显示器。

3.2仿真电路图

用Protues软件仿真设计的电路如图3-1所示。

图3-1仿真电路

3.3设计过程

简易数字电压测量电路由A/D转换、数据处理及显示控制等组成。

电路原理图见附录2。

A/D转换由集成电路0808完成。

0808具有8路模拟输入端口,地址(23-25)脚可决定对哪路模拟输入作A/D转换,22脚为地址锁存控制,当输入为高电平时,对地址信号进行锁存。

6脚为测试控制,当输入一个2us宽高电平脉冲时,就开始A/D转换。

7脚为A/D转换结束标志,当A/D转换结束时7脚输出高电平。

9脚为A/D转换数据输出允许控制,当OE脚为高电平时,A/D转换数据从该端口输出。

10脚为0808的时钟输入端,由外部信号源提供。

单片机的P1、P3.0-P3.3端口作为四位LED数码管现实控制。

P3.5端口用作单路显示/循环显示转换按钮,P3.6端口用作单路显示时选择通道。

P0端口作A/D转换数据读入用,P2端口用作0808的A/D转换控制。

3.4AT89C51的功能介绍

3.4.1简单概述

AT89C51是一种带4K字节闪存可编程可擦除只读存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器,俗称单片机。

AT89C51是一种带2K字节闪存可编程可擦除只读存储器的单片机。

单片机的可擦除只读存储器可以反复擦除1000次。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。

AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

外形及引脚排列如图3-2所示。

 

图3-2AT89C51芯片模型

3.4.2主要功能特性

(1)4K字节可编程闪烁存储器。

(2)32个双向I/O口;128×8位内部RAM。

(3)2个16位可编程定时/计数器中断,时钟频率0-24MHz。

(4)可编程串行通道。

(5)5个中断源。

(6)2个读写中断口线。

(7)低功耗的闲置和掉电模式。

(8)片内振荡器和时钟电路。

3.4.3AT89C51的引脚介绍

89C51单片机多采用40只引脚的双列直插封装(DIP)方式,下面分别简单介绍。

(1)电源引脚

电源引脚接入单片机的工作电源。

Vcc(40引脚):

+5V电源。

GND(20引脚):

接地。

(2)时钟引脚

XTAL1(19引脚):

片内振荡器反相放大器和时钟发生器电路的输入端。

XTAL2(20引脚):

片内振荡器反相放大器的输出端。

图3-3电源接入方式

(3)复位RST(9引脚)

在振荡器运行时,有两个机器周期(24个振荡周期)以上的高电平出现在此引脚时,将使单片机复位,只要这个脚保持高电平,51芯片便循环复位。

(4)

/Vpp(31引脚)

为外部程序存储器访问允许控制端。

当它为高电平时,单片机读片内程序存储器,在PC值超过0FFFH后将自动转向外部程序存储器。

当它为低电平时,只限定在外部程序存储器,地址为0000H~FFFFH。

Vpp为该引脚的第二功能,为编程电压输入端。

(5)ALE/

(30引脚)

ALE为低八位地址锁存允许信号。

在系统扩展时,ALE的负跳沿江P0口发出的第八位地址锁存在外接的地址锁存器,然后再作为数据端口。

为该引脚的第二功能,在对片外存储器编程时,此引脚为编程脉冲输入端。

(6)

(29引脚)

片外程序存储器的读选通信号。

在单片机读片外程序存储器时,此引脚输出脉冲的负跳沿作为读片外程序存储器的选通信号。

(7)pin39-pin32为P0.0-P0.7输入输出脚,称为P0口。

P0是一个8位漏极开路型双向I/O口。

内部不带上拉电阻,当外接上拉电阻时,P0口能以吸收电流的方式驱动八个LSTTL负载电路。

通常在使用时外接上拉电阻,用来驱动多个数码管。

在访问外部程序和外部数据存储器时,P0口是分时转换的地址(低8位)/数据总线,不需要外接上拉电阻。

(8)Pin1-Pin8为P1.0-P1.7输入输出脚,称为P1口,是一个带内部上拉电阻的8位双向I/0口。

P1口能驱动4个LSTTL负载。

(9)Pin21-Pin28为P2.0-P2.7输入输出脚,称为P2口。

P2口是一个带内部上拉电阻的8位双向I/O口,P2口能驱动4个LSTTL负载。

端口置1时,内部上拉电阻将端口拉到高电平,作输入用。

对内部Flash程序存储器编程时,接收高8位地址和控制信息。

在访问外部程序和16位外部数据存储器时,P2口送出高8位地址。

而在访问8位地址的外部数据存储器时其引脚上的内容在此期间不会改变。

(10)Pin10-Pin17为P3.0-P3.7输入输出脚,称为P3口。

P3口是一个带内部上拉电阻的8位双向I/O口,P2口能驱动4个LSTTL负载,这8个引脚还用于专门的第二功能。

端口置1时,内部上拉电阻将端口拉到高电平,作输入用。

对内部Flash程序存储器编程时,接控制信息。

3.5ADC0808的引脚及功能介绍

3.5.1芯片概述

ADC0808是一种典型的A/D转换器。

它是由8位A/D转换器,一个8路模拟量开关,8位模拟量地址锁存译码器和一个三态数据输出锁存器组成;+5V单电源供电,转化时间在100us左右;内部没有时钟电路,故需外部提供时钟信号。

芯片模型如图3-4所示。

图3-4ADC0808芯片模型

3.5.2引脚简介

(1)IN0~IN7:

8路模拟量输入端。

(2)D0~D7:

8位数字量输出端口。

(3)START:

A/D转换启动信号输入端。

(4)ALE:

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

(5)EOC:

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

(6)OE:

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

(7)CLK:

时钟信号输入端。

(8)A、B、C:

转换通道地址,控制8路模拟通道的切换。

A、B、C分别与地址线或数据线相连,三位编码对应8个通道地址端口,A、B、C=000~111分别对应IN0~IN7通道的地址端口。

3.5.3ADC0808的转换原理

ADC0808采用逐次比较的方法完成A/D转换,由单一的+5V电源供电。

片内带有锁存功能的8路选1的模拟开关,由A、B、C的编码来决定所选的通道。

ADC0809完成一次转换需100μs左右,它具有输出TTL三态锁存缓冲器,可直接连接到AT89C51的数据总线上。

通过适当的外接电路,ADC0808可对0~5V的模拟信号进行转换。

3.674LS373芯片的引脚及功能

3.6.1芯片概述

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

 

3.6.2引脚介绍

(1)D0~D7:

8位数据输入线;

(2)Q0~Q7:

8位数据输出线

(3)G:

数据输入锁存选通信号。

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

(4)

:

数据输出允许信号,低电平有效。

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

3.7LED数码管的控制显示

3.7.1LED数码管的模型

LED数码管模型如图3-6所示。

 

3.7.2LED数码管的接口简介

LED的段码端口A~G分别接至AT89C51的P1.0~P1.7口,位选端1~4分别接至P3.5、P3.4、P3.1、P3.0,如图3-7所示。

 

 

4系统软件程序的设计

多路数字电压表系统软件程序主要有主程序、A/D转换子程序和中断显示程序组成。

4.1主程序

主程序包含初始化部分、调用A/D转换子程序和相应外部0中断显示电压数值程序,初始化部分包含存放通道的缓冲区初始化和显示缓冲区初始化。

另外,对于单路显示和循环显示,系统设置了一个标志位00H控制,初始化时00H位设置为0,默认为循环显示,当它为1时改变为单路显示控制,00H位通过单路、循环按键控制。

流程图如图4-1所示。

开始

显示子程序

A/D转换子程序

初始化

图4-1主程序流程图

 

4.2A/D转换子程序

A/D转换子程序用于对ADC0808的4路输入模拟电压进行A/D转换,并将转换的数值存入4个相应的存储单元中,A/D转换子程序每隔一定时间调用一次,即隔一段时间对输入电压采样一次,如图4-2所示。

 

进行十六进制调整

开始A/D转换

调用延时

存转换后的十六进制数

数据指针加一

入栈保护

4路转换次数减一

显示电压值

N

Y

图4-2转换子程序流程图

 

判断是否为0

 

4.3中断显示程序

设计中采用中断的方式来读取转换完成的数据能节省CPU的资源

当系统设置好后,一旦数据转换完成,便会进入外部中断0,然后在中断中读取转换的数值,处理数据并送数码管显示输出。

LED数码管采用软件译码动态扫描的方式。

在中断程序中包含多路循环显示程序和单路显示程序,多路循环显示程序把4个存储单元的数值依次取出送到4个数码管上显示,每一路显示一秒。

单路显示程序只对当前选中的一路数据进行显示。

每路数据显示时需经过转换变成十进制BCD码,放于4个数码管显示缓冲区中。

单路或多路循环显示通过标志位00H控制。

在显示控制程序中加入了对单路或多路循环按键的判断。

数字量送P1口

取段码地址

P3.1=1?

调用循环显示程序

调用单路显示程序

显示的是第4路

重新调用显示程序

N

Y

N

Y

图4-3中断显示程序流程图

 

5电压表的调试及性能分析

5.1调试与测试

本设计应用Proteus6及KEIL51软件,首先根据自己设计的电路图用Proteus6软件画出电路模型,关于这个软件的使用通过查一些资料和自己的摸索学习;然后我们用KEIL51软件对所编写的程序进行编译、链接,如果没有错误和警告便可生成程序的hex文件,将此文件加到电路图上使软硬件结合运行,最后进行端口电压的对比测试,测试的第一路对比见图4-1中标准电压值采用Proteus6软件中的模拟电压表测得。

图4-1数字电压表与标准电压表的比较

 

从图中可以看出,简易数字电压表与“标准”数字电压表测得的绝对误差均在0.02V以内,这与采用8位A/D转换器所能达到的理论误差精度相一致,在一般的应用场合可以完全满足要求。

5.2性能分析

由于单片机为8位处理器,当输入电压为5.00V时,输出数据值为255(FFH)因此单片机最大的数值分辨率为0.0196V(5/255)。

这就决定了该电压表的最大分辨率(精度)只能达到0.0196V。

测试时电压数值的变化一般以0.02V的电压幅度变化,如要获得更高的精度要求,应采用12位、13位的A/D转换器。

简易数字电压表测得的值基本上均比标准值偏大0.01-0.02V。

这可以通过校正0808的基准电压来解决,因为该电压表设计时直接用7805的供电电源作为基准电压,电压可能有偏差。

另外可以用软件编程来校正测量值。

ADC0808的直流输入阻抗为1M欧姆,能满足一般的电压测试需要。

另外,经测试ADC0808可直接在2MHz的频率下工作,这样可省去分频率14024。

 

6电路仿真图

图6-1为4路通道用模拟电压表测得的理论值。

图6-1模拟电压表测量结果

图6-2为进行模拟仿真时的电路图

图6-2仿真时的电路图

7总结

经过一周的努力终于设计成功,LED的显示结果和直接用数字电压表测试模拟量输入所得结果几乎一致,误差完全在合理的范围之内。

由于仪器误差,LED显示最大值只能是4.9V,离标准最大值5.0V已经不远,达到预期目的,设计成功。

本设计参考了教材上第十一章89C51与ADC0809转换的接口连线,设计出电路图的连线,从并中理解了许多基本的知识和接线方法,在程序的设计与电压表调试的过程中中遇到了很多的问题,刚开始时四个数码管根本不显示,后来发现用的是共阳极的数码管,而设计是共阴极的,更换后数码管终于显示,但问题又出现了,单路显示和循环显示的开关不能控制电路的单路显示和循环显示,经过仔细地检查电路和修改程序,采用中断的方法,产生一次外部中断0,程序转移到单路显示,按一次单路显示开关,地址加一,转换的模拟通道相应的加一,如果按下循环按键就返回循环显示的程序,功夫不负有心人,最后终于调试成功。

在此再次向带领我们这次课程设计的老师说声:

谢谢!

 

参考文献

[1]蒋廷彪,刘电霆,高富强,方华.单片机原理及应用.出版社:

重庆大学出版社.出版时间:

2005

年1月第2次印刷

[2]8051实验指导书电子电气综合实训系统.出版社:

北京精仪达盛科技有限公司

[3]徐爱钧.智能化测量控制仪表原理与设计(第二版)[M].北京:

北京航空航天大学出版

社,2004

[4]吴金戌,沈庆阳,郭庭吉.8051单片机实践与应用[M].北京:

清华大学出版社,2002

[5]张国勋.缩短ICL7135A/D采样程序时间的一种方法[J].电子技术应用.1993.第一期

[6]高峰.单片微型计算机与接口技术[M].北京科学出版社,2003.

[7]刘伟,赵俊逸,黄勇.一种基予C8051F单片机的SOC型数据采录器的设计与实现

[8]《新型AT89S52系列单片机及其应用》孙育才北京:

清华大学出版社

2005-5

[9]《MCS-51系列单片机系统及其应用》蔡美琴高等教育出版

[10]《过程控制与仪表》陈乐中国计量学院出版社,2007-3

 

附录1源程序

ORG0000H

SJMPMAIN

ORG0003H

LJMPPINT0

MAIN:

MOV50H,#19H

MOV54H,#78H

MOVDPTR,#7FF8H

MOV51H,DPH

MOV52H,DPL

MOVR0,#04H

MOV53H,#00H

MOVR7,#00H

SETBEA

SETBIT0

SETBEX0

L4:

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

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

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

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

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

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

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

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

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

PUSHDPL;压入堆栈

PUSHDPH

DECR0;4路转换的次数减一

JZSB2;判断是否是0V

MOVR4,A

L1:

MOVA,R1;进行十六进制到十进制的调整

ADDA,50H;每次加19

DAA

MOVR1,A

JCL2;如果溢出则跳转到L2

MOVA,R5;进行0.5V相加

ADDA,54H

DAA

MOVR5,A

JCL3;如果溢出则跳转到L3

SB1:

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

MOVA,R5

SWAPA

ANLA,#0FH

MOVB,R1

ADDA,B

DAA

MOVR1,A

SB2:

LCALLDISP

LCALLDJW

DJNZR3,SB2

POPDPH

POPDPL

MOVA,53H

INCA

MOV53H,A

CJNER0,#00H,L4

LJMPMAIN

L2:

CLRC

MOVA,R2

ADDA,#01H

DAA

MOVR2,A

LJMPSB1

L3:

CLRC;0.5V相加溢出后进位

MOVA,R1

ADDA,#01H

DAA

MOVR1,A

LJMPSB1

DISP:

MOVA,R1;显示电压子程序

SWAPA

ANLA,#0FH

MOVDPTR,#TAB1

MOVCA,@A+DPTR

CLRP3.0

MOVP1,A

LCALLDELAY

SETBP3.0

MOVA,R2

ANLA,#0FH

MOVDPTR,#TAB1

MOVCA,@A+DPTR

CLRP3.1

MOVP1,A

LCALLDELAY

SETBP3.1

MOVA,R2

SWAPA

ANLA,#0FH

MOVDPTR,#TAB2

MOVCA,@A+DPTR

CLRP3.4

MOVP1,A

LCALLDELAY

SETBP3.4

RET

DJW:

MOVA,53H;显示第几路转换电压子程序

MOVDPTR,#TAB1

MOVCA,@A+DPTR

CLRP3.5

MOVP1,A

LCALLDELAY

SETBP3.5

RET

INTV:

PUSHACC;只显示其中一路中断

PUSH53H

MOV53H,#00H

CX2:

MOVR1,#00H

MOVR2,#00H

MOVR3,#0FFH

MOVR4,#00H

MOVDPH,51H

MOVDPL,52H

MOVX@DPTR,A

LCALLDELAY

MOVXA,@DPTR

MOVR4,A

JZSB22

L11:

MOVA,R1

ADDA,50H

DAA

MOVR1,A

JCL22

MOVA,R5;进行0.5V相加

ADDA,54H

DAA

MOVR5,A

JCL33

SB11:

DJNZR4,L11

MOVA,R5

SWAPA

ANLA,#0FH

MOVB,R1

ADDA,B

DAA

MOVR1,A

SB22:

LCALLDISP

LCALLDJW

JNBP3.3,EXIT

DJNZR3,SB22

JNBP3.2,CX1

LJMPCX2

L22:

CLRC

MOVA,R2

ADDA,#01H

DAA

MOVR2,A

LJMPSB11

L33:

CLRC

MOVA,R1

ADDA,#01H

DAA

MOVR1,A

LJMPSB11

CX1:

INCR7

MOVA,53H

INCA

MOV53H,A

MOVDPH,51H

MOVDPL,52H

INCDPTR

MOV51H,DPH

MOV52H,DPL

CJNER7,#04H,CX2

MOVR7,#00H

MOV53H,#01H

MOVDPTR,#7FF8H

MOV51H,DPH

MOV52H,DPL

LJMPCX2

EXIT:

POP53H

POPACC

RETI

DELAY:

MOVR6,#1H;延时子程序

D1:

MOVR5,#50H

D2:

NOP

NOP

DJNZR5,D2

DJNZR6,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

 

原理电路

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1