当前位置:文档之家› 单片机电压采集与显示

单片机电压采集与显示

目录 摘要
引言
一 课程设计题目及任务要求
1.1课程设计主要任务
1.2课程设计的要求
二 电路设计方案及原理说明
2.0课程设计的方案 2.1 ADC0809模数转换芯片
2.2 AT89C51单片机
2.3 4个共阳7段数码管显示器
2.4 系统整体工作原理
2.4.1硬件原理
2.4.2软件原理分析
三 设计总体框图
3.1硬件总体框图
3.2主程序流程图
3.3待测信号源单元电路
3.4 AT89C51单片机
3.5单片机控制单元
3.5.1外部时钟电路
3.5.2复位电路
3.5.3数码管显示模块
四 实验仿真
五 总结及设计心得
六 致谢
七 参考文献


摘要本设计待测的输入电压为8路电压范围为05V使用目前广泛使用的
AT89C51来做控制系统用ADC0809来进行模拟电压的采集及模数转换实现采集 8路数据并将结果在四位一体数码管上进行显示。该系统主要包括几大模块
数据采集模块、AD转换模块、控制模块、显示模块。显示部分由LED数码显示
器构成。该数字电压表具有电路简单成本低等优点可以方便地进8路AD转
换量的测量。
关键词电压采集、ADC0809、A/D转换、单片机89C51、数码管显示


引言
随着计算机技术的飞速发展和普及数据采集系统在多个领域有着广泛的应
用。数据采集是工、农业控制系统中至关重要的一环在医药、化工、食品、等
领域的生产过程中往往需要随时检测各生产环节的温度、湿度、流量及电压等
参数。同时还要对某一检测点任意参数能够进行随机查寻将其在某一时间段
内检测得到的数据经过转换提取出来以便进行比较做出决策调整控制方案
提高产品的合格率产生良好的经济效益。
随着工、农业的发展多路数据采集势必将得到越来越多的应用为适应这
一趋势作这方面的研究就显得十分重要。在科学研究中运用数据采集系统可
获得大量的动态信息也是获取科学数据和生成知识的重要手段之一。总之不
论在哪个应用领域中数据采集与处理将直接影响工作效率和所取得的经济效
益。
采集系统从严格的意义上来说应该是用计算机控制的多路数据自动检测
或巡回检测并且能够对数据实行存储、处理、分析计算以及从检测的数据中提
取可用的信息供显示、记录、打印或描绘的系统。
电压测量成为广大电子领域中必须掌握的过程并且对测量的精度和采集功
能的要求也越来越高而电压的测量与显示系统甚为重要。在课程设计中对一路
电压采集系统与显示系统作了基本的研究。电压采集与通信控制采用了模块化的

计并用单片机8051来实现硬件部分是以单片机为核心还包括模-数转换
模块显示模块和串行接口部分还有一些简单的外围电路。1路被测电压通
过通用ADC0809模-数转换实现对采集到的电压进行模拟量到数字量的转换
由单片机对数据进行处理用数码管显示模块来显示所采集的结果由相关控制
器完成数据接收和显示汇编程序编写了更加明了化数据显示界面。本系统主要
包括四大模块数据采集模块、控制模块、显示模块、A/D转换模块。绘制电路
原理图与工作流程图并进行调试最终设计完成了该系统的硬件电路。在软件
编程上采用了汇编语言进行编程开发环境使用相关集成开发环境。开发了显
示模块程序、A/D转换程序。
一、设计任务与要求 1.1课程设计主要任务
A、通过设计是学生掌握利用ADC0809及其适当的外围电路实现直流电压的
采集以及利用LED显示功能的方法。
B、进一步掌握ADC0809的功能特点、工作原理和正确使用方法。
C、进一步了解外围器件接口的基本原理与使用技术。
1.2课程设计的要求
A、利用ADC0809及其适当的外围电路实现直流电压的采集。
B、采集结果在LED数码管上显示出来数据范围为05v
C、绘制硬件连接图编写相应的控制程序。
D、撰写设计报告、调试报告、设计心得。
二 、电路设计方案及原理说明 依据综合课程设计的要求利用ADC0809设计一个单通道模拟电压采集显
示电路要求对所接通道变化的模拟电压值进行采集采集来的数字量送至数码
管指示出来通过相关转换在数码管上精确显示出来。本课程设计相当于测直流
电压的大小通过对电压值的采集与处理而由所学微控制器的知识可知可以
利用单片机的模数转换来实现这一设计进一步把相应的电压值精确显示出来。
模数转换就是利用单片机控制模数转换芯片A/D,让它对外部的一个模
拟信号进行采样、量化、编码然后转化为一个离散的数字量提供给控制器作进
一步处理。对于常用的A/D转换芯片有ADC0809、ADC0808等。它们都是8位的
模数转换芯片就是把模拟量转换为一个8位的二进制数。利用单片机AT89C51
与ADC0809设计一个电压采集系统将模拟信号实际设计时采用05 V之
间的直流电压值转换成数字量信号0FF以数码管显示。Proteus软件启动仿真
当前输入电压为25 0V转换成数字值为7FH用鼠标指针调节电位器尺,可改
变输入模数转换器ADC0809的电压并通过虚拟电压表观察ADC0809模拟量输
入信号的电压值LED数码管实时显示相应的数值量。

此次电压表总体的方案就是用单片机的I/O口输出信号来控制A/D启动转
换将送入的模拟量转换为一个8位数字量然后再通过I/O口送回单片机内部
进行处理单片机进行一系列的运算和校准后通过数码管将电压值显示出来。
而在方案的实现上由两部分组成硬件部分和软件部分。硬件即电子元器件的选
择且将它们连接成一个可行的硬件系统软件是硬件系统功能化的重要组成部
分。硬件的设计可以在Proteus上进行软件可以用Proteus自带的汇编工具然
后在Proteus将硬软件相结合进行仿真再根据结果不断对硬件进行改进对
软件进行调试实现电压的采集与显示功能。
2.1 ADC0809模数转换芯片
1.ADC0809是带有8位A/D转换器、8路多路开关以及微处理机兼容的控制逻辑 的CMOS组件。它是逐次逼近式A/D转换器可以和单片机直接接口。 1ADC0809的内部逻辑结构
由下图可知ADC0809由一个8路模拟开关、一个地址锁存与译码器、一个A/D
转换器和一个三态输出锁存器组成。多路开关可选通8个模拟通道允许8路模拟
量分时输入共用A/D转换器进行转换。三态输出锁器用于锁存A/D转换完的数字
量当OE端为高电平时才可以从三态输出锁存器取走转换完的数据。

2ADC0809引脚结构
ADC0809各脚功能如下
D7-D08位数字量输出引脚。
IN0-IN78位模拟量输入引脚。
VCC+5V工作电压。
GND地。
REF+参考电压正端。
REF-参考电压负端。
STARTA/D转换启动信号输入端。
ALE地址锁存允许信号输入端。
以上两种信号用于启动A/D转换.
EOC转换结束信号输出引脚开始转换时为低电平当转换结束时为高电平。
OE输出允许控制端用以打开三态数据输出锁存器。
CLK时钟信号输入端一般为500KHz。 A、B、C地址输入线。

ADC0809对输入模拟量要求信号单极性电压范围是05V若信号太小必
须进行放大输入的模拟量在转换过程中应该保持不变如若模拟量变化太快则
需在输入前增加采样保持电路。
地址输入和控制线4条
ALE为地址锁存允许输入线高电平有效。当ALE线为高电平时地址锁存与
译码器将ABC三条地址线的地址信号进行锁存经译码后被选中的通道的模拟
量进入转换器进行转换。AB和C为地址输入线用于选通IN0IN7上的一路模
拟量输入。通道选择表如下表所示。 C
B A
选择的通道
0 0 0 IN0
0 0 1 IN1
0 1 0 IN2
0 1 1 IN3
1 0 0 IN4
1 0 1 IN5
1 1 0 IN6
1 1 1 IN7 数字量输出及控制线11条 ST为转换启动信号。当ST上

跳沿时所有内部寄存器清零下跳沿时开始进
行A/D转换在转换期间ST应保持低电平。EOC为转换结束信号。当EOC为高
电平时表明转换结束否则表明正在进行A/D转换。OE为输出允许信号用
于控制三条输出锁存器向单片机输出转换得到的数据。OE1输出转换得到的数
据OE0输出数据线呈高阻状态。D7D0为数字量输出线。
CLK为时钟输入信号线。因ADC0809的内部没有时钟电路所需时钟信号必须由
外界提供通常使用频率为500KHZ
VREFVREF为参考电压输入。
2 ADC0809应用说明
1 ADC0809内部带有输出锁存器可以与AT89S51单片机直接相连。
2 初始化时使ST和OE信号全为低电平。
3 送要转换的哪一通道的地址到ABC端口上。
4 在ST端给出一个至少有100ns宽的正脉冲信号。
5 是否转换完毕我们根据EOC信号来判断。
6 当EOC变为高电平时这时给OE为高电平转换的数据就输出给单片机
了。 2.2 AT89C51单片机
ADC0809与8051单片机的硬件接口有3种形式分别是查询方式、中断
方式和延时等待方式本题中选用中断接口方式。
由于ADC0809无片内时钟时钟信号可由单片机的ALE信号经D触发器
二分频后获得。该题目中单片机时钟频率采用12MHz,则ALE输出的频率是
2MHz四分频后为500KHz,符合ADC0809对频率的要求。
由于ADC0809内部设有地址锁存器所以通道地址由P0口的低3位直接
与ADC0809的A、B、C相连。通道基本地址为0000H0007H。其对应关系上
面已做介绍。
控制信号将P2.7作为片选信号在启动A/D转换时由单片机的写信号
和P2.7控制ADC的地址锁存和启动转换。由于ALE和START连在一起因此
ADC0809在锁存通道地址的同时也启动转换。
在读取转换结果时用单片机的P3.0产生正脉冲作为OE信号用来打开
三态输出锁存器。
其接口电路如图2-2所示。

当8051通过对0000H0007H基本地址中的某个口地址进行一次写操
作即可启动相应通道的AD转换当转换结束后,ADC0809的EOC端向8051
发出中断申请信号8051通过对0000H0007H中的某个口地址进行一次读操
作即可得到转换结果。

2.3 4个共阳7段数码管显示器
共阳极7段LED数码管和共阴极LED数码管结构类似其引脚配置如图所
示。从图中可以看出7段LED数码管同样由8个发光二极管组成其中7个发光
二极管构成字形“8”另一个发光二极管构成小数点。
共阳极7段LED数码管的内部结构如图所示。其中所有发光二极管的阳极
为公共端接+5v电压。如果发光二极

管的阴极为低电平的时候发光二极管导
通该字段发光反之如果发光二极管的阴极为高电平的时候发光二极管截
止该字段不发光。


图2-2 ADC0809与AT89C51的接口
电路
共阳极7段LED引脚配置 共阳极7段LED结构图


2.4 系统整体工作原理
1 硬件设计
1系统构成
该系统主要包括几大模块数据采集模块、AD转换模块、控制模块、显示模块、
按键模块等。采用AT89C51作为控制模块ADC0809作为AD转换模块的核心
ADC0809本身具有8路模拟量输入端口通过C、B、A3位地址输入端能从8路
中选择一路进行转换。如每隔一段时间依次轮流改变3位地址输入端的地址就
能依次对8路输入电压进行测量。LED数码管的显示采用软件译码动态显示通过
按键模块的操作可以选择8路循环显示也可以选择某条单路显示。
2数据采集电路
数据采集电路是系统的主要组成部分ADC0809具有8路模拟量输入通道IN0
IN7通过3位地址输入端C、B、A(引脚2325)进行选择。引脚22为地址锁存控
制端ALE当输入为高电平时C、B、A引脚输入的地址锁存于ADC0809内部锁存
器中经内部译码电路译码选中相应的模拟通道。引脚6为启动转换控制端START
当输入一个2 US宽的高电平脉冲时就启动ADC0809开始对输入通道的模拟量进
行转换。引脚7为AD转换器当开始转换时EOC信号为低电平经过一段时间
换结束转换结束信号EOC输出高电平转换结果存放干ADC0809内部的输出数据
寄存器中。引脚9脚为AD转换数据输出允许控制端OE当0E为高电平时存放
于输出数据锁存器中的数据通过ADC0809的数据线DOD7输出。引脚10为ADC0809
的时钟信号输人端CLOCK。在连接时ADC0809的数据线D0D7与AT89C51的P1口
相连接ADC0809的地址引脚、地址锁存端ALE、启动信号START、数据输出允许
控制端OE分别与AT89C51的P3口相连接转换结束信号EOC与AT89C52的P31相连
接。

2 软件设计
1主程序
主程序包含初始化部分调用AD转换子程序和调用显示子程序。 2数据处理子程序
ADC0809转换之后输出的结果是8位二进制数。由公式(1)可知当ADC0809输出
为(1l1l11111)时输入电压值V =500V{当ADC0809输出为(00000000)时输入
电压值为0.0O0V当ADC0809输出为(10000000)时输入电压值V =250V。由于
单片机进行数学运算时结果只取整数部分因此当输出为(10000000)时计算出的
电压值V =2OOV很不准确。为了提高精确度必须把小数部分保留具体运
算方式如公式(2)。个位Dout*196/10000 十分位(Dout*196/100

0)%10 百分
位(Dout*196/100)%10 千分位Dout*196/10%10 由此得到较为精确的数
值。对上面的硬件部分按照软件流程框图进行软件设计。用C语言进行程序的
编写。
(下面的是C语言程序最后面几页还有汇编程序及其算法说
明可自己选择)
#include
#include
#define uchar unsigned char
sbit P2_0=P2^0;
sbit P2_1=P2^1; //定义数码管位码端口
sbit P2_2=P2^2;
sbit P2_3=P2^3;
sbit OE=P3^0; //定义ADC0808端口
sbit EOC=P3^1;
sbit ST=P3^2;
sbit P3_4=P3^4;
sbit P3_5=P3^5;
sbit P3_6=P3^6;
uchar code table1[]={0x40,0x79,0x24,0x30,0x19,0x12};//带小数点的0~5六

uchar code
tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳极0~9
十个段码/段码
uchar volt_data;
void init();
uchar i;
//*********************************
//延时子程序
//*********************************
void delay(uchar z)
{
uchar x,y;
for(x=z;x>0;x--) for(y=110;y>0;y--);
}
//*********************************
//将AD转换输出的数据转换成相应的
//电压值并且显示出来
//*********************************
void convert(uchar volt_data)
{

P0=table1[volt_data*196/10000]; //AD转换的个位的电压值
P2_0=1;
delay(2);
P2_0=0;


P0=tab[volt_data*196/1000%10];
P2_1=1; //显示小数点的后的第一位
delay(2);
P2_1=0;


P0=tab[volt_data*196/100%10];
P2_2=1; //显示小数点的后的第二位
delay(2);
P2_2=0;

P0=tab[volt_data*196/10%10];
P2_3=1; //显示小数点的后的第二位
delay(2);
P2_3=0;

}

void main()
{
uchar volt_data;
init();//初始化子程序
while(1)
{
if(i==5)
{
i=0;
ST=0;
_nop_(); ST=1;
_nop_();
ST=0; //启动AD转换
if(EOC==0) //等待转换结束
delay(2);
while(EOC==0);
OE=1; //允许输出
volt_data=P1;
convert(volt_data); //调用数据处理子程序
delay(2); //暂存转换结果
OE=0; //关闭输出


}
}
}
void time0_int(void) interrupt 1
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
i++;
}

void init()
{
P3_4=1; //选择通道3
P3_5=1;
P3_6=0;
TMOD=0x01;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
EA=1;ET0=1;
i=0;
TR0=1;
}
三、设计框图 31硬件总体框图
该系统硬件总体框图由四个模块组成如下图3所示。在芯片的选择中一
般的A/D芯片具有多路转换通道本课程设计中我们

只做一路通道该通道采集
电压对采集的电压值进行采集、处理并显示我们还可以通过改变A/D芯片的
参考电压来改变其量程达到对电压值的多样化显示。A/D芯片将输入的模拟电 压值转换为一个8位的二进制数字再输送到单片机控制单元经过处理显示出
相应电压值。

3.2主程序流程图
设计程序部分时主要应包括主函数和和几个功能子函数。主程序流程图
如下图所示。



压 模




块 微




块 数


示 模










制 控制模块


3.3待测信号源单元电路
待测信号源就是直流电压采集时所须测电压值的信号源其电路图如图
3-3-1所示。



该部分实际上是一个滑动变阻器均接在电源和地两端中间的滑线端提供两
路待测信号该部分提供给模数转换的通道3。
图3-3-1 待测信号源 3.4 AT89C51单片机如下图所示


3.5单片机控制单元
单片机控制单元是整个系统的核心中枢对外围进行控制对数据进行运算
处理是连接各部分的纽带。它主要包括51单片机芯片和其工作所必须的外围
电路如时钟振荡电路和复位电路等。
3.51外部时钟电路
主要是通过一个12MHZ的时钟晶振产生时钟信号以作为单片机工作的外部
时钟其XTAL1和XTAL2分别接入到单片机上相对应的引脚。电路图如图3-5-1。






图3-5-1 外部时钟电路(图中晶振标错了应为12M,上图中我就不
改了)
外部时钟的晶振频率为12MHZ,则通过该电路提供给单片机的时钟也为
12MHZ.
3.52复位电路
当对单片机的的reset引脚加超过两个机器周期以上的高电平时可使单片
机复位即程序从头开始执行。设计的复位电路如图3-5-2所示 ALER910kC310uF
图3-5-2 复位电路
3.53数码管显示模块
选用了一片集成的共阴极数码管每片是由4块8段数码管组成包括小数
点位。这4块8断数码管共用相同的数据输入线每块有一根片选线只有选
中了该数码管它才会点亮并显示。而通过动态扫描原理可以使接在同一数据线
的几块数码管显示不同的数。输入BCD码值就可以在数码管上显示十进制数字。
其中有电压表起校准对比作用。
四、实验仿真 在Proteus仿真软件平台上搭建硬件电路在keil uv2上编写软件并经编译
连接生产可执行的.hex文件把该文件添加到在Proteus平台上搭建好的电路的
单片机里。运行进行仿真调试。
仿真时数码管有示数与标准电压表的示数差不多说

明各模块均在正常
工作。
例如在5V量程下标准电压表的显示值2.50V,而数码管显示2.406标
准电压表显示4.44V,数码管示值为4.420。数码管显示结果有误差是由于
ADC0809输出的二进制码数转换为BCD码数的换算方法有一定误差导致。仿真结
果如图4-1

五、实验总结 本设计是基于ADC0809设计的电压检测装置。采用AT89C51单片机进行数据控
制、处理结构简单元件较少成本较低软件采用c语言实现程序简单可
读写性强效率高。能够实现八路待测电压测量还能够自由选择要测量的通道
与传统的电路相比具有方便操作、处理速度快、稳定性高、性价比高的优点
具有一定的使用价值。
通过本次课程设计我对模数转换芯片ADC0809有进一步了解故我将此次
设计的重点放在了功能的扩展部分模块的实现方法及显示的改变上。大三学期教
学实验中通过网上资料及课本信息我会会了简单的编程和设计最重要的是排
版效果在这些过程中我获益匪浅加深了对模数转换的了解能对其功能进行
多元化的应用数码管的显示技术上我在以前所存静态显示的基础上又掌握
了动态扫描方法另一个收获是在课程设计的过程中我边学边用C语言对简
单的C语言编程能够独立轻松的完成C语言在单片机的编程中灵活功能强大
效率高简单明了具有很多优势学会它是此次课程设计的最大收获。
本次课程设计培养了我运用互联网查找资料和综合应用课本理论知识解决
实际问题的能力。启发了我在今后的学习过程中不能懒懒散散学的要懂不懂
要把课本上的知识学精通同时也要多学习课外知识来扩张自己的知识面在计
算和动手方面要更加的耐心加细心才能把事情做得更好在生活和学习中要 和身边的人团结互助能帮的就要尽力帮。
由于能力有限我的课程设计难免有一些误差和错误还望老师批评和指正 致谢 本课程设计是在我的导师张斌张老师的亲切关怀和悉心指导下完成的。他严肃的科学态
度严谨的治学精神精益求精的工作作风深深地感染和激励着我。从课题的选择到项目
的最终完成张老师都始终给予我细心的指导和不懈的支持。虽然只有短短的一星期张老
师去教会我们很多。在此谨向郑老师致以诚挚的谢意和崇高的敬意。
另外我还要感谢在一起愉快的度过这次课程设计的伙伴正是由于你们的帮助和支持
我才能克服一个一个的困难和疑惑直至本文的顺利完成。特别感谢我的队友他对本课题
做了不少工

作给予我不少的帮助。
参考文献
[1].戴梅萼 史嘉权 微型计算机技术及应用 北京清华大学出版社2003
[2].仇玉章 32位微型计算机原理与接口技术 北京清华大学出版社2001
[3].郑学坚 周斌 微型计算机原理及应用 北京清华大学出版社1998
[4].李伯成 候伯亭 微型计算机及应用 西安电子科技大学出版社1998
[5].邓元庆 贾鹏 数字电路与系统设计 西安电子科技大学出版社2003
















下面是汇编程序其中的BCD的转换算
法不同不过后有解释

LED_0 EQU 30H ;存放三个数码管的段码
LED_1 EQU 31H
LED_2 EQU 32H
ADC EQU 35H ;存放AD转换后的数据
ST BIT P3.2
OE BIT P3.0
EOC BIT P3.1
ORG 0000H
LJMP MAIN
ORG 0030H

MAIN: MOV LED_0,#00H ;给显示赋初值0
MOV LED_1,#00H
MOV LED_2,#00H
SETB P3.4
SETB P3.5
CLR P3.6 ;选择通道3
WAIT: CLR ST
SETB ST
CLR ST ;启动AD转换
JNB EOC,$ ;等待转换结束
SETB OE ;允许输出
MOV ADC ,P1 ;暂存转换结果
CLR OE ;关闭输出
LCALL BCD ;调用数据处理子程序
LCALL LED ;调用显示程序显示转换的值
SJMP WAIT
;*******************************************
;将AD转换输出的数据转换成相应的电压值
;*******************************************
BCD:MOV A,ADC ;将AD转换结果转换成BCD码
MOV B,#51 ;255/51=5.00V
DIV AB
MOV LED_2,A ;个位数字存入LED_2中
MOV A,B ;余数大于19HF0为1乘法溢出结果加5 CLR F0
SUBB A,#1AH
MOV F0,C
MOV A, #10
MUL AB
MOV B,#51
DIV AB
JB F0,LOOP2
ADD A,#5
LOOP2: MOV LED_1,A ;小数后的第一位存入LED_1中
MOV A,B
CLR F0
SUBB A,#1AH
MOV F0,C
MOV A,#10
MUL AB
MOV B,#51
DIV AB
JB F0,LOOP3
ADD A,#5
LOOP3: MOV LED_0,A ;小数后的第二位存入LED_0中
RET
;*****************************************
; 显示程序
;*****************************************
LED:MOV A,LED_0 ;数码显示子程序
MOV DPTR,#TABLE ;送段码表首地址
MOVC A,@A+DPTR
SETB P2.3 ;允许百位输出该数码管为共阳极形
MOV P0,A ;将位段码送给P0口
LCALL DELAY ;调用延时程序
CLR P2.3 ;关闭百位显示

MOV A,LED_1
MOV DPTR,#TABLE ;送段码表首地址
MOVC A,@A+DPTR
SETB P2.2 ;允许十位输出该数码管为共阳极形
MOV P0,A

;将位段码送给P0口
LCALL DELAY ;调用延时程序
CLR P2.2 ;关闭十位显示

MOV A,LED_2
MOV DPTR,#TABLE2 ;送段码表首地址
MOVC A,@A+DPTR SETB P2.1 ;允许个位输出该数码管为共阳极形
MOV P0,A ;将位段码送给P0口
LCALL DELAY ;调用延时程序
CLR P2.1 ;关闭个位显示
RET
;**************************************
; 延时程序
;**************************************
DELAY: MOV R6,#2 ;延时1MS子程序
D1: MOV R7,#250
DJNZ R7,$
DJNZ R6,D1
RET
TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H
DB 92H, 82H,0F8H, 80H,90H ;共阳极0~9十个段码
TABLE2: DB 40H,79H,24H,30H,19H,12H ;带小数点的0~5六个段码
END
下面是BCD的转换算法的解释
手机图片比较大自己再处理一下



除以51余数最大为50

相关主题
文本预览
相关文档 最新文档