




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 成绩: 电子测量技术 课程设计报告 设计课题 简易数字电压表 学 院 姓 名 学 号 专业班级 指导老师 设计时间 简易数字电压表设计综述【摘要】随着电子科学技术、传感技术、自动控制技术和计算机技术的发展,电子测量成为广大电子工作者必须掌握的手段,对测量的精度和功能的要求也 越来越高,单片机技术作为计算机技术的一个分支广泛应用于工业控制、智能化仪器仪表、家用电器,甚至电子玩具等各个领域。本文介绍一种以89S51单片机为核心的数字电压测量电路,该电路采用ICL7135高精度、双积分A/D转换电路,测量范围直流0-5伏,使用LCD1601液晶模块显示,并可以与PC机进行串行通信。该电路
2、设计新颖、功能强大、可扩展性强。【关键词】数字电压表,单片机,AT89C51, ADC0832; 目录1 系统方案设计- 4 -1.1 设计目的- 4 -1.2 设计要求- 4 -1.3 设计任务- 4 -2 单元电路设计- 5 -2.1 设计原理- 5-2.2 硬件电路设计- 5-2.2.1 设计方框图- 6 -2.2.2 电路原理图- 7 -3 proteus软件仿真.- 7 -3.1 系统初始状态.- 8 -3.2 系统随机状态.- 8 -4 心得体会- 10 -5 参考文献- 12 -附1 源程序代码.- 14-1 系统方案设计1.1 设计目的与意义本次设计数字电压表的过程中,我学到很
3、多东西,也把之前学到的单片机相关知识应用到这次设计中来,让我学习并巩固了单片机中断和基本寄存器的使用,还有学习了外围硬件的使用以及电路原理设计和仿真。帮助我提高独立思考、独立工作、与知识应用的能力。1.2 设计要求根据设计要求如下:1) 设计数字电压表电路2) 测量范围: 直流电压0V -5V3) 画出数字电压表电路图并仿真4) 写出设计报告1.3 设计任务1)根据题目要求的指标,通过查阅有关资料,确定系统设计方案,并设计其硬件电路图。 2)画出电路方框图,叙述主要模块的功能及他们之间的控制关系和数据传输 3) 用protel等软件绘制电路原理图。希望通过Prot
4、eus等仿真软件仿真通过。 4) 软件设计包括流程图、并用汇编语言或c51对软件进行编译。并能通过调试2 单元电路设计2.1 设计原理AT89S51和ADC0832构成的数字电压表电路原理图 ,利用单片机AT89S51与ADC0832设计一个数字电压表,能够测量05V之间的直 流电压值,四位数码显示。AT89S51是 一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS -51指令系统及80C
5、51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元. AT89S51具有如下 特点:40个引脚,4k Bytes Flash片内程序存储器,128 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个 全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。此外,AT89S51设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统 可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬
6、件复位。ADC0832 为8位分辨率A/D转换芯片,其最高分辨可达256级,可以适应一般的模拟量转换要求。其内部电源输入与参考电压的复用,使得芯片的模拟电压输入在05V之间。芯片转换时间仅为32S,据有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。独立的芯片使能输入,使多器件挂接和处理器控制变的更加方便。通过DI 数据输入端,可以轻易的实现通道功能的选择。2.2 硬件电路设计2.2.1 设计方框图 图2-1 方框图2.2.2 电路原理图图2-2 原理图3 proteus软件仿真 用伟福软件编程程序,在仿真设置中选择lab2000p仿真实验仿真器,选择80
7、88/86实验仿真头,选择8088/86CPU进行c语音编程,然后进行proteus进行仿真,其仿真图如下:3.1 系统初始状态图3-1 初始图1图3-2 初始图23.2 系统随机状态图3-3 电压为0.50V时显示如图图3-4 电压为1.05V时显示如图图3-5 电压为3.00V时显示如图图3-5 电压为4.00V时显示如图图3-6 电压为5.00V时显示如图4 心得体会刚开始老师布置这个设计作业的时候,丝毫没有头绪,因为之前都没设计过东西。回去的时候,我查了一下电压表,发现网上很多关于数字电压表的设计原理图什么的,我浏览了一些,发现设计这个对我来说挺好的,刚好可以锻炼自己的能力。于是我就上
8、网查阅相关资料还有之前学过的一些课本知识,期间看了很多原理图,以及很多在不同仿真软件仿真得到的结果,结合前辈的经验,我慢慢琢磨出了数字电压表的原理了,同时我选择proteus作为这个设计的仿真软件。知道设计一个数字电压表其实需要AT89S51和ADC0832就能够实现它的功能,于是我了解到仿真需要在keil环境下进行C51的编程并调试,然后生成hex文件,之后在proteus进行软件仿真,得知需要这些软件还有所需要的编程知识,我下载了keil以及proteus软件并且去学习使用方法。结合上学期所学到的单片机知识,我自己开始尝试去编写程序,虽然遇到了一些问题,但是我通过查阅课本以及请教别人,终于
9、编好代码,然后我在proteus在连接好元器件,进行了仿真,多次的尝试,终于得出了自己想要的结果,虽然这个过程很艰辛,但是我很欣慰。整个过程,自己通过自己努力学到了很多东西,也更加锻炼了自己的独立思考,工作的能力。让我对单片机相关方面的知识理解的更加深刻,比起刚开始的无奈,我现在不仅对单片机理解更深,而且还学会了新的仿真软件,相信对我以后会有帮助的。总之,通过这次设计收获了很多,知识层面上,学得了很多新知识,解决问题的新方法。实践方面,提高了动手能力,提高了解决实际问题的能力等等。在思想上,更加明白的坚持不懈的重要性,学习探索的重要性,实践动手的重要性。虽然刚开始觉得老师布置的作业对自己来说挑
10、战很大,但是慢慢地自己钻研,觉得老师给的这个机会是对自己莫大的帮助,相信自己以后会多动手,多去实践,结合所学的知识。5 参考文献1 徐爱钧.智能化测量控制仪表原理与设计(第二版)M.北京:北京航空航天大学出版社,2004.2 吴金戌,沈庆阳,郭庭吉.8051单片机实践与应用M.北京:清华大学出版社,2002.3 高峰,单片微型计算机与接口技术M.北京:科学出版社,2003.4 刘伟,赵俊逸,黄勇,一种基予C8051F单片机的SOC型数据采录器的设计与实现附1 源程序代码#include <reg52.h>#include <intrins.h>sbit CS=P10;s
11、bit CLK=P14;sbit DO= P16;unsigned char voltage4=0,1,2,3;/03.45unsigned char encode=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,;void delay_ms(unsigned int xms) unsigned int i = 0;unsigned int j = 0;for(i=0;i<xms;i+) for(j=0;j<114;j+);/使用定时器0,工作方式1,定时5ms,使用定时器中断void Timer0Set(void) TMOD =
12、 0x01;/使用定时器0工作方式1TH0 = (65536-5000)/256;TL0 = (65536-5000)%256;ET0 = 1;EA = 1;TR0 = 1;/读取DAC083的值unsigned char GetVoltage(void) unsigned char tmp = 0;unsigned char i = 0; CLK = 0;DO = 1;/在读数据前先写1CS = 0; for(i=0;i<3;i+)/先送3个脉冲用于确定使用 CLK = 1;CLK = 0;/接着8个位输出转换结果,MSB Firstfor(i=0;i<8;i+) CLK = 1
13、;_nop_();CLK = 0;if(DO) tmp = tmp | 1<<(7-i);/最后8个位输出转换结果,LSB Firstfor(i=0;i<8;i+) /tmp >>= 1; CLK = 1;_nop_();CLK = 0;/if(DO) tmp |= 0x80;CS = 1; / P0 = tmp;return tmp;/把读取出来的数字量转换成实际的温度值然后保存在/voltage数组中void PrintToBuffer(unsigned char digit)/计算公式:电压=5/256*digit,因为结果又两位小数,我统一将/数据放大10
14、0倍进行运算,就可以避免浮点数运算. unsigned long val= 500UL*digit/256;P0 = digit; /325实际是3.25voltage3 = val%10;voltage2 = val/10%10;voltage1 = val/100;int main(void) unsigned char digit = 0; Timer0Set(); while(1) digit = GetVoltage();/获取数字量 PrintToBuffer(digit);/digit*1.0/256计算出实际电压 delay_ms(50);/每50ms进行计算一次 return 0;void Timer0_Init() interrupt 1 static unsigned char pos =
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论