8通道的数字电压表设计报告

合集下载

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

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

数字电压表单片机课程设计报告班级:姓名:学号:指导教师:2011 年3 月29 日数字电压表电路设计报告一、题目及设计要求采用51系列单片机和ADC 设计一个数字电压表,输入为0~5V 线性模拟信号,输出通过LED 显示,要求显示两位小数。

二、主要技术指标1、数字芯片A/D 转换技术2、单片机控制的数码管显示技术3、单片机的数据处理技术三、方案论证及选择主要设计方框图如下:1、主控芯片方案1:选用专用转化芯片INC7107实现电压的测量和实现,用四位数码管显示出最后的转换电压结果。

缺点是京都比拟低,内部电压转换和控制局部不可控制。

优点是价格低廉。

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

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

基于课程设计的要求和实验室能提供的芯片,我选用了:方案2。

2、显示局部方案1:选用4个单体的共阴极数码管。

优点是价格比拟廉价;缺点是焊接时比拟麻烦,容易出错。

方案2:选用一个四联的共阴极数码管,外加四个三极管驱动。

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

基于课程设计的要求和实验室所能提供的仪器,我选用了:方案2。

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

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

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

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

硬件电路及软件程序。

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

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

单片机应用技术课程报告——数字电压表的设计

单片机应用技术课程报告——数字电压表的设计

单片机应用技术课程报告
5、软件程序设计
(1)、程序设计思路
2)性能指标测试及结果分析
本设计以8051单片机为控制核心,通过集成摸数转换芯片ADC0809将被测信号转换成数字信号,经单片机内部程序处理后,由LED八段数码管显示测量结果。

仿真测试表明,系统性能良好,测量读数稳定易读、更新速度合理,直流电压测量范围为0~5V,最小分辨率为0.02V,满足任务书指标要求。

但是,该系统也存在定程度的不足,例如:
1、若能将测量的电压值实时保存,使用时将更方便。

2、ADC0809可实现对8个通道的输入信号轮流转换,本设计仅仅使用了其中一个通道,造成了较大的资源浪费。

若能对电路稍加改进,实现对多路信号的轮流测量并自动保存相应结果,其应用价值将会更大。

数字电压表实验报告

数字电压表实验报告

简易数字电压表设计报告姓名:***班级:自动化1202学号:****************:***2014年11月26日一.设计题目采用C8051F360单片机最小系统设计一个简易数字电压表,实现对0~3.3V 直流电压的测量。

二.设计原理模拟输入电压通过实验板PR3电位器产生,A/D转换器将模拟电压转换成数字量,并用十进制的形式在LCD上显示。

用一根杜邦实验线将J8口的0~3.3V输出插针与J7口的P2.0插针相连。

注意A/D转换器模拟输入电压的范围取决于其所选择的参考电压,如果A/D 转换器选择内部参考电压源,其模拟电压的范围0~2.4V,如果选择外部电源作为参考电压,则其模拟输入电压范围为0~3.3V。

原理框图如图1所示。

图1 简易数字电压表实验原理框图三.设计方案1.设计流程图如图2所示。

图2 简易数字电压表设计A/D转换和计时流程图2.实验板连接图如图3所示。

图3 简易数字电压表设计实验板接线图3.设计步骤(1)编写C8051F360和LCD初始化程序。

(2)AD转换方式选用逐次逼近型,A/D转换完成后得到10位数据的高低字节分别存放在寄存器ADCOH和ADC0L中,此处选择右对齐,转换时针为2MH Z。

(3)选择内部参考电压2.4V为基准电压(在实际单片机调试中改为3.311V),正端接P2.0,负端接地。

四、测试结果在0V~3.3V中取10组测试数据,每组间隔约为0.3V左右,实验数据如表1所示:显示电压(V)0.206 0.504 0.805 1.054 1.406实际电压(v)0.210 0.510 0.812 1.061 1.414相对误差(%) 1.905 1.176 0.862 0.659 0.565显示电压(V) 2.050 2.383 2.652 2.935 3.246实际电压(v) 2.061 2.391 2.660 2.943 3.253相对误差(%)0.421 0.334 0.301 0.272 0.215表1 简易数字电压表设计实验数据(注:其中显示电压指LCD显示值,实际电压指高精度电压表测量值)五.设计结论1.LCD显示模块的CPLD部分由FPGA充当,芯片本身自带程序,所以这个部分不用再通过quartus软件进行编程。

简易数字电压表设计内容

简易数字电压表设计内容

简易数字电压表设计一、设计要求1、利用ADC0809设计一简易数字电压表,要求可以测量0—5V之间8路输入电压值、电压值由四位LED数码管显示,并在数码管上轮流显示或单路选择显示;2、测量最小分辨率为0.019V,测量误差为±0.02V。

二、设计作用与目的利用AT89S51与ADC0809设计制作一个数字表,能够测量直流电压值。

三、所用设备及软件单片机AT89S51、ADC0809芯片、PC设计台四、系统设计方案本设计采用AT89S51单片机芯片配合ADC0809模/数转换芯片构成一个简易的数字电压表,原理框图如图1所示。

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

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

同时它还通过其三位I/O口P3.0、P3.1、P3.2产生位选信号,控制数码管的亮灭。

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

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

图1 系统原理框图本设计与其它方法实现主要区别在于元器件上例如:AT89C51与AT89C51、AT89S51在AT89C51的基础上,又增加了许多功能,性能有了较大提升。

1.ISP在线编程功能,这个功能的优势在于改写单片机存储器内的程序不需要把芯片从工作环境中剥离。

是一个强大易用的功能。

2.工作频率为33MHz,大家都知道89C51的极限工作频率只有24M,就是说S51具有更高工作频率,从而具有了更快的计算速度。

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

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

单片机课程设课题名称:数字电压表课程原理:1、模数转换原理:试验中,我们选用ADC0809作为模数转换的芯片,其为逐次逼近式AD转换式芯片,其工作时需要一个稳定的时钟输入,根据查找资料,得到ADC0809的时钟频率在10KHZ~1200KHZ,我们选择典型值640KHZ。

课题要求测量电压范围是0到5V,又ADC0809的要求:V ref+<=Vcc,V ref->=GND,故我们取V ref+=+5V,V ref-=0V。

由于ADC0809有8个输入通道可供选择,我们选择IN0通道,直接使ADC0809的A、B、C接地便可以了,在当ADC0809启动时ALE引脚电平正跳变时变可以锁存A、B、C 上的地址信息。

ADC0809可以将从IN0得到的模拟数据转换为相应的二进制数,由于ADC0809输出为8位的二进制数,转换时将0到5V分为255等分,所以我们可以得到转换公式为x/255*5化简为:x/51,x为得到的模拟数据量,也就是直接得到的电压量。

在AD转换完成后,ADC0809将在EOC引脚上产生一个8倍于自身时钟周期的正脉冲,以此来作为转换结束的标志。

然后当OE引脚上产生高电平时,ADC0809将允许转换完的二进制数据输出。

2、数据处理原理:由ADC0809的转换原理可以知道我们从其得到数据还只是二进制数据,我们还需要进一步处理来的到x的十进制数,并且对其进行精度处理,也就是课题要求的的精确到小数点后两位,在这里我们用51单片机对数据进行处理。

我们处理数据的思路是:首先将得到的二进制数直接除以十进制数51,然后取整为x的整数部分,然后就是将得到的余数乘以10,然后再除以51,再取整为x的十分位,最后将得到的余数除以5得到x的百分位。

3、数据显示原理:试验中我们用到四位一体的七段数码管,所以我们只能考扫描显示来完成数码管对x的显示,我们用的是四位数码显示管,但是x只是三位的,故我们将将第四位显示为单位U,通过程序的延时,实现四位数码管的稳定显示。

8路数字电压表的设计

8路数字电压表的设计

一、实验题目:8路数字电压表的设计二、实验内容:利用单片机AT89C52与ADC0809设计一个8路数字电压表,能够测量0-5V之间的8路输入电压值,并能在四位数码管上显示。

三、要求:基本要求:1、有一路正常工作2、制作PCB板发挥部分:1、显示各路电压数及其电压值2、可通过按键进行通道选择3、当超过某一设定值时报警四、设计方案通过一个A/D(ADC0809模拟数字转换)芯片采集后将外测电压信号转换为数字信号,再由单片机(AT89C52)处理信号,输出信号,由数码管显示各路电压。

更改程序使能用按键进行复位、通道选择、单路循环选择;并在超过设定报警电压(4.7V)时以LED灯发光报警。

五、芯片、电路图1、使用芯片有ADC0809、AT89C52。

2、电路图:六、焊接根据原理图将原件焊接到PCB板上。

七、编程序、调试1、程序设计内容<1>由于ADC0809在进行A/D转换时需要有CLK信号,而此时的ADC0809的CLK 是接在AT89S51单片机的P3.3端口上,也就是要求从P3.3输出CLK信号供ADC0809使用。

因此产生CLK信号的方法就得用软件来产生了。

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

实际显示的电压值(D/256*VREF)2、调试过程<1>在实验过程中,发现了数码管显示的电压在测试的那一路电压正常显示,而其他路为不定的电压值(电压为悬浮电压),加一个排阻接地后使它和低电平相连,在未加电压的情况下为低电平,数码管显示值为0值。

<2>用原程序进行调试时,不执行报警和通道选择、单路循环选择(原程序少了通道选择函数和报警函数)。

多次修改和添加原程序后能够达到要求。

3、C语言源程序#include <reg52.h>#include <intrins.h> //延时函数用#define ad_con P2 //A/D控制口#define addata P0 //A/D数据记入读入口#define Disdata P1 //显示数据段码输出口#define uchar unsigned char#define uint unsigned intsbit ALE=P2^3; //锁存地址控制位sbit START=P2^4; //启动一次转换位sbit OE=P2^5; //0809输出数据控制位sbit EOC=P3^7; //转换结束标志位sbit DISX=Disdata^7; //LED小数点sbit A=P2^7;sbit BO=P3^5;sbit CO=P3^6;////uchar code dis_7[11]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};/*共阳7段LED段码表0.1.2.3.4.5.6.7.8.9.不亮*/uchar code scan_con[4]={0xfe,0xfd,0xfb,0xf7}; //4位列扫描控制字//11111110//11111101//11111011//11110111uchar data ad_data[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; //定义8个数据内存单元uint data dis[5]={0x00,0x00,0x00,0x00,0x00}; //定义4个显示数据单元和1个数据存储单元/////**********1ms延时子函数***********/delaylms(uint t) //t=1{uint i,j;for(i=0;i<t;i++)for(j=0;j<120;j++);}/////************显示扫描子函数***************/scan(){uchar k,n;int h;dis[3]=0x01; //通道初值为1for(n=0;n<8;n++) //每次显示8个数据{dis[2]=ad_data[n]/51; //测得值转换为3位BCD码,最大为5.00Vdis[4]=ad_data[n]%51; //余数暂存dis[4]=dis[4]*10; //计算小数第一位dis[1]=dis[4]/51;dis[4]=dis[4]%51;dis[4]=dis[4]*10; //计算小数第二位dis[0]=dis[4]/51;if(dis[2]>=4&&dis[1]>6&&dis[0]>=0)A=1;elseA=0;for(h=0;h<500;h++) //每个通道显示时间控制约为一秒{for(k=0;k<4;k++) //4位LED扫描控制{Disdata=dis_7[dis[k]];if(k==2){DISX=0;}P3=scan_con[k]; //P3.O-P3.3控制四个数码管的输出即控制输出电平的高低delaylms(1);P3=0xff;}}dis[3]++; //通道值加1}}/////*************通道选择函数*********************/tongdao(uint n){uint m,i;dis[3]=n+1;dis[2]=ad_data[n]/51; //测得值转换为3位BCD码,最大为5.00Vdis[4]=ad_data[n]%51; //余数暂存dis[4]=dis[4]*10; //计算小数第一位dis[1]=dis[4]/51;dis[4]=dis[4]%51;dis[4]=dis[4]*10; //计算小数第二位dis[0]=dis[4]/51;if(dis[2]>=4&&dis[1]>6&&dis[0]>=0)A=1;elseA=0;for(m=0;m<500;m++) //每个通道显示时间控制约为一秒{for(i=0;i<4;i++) //4位LED扫描控制{Disdata=dis_7[dis[i]];if(i==2){DISX=0;}P3=scan_con[i]; //P3.O-P3.3控制四个数码管的输出即控制输出电平的高低delaylms(1);P3=0xff;}}}/*************0809转换子函数*******************/test(){uchar m;uchar s=0x00;ad_con=s;for(m=0;m<8;m++){ALE=1;_nop_();_nop_();ALE=0; //转换通道地址锁存START=1;_nop_();_nop_();START=0; //开始转换命令_nop_();_nop_();_nop_();_nop_(); //延时4USwhile(EOC==0); //等待转换结束OE=1;ad_data[m]=addata;OE=0;s++;ad_con=s; //取A/D值,地址加1}ad_con=0x00;//控制复位}////main(){uint n,i,j;n=0;P0=0xff; //初始化窗口P1=0x00;P2=0xff;P3=0xff;i=BO;while(){test(); //测量转换一次if(i==0)for(;;){ j=CO;if(j==0){n++;}if(n>7)n=0;tongdao(n);if(i==0) break;}else{scan(); //显示八个通道值一次}}}//。

数字电压表设计实验报告

数字电压表设计实验报告
MOV R7,#6
MOV DPTR,#CS8279D
MOV R0,#30H
DISPL1:
PUSH DPL
PUSH DPH
MOV A,@R0MOV 源自PTR,#TABMOVC A,@A+DPTR
POP DPH
POP DPL
MOVX @DPTR,A
INC R0
DJNZ R7,DISPL1
DSPEXIT:
SJMP CONB3
CONB2:
MOV R7,#4
SJMP CONB3
CONB1:
MOV R7,#3
CONB3:
MOV R0,#35H
MOV A,#0BH
CONBLP:
MOV @R0,A
DEC R0
DJNZ R7,CONBLP
RET
END ; program end
二、实验结果
通过调节可变电阻VR4的电阻大小,使得输入到ADC0809的第5引脚的电压从0V变到5V,转换相应的结果并通过数码显示器显示出来。实验结果与预测结果一置。
; function: initial 8279 as 8 digtal left in ALE/10
; input parameter : none
; output parameter: none
; others 8279 command port address 0FFE9H;8279 data port address 0FFE8H
ORG 0000H
MAIN:
MOV SP, #60H
ACALL INI8279
MOV ADRESULT, #00H
MOV ADBAK, #0FFH
MAINLP:

通道的数字电压表方案设计书报告

通道的数字电压表方案设计书报告

8通道的数字电压表设计方案目录第一章设计分析1第二章硬件电路分析32.1单片机A T89C51的分析32.2 ADC0808的分析42.3显示译码器和LED分析5第三章程序设计分析63.1主函数63.2A/D转换函数63.4中断服务函数6第四章调试过程分析及仿真6第五章总结7第六章附录7第一章设计分析设计一个8通道的电压表,基于AT89X51单片机(在professional中使用的AT89C51)和ADC0809(在professional中使用的ADC0808)芯片实现模数转换,由74247显示译码器和4位LED数码管连接并显示,具有通道自选和量程(0-5v的电压)变换的功能。

设计方案如下:采用定时器/计数器T0、T1定时,T0定时溢出中断时对P3.7取反,输出频率为10KHZ的方波信号,作为ADC0808的转换时钟信号,T1定时1MS,定时溢出中断后,在中断服务程序中完成在数码管显示A/D转换结果的任务。

采用主程序、子程序结构。

主程序中完成定时器的初始化设置,产生A/D转换的启动,在转换过程中判别转换是否结束。

当转换结束时,让输入允许OE 有效,将转换结果通过P0口读到单片机内部RAM单元格储存。

将二进制数转换为十进制数的程序设计成子程序,在主程序中调用。

将LED数码管的动态显示设计成子程序,在T1的中断服务程序中调用。

第二章硬件电路分析2.1单片机AT89C51的分析AT89C51 的引脚(1)工作电源端Vcc:接+5V电源Vss:接地(2)晶振引脚(时钟电路)XTAL1:芯片内部振荡电路输入端。

XTAL2:芯片内部振荡电路输出端(3)并行I/O口引脚(4)控制引脚ALE:地址锁存使能。

当ALE为高电平时,P0口上的信息为低8位地址,在ALE信号的下降沿时将P0口上的低8位地址送地址锁存器锁存起来;在ALE为低电平期间,P0口上的信息为指令或数据信息,这样就能实现低位地址的数据分离。

RST: 复位信号。

8路数据采集系统(数字电压)单片机课程设计报告

8路数据采集系统(数字电压)单片机课程设计报告

单片机课程设计报告班级:通信一班姓名:马楠学号:6007206095目录一、8051单片机系统简介二、硬件电路原理图设计及说明三、程序流程四、程序代码五、实验总结一、8051单片机系统简介单片微型计算机简称为单片机,又称为微型控制器,是微型计算机的一个重要分支。

单片机是70年代中期发展起来的一种大规模集成电路芯片,是CPU、RAM、ROM、I/O接口和中断系统于同一硅片的器件。

80年代以来,单片机发展迅速,各类新产品不断涌现,出现了许多高性能新型机种,现已逐渐成为工厂自动化和各控制领域的支柱产业之一。

MCS-51是标准的40引脚双列直插式集成电路芯片l P0.0~P0.7 P0口8位双向口线(在引脚的39~32号端子)。

l P1.0~P1.7 P1口8位双向口线(在引脚的1~8号端子)。

l P2.0~P2.7 P2口8位双向口线(在引脚的21~28号端子)。

l P3.0~P3.7 P3口8位双向口线(在引脚的10~17号端子)AT89S51单片机及其引脚说明AT89S51是美国ATMEL公司生产的低功耗,高性能CMOS 8位单片机,片内含4KB 的可系统编程的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准8051指令系统及引脚。

它集Flash程序存储器既可在线编程(ISP)也可用传统方法进行编程及通用 8位微处理器于单片芯片中,具有高性价比。

AT89S51是一个有40个引脚的芯片,引脚配置如图2 AT89S51引脚配置所示。

图2 AT89S51引脚配置AT89S51芯片的40个引脚功能为:VCC 电源电压。

GND 接地。

RST 复位输入。

当RST变为高电平并保持2个机器周期时,将使单片机复位。

WDT溢出将使该引脚输出高电平,设置SFR AUXR的DISRTO位(地址8EH)可打开或关闭该功能。

DISKRTO位缺省为RESET输出高电平打开状态。

XTAL1 反向振荡放大器的输入及内部时钟工作电路的输入。

数字电压表设计报告

数字电压表设计报告

数字电压表设计(设计者:陈)一、设计任务和要求1.1、任务描述:1、以单片机为核心,设计一个数字电压表,能够对至少两路0~5V 的模拟电压进行采集,采集数据送LED 显示。

2、设计显示模式切换按钮,可单独显示某一路电压信号,也能对所有电压信号进行循环显示。

3、超过界限指示灯闪烁。

4、创新功能 1.2、任务要求:1、理解任务书要求,明确分工,查找相关资料,制定系统方案;2、论证系统设计方案,运用Proteus 等软件绘制电路原理图;3、根据硬件电路,确定算法,设计程序框图,编写程序代码;4、误差分析与改进,完成设计报告。

二、方案论证2.1、由ADC0808构成模数转换,其原理图如下所示:ADA ADB ADC OUT121ADD B 24ADD A25ADD C 23VREF(+)12VREF(-)16IN31IN42IN53IN64IN75START 6OUT58EOC 7OE9CLOCK 10OUT220OUT714OUT615OUT817OUT418OUT319IN228IN127IN026ALE 22U2ADC0808Volts+1.30Volts+4.2526%RV11k85%RV21k2.2、由ATC89C51控制程序模块,由IO 口分别对显示,输入等模块进行控制。

2.3、由四位一体数码管对测量值进行显示,如下图所示:E G 1E G 2E G 3E G 4R24702.3、由按钮控制循环/单路切换,如下图所示:KEY1循环/单路KEY2通道选择2.4、LED 灯报警,当电压超过一定值时会闪烁。

D1LED-BLUE三、电路基本单元电路设计下面是数字电压表的原理图:S E G 1S E G 2S E G 3SEG1SEG2SEG3ADA ADA ADB ADCADB ADC SEG4S E G 4XTAL218XTAL119ALE 30EA31PSEN 29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD 10P3.1/TXD 11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR 16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT89C51X1CRYSTALC130pFC230FR110kC310uFOUT121ADD B 24ADD A25ADD C 23VREF(+)12VREF(-)16IN31IN42IN53IN64IN75START 6OUT58EOC 7OE9CLOCK 10OUT220OUT714OUT615OUT817OUT418OUT319IN228IN127IN026ALE 22U2ADC0808R2470R3470R4470R5470R6470R7470R8470R9470+88.8Volts+88.8Volts26%RV11k85%RV21kKEY1循环/单路KEY2通道选择D1LED-BLUE3.1、主控模块该设计的核心控制电路是 AT89C52单片机。

数字电压表实验报告

数字电压表实验报告

简易数字电压表目录摘要及关键词 (2)一、实现方案 (3)1.硬件选择方案 (4)2.程序设计 (12)二、系统的测试与结果 (17)三、调试过程及问题解决方法 (18)四、课题设计的收获及心得 (18)参考文献 (18)摘要:本课题实验主要采用AT89S51芯片和ADC0809芯片来完成一个简易的数字电压表,能够对输入的0~5 V的模拟直流电压进行测量,并通过一个4位一体的7段LED数码管进行显示,测量误差约为0.02 V。

该电压表的测量电路主要由三个模块组成:A/D转换模块、数据处理模块及显示控制模块。

A/D转换主要由芯片ADC0809来完成,它负责把采集到的模拟量转换为相应的数字量再传送到数据处理模块。

数据处理则由芯片AT89S51来完成,其负责把ADC0809传送来的数字量经一定的数据处理,产生相应的显示码送到显示模块进行显示;另外它还控制着ADC0809芯片的工作。

显示模块主要由7段数码管及相应的驱动芯片(74HC245)组成,显示测量到的电压值。

关键词:简易数字电压表、ADC0809、AT89S51。

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

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

AT89S51负责把接收到的数字量经过数据处理,产生正确的7段数码管的显示段码,并通过其P1口经驱动芯片74HC245驱动,再传送给数码管。

同时它还通过其三位I/O口P3.0、P3.1、P3.2产生位选信号,控制数码管的亮灭。

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

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

ADC0809数字电压表报告

ADC0809数字电压表报告

摘要数字电压表的基本工作原理是利用A/D转换电路将待测的模拟信号转换成数字信号,通过相应换算后将测试结果以数字形式显示出来的一种电压表。

较之于一般的模拟电压表,数字电压表具有精度高、测量准确、读数直观、使用方便等优点。

A/D转换主要由芯片ADC0809来完成,它负责把采集到的模拟量转换为相应的数字量在传送到数据处理模块。

数据处理则由芯片STC89C52来完成,其负责把ADC0809传送来的数字量经过一定的数据处理,产生相应的显示码送到显示模块进行显示;此外它还控制着ADC0809芯片工作。

此数字电压表可以测量0-5V的1路模拟直流输入电压值,并通过一个四位一体的7段数码管显示出来。

关键字:STC89C52、ADC0809、数字电压表、A/D转换一、设计任务与要求1.1 设计任务基于单片机制作一个简易数字电压表,利用ADC0809芯片将电位器102的电阻值转换为电压值显示在数码管上。

1.2 设计要求(1)以STC89C52系列单片机为核心器件组成一个简单的直流数字电压表;(2)采用1路模拟量输入,能够测量0-5V之间的直流电压;(3)电压显示用4位一体的共阴级LED数码管显示,至少能够显示两位小数;(4)A/D转换采用ADC0809实现,与单片机的接口为P1口和P3口部分引脚。

LED数码管的段码输入由并行端口P0产生,位码输入用并行端口P2高四位产生。

二、方案设计2.1 硬件设计2.1.1单片机模块设计单片机控制模块的作用是为控制各单元电路的运行并完成数据的换算或处理,主要由单片机、时钟电路、复位电路组成。

STC89C52是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash 存储器,其引脚如下图所示:STC89C52引脚图2.1.2 P0口上拉电阻一般作单键触发使用时,如果IC本身没有内接电阻,为了使单键维持在不被触发的状态或是触发后回到原状态,必须在IC外部另接一电阻。

数字电路有三种状态:高电平、低电平、和高阻状态,有些应用场合不希望出现高阻状态,可以通过上拉电阻或下拉电阻排阻消除高阻状态。

毕业设计 数字电压表的设计

毕业设计 数字电压表的设计

目录1引言 (1)1.1设计背景 (1)1.2设计目的 (1)1.3设计要求及功能 (1)2总体设计 (3)2.1各模块方案选择 (3)2.2总体设计框图 (3)3系统硬件电路设计 (5)3.1单片机芯片AT89S52 (5)3.1.1主要特性 (5)3.1.2引脚说明 (6)3.1.3振荡器特性 (8)3.1.4芯片擦除 (8)3.2A/D转换模块设计 (8)3.2.1 ADC0809简介 (8)3.2.2引脚说明 (9)3.2.3 ADC0809A/D工作原理 (10)3.3显示电路设计 (11)3.4时钟电路设计 (12)3.5复位电路设计 (13)3.6通道选择电路设计 (13)4软件设计 (15)4.1主程序设计 (15)4.2各子程序设计 (16)4.2.1A/D转换子程序 (16)4.2.2显示子程序 (16)4.2.3按键子程序 (17)5结束语 (19)参考文献 (20)附录A 总电路图 (21)附录B PCB图 (22)附录C 程序 (23)致谢 (27)摘要本设计中的数字电压表主要利用AT89S52单片机进行电压的测量控制,采用ADC0809转换器对输入的电压值进行转换,通过单片机扫描按键来控ADC0809的通道选择,分时测量8路模拟电压值,并处理转换后的数字电压值,然后送给LED数码管动态显示,并同时显示通道值。

实现了对0~5V的8路输入电压值的高精度测量和数字化显示。

关键词:数字电压表;AT89S52;ADC0809;数码管AbstractThis design digital voltmeter for voltage measurement and control uses AT89S52 microcontroller, using ADC0809 converter to convert the value of the input voltage, controlled by the microcontroller scan button ADC0809 channel selection, measures 8-channel analog voltage value of time-sharing, and processes the digital voltage value after the conversion, and then sents to the LED digital tube dynamic display, and at the same time to displays the channel value. Input voltage values of 0~5V, 8-channel high-precision measurement and digitization.Key words: digital voltmeter;AT89S52;ADC0809;digital tube1引言1.1设计背景数字电压表(Digital V oltmeter)简称DVM,它是在50年代初,60年代末发起来的电压测量仪表。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

8通道的数字电压表
设计方案
目录
第一章设计分析 (1)
第二章硬件电路分析 (3)
2.1单片机AT89C51的分析 (3)
2.2 ADC0808的分析 (4)
2.3显示译码器和LED分析 (5)
第三章程序设计分析 (6)
3.1主函数 (6)
3.2A/D转换函数 (6)
3.4中断服务函数 (6)
第四章调试过程分析及仿真 (7)
第五章总结 (8)
第六章附录 (9)
第一章设计分析
设计一个8通道的电压表,基于AT89X51单片机(在professional中使用的AT89C51)和ADC0809(在professional中使用的ADC0808)芯片实现模数转换,由74247显示译码器和4位LED数码管连接并显示,具有通道自选和量程(0-5v 的电压)变换的功能。

设计方案如下:
采用定时器/计数器T0、T1定时,T0定时溢出中断时对P3.7取反,输出频率为10KHZ的方波信号,作为ADC0808的转换时钟信号,T1定时1MS,定时溢出中断后,在中断服务程序中完成在数码管显示A/D转换结果的任务。

采用主程序、子程序结构。

主程序中完成定时器的初始化设置,产生A/D 转换的启动,在转换过程中判别转换是否结束。

当转换结束时,让输入允许OE 有效,将转换结果通过P0口读到单片机内部RAM单元格储存。

将二进制数转换为十进制数的程序设计成子程序,在主程序中调用。

将LED数码管的动态显示设计成子程序,在T1的中断服务程序中调用。

第二章硬件电路分析
2.1单片机AT89C51的分析
AT89C51 的引脚
(1)工作电源端
Vcc:接+5V电源
Vss:接地
(2)晶振引脚(时钟电路)
XTAL1:芯片内部振荡电路输入端。

XTAL2:芯片内部振荡电路输出端(3)并行I/O口引脚
(4)控制引脚
ALE:地址锁存使能。

当ALE为高电平时,P0口上的信息为低8位地
址,在ALE信号的下降沿时将P0口上的低8位地址送地址锁存器锁
存起来;在ALE为低电平期间,P0口上的信息为指令或数据信息,
这样就能实现低位地址的数据分离。

RST: 复位信号。

复位信号是高电平有效,高电平有效的持续时间为2个机器周期以上。

单片机的复位方式可由手动复位方式完成。

2.2 ADC0808的分析
ADC0808是一种较为常用的8路模拟输入量,芯片的主要部分是一个8位的逐次比较式A/D转换器。

为了能实现8路模拟信号的分时采集,在芯片内部设置了多路模拟开关及通道地址锁存和译码电路,因此能够对多路模拟信号进行分时采集和转换。

转换后的数据送入三态输出数据锁存器。

ADC0808的引脚排布
IN0~IN7:8路模拟量输入端
DB0~DB7:数字量输入端
START:启动脉冲信号输入端,脉冲上升沿复位0808,下降沿启动A/D 转换
ALE:地址锁存信号,高电平有效时把三个地址信号送入地址所存器,并经地址译码得到地址输出,用以选择相应的模拟输入通道。

EOC:转换结束信号。

转换开始时变低,转换结束时变高,变高时降转换结果打入三态输出锁存器。

OE:输出允许信号输入端
CLOCK:时钟输入信号,最高允许值为640KHZ
VREF(+):正基准电压输入端
VREF(-):负基准电压输入端
GND:接地
Vcc:电源电压
2.3显示译码器和LED分析
共阳极的七段译码器是将十进制的数转化成字形码在与P1口的高四位位控码共同作用下显示出当前电压。

第三章程序设计分析
3.1主函数
主程序内容首先是程序初始化,初始化的内容有定时器初始化,外部中断初始化,然后一个无限循环,循环内容为P2赋值,控制所选通道,调用A/D转换程序和调用BCD显示程序。

3.2A/D转换函数
START赋值启动转换,进行转换,然后在判断是否转换结束,如果结束之后就允许输出信号,读入转化二进制,然后在通过译码器把二进制转换为十进制输出显示。

3.3BCD显示函数
输出所选通道,进行延时,然后输出整数和小数显示代码,点亮小数点,进行延时,
3.4中断服务函数
定时器中断向CLOCK输入方波信号,部中断控制所选通道。

第四章调试过程分析及仿真
写出程序后,进行目标构造,修改错误产生hex文件。

作出图,并对其进行仿真。

仿真效果如下:
第五章总结
这份作业其实做了很久,我觉得关键还是编程,一直没有编好程序,所以其他的所有东西都不能做。

即使老师分析过一通道和八通道的程序,还是不会啊。

然后后来写出来的程序有又很多的错误。

最后请教同学,帮助我改错,最后终于对了。

所以,以后要好好学习。

不然写个程序都不会。

还要多一点的实际操作,对程序的输入还要更加仔细点。

不然每次都把时间花费在找错误上面。

细心,细心,在细心啊。

第六章附录
#include <reg51.h>
unsigned char code dispcode[4]={0x10,0x20,0x40,0x80}; unsigned char dispbuf[3];
unsigned char M[8]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07}; unsigned char N[8]={0,1,2,3,4,5,6,7};
unsigned char i,g;
unsigned char t=0;
sbit DP=P3^5;
sbit CLK=P3^7;
sbit ST=P3^0;
sbit OE=P3^1;
sbit EOC=P3^2;
void bcd();
void main()
{
TMOD=0x02;
IE=0x86;
TCON=0x04; IP=0;
TH0=206;
TL0=206;
TR0=1;
while(1)
{
P2=M[t];
bcd();
ST=0;
ST=1;
ST=0;
while(EOC==0) {;}
OE=1;
g=P0;
OE=0;
dispbuf[0]=g/51;
dispbuf[1]=((g%51)*10)/51; }
}
void bcd()
{
P1=N[t]|dispcode[0];
for(i=0;i<100;i++);
P1=dispcode[2]|dispbuf[0]; DP=0;
for(i=0;i<100;i++);
P1=dispcode[3]|dispbuf[1]; DP=1;
for(i=0;i<100;i++);
}
void EXT1()interrupt 3 {
if(t<7)t++;
else t=0;
}
void t0()interrupt 1 {
CLK=~CLK;
}。

相关文档
最新文档