《基于单片机的数字电压表设计报告.doc》由会员分享,可在线阅读,更多相关《基于单片机的数字电压表设计报告.doc(8页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、单片机原理及系统课程设计评语:考勤(10)守纪(10)过程(40)设计报告(30)答辩(10)总成绩(100)专 业: 电气工程及其自动化 班 级: 姓 名: 学 号: 指导教师: 兰州交通大学自动化与电气工程学院2010 年 3 月 7 日基于单片机的数字电压表设计摘 要本文是基于单片机的数字电压表的设计,用单片机AT89S52作为主控单元,ADC0809作模数转换芯片,测量05V直流电压,其测量最小误差为0.02V。本设计主要分为硬件电路及软件程序两部分。硬件电路可分为A/D转换电路、LED显示电路。程序的设计使用C语言编程。关键词:AT89S52;数字电压表;ADC0809Abstrac
2、tThe design of this article is based on single chip microcomputer digital voltmeter, AT89S52 MCU as the main control unit, the ADC0809 modulus conversion chip, measurement of 0 5 V dc voltage, the minimum error of measurement is 0.02 V. This design is mainly divided into two parts, hardware circuit
3、and software program. Hardware circuit can be divided into A/D conversion circuit, LED display circuit. Program design using C language programming.Key Words: AT89S52, Digital Voltmeter, ADC08091.引言随着电子时代的来临,人们对各种数字仪表的精度要求更高,以前的指针仪表已经不能满足人们的需要,所以就出现了数字电压表这种更精确的测量仪器。本次课程设计的主要任务是完成模拟量电压转换成数字量电压,然后通过数码
4、管显示出来。主要包括两大模块:转换模块,显示模块,结合硬件和软件,使误差最小。2.系统总体方案设计 2.1 总体设计方案 根据系统设计的要求和功能,将系统分为主控模块,A/D转换模块,LED显示模块,复位电路,时钟电路几个模块,系统框图如图1所示,主控模块采用AT89S52单片机,A/D转换模块采用ADC0809芯片,用于A/D转换,显示模块采用4位七段共阳LED数码管,用于显示电压值。2.2系统组成框图时钟及复位电路单片机显示电路输入电路图2.2系统组成框图3.硬件设计 3.1系统硬件设计原理通过变量设置选择八路通道中的第三路,将该路模拟电压送入ADC0808相应通道,单片机软件设置ADC0
5、808开始A/D转换,转换结束ADC0808的EOC端口产生高电平,同时将ADC0808的OE端口置为高电平,单片机将ADC0809转换后的数字量存到片内RAM。系统调出数据处理子程序,将测量结果转化为0.005.00V,最后通过查表将每一位数据输出到LED显示电路,将相应电压显示出来,程序进入下一个循环。单片机的P0.0P0.7作为4位动态数码显示管的段显示控制。P2.1P2.3作为4位动态显示管的位显示控制。3.2硬件设计原理图在Proteus仿真环境下所搭建的系统硬件电路图如图3.2所示。 图3.2系统原理图4软件设计4.1软件设计方案主程序包含初始化部分,调用A/D转换子程序和延时部分
6、。A/D转换程序由开始设定的ST的变化开始(产生下跳沿 使ADC0809的START开始运转)然后当转换结束(EOC=1)时,开始传输数据到P1(OE=1输出允许信号置1)至传输结束时OE置0,将获得的电压量转换成所对应的16进制数据并寄存,再通过取模的方式把各位数字逐个提取,最后通过查询代码表得到相应的BCD码,最后显示即可结束。ADC0809转换之后输出的结果是8位二进制数。当ADC0809输出为()时,输入电压值VI=5.00V;当ADC0809输出为()时,输入电压值为VI=0.00V;当ADC0809输出为()时,输入电压值VI=2.50V。由于单片机进行数学运算时结果只取整数部分,
7、因此当输出为()时计算出的电压值VI=2.00V,很不准确。为了提高精确度,必须把小数部分保留,具体方法是:如果小数点后保留两位,在运算的时候分子乘以100,保留三位就乘以1000。本设计是在小数点后保留两位,运算方式如公式VI=Dout/2555100=Dout100/51。4.2主程序流程图图4.2为程序软件设计流程图,其中(a)为主程序流程图, (b)为A/D转换子程序流程图。 开始开始图4.2 程序流程图开始模数转换初始化N(a)主程序流程图(a)主程序流程图转换是否完成?调用A/D转换程序Y(a)主程序流程图(a)主程序流程图调用显示子程序取得模数转换结果兵转化为数字量调用延时程序显
8、示转化结果结束结束 (a)主程序流程图 (b)AD转换流程图5. 系统调试及仿真结果6.总结两周的课程设计结束了,在这过程中,我学到了很多东西。首先,我学会了单片机设计的基本过程有哪些,每一过程有哪些基本的步骤,怎样通过查资料去完成这每一步。其次我巩固了上学期所学的一些单片机知识,从而加深了对ADC0809芯片的功能的了解。在编程过程中,遇到了许多困难,通过与同学之间的交流和咨询,最后解决了这些困难。所谓实践出真知,学到的东西只有运用到实践当中,才能真正体会到知识的力量。最后,通过这次课程设计,让我明白了想法和实践还是有差距的,当你真正去做一件事的时候,你会发现你的想法可能不适用,随时都需要调
9、整,另外扎实的理论知识也是完成设计任何设计必不可少的要素,一切想法离开了理论知识都是空想。参考文献1 彭为,黄科,雷道仲.单片机典型系统设计实例精讲M.电子工业出版社.2009:22-54.2 谭浩强.C程序设计(第三版)M.清华大学出版社.2009:32-46.3 王思明,张金敏,张鑫等.单片机原理及应用系统设计(第一版)M.科学出版社.2012:70-292.附录A 源程序代码#include#include#define uchar unsigned charsbit p21=P21;sbit p22=P22;sbit p23=P23;sbit EOC=P31;sbit OE=P30;s
10、bit ST=P32;sbit p34=P34;sbit p35=P35;sbit p36=P36;uchar code tab=0x40,0x79,0x24,0x30,0x19,0x12;uchar code led=0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10;uchar code led_=0xC0,0xf9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90;void delay(uchar n)uchar i,j;for(i=0;in;i+)for(j=0;j125;j+);void convert(u
11、char volt_data)unsigned int temp;temp=100*volt_data/51; P0=ledtemp/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; /不选通百分位void main()uchar volt_data;p34=1;p35=1;p36=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);
限制150内