收藏 分销(赏)

数字电压表的设计实验报告.doc

上传人:w****g 文档编号:4118596 上传时间:2024-07-30 格式:DOC 页数:7 大小:34.04KB 下载积分:6 金币
下载 相关 举报
数字电压表的设计实验报告.doc_第1页
第1页 / 共7页
数字电压表的设计实验报告.doc_第2页
第2页 / 共7页


点击查看更多>>
资源描述
数字电压表的设计 课程设计 ——基于51数字电压表设计 物理与电子信息学院 电子信息工程 1、课程设计要求 使用单片机AT89C52和ADC0832设计一个数字电压表,能够测量0-5V之间的直流电压值,两位数码显示。在单片机的作用下,能监测两路的输入电压值,用8位串行A/D转换器,8位分辨率,逐次逼近型,基准电压为 5V;能用两位LED进行轮流显示或单路选择显示,显示精度0。1伏. 2、 硬件单元电路设计 AT89S52单片机简介 AT89S52是一个低功耗,高性能CMOS 8位单片机,片内含8k Bytes ISP(In—system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS —51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S52可为许多嵌入式控制应用系统提供高性价比的解决方案。 AT89S52具有如下特点:40个引脚,8k Bytes Flash片内程序存储器,256 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级,2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。     ADC0832模数转换器简介 ADC0832 是美国国家半导体公司生产的一种8 位分辨率、双通道A/D转换芯片.由于它体积小,兼容性强,性价比高而深受单片机爱好者及企业欢迎,其目前已经有很高的普及率.学习并使用ADC0832 可是使我们了解A/D转换器的原理,有助于我们单片机技术水平的提高。 图1 芯片接口说明: · CS_ 片选使能,低电平芯片使能。 · CH0 模拟输入通道0,或作为IN+/-使用。 · CH1 模拟输入通道1,或作为IN+/-使用. · GND 芯片参考0 电位(地). · DI 数据信号输入,选择通道控制。 · DO 数据信号输出,转换数据输出。 · CLK 芯片时钟输入。 · Vcc/REF 电源输入及参考电压输入(复用)。 单片机对ADC0832 的控制原理: 正常情况下ADC0832 与单片机的接口应为4条数据线,分别是CS、CLK、DO、DI。但由于DO端与DI端在通信时并未同时有效并与单片机的接口是双向的,所以电路设计时可以将DO和DI 并联在一根数据线上使用.当ADC0832未工作时其CS输入端应为高电平,此时芯片禁用,CLK 和DO/DI 的电平可任意。当要进行A/D转换时,须先将CS使能端置于低电平并且保持低电平直到转换完全结束.此时芯片开始转换工作,同时由处理器向芯片时钟输入端CLK 输入时钟脉冲,DO/DI端则使用DI端输入通道功能选择的数据信号。在第1 个时钟脉冲的下沉之前DI端必须是高电平,表示启始信号。在第2、3个脉冲下沉之前DI端应输入2 位数据用于选择通道功能.当此2 位数据为“1"、“0”时,只对CH0 进行单通道转换.当2位数据为“1”、“1”时,只对CH1进行单通道转换.当2 位数据为“0”、 “0"时,将CH0作为正输入端IN+,CH1作为负输入端IN—进行输入。当2 位数据为“0”、“1”时,将CH0作为负输入端IN—,CH1 作为正输入端IN+进行输入。到第3 个脉冲的下沉之后DI端的输入电平就失去输入作用,此后DO/DI端则开始利用数据输出DO进行转换数据的读取。从第4个脉冲下沉开始由DO端输出转换数据最高位DATA7,随后每一个脉冲下沉DO端输出下一位数据。直到第11个脉冲时发出最低位数据DATA0,一个字节的数据输出完成。也正是从此位开始输出下一个相反字节的数据,即从第11个字节的下沉输出DATD0。随后输出8位数据,到第19 个脉冲时数据输出完成,也标志着一次A/D转换的结束.最后将CS置高电平禁用芯片,直接将转换后的数据进行处理就可以了。 ADC0832时序图: 图二 数字电压表设计的结构框图和原理图 A\D转换部分 AT89S52 数码管显示部分 时钟电路 复位电路 图3 结构框图 图4电路原理图 硬件电路实物图 图7 硬件实物图 器件清单 表1 器件清单 所用器件名称 型号及大小 个数 单片机开发板 AT89S52 一个 滑动变阻器 10K 两个 A\D转换器 ADC0832 一个 LED 共阳 两个 跳线插口 -- 若干 跳线 —- 若干 3。 软件单元电路设计 数据处理子程序主要根据标度变换公式1-1,把0~255十进制数转换为0.0V~5。0V。 主程序 #include〈reg52。h〉 #define uchar unsigned char #define uint unsigned int sbit AD_CS = P1^1; sbit CLK = P1^2; sbit DIO = P1^0; uchar code table0[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x3f};//带小数点 uchar code table1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};//不带小数点 uchar Read_ADC(void); void display(void); void main(void) { while(1) { display(); } } uchar Read_ADC(void) { uchar i = 0; uchar Value1 = 0; uchar Value2 = 0; AD_CS = 1;//关掉AD; CLK = 0; DIO = 0; AD_CS = 0;//开启芯片 DIO = 1;//开始位 CLK = 0; CLK = 1; //上升沿 DIO = 1;//单通道 CLK =0; CLK = 1; DIO = 1;//通道选择位 CLK = 0; CLK = 1; DIO = 1;//空闲位为数据输出做好准备dio要为高 CLK = 0; CLK = 1; for(i = 0;i 〈8 ;i++) //读第一次数据 { CLK = 1; //下降沿 CLK = 0; if(DIO) { Value1 |= 0x80 〉> i; } } for(i = 0; i 〈 8; i++) //读第二次数据 { if(DIO) { Value2 |= 0x01 << i; } CLK = 1; CLK = 0; } AD_CS = 1; //关掉芯片 if(Value1 == Value2) //数据校准 { return Value1; } else { return 0x00; } } void display(void) { uchar i = 0; uchar a,b; i = Read_ADC(); a=i*195/10000; //整数部分 b=i*195/1000%10;//小数点后第一位 P0=table0[a]; P2=table1[b]; } 4、课程设计总结 通过这次设计,使我深入了解了AT89S52单片机和ADC0832(A\D转换器)的结构和特点及数字电压表的工作原理,加深了对课本理论知识的理解,锻炼了实践动手能力,理论知识与实践设计相结合,培养了创新开发的思维。在此次课程设计中,收获知识的同时,我还收获了阅历.在此过程中,我们通过查找资料,请教老师,以及不懈的努力,不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。 在此,非常感谢老师的帮助,没有老师的细心讲解,我们的成功会大打折扣。 6
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服