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

上传人:b****8 文档编号:9123622 上传时间:2023-05-17 格式:DOCX 页数:22 大小:70.44KB
下载 相关 举报
数字电压表单片机课程设计.docx_第1页
第1页 / 共22页
数字电压表单片机课程设计.docx_第2页
第2页 / 共22页
数字电压表单片机课程设计.docx_第3页
第3页 / 共22页
数字电压表单片机课程设计.docx_第4页
第4页 / 共22页
数字电压表单片机课程设计.docx_第5页
第5页 / 共22页
数字电压表单片机课程设计.docx_第6页
第6页 / 共22页
数字电压表单片机课程设计.docx_第7页
第7页 / 共22页
数字电压表单片机课程设计.docx_第8页
第8页 / 共22页
数字电压表单片机课程设计.docx_第9页
第9页 / 共22页
数字电压表单片机课程设计.docx_第10页
第10页 / 共22页
数字电压表单片机课程设计.docx_第11页
第11页 / 共22页
数字电压表单片机课程设计.docx_第12页
第12页 / 共22页
数字电压表单片机课程设计.docx_第13页
第13页 / 共22页
数字电压表单片机课程设计.docx_第14页
第14页 / 共22页
数字电压表单片机课程设计.docx_第15页
第15页 / 共22页
数字电压表单片机课程设计.docx_第16页
第16页 / 共22页
数字电压表单片机课程设计.docx_第17页
第17页 / 共22页
数字电压表单片机课程设计.docx_第18页
第18页 / 共22页
数字电压表单片机课程设计.docx_第19页
第19页 / 共22页
数字电压表单片机课程设计.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

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

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

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

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

《单片机技术及其应用》

课程设计报告

题目:

数字电压表的设计

班级:

11通信本2班

学号:

1011028432

姓名:

段苓苓

同组人员:

钟梦为梅韶田赵赫宇周洋

指导教师:

刘少敏薛莲

2014年06月26日

1引言...........................................1

1.1设计意义....................................1

1.2系统功能要求................................1

2设计内容.......................................1

2.1设计思路....................................1

2.2主要功能....................................2

3方案论证.......................................2

3.1程序设计....................................2

3.2电路设计原理................................3

3.3软件设计方案................................4

3.4硬件设计方案................................4

4单元电路设计...................................5

4.1数码管显示器................................5

4.2单片机的晶振电路............................6

4.3显示模块....................................7

4.4ADC0808模数转换芯片.........................7

8

....................................复位电路4.5

4.6AT89C52单片机的引脚介绍.....................9

4.7模拟输入电路...............................10

4.8总电路设计.................................10

5系统软件程序的设计............................11

5.1主程序.....................................11

11............................5.2A/D转换子程序11显示子程序.................................5.3

11................................调试及性能分析6

116.1调试方法及步骤.............................

12实物调试数据...............................6.2

136.3误差分析...................................

14......................................7心得体会15指导老师意见..................................8

16附录:

..........................................

数字电压表的设计

1引言

1.1设计意义

我们学习的是单片机这门课程,这门课程最显著的特点就是它是一门实用技术课程,它要求我们不仅仅要掌握扎实的理论基础,更重要的是要学会如何去真真利用它为我们的电路设计服务,也只有通过课程设计这样的动手实践才是我们掌握这门技术的最佳途径,因此,我们开设这样的实践是很重要的,也是我们努力去学习钻研的动力。

数字电压表是采用数字化检测技术,把连续的模拟量(直流输入电压)换成不连续的、离散的数字形式并加以现实的仪表,克服了传统模拟电压表的读书不方便和不精确等问题。

不能满足数字化时代的需求,采用单片机的数字电压表,由精度高、抗干扰能力强,可扩展性强集成方便,还可以与PC进行实时通信。

目前,由各种单片A/D转换器构成的数字电压表,已广泛应用于电子电工测量、工业自动化仪表、自动测试系统等智能化测量领域,展现了强大的生命力。

与此同时,由数字电压表扩展而成的各种通用及专用数字化仪器,也把电量及非电量测量技术提高到了崭新的水平,因此,通过这次课程设计能让我们了解这些知识,为以后研究相关技术打下坚实的基础。

1.2系统功能要求

采用51系列单片机和ADC设计一个数字电压表,测量0~5V范围内的8路输入电压值,并在4位LED数码管上轮流显示或单路选择显示,要求显示两位小数。

2设计内容

2.1设计思路

(1)根据设计要求,选择AT89C51单片机为核心控制器件。

(2)A/D转换采用ADC0808实现,与单片机的接口为P1口和P2口的高四位引脚。

(3)电压显示采用4位一体的LED数码管。

(4)LED数码的段码输入,由并行端口P0产生:

位码输入,用并行端口P2低四位产生。

1

2.2主要功能

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

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

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

3方案论证

3.1程序设计

为了在C语言源程序中直接编写中断服务函数的需要,KeilCx51编译器对函数的定义进行了扩展,增加了一个扩展关键字interrupt,它是函数定义是的一个选项,加上这个选项即可以将一个函数定义成中断服务函数。

定义中断服务函数的一般形式为:

函数类型函数名(形式参数表)[interruptn][usingn]

由于ADC0809的CLOCK的时钟频率不高于640KHZ,在这利用定时器T0的中断产生时钟频率,则可设置为:

voidt0(void)interrupt1using0

ADC0809的时序图如下:

图3-1ADC0808的时序图

由时序图可知,只有在转换期间,EOC处于低电平,因此在AD转换开始前EOC置为低电平,START在上升沿期间将芯片内的所有寄存器清零,在下降沿来临时开始转换,由于所用的时钟为100KHz,比较的缓慢不需要再延时,在此等待转换结束,结束后将其数字量输出。

2

根据上述分析及原理,可设计程序流程图如下:

图3-2程序流程图

3.2电路设计原理

模拟电压经过档位切换到不同的分压电路筛减后,经隔离干扰送到A/D转换器进行A/D转换。

然后送到单片机中进行数据处理。

处理后的数据送到LED中显示。

同时通过串行通讯与上位通信。

硬件电路及软件程序。

而硬件电路又大体可分为A/D转换电路、LED显示电路,各部分电路的设计及原理将会在硬件电路设计部分详细介绍;程序的设计使用汇编语言编程,利用Keil和PROTEUS软件对其编译和仿真。

一般I/O接口芯片的驱动能力是很有限的,在LED显示器接口电路中,输出口所能提供的驱动电流一般是不够的尤其是设计中需要用到多位LED,此时就需要增加LED驱动电路。

驱动电路有多种,常用的是TTL或MOS集成电路驱动器,在本设计中采用了74LS244驱动电路。

本实验采用AT89C51单片机芯片配合ADC0809模/数转换芯片构成一个简易的数字电压表,原理电路如图1所示。

该电路通过ADC0809芯片采样输入口IN0输入的0~5V的模拟量电压,经过模/数转换后,产生相应的数字量经过其输出通道D0~D7传送给AT89C51芯片的P0口。

AT89C51负责把接收到的数字量经过数据处理,产生正确的7段数码管的显示段码,并通过其P1口传送给数码管。

同时它还通过其三位I/O口P1.0、P1.1、P1.2、P1.3产生位选信号,控制数码3

管的亮灭。

另外,AT89C51还控制着ADC0809的工作。

其ALE管脚为ADC0809提供了1MHz工作的时钟脉冲;P2.4控制ADC0809的地址锁存端(ALE);P2.1控制ADC0809的启动端(START);P2.3控制ADC0809的输出允许端(OE);P2.0控制ADC0808的转换结束信号(EOC)。

3.3软件设计方案

系统刚上电时,初始化程序主要执行70H-77H内存单元清0和P2口置0等准备工作。

在刚上电时,系统默认为循环显示8个通道的电压值状态。

当进行一次测量后,将显示每一通道的A/D转换值,每个通道的数据显示时间在1S左右。

主程序在调用显示子程序与测试子程序之间循环。

图3-3A/D转换测试子程序流程图

A/D转换测量子程序用来控制对ADC0809的8路模拟输入电压的A/D转换,并将对应的数值移入70H~77H内存单元。

3.4硬件设计方案

3.4.1主控芯片

选用单片机AT89C52和A/D转换芯片ADC0809实现电压的转换和控制,用四位数码管显示出最后的转换电压结果。

缺点是价格稍贵;优点是转换京都高,且转换的过程和控制、显示部分可以控制。

4

3.4.2显示部分

基于课程设计的要求和实验室所能提供的仪器,选用一个四联的共阴极数码管,外加四个三极管驱动。

这个电路几乎没有缺点;优点是便于控制,价格低廉,焊接简单。

图3-4数字电压表系统设计方框图

4单元电路设计

4.1数码管显示器

数码管的驱动方式的不同,可以分为静态式和动态式两类。

数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划慜戬挬搬攬昬本搬屰的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。

在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。

5

图4-1共阴极数码管及其接口电路

4.2单片机的晶振电路

晶振是晶体振荡器的简称,在电气上它可以等效成一个电容和一个电阻并联再串联一个电容的二端网络,电工学上这个网络有两个谐振点,以频率的高低分其中较低的频率是串联谐振,较高的频率是并联谐振。

由于晶体自身的特性致使这两个频率的距离相当的接近,在这个极窄的频率范围内,晶振等效为一个电感,所以只要晶振的两端并联上合适的电容它就会组成并联谐振电路。

这个并联谐振电路加到一个负反馈电路中就可以构成正弦波振荡电路,由于晶振等效为电感的频率范围很窄,所以即使其他元件的参数变化很大,这个振荡器的频率也不会有很大的变化。

晶振有一个重要的参数,那就是负载电容值,选择与负载电容值相等的并联电容,就可以得到晶振标称的谐振频率。

一般的晶振振荡电路都是在一个反相放大器(注意是放大器不是反相器)的两端接入晶振,再有两个电容分别接到晶振的两端,每个电容的另一端再接到地,这两个电容串联的容量值就应该等于负载电容,请注意一般IC的引脚都有等效输入电容,这个不能忽略。

本设计采用12MHz晶振,并联两个30pF电容构成晶振电路。

图4-2单片机晶振电路

6

4.3显示模块

该模块为数字电压表的显示模块,主要由4位7端共阳LED数码管和PNP三极管构成的选通电路构成。

其中,我们需注意共阳数码管的数字0-9的编码,另外,每个位选管要与程序对应。

位选是通过单片机P3.0-P3.3口控制三极管的基极从而控制每位数码管的选通。

图4-3显示模块电路

4.4ADC0808模数转换芯片

图4-4ADC0808的引脚

ADC0808是采样分辨率为8位的、以逐次逼近原理进行模/数转换的器件。

其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。

ADC0808是ADC0809的简化版本,功能基本相同。

一般在硬件仿真时采用ADC0808进行A/D转换,实际使用时采用ADC0809进行A/D转换。

7

引脚功能(外部特性)

ADC0809芯片有28条引脚,采用双列直插式封装,如右图所示。

各引脚功能如下:

1~5和26~28(IN0~IN7):

8路模拟量输入端。

8、14、15和17~21:

8位数字量输出端。

22(ALE):

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

6(START):

A/D转换启动脉冲输入端,输入一个正脉冲(至少100ns宽)使其启动(脉冲上升沿使0809复位,下降沿启动A/D转换)。

7(EOC):

A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)。

9(OE):

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

当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。

10(CLK):

时钟脉冲输入端。

要求时钟频率不高于640KHZ。

12(VREF(+))和16(VREF(-)):

参考电压输入端

11(Vcc):

主电源输入端。

13(GND):

地。

23~25(ADDA、ADDB、ADDC):

3位地址输入线,用于选通8路模拟输入中的一路。

4.5复位电路

AT89C52单片机要求至少两个高电平,以便单片机做好准备工作。

当上电时,由于电容的电压不能突变,会输出高电平,当电容充电到一定程度,就会输出低电平,单片机利用输出高电平的这段时间复位。

电阻和电容的值选择要合适。

在这要求R6<

图4-5复位电路

8

4.6AT89C52单片机的引脚介绍

图4-6AT89C52引脚图

AT89C52是51系列单片机的一个型号,它是ATMEL公司生产的。

AT89C52是一个低电压,高性能CMOS8位单片机,片内含8kbytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大的AT89C52单片机可为您提供许多较复杂系统控制应用场合。

AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52可以按照常规方法进行编程,也可以在线编程。

其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。

AT89C52有PDIP、PQFP/TQFP及PLCC等三种封装形式,以适应不同产品的需求。

主要功能特性:

·兼容MCS51指令系统·8k可反复擦写(>1000次)FlashROM

·32个双向I/O口·256x8bit内部RAM

9

·3个16位可编程定时/计数器中断·时钟频率0-24MHz

·2个串行中断·可编程UART串行通道

·2个外部中断源·共6个中断源

·2个读写中断口线·3级加密位

·低功耗空闲和掉电模式·软件设置睡眠和唤醒功能

4.7模拟输入电路

图4-7模拟输入电路图

通过可变电阻一端接电源+5v,一端接地GND,通过改变电阻的阻值,从而改变所测电压值,实现电压的模拟信号输入。

4.8总电路设计

图4-8总电路

10

设计原理:

将模拟量通过IN0输入,经过ADC0809芯片转换,得到数字量输出到单片机P0口,经过单片机处理后,送到四位共阴极数码管上显示。

5系统软件程序的设计

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

5.1主程序

主程序包含初始化部分、调用A/D转换子程序和调用显示程序,如图1—3所示。

初始化部分包含存放通道数据缓冲区初始化和显示缓冲区初始化。

另外,对于单路显示和循环显示,系统设置了一个标志位00H控制。

初始化时00H位设置为0,默认为循环显示,当它为1时改变为单路显示。

00H位通过单路/循环按键控制。

5.2A/D转换子程序

A/D转换子程序用于对ADC0809的8路输入模拟电压进行A/D转换,并将转换的数值存入8个相应的存储单元中,如图1—4所示。

A/D转换子程序每隔一定时间调用一次,即隔一段时间对输入电压采样一次。

5.3显示子程序

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

在显示子程序中包含多路循环显示和单路显示程序。

多路循环显示把8个存储单元的数值依次取出送到4位数码管上显示,每一路显示1秒。

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

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

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

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

6调试及性能分析

6.1调试方法及步骤

a.软件仿真调试:

首先将电路原理图用Proteus7.0仿真软件画出来,再用Keil单片机编程软件将数字电压表程序编写出来,通过Proteus7.0仿真软件中与Keil软件的联调功能,将编好的程序导入单片机中,在Proteus7.0中实现软件仿真。

仿真结果如下:

11

图6-1电路图仿真

b.实物调试:

将硬件电路都连接完好后,将单片机编号的数字电压表程序通过ISP程序烧入软件烧入到单片机中,用直流可调电压源给ADC0809的模拟输入端口通以不同电压值的电压,将数字电压表装置上的数码管上读出的电压值记录下来,与可调电压源上显示的标准值进行比较并分析。

6.2实物调试数据

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

图6-2输入电压为0V时,LED的显示结果

12

(2)当IN0输入电压值为1.50V时,显示结果如图12所示。

测量误差为0.01V。

图6-3输入电压为1.50V时,LED的显示结果

(3)当IN0口输入电压值为3.50V时,显示结果如图13。

测量误差为0.01V。

图6-4输入电压为3.50V时,LED的显示结果

6.3误差分析

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

13

表6-1简易数字电压表与“标准”数字电压表对比测试表

标准电压数字电压绝对误差/V

/V

表测量值值/V

0.000.000.00

0.010.510.50

0.001.001.00

0.011.501.51

0.002.002.00

0.002.502.50

0.003.003.00

0.003.503.50

0.004.004.00

0.11

5.00

4.89

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

这就决定了电压表的最高分辨率只能到0.0196V,从上表可看到,测试电压一般以0.01V的幅度变化。

从上表可以看出,简易数字电压表测得的值基本上比标准电压值偏大0-0.01V,这可以通过校正ADC0809的基准电压来解决。

因为该电压表设计时直接用5V的供电电源作为电压,所以电压可能有偏差。

当要测量大于5V的电压时,可在输入口使用分压电阻,而程序中只要将计算程序的除数进行调整就可以了。

7心得体会

本次课程设计让我温习了单片机的基本原理、功能以及构造,以及ADC0808/ADC0809的基本工作原理,学会了使用KeilCx51和Protuse这两个软件的基本使用方法,利用C语言在KeilCx51下进行编程实现所需要的功能,同时在Protuse软件上画电路图并进行仿真,通过硬件的制作提高了动手能力和分析问题的能力。

软件部分的编程,主要是通过看芯片的基本资料进行编写的,所以我意识到14

了当你需要某个东西时,一定要去了解它,弄清楚其工作原理、实现方案以及需要注意的地方,特别是像一些芯片工作的时序图,这是编程之前必须去了解的。

对于硬件部分,我收获颇多。

首先,让我对单片机的最小系统有了深刻的理解,特别是通过串口通信将程序下载到单片机中,明白了将程序下载到单片机的方法和原理。

其次,对一些基本电路检测问题,能够做到独立解决,像我在实验过程中遇到了各种不同的问题,其实是对自己能力的体现,其实问题多还更加好,那样你可以更加发现自己的不足之处,这样才能够提高。

最后,此次设计提高了我的焊接技术,比起以前的课程设计焊的电路图,真的发现自己提高了很多,比如在布局上更加地合理、简洁、美观。

8指导老师意见

15

附录:

C语言源程序清单

#include

unsignedcharcode

dispbitcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//七段数码管段选编码数组

unsignedchardispbuf[4];//中间变量存储数组

unsignedchargetdata;

unsignedinttemp;

sbitST=P3^0;//定义ADC0809测试控制端口

sbitOE=P3^1;//定义AD转换使能端口

sbitEOC=P3^2;//AD转换结束控制位

sbitCLK=P3^3;//时钟信号控制AD转换频率

sbitP17=P0^7;//小数点显示

voidDelay(unsignedinti);//延时函数

voidDelay(unsignedinti)

{

unsignedintj;

for(;i>0;i--)

{

for(j=0;j<100;j++)

{;}

}

}

voidDisplay()//测量数据显示功能函数

{

P0=dispbitcode[dispbuf[3]];

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

当前位置:首页 > 工作范文 > 制度规范

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2