基于51单片机数字电压表.doc
基于51单片机的数字电压表
作品简介
本制作是基于51单片机的简易数字电压表。
制作背景
对于学电子的同学,电压表是必不可少的仪表。但是市场上的万用表的价格都不低,而且市场上的万用表量程过宽,大量程对于学电子的同学并不经常用到。而这款数字电压表,既能满足大学生一些基本项目中的要求,而且成本比较低廉。
实现的功能
测量5V以内的正电压(精度为0.02V)。
工作原理
通过8位A/D转换器ADC0804采样模拟电压,经过芯片内部转换,将转换出来的8位数字信号送至单片机进行处理,经过运算后输出。
调试与制作
系统整体结构
本系统主要包括数据采集电路,单片机最小数据处理系统,和数码管显示部分等。系统的电路图如下:
硬件设计
本电路采用模块化设计,主要由A/D转换模块、控制模块和LED显示模块组成(如图2.1)。
LED显示模块
LED显示模块
控制
控
制
模
块
外
外
部
电
压
A/D转换模块
A/D转换模块
系统总体硬件框图
软件设计
汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言。其主要优点是占用资源少、程序执行效率高。但是不同的CPU,其汇编语言可能有所差异,所以不易移植。C语言是一种结构化的高级语言。其优点是可读性好,移植容易,是普遍使用的一种计算机语言。缺点是占用资源较多,执行效率没有汇编高。而C语言是一种编译型程序设计语言,它兼顾了多种高级语言的特点,并具备汇编语言的功能。C语言有功能丰富的库函数、运算速度快、编译效率高、有良好的可移植性,而且可以直接实现对系统硬件的控制。C语言是一种结构化程序设计语言,它支持当前程序设计中广泛采用的由顶向下结构化程序设计技术。此外,C语言程序具有完善的模块程序结构,从而为软件开发中采用模块化程序设计方法提供了有力的保障。因此,使用C语言进行程序设计已成为软件开发的一个主流。所以,本软件设计采用C语言编写。
开始
开始
调用ADC转换子程序
调用ADC转换子程序
调用
调用数据转换程序
调用数码管显示程序
调用数码管显示程序
安装与调试
在设计这款电压表时,我们先做了Proteus仿真,其中就遇到一些问题。由于仿真都是基于一些比较理想化的元器件的仿真。我们按照实际电路来设计仿真电路,结果发现有的元器件没找到,然后找了类似的代替。而我们知道,单片机的拉电流能力是很弱的,只有微安的数量级,而数码管要显示比较明显的话,需要几十毫安,所以需要放大电流,我们采用的是NPN型的8050三极管放大(我们采用的是共阴数码管),把电流放大到几十毫安。而在Proteus仿真时,发现,不需要三极管放大就可以点亮数码管。而刚开始,我们按照实际电路图的时候却发现我们控制不了四个数码管。由于采用三极管放大接地,所有的数码管均是全部点亮,显示相同数字。经过一番讨论和不断反复实验,最后才发现这个问题。然后我们把三极管去掉。后来又出现了一个问题,就是数码管的“鬼影”现象,这个我以前没仿真过,只是在板子上用过,而我写出来的和我以前在板子上跑的显示程序基本一样,却显示效果不一样。仿真几乎无显示。后来经过两人的讨论,和不断的实验,最终成功了。最后就是做出实际的板级实验,其中主要的问题就是显示的不精确。误差有将近10%。经过一定的修改,最后还是得到比较满意的效果。
作品技术指标与功能描述
技术指标
电压量程:0~5V
测量精度:2%
显示:最大显示值为5.00,能自动显示小数点。
采样速度:采样速度为大约60次/s,每次测量时,被测电压的转换时间为大约100us。可对频率小于5KHz的信号采样。
实现效果
如图所示:
Proteus仿真效果图
应用前景
可以在学生中广泛使用。由于此作品价格低廉,又能满足学生朋友的基本要求,性价比高。同时,此作品有很多需要改进的地方,就是可以采用更加低廉的串行AD芯片,同时,可以采用STC89C2051来对收到的数据进行运算,然后输出至数码管显示。价格可以在10元左右。