您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 简易数字电压表的设计(论文)
第1页共17页目录1引言............................................................22系统硬件设计......................................................22.1ATMEL89C51单片机系统和显示电路...............................32.2A/D转换电路.................................................43系统软件设计......................................................53.1初始化程序....................................................53.2A/D转换子程序................................................53.3显示子程序....................................................64系统安装调试及结果...............................................144.1系统安装调试.................................................144.1.1电路焊接.................................................144.1.2程序下载及程序下载.......................................144.2系统调试结果.................................................144.2.1调试所用工具.............................................144.2.2记录测试数据.............................................145总结.............................................................156致谢.............................................................157注释8参考文献第2页共17页简易数字电压表的设计【内容摘要】此在现代检测技术中,常需用高精度数字电压表进行现场检测,将检测到的数据送入微计算机系统,完成计算、存储、控制和显示等功能。本文中的数字电压表的控制系统采用ATMEL89C51单片机,A/D转换器采用TLC549为主要硬件,实现数字电压表的硬件电路与软件设计。该系统的数字电压表电路简单,所用的元件较少,成本低,调节工作可实现自动化。【关键词】数字单片机;数字电压表;A/D转换;模拟信号1引言数字电压表(DigitalVoltmeter)简称DVM,它是采用数字化测量技术,把连续的模拟量(直流输入电压)转换成不连续、离散的数字形式并加以显示的仪表。传统的指针式电压表功能单一、精度低,不能满足数字化时代的需求,采用单片机的数字电压表,由精度高、抗干扰能力强,可扩展性强、集成方便,还可与PC进行实时通信。目前,由各种单片A/D转换器构成的数字电压表,已被广泛用于电子及电工测量、工业自动化仪表、自动测试系统等智能化测量领域,示出强大的生命力。与此同时,由DVM扩展而成的各种通用及专用数字仪器仪表,也把电量及非电量测量技术提高到崭新水平。2系统硬件设计硬件电路设计主要包括:ATMEL89C51单片机系统,A/D转换电路,显示电路。图2-1是数字电压表硬件电路原理图。第3页共17页图2-1数字电压表硬件电路原理图2.1ATMEL89C51单片机系统和显示电路由于单片机体积小、重量轻、价格便宜,所以本系统采用ATMEL89C51单片机,其原理图如图1所示。89C5l的P1、P3.0~P3-3端口作为四位LED数码管显示控制。P3.5端口用作单路显示/循环显示转换按钮,P3.6端口用作单路显示时选择通道。P0端口作TLC549的A/D转换数据读入用,P2端口用作TLC549的A/D转换控制。ATMEL89C51的性能特点:·4K字节可编程闪烁存储器·寿命:1000写/擦循环·数据保留时间:10年·全静态工作:0Hz-24MHz·三级程序存储器锁定·128×8位内部RAM·32可编程I/O线第4页共17页·两个16位定时器/计数器·5个中断源·可编程串行通道·低功耗的闲置和掉电模式·片内振荡器和时钟电路2.2A/D转换电路图2-2TLC549A/D转换原理图D/A转换电路就是将数字信号转换成模拟信号的电路。数据转换精度和转换速度是衡量D/A转换器的重要指标。A/D转换由集成电路TLC549完成。TLC549A/D转换电路如图2所示。TLC549具有8路模拟信号输入端口,地址线(23~25脚)可决定对哪一路模拟信号进行A/D转换。22脚为地址锁存控制,当输入为高电平时,对地址信号进行锁存。6脚为测试控制,当输入一个2s宽高电平脉冲时,就开始A/D转换。7脚为A/D转换结束标志,当A/D转换结束时,7脚输出高电平。9脚为A/D转换数据输出允许控制,当OE脚为高电平时,A/D转换数据从该端口输出。l0脚为0809的时钟输入端,利用单为0809的时钟输入端,利用单片机30引脚的六分频晶振频率再通过14024Z分频得到1MHz时钟。3系统软件设计第5页共17页图3-1主程序图图3-2A/D转换测量程序3.1初始化程序系统上电,初始化程序将70H~77H内存单元清0,P2口置0。系统默认为循环显示8个通道的电压值,当进行一次测量后,将显示每一通道的A/D转换值,每个通道显示时间为1S。70H~77H内存单元存放采样值,78H~7BH内存单元存放显示数据,依次为个位、十位、百位、通道标志位。3.2A/D转换子程序A/D转换子程序用来控制对0809/k路模拟输入电压的A/D转换,并将对应的数值存入70H~77H内存单元。3.3显示子程序显示子程序采用动态扫描实现四位数码管的数值显示。测量数据在显示时需转换成BCD码放在78H~7BH内存单元中,其中7BH存放通道标志数。R3作为8路循环控制,R0用作显示数据指针。第6页共17页程序代码如下:/*******************************************************************/*文件名:tlc549.c*主要功能:应用IIC总线读取tlc549模数转换后的电压值*时钟:11.0592MHz********************************************************************/#includereg52.h#includestdio.h#includeintrins.h#include164.h#defineucharunsignedchar#defineuintunsignedint#defineulongunsignedlong//sbitsda=P0^2;//sbitscl=P0^3;sbitTlc549_CLK=P2^5;sbitTlc549_DATA=P2^6;sbitTlc549_CS=P2^7;voiddelay_us(uintx);voidshift(unsignedcharfunction,intb);voidled_display();//ucharAD_convert();intTLC549_OUTPUT();/*constcharled_code[19]={0x11,0xd7,0x32,0x92,0xd4,//0,1,2,3,4第7页共17页0x98,0x18,0xd3,0x10,0x90,//5,6,7,8,90x50,0x1c,0x39,0x16,0x38,0x78,//a,b,c,d,e,f0xfe,0xef,0xff};//-dotdark/*******************************************************************/*名称:voiddelay_us(uintx)*功能:延时*输入:NULL*全局变量:NULL*返回值:NULL*调用:NULL*说明:通过改参数X来改变延时的时间********************************************************************/voiddelay_us(uintx){uinti;for(i=0;i=x;i++){_nop_();}}第8页共17页/*********************************************************************名称:voidshift(ucharn)*功能:把一个显示代码送入数码管显示*输入:NULL*全局变量:NULL*返回值:NULL*调用:NULL*说明:从最高位开始读入********************************************************************//*voidshift(ucharn){ucharm,i;m=led_code[n];scl=0;for(i=0;i8;i++){if(m&0x80){sda=1;}else{sda=0;}第9页共17页scl=1;scl=0;m=1;}}*//*********************************************************************名称:voidled_display(uintqian,ucharbai,ucharshi,ucharge)*功能:从tlc549读出一个字节数据*输入:NULL*全局变量:NULL*返回值:NULL*调用:voidshift(ucharn)*说明:把模数转换后得到的电压值调数码管显示********************************************************************/voidled_display(){ucharshi,ge;uchardianya;uintch;volatilefloatSdata=0;//dianya=AD_convert();第10页共17页dianya=TLC549_OUTPUT();Sdata=dianya*100/50.0;ch=(uint)Sdata;shi=ch/10%10;//取十位ge=ch/100;//取个位shift(0,18);shift(0,18);shift(0,18);shift(0,18);shift(0,18);shift(0,18);shift(0,shi);shift(1,ge);}/*********************************************************************名称:ucharAD_convert()*功能:从tlc549读出一个字节数据(模数转换)*输入:NULL*全局变量:NULL*返回值:T1:从tlc549中读出的数据*调用:NULL*说明:一个变量与数据口的数相或8次,就取走一个数据********************************************************************/ucharAD_convert(){ucharT1=0,i=0;第11页共17页Tlc549_CLK=0;Tlc549_CS=1;delay_us(2);//delay(10);Tlc549_CS=0;for(i=0;i8;i++){T1=T1|Tlc549_
本文标题:简易数字电压表的设计(论文)
链接地址:https://www.777doc.com/doc-2173902 .html