收藏 分享(赏)

ADC0832的数字电压表设计.doc

上传人:liyang3100 文档编号:2190279 上传时间:2018-09-04 格式:DOC 页数:20 大小:727.96KB
下载 相关 举报
ADC0832的数字电压表设计.doc_第1页
第1页 / 共20页
ADC0832的数字电压表设计.doc_第2页
第2页 / 共20页
ADC0832的数字电压表设计.doc_第3页
第3页 / 共20页
ADC0832的数字电压表设计.doc_第4页
第4页 / 共20页
ADC0832的数字电压表设计.doc_第5页
第5页 / 共20页
点击查看更多>>
资源描述

1、浙 江 海 洋 学 院单 片 机 课 程 设 计 报 告设计题目 ADC0832 的数字电压表设计 年级专业 目 录1.引言12.方案设计 12.1 设计要求12.2 设计方案13.硬件设计23.1 单片机最小系统23.2 显示驱动部分23.3 转换电路33.4 单片机驱动部分34.软件设计44.1 软件流程 44.2 子程序模板 55 实验结果与讨论55,1 实验仿真 55.2 结果讨论 56 心得体会67 附录;程序源78 参考文献13ADC0832 的数字电压表设计1.引言随着片机技术的飞速发展,现代的电子产品几乎渗透到了社会的各个领域,有力地推动了社会生产力的发肢和社会信息化程度的提商

2、,人们为了寻求最好的科技,为了方便人类在使用科技产品的快速性,准确性。例如数字电压表能够准确的,快速的量出电压。利用 ADC0832 和 AT89C52 的结合再通过 LCD 来显示出来。ADC0832 是一个 8 位 D/A 转换器。单电源供电,从+5V+15V 均可正常工作。基准电压的范围为10V;电流建立时间为 1S;CMOS 工艺,低功耗20mW。ADC0832 转换器芯片为 20 引脚,双列直插式封装。该转换器由输入寄存器和 DAC 寄存器构成两级数据输入锁存。使用时数据输入可以采用两级锁存(双锁存)形式,或单级锁存(一级锁存,一级直通)形式,或直接输入(两级直通)形式。2.方案设计

3、2.1 设计要求按系统要实现功能,设计必须达到以下的几个步骤的要求(1)主电路系统是由 ADC0832,单片机 AT89C52 和 LCD 显示屏组成。(2)ADC0832 是模拟数字转换芯片,是将外侧电压信号转换成数字信号再通过 AT89C52 处理,再通过 LCD 显示出来(3)能测量 0-5V 的数字电压(4)测量误差不大于 0.1V2.2 设计方案2.1.1 单片机的选择本设计选用单片机 AT89C52 它是一种带 8K 字节闪烁可编程可擦除只读存储器的低电压,足够本设计之用,高性能 CMOS8 位微处理器该器件采用 ATMEL 高密度非易失存储器制造技术制造,与工业标准的 MCS-5

4、1 指令系统及 8052 产品引脚兼容,功能强大、使用方便的 AT80C52 单片机适用于许多较为复杂的应用场合。2.1.2 总体设计及系统原理数字电压表的整体设计比较简单,包括单片机,ADC0832 的芯片和 LCD 的显示电路组成。先通过 ADC0832 芯片将外侧电压信号转换成数字信号,再通过由AT89C52 组成的电路处理转换成相应的实际电压,再通过 LCD 显示电路显示出来。3.1.单片机最小系统单片机最小系统选用 AT89C52,自动复位和手动复位电路可对单片机进行复位操作。3.2.显示驱动部分本设计是选用 LCD1602 显示器进行显示,用来显示电压的数值。LCD1602 显示器

5、成本低,配置灵活与单片机接口简单,在单片机应用系统中广泛应用本设计采用 LCD1602,它是一种专门用来显示字母,数字和符号等的点阵型的液晶模块。它由若干个 57 或者 511 等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔。LCD1602 显示器与 AT89C52 相连。时 钟 电 路A/D 转 换 部 分复 位 电 路AT89C52LCD 显 示 部 分1602 液晶模块内部的控制器控制指令3.3 转换电路本设计是采用 ADC0832 芯片,ADC0832 为 8 位分辨率 A/D 转换芯片,,其最高分辨率可达 256 级,可以适应一般的模拟

6、量的转换要求。其内部电源输入与参考电压的复用,使得芯片的模拟电压输入在 05V 之间,芯片转换时间仅为32s 具有双数据输出可作为数据检控,以减少数据误差。转换速度快且稳定性强。独立的芯片使能输入,使多器件挂接和处理器控制变得更加方便。通过DI 数据输入端,可以轻易的实现通道功能的选择。CS1 CH02 CH13GND4VCC 8CLK 7DI 5DO 6U2ADC083251%RV11kC310uF3.4 单片机驱动部分在本实验中选用 ADC0832 芯片,ADC0832 芯片是美国国家半导体公司生产的一种 8 位分辨率,双通道 A/D 转换芯片。由于它体积小,兼容性,性价比高而深受单片机爱

7、好者及企业欢迎。ADC0832 为 8 位分辨率 A/D 转换芯片,其最高分辨可达 256 级,可以适应一般的模拟量转换要求。其内部电源输入与参考电压的复用,使得芯片的模拟电压输入在 05V 之间。芯片转换时间仅为 32S,据有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。独立的芯片使能输入,使多器件挂接和处理器控制变的更加方便。通过 DI 数据输入端,可以轻易的实现通道功能的选择。表:ADC0832 配置位4,软件设计4.1 软件流程在本设计实验里面单片机是对 ADC0832 的控制,在正常情况下 ADC0832 与单片机的接口应为 4 条数据线,分别是 CS,CLK,D

8、O.DI。但由于 DO 端与 DI 端在通信时并未同事有效并与单片机的接口是双向的,所以电路设计将 DO 和 DI端并联在一根数据线上使用。当 ADC0832 未工作时器 CS 输入端为高电平,此时芯片禁用 CLK 和 DI/DO 的电平可任意。当进行 A/D 转换时,必须将 CS 使能端置于低电平并且保持低电平直到转换完全结束。此时芯片开始转换工作,同时由处理器向芯片时钟输入端 CLK 输入时钟冲,DO/DI 端则使用 DI 端输入通道功能选择的数据信号。在第 1 个时钟脉冲的下沉之前 DI 端必须是高压平,表示启始信号。在第 2、3 个脉冲下沉之前 DI 端输入 2 用于选择通道功能。当此

9、 2 位数据位“1”“0”时,只对 CHO 进行单通道转换。当 2 位数据为“1”、“”时,只对 CH1 进行单通道转换。当 2 位数据位“0”、“0”时,将 CHO 作为正输入端 IN+,CH1 作为负输入端 IN进行输入。当 2 位数据位“0”、“1”时,将CHO 作为负输入端 IN-,CH1 作为正输入端 IN+进行输入。到第 3 个脉冲的下沉之后 DI 端的输入电平就失去输入作用,此后 DO/DI 端则开始利用数据输出 DO进行转换数据的读取。从第 4 个脉冲下沉开始由 DO 端输出转换数据最高位DATA7,随后每一个脉冲下沉 DO 端输出下一位数据。直到第 11 个脉冲时发出最低位数

10、据 DATAO。一个字节的数据输出完成。也正是从此位开始输出一个相反字节的数据,即从第 11 个字节的下沉输出 DATAO。随后输出 8 位数据,到第 19个脉冲时输出完成。也标志着一次 A/D 转换的结束。最后将 CS 置高平禁用芯片,直接将转换后的数据进行处理就可以了4.2 子程序模块开 始初 始 化产生时钟信号输入通道控制读取 1 字节数据将值送入指定的寄存器结 束主要控制子程序说明如下:(1)delay:延时子程序;void DelayMS(uint X)(2) void Initialize_LCD1602(),是 LCD1602 的功能设定。例如; LCD_Write_Comman

11、d(0x38);DelayMS(1);/功能设置,数据长度为 8 位,双行显示,57 点阵字体(3)void LCD_Display(uchar *str) 是 lcd 的显示程序。5 实验结果与讨论5.1 实验仿真依据各功能模块的功能要求和工作过程画出程序的流程图,然后根据流程图和系统的硬件连接写出详细的程序,接着对各个子程序进行编译,调试,运行,看看是否能达到其功能,然后再将整个程序糅合在一起进行整体软件调试。在整体调试中,需注意寄存器组不能重复,在进入中断时,哪些寄存器内容和参数需入栈保护,以及调用子程序时各参数必须统一,在编译通过时,最好能把整个程序再单步执行一遍。单步执行时看看每步执

12、行完后数据各个特殊功能寄存器中数据的变化,这样才能确保整个程序按照系统的工作过程和功能要求执行。仿真结果。5.2 讨论结果本设计以 AT89C52 单片机为系统的控制核心,采用 proteus 仿真软件进行测试。Proteus 是一款比较常用的单片机仿真软件,用 proteus 和 keil 配合进行仿真提高系统运行效率与稳定性。6.心得体会通过这次设计,使我深入了解了 AT89S52 单片机和 ADC0832(AD 转换器)的结构和特点及数字电压表的工作原理,加深了对课本理论知识的理解,锻炼了实践动手能力,理论知识与实践设计相结合,培养了创新开发的思维。在此次课程设计中,收获知识的同时,我还

13、收获了阅历。此次单片机课程设计需要运用到许多之前所学过的知识,令我认识到自己以前学习的一些不足之处,例如对以前所学知识的理解不够深刻,掌握得不够牢固,运用不够灵活。这让我懂得了认真学习的重要性,以及要孜孜不倦地钻研所学过的知识,做得融会贯通,不能一览而过,不求甚解。在边学习边动手的过程中,我对电子时钟的构造以及原理有了进一步的了解,同时也加深和巩固了我对单片机语言的认识。除此之外,由于是第一次做单片机,因此在此次课程设计的过程中,无论是电路绘制还是汇编语言编写都难免遇到了不少困难和障碍,例如 C 语言编写出错、电路元件无从入手等。在面对困难和障碍时,我庆幸自己没有退缩和逃避,而是通过各种方法,

14、迎难而上,以坚持、耐心和努力勇敢无畏地面对困难,克服困难,解决困难。让我发现问题、分析问题、解决问题以及动手实践的能力都有了很大的提高,并了解到理论知识与实践相结合的重要意义。7.附 录 A;源程序#include #include #include #define uint unsigned int#define uchar unsigned char sbit CS = P10; sbit CLK = P11; sbit DI = P12; sbit DO = P12;sbit RS = P20; sbit RW = P21;sbit E = P22; uchar Result_ADC08

15、32=0; /转换结果变量 uchar Display_Buffer 216 = “Current Voltage:“, “(CH)= 0.00V “ ; /函数声明 uchar Get_Value_ADC0832();/ 获取指定通道的 A/D 转换结果 void Refesh_Disp_Buffer();/ 刷新显示缓冲 void LCD_Busy_Check(); /忙检查 void LCD_Write_Command(uchar cmd);/向 LCD 写入命令 void Write_LCD_Data(uchar dat); /向 LCD 写入数据void Initialize_LCD

16、1602(); /液晶初始化函数 void LCD_Display(uchar str);/在 LCD 上显示字符串 void DelayMS(uint X);/ 延时程序 uchar Read_State();/ 读取 LCD 的状态 /- / 主程序 /- void main() uchar j; Initialize_LCD1602();/液晶初始化函数 while(1) for(j=0;jLSB) for(i=0;iMSB)for(i=0;i8;i+) dat2=dat2|(uchar)(DO)i); CLK=1; _nop_(); _nop_(); CLK=0; _nop_(); _

17、nop_(); CS=1; DI=1; /CLK=1; return Result_ADC0832=(dat1=dat2)?dat1:0; /- / 刷新显示缓冲 /-void Refesh_Disp_Buffer() uint t=Result_ADC0832*500.0/255; / Display_Buffer17 = t/100+0; /整数位 Display_Buffer19 = t/10%10+0; /两个小数位 Display_Buffer110 = t%10+0; /- / 延时程序 /- void DelayMS(uint X) uchar i; while(X-) for(

18、i=0;i120;i+); /- / 读取 LCD 的状态 /- uchar Read_State() uchar state; RS = 0; RW = 1; E = 1; DelayMS(1); state=P0; E = 0; DelayMS(1); return state; /-/忙等待 /- void LCD_Busy_Check() while(Read_State() DelayMS(1); /- /向 LCD 写入命令 /- void LCD_Write_Command(uchar cmd) LCD_Busy_Check(); RS = 0; RW = 0; E = 0; P

19、0 = cmd; E = 1; DelayMS(1); E = 0; /-/向 LCD 写入数据 /- void Write_LCD_Data(uchar dat) LCD_Busy_Check(); RS = 1; RW = 0; E = 0;P0 = dat; E = 1; DelayMS(1); E = 0; /- /LCD 初始化 /-void Initialize_LCD1602() LCD_Write_Command(0x38);DelayMS(1);/功能设置,数据长度为 8 位,双行显示,57 点阵字体LCD_Write_Command(0x0C);DelayMS(1);/ 显

20、示开,关光标 LCD_Write_Command(0x06);DelayMS(1);/字符进入模式:屏幕不动,字符后移 LCD_Write_Command(0x01);DelayMS(1); /清屏 /-在 LCD 上显示字符串-*/ void LCD_Display(uchar *str) uchar k; for(k=0;kstrlen(str);k+) Write_LCD_Data(strk); DelayMS(2); 8.1 参考文献1 吴炳胜,80C51 单片机原理及应用技术.北京.冶金工业出版社个 2008.2 林立,张俊亮单片机原理及应用.北京.电子工业出版社 2013 3 蓝和慧,宁武,闫晓金,单片机应用技能.北京.电子工业出版社 2009 4 王宜怀.单片机原理及其嵌入式应用教程M.北京希望电子出版社,2002. 5 蔡朝洋.单片机控制实习与专题制作.北京.北京航空航天大学出版社 20066 高禹.C语言程序设计.北京.清华大学出版社 2011

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 实用文档 > 往来文书

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报