您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 基于单片机的数字电压表设计报告
单片机原理及系统课程设计专业:电气工程及其自动化班级:姓名:学号:指导教师:兰州交通大学自动化与电气工程学院2010年3月7日评语:考勤(10)守纪(10)过程(40)设计报告(30)答辩(10)总成绩(100)单片机原理及系统课程设计报告1基于单片机的数字电压表设计摘要本文是基于单片机的数字电压表的设计,用单片机AT89S52作为主控单元,ADC0809作模数转换芯片,测量0~5V直流电压,其测量最小误差为0.02V。本设计主要分为硬件电路及软件程序两部分。硬件电路可分为A/D转换电路、LED显示电路。程序的设计使用C语言编程。关键词:AT89S52;数字电压表;ADC0809AbstractThedesignofthisarticleisbasedonsinglechipmicrocomputerdigitalvoltmeter,AT89S52MCUasthemaincontrolunit,theADC0809modulusconversionchip,measurementof0~5Vdcvoltage,theminimumerrorofmeasurementis0.02V.Thisdesignismainlydividedintotwoparts,hardwarecircuitandsoftwareprogram.HardwarecircuitcanbedividedintoA/Dconversioncircuit,LEDdisplaycircuit.ProgramdesignusingClanguageprogramming.KeyWords:AT89S52,DigitalVoltmeter,ADC08091.引言随着电子时代的来临,人们对各种数字仪表的精度要求更高,以前的指针仪表已经不能满足人们的需要,所以就出现了数字电压表这种更精确的测量仪器。本次课程设计的主要任务是完成模拟量电压转换成数字量电压,然后通过数码管显示出来。主要包括两大模块:转换模块,显示模块,结合硬件和软件,使误差最小。2.系统总体方案设计2.1总体设计方案根据系统设计的要求和功能,将系统分为主控模块,A/D转换模块,LED显示模块,复位电路,时钟电路几个模块,系统框图如图1所示,主控模块采用AT89S52单片机,A/D转换模块采用ADC0809芯片,用于A/D转换,显示模块采用4位七段共阳LED数码管,用于显示电压值。单片机原理及系统课程设计报告22.2系统组成框图图2.2系统组成框图3.硬件设计3.1系统硬件设计原理通过变量设置选择八路通道中的第三路,将该路模拟电压送入ADC0808相应通道,单片机软件设置ADC0808开始A/D转换,转换结束ADC0808的EOC端口产生高电平,同时将ADC0808的OE端口置为高电平,单片机将ADC0809转换后的数字量存到片内RAM。系统调出数据处理子程序,将测量结果转化为0.00~5.00V,最后通过查表将每一位数据输出到LED显示电路,将相应电压显示出来,程序进入下一个循环。单片机的P0.0~P0.7作为4位动态数码显示管的段显示控制。P2.1~P2.3作为4位动态显示管的位显示控制。3.2硬件设计原理图在Proteus仿真环境下所搭建的系统硬件电路图如图3.2所示。单片机输入电路时钟及复位电路显示电路单片机原理及系统课程设计报告3图3.2系统原理图4软件设计4.1软件设计方案主程序包含初始化部分,调用A/D转换子程序和延时部分。A/D转换程序由开始设定的ST的变化开始(产生下跳沿使ADC0809的START开始运转)然后当转换结束(EOC=1)时,开始传输数据到P1(OE=1输出允许信号置1)至传输结束时OE置0,将获得的电压量转换成所对应的16进制数据并寄存,再通过取模的方式把各位数字逐个提取,最后通过查询代码表得到相应的BCD码,最后显示即可结束。ADC0809转换之后输出的结果是8位二进制数。当ADC0809输出为(111111111)时,输入电压值VI=5.00V;当ADC0809输出为(00000000)时,输入电压值为VI=0.00V;当ADC0809输出为(10000000)时,输入电压值VI=2.50V。由于单片机进行数学运算时结果只取整数部分,因此当输出为(10000000)时计算出的电压值VI=2.00V,很不准确。为了提高精确度,必须把小数部分保留,具体方法是:如果小数点后保留两位,在运算的时候分子乘以100,保留三位就乘以1000。本设计是在小数点后保留两位,运算方式如公式VI=Dout/255×5×100=Dout×100/51。4.2主程序流程图单片机原理及系统课程设计报告4图4.2为程序软件设计流程图,其中(a)为主程序流程图,(b)为A/D转换子程序流程图。(a)主程序流程图(b)AD转换流程图5.系统调试及仿真结果图4.2程序流程图开始结束结束开始初始化调用A/D转换程序调用显示子程序调用延时程序开始模数转换取得模数转换结果兵转化为数字量显示转化结果转换是否完成?Y(a)主程序流程图(a)主程序流程图N(a)主程序流程图(a)主程序流程图单片机原理及系统课程设计报告56.总结两周的课程设计结束了,在这过程中,我学到了很多东西。首先,我学会了单片机设计的基本过程有哪些,每一过程有哪些基本的步骤,怎样通过查资料去完成这每一步。其次我巩固了上学期所学的一些单片机知识,从而加深了对ADC0809芯片的功能的了解。在编程过程中,遇到了许多困难,通过与同学之间的交流和咨询,最后解决了这些困难。所谓实践出真知,学到的东西只有运用到实践当中,才能真正体会到知识的力量。最后,通过这次课程设计,让我明白了想法和实践还是有差距的,当你真正去做一件事的时候,你会发现你的想法可能不适用,随时都需要调整,另外扎实的理论知识也是完成设计任何设计必不可少的要素,一切想法离开了理论知识都是空想。单片机原理及系统课程设计报告6参考文献[1]彭为,黄科,雷道仲.单片机典型系统设计实例精讲[M].电子工业出版社.2009:22-54.[2]谭浩强.C程序设计(第三版)[M].清华大学出版社.2009:32-46.[3]王思明,张金敏,张鑫等.单片机原理及应用系统设计(第一版)[M].科学出版社.2012:70-292.单片机原理及系统课程设计报告7附录A源程序代码#includereg52.h#includeintrins.h#defineucharunsignedcharsbitp21=P2^1;sbitp22=P2^2;sbitp23=P2^3;sbitEOC=P3^1;sbitOE=P3^0;sbitST=P3^2;sbitp34=P3^4;sbitp35=P3^5;sbitp36=P3^6;ucharcodetab[]={0x40,0x79,0x24,0x30,0x19,0x12};ucharcodeled[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};ucharcodeled_[]={0xC0,0xf9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};voiddelay(ucharn){uchari,j;for(i=0;in;i++)for(j=0;j125;j++);}voidconvert(ucharvolt_data){unsignedinttemp;temp=100*volt_data/51;P0=led[temp/100];//个位上的数字显示p21=1;//选通个位delay(3);//延时p21=0;//不选通个位P0=led_[temp%100/10];//十分位的数字显示p22=1;//选通十分位delay(3);//延时p22=0;//不选通十分位P0=led_[temp%10];//百分位的数字显示p23=1;//选通百分位delay(3);//延时p23=0;//不选通百分位}voidmain(){ucharvolt_data;p34=1;p35=1;单片机原理及系统课程设计报告8p36=0;//选通ADC0808的IN3通道while(1){ST=0;_nop_();ST=1;_nop_();ST=0;//开始转换if(EOC==0)//如果EOC为0,则继续转换delay(100);while(EOC==0);//当EOC为1时,转换完毕OE=1;//数据允许输出标志volt_data=P1;//讲P1口的数据送volt_dataOE=0;convert(volt_data);}}
本文标题:基于单片机的数字电压表设计报告
链接地址:https://www.777doc.com/doc-2574089 .html