目录摘要1绪论1.1数字电压表介绍1.2仿真软件介绍1.3本次设计要求2单片机和AD相关知识2.151单片机相关知识2.2AD转换器相关知识3数字电压表系统设计3.1系统设计框图3.2单片机电路3.3ADC采样电路3.4显示电路3.5供电电路和参考电压3.6数字电压表系统电路原理图4软件设计4.1系统总流程图4.2程序代码5数字电压表电路仿真5.1仿真总图5.2仿真结果显示6系统优缺点分析7心得体会参考文献1绪论1.1数字电压表介绍数字电压表简称DVM,数字电压表基本原理是将输入的模拟电压信号转化为数字信号,再进行输出显示。而A/D转换器的作用是将连续变化的模拟信号量转化为离散的数字信号,器基本结构是由采样保持,量化,编码等几部分组成。因此A/D转换是此次设计的核心元件。输入的模拟量经过A/D转换器转换,再由驱动器驱动显示器输出,便得到测量的数字电压。本次自己的设计作品从各个角度分析了A/D转换器组成的数字电压表的设计过程及各部分电路的组成及原理,并且分析了数模转换进而使系统运行起来的原理及方法。通过自己的实践提高了动手能力,也只有亲历亲为才能收获掌握到液晶学过的知识。其实也为建立节约成本的意识有些帮助。本次设计同时也牵涉到了几个问题:精度、位数、速度、还有功耗等不足之处,这些都是要慎重考虑的,这些也是在本次设计中的收获。1.2仿真软件介绍ProteusISIS是英国Labcenter公司开发的电路分析与实物仿真软件。它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件的特点是:(1)实现了单片机仿真和SPICE电路仿真相结合。具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。(2)支持主流单片机系统的仿真。目前支持的单片机类型有:68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。(3)提供软件调试功能。在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如KeilC51uVision2等软件。(4)具有强大的原理图绘制功能。可以仿真51系列、AVR、PIC、ARM、等常用主流单片机。还可以直接在基于原理图的虚拟原型上编程,再配合显示及输出,能看到运行后输入输出的效果。配合系统配置的虚拟逻辑分析仪、示波器等,Proteus建立了完备的电子设计开发环境。在PROTEUS绘制好原理图后,调入已编译好的目标代码文件:*.HEX,可以在PROTEUS的原理图中看到模拟的实物运行状态和过程。PROTEUS是单片机课堂教学的先进助手。PROTEUS不仅可将许多单片机实例功能形象化,也可将许多单片机实例运行过程形象化。前者可在相当程度上得到实物演示实验的效果,后者则是实物演示实验难以达到的效果。它的元器件、连接线路等却和传统的单片机实验硬件高度对应。这在相当程度上替代了传统的单片机实验教学的功能,例:元器件选择、电路连接、电路检测、电路修改、软件调试、运行结果等。课程设计、毕业设计是学生走向就业的重要实践环节。由于PROTEUS提供了实验室无法相比的大量的元器件库,提供了修改电路设计的灵活性、提供了实验室在数量、质量上难以相比的虚拟仪器、仪表,因而也提供了培养学生实践精神、创造精神的平台。1.3本次设计要求本次设计的作品要求制作数字电压表的量程为0到10v,由于用到的模数转换芯片是ADC0809,设计系统给的供电电压为+5v,所以能够测量的电压范围为-0.25v到5.25v之间,但是一般测量的直流电压范围都在这之上,所以采用电阻分压网络,设计的电压测量范围是0到25v之间,满足设计要求的最大量程5v的要求。同时设计的精度为小数点后三位,满足要求的两位小数的精度,在不考虑AD芯片的量化误差的前提下,此次设计的精度能够满足一般测量的要求。2单片机和AD相关知识2.151单片机相关知识51单片机是对目前所有兼容intel8031指令系统的单片机的统称。该系列单片机的始祖是intel的8031单片机,后来随着技术的发展,成为目前广泛应用的8为单片机之一。单片机是在一块芯片内集成了CPU、RAM、ROM、定时器/计数器和多功能I/O口等计算机所需要的基本功能部件的大规模集成电路,又称为MCU。51系列单片机内包含以下几个部件:一个8位CPU;一个片内振荡器及时钟电路;4KB的ROM程序存储器;一个128B的RAM数据存储器;寻址64KB外部数据存储器和64KB外部程序存储空间的控制电路;32条可编程的I/O口线;两个16位定时/计数器;一个可编程全双工串行口;5个中断源、两个优先级嵌套中断结构。51系列单片机如下图:图151单片机引脚图2.2A/D转换器相关知识ADC0809是美国国家半导体公司生产的CMOS工艺8通道,8位逐次逼近式A/D转换器。其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。(1)主要特性: 1)8路输入通道,8位A/D转换器,即分辨率为8位。 2)具有转换起停控制端。 3)转换时间为100μs(时钟为640kHz时),130μs(时钟为500kHz时) 4)单个+5V电源供电 5)模拟输入电压范围0~+5V,不需零点和满刻度校准。 6)工作温度范围为-40~+85摄氏度 7)低功耗,约15mW。(2)内部结构ADC0809是CMOS单片型逐次逼近式A/D转换器,内部结构如图13.22所示,它由8路模拟开关、地址锁存与译码器、比较器、8位开关树型A/D转换器、逐次逼近寄存器、逻辑控制和定时电路组成。图2ADC0909引脚3数字电压表系统设计3.1系统设计框图此次设计的是数字电压表,要求的电压范围是0~5v,而设计扩展的量程为0~25v。系统设计主要包括四个部分:分别是电源模块、AD模数转换部分、51单片机最小系统部分、1602液晶显示部分。首先由单片机初始化ADC0809模数转换芯片和1602液晶显示,当外接被测电压后,ADC0809将模拟电压信号转换为数字信号输入到单片机的I/O口,通过单片机处理后将电压的大小显示在1602液晶上面。如下是本次设计作品的框图:图3系统框图3.2单片机电路单片机最小系统如下图所示,各个引脚都已经标出,而且四个I/O口都已经用排阵引出,方便外接I/O扩展用。图4单片机最小系统3.3ADC采样电路由于ADC0809是带地址锁存的模数转换器件,ADDA、ADDB、ADDC为模拟通道选择,编码为000~111分别选中IN0~IN7。ALE为地址锁存信号,其上升沿锁存ADDA、ADDB、ADDC的信号,译码后控制模拟开关,接通八路模拟输入中相应的一路。CLK为输入时钟,为AD转换器提供转换的时钟信号,典型工作频率为640KHz。START为AD转换启动信号,正脉冲启动ADDA~ADDC选中的一路模拟信号开始转换。OE为输出允许信号,高电平时候打开三态输出缓存器,是转换后的数字量从D0~D7输出。EOC为转换结束信号,启动转换后EOC变为低电平,转换完成后EOC编程高电平。图5ADC模数转换3.4显示电路以下是1602液晶引脚的接线图,中间没有接线的为数据控制端口。1602字符型通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样:图61602引脚图3.5供电电路和参考电压由于此次系统的芯片工作电压为+5v,所以用常用的三端稳压器LM317和LM337构成的电源系统供电,其中ADC0809要提供一个准确的参考电源才能正常的工作,而LM317正好能够达到要求。图7系统供电部分3.6数字电压表系统电路原理图如下是此次数字电压表系统的总原理图,其中的连线用网络标号表示出来,省去了连线的麻烦,而且是总图的可读性增强。图8数字电压表总原理图4软件设计4.1系统总流程图此次设计的数字电压表系统比较简单,就设置了一个量程为0~25v,所以没有用到按键控制,也没有其他的功能,因此程序比较简单,在输入模拟信号时采用电阻分压,最终的采样输入电压只有实际输入电压的十分之一,所以在编写程序中要编写一段数据调整程序,如下为系统总流程图:开始结束初始化AD采样量化液晶显示图9系统流程图4.2程序代码/********电压表********/#includereg52.h#includeintrins.h//库函数头文件,代码中引用了_nop_()函数/*ADC初始定义*/sbitstart=P3^0;//转换开始控制sbitoe=P3^2;//输出允许控制sbiteoc=P3^1;//转换结束信号sbitclock=P3^3;//转换时钟sbitP0_2=P0^2;//蜂鸣器sbitP0_5=P0^5;sbitP0_6=P0^6;sbitP0_7=P0^7;/*1602液晶初始定义*/sbitRS=P0^0;//读控制sbitRW=P0^3;//写控制sbitE=P0^1;//使能端unsignedcharda0,da1,da2,da3,da4;unsignedinttemp;unsignedintd1,d2,d3;unsignedchardat;//数字电压量unsignedcharlcdd[]=0123456789;voidlcd_w_cmd(unsignedcharcom);//写命令函数voidlcd_w_dat(unsignedchardat);//写数据函数voiddisplay(unsignedchardat);//显示函数unsignedcharlcd_r_start();//读状态函数voidint1();//LCD初始化函数voiddelay(unsignedchart);//可控延时函数voiddelay1();//软件实现延时函数,5个机器周期/*显示函数部分*/voiddisplay(unsignedchardat){temp=5*dat;//量程扩大五倍da0=temp/51/10;//十位da1=temp/51%10;//个位d1=temp%51;d1=d1*10;da2=d1/51;//十分位d2=d1%51;d2=d2*10;da3=d2/51;//百分位d3=d2%51;d3=d3*10;da4=d3/51;//千分位lcd_w_cmd(0x0c);//设置光标不显示、不闪烁delay(20);lcd_w_cmd(0xc0);//第二行起始显示地址0x80delay(20);delay(2);lcd_w_dat('V');//显示字符串‘volatageis’lcd_w_dat('o');lcd_w_dat('l');lcd_w_dat('a');lcd_w_dat('t');lcd_w_dat('a');lcd_w_dat('g');lcd_w_dat('e');lcd_w_dat('');//显示电压的大小lcd_w_dat(lcdd[da0]);//十位lcd_w_dat(lcdd[da1]);//个位lcd_w_dat('.');//小数点lcd_w_dat(lcdd[da2]);//十分位lcd_w_dat(lcdd[da3]);//百分位lcd_w_dat(lcdd[da4]);//千分位lcd_w_dat('V');//单位}/*主函数*/voidmain(){P0_2=1;//关蜂鸣器P0_5=P0_6=P0_7=0;//选择000第一通道int1();//LCD初始化while(1){start=0;start=1;//获得上升沿复位start=0;//获得下降沿启动转换,同时ALE开锁存do{clock=~cl