基于单片机的数字电压表设计报告.doc

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机原理及系统课程设计

专业:电气工程及其自动化

班级:

姓名:

学号:

指导教师:

兰州交通大学自动化与电气工程学院

2010 年 3 月 7 日

基于单片机的数字电压表设计

摘要

本文是基于单片机的数字电压表的设计,用单片机AT89S52作为主控单元,ADC0809作模数转换芯片,测量0~5V直流电压,其测量最小误差为0.02V。本设计主要分为硬件电路及软件程序两部分。硬件电路可分为A/D转换电路、LED 显示电路。程序的设计使用C语言编程。

关键词:AT89S52;数字电压表;ADC0809

Abstract

The 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 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, ADC0809

1.引言

随着电子时代的来临,人们对各种数字仪表的精度要求更高,以前的指针仪表已经不能满足人们的需要,所以就出现了数字电压表这种更精确的测量仪器。

本次课程设计的主要任务是完成模拟量电压转换成数字量电压,然后通过数码管显示出来。主要包括两大模块:转换模块,显示模块,结合硬件和软件,使误差最小。

2.系统总体方案设计

2.1总体设计方案

根据系统设计的要求和功能,将系统分为主控模块,A/D转换模块,LED 显示模块,复位电路,时钟电路几个模块,系统框图如图1所示,主控模块采用AT89S52单片机,A/D转换模块采用ADC0809芯片,用于A/D转换,显示模块采用4位七段共阳LED数码管,用于显示电压值。

1

2

图3.2系统原理图

6.总结

4

两周的课程设计结束了,在这过程中,我学到了很多东西。首先,我学会了单片机设计的基本过程有哪些,每一过程有哪些基本的步骤,怎样通过查资料去完成这每一步。其次我巩固了上学期所学的一些单片机知识,从而加深了对ADC0809芯片的功能的了解。在编程过程中,遇到了许多困难,通过与同学之间的交流和咨询,最后解决了这些困难。所谓实践出真知,学到的东西只有运用到实践当中,才能真正体会到知识的力量。最后,通过这次课程设计,让我明白了想法和实践还是有差距的,当你真正去做一件事的时候,你会发现你的想法可能不适用,随时都需要调整,另外扎实的理论知识也是完成设计任何设计必不可少的要素,一切想法离开了理论知识都是空想。

参考文献

[1]彭为,黄科,雷道仲.单片机典型系统设计实例精讲[M].电子工业出版社.2009:22-54.

[2] 谭浩强.C程序设计(第三版)[M].清华大学出版社.2009:32-46.

[3] 王思明,张金敏,张鑫等.单片机原理及应用系统设计(第一版)[M].科学出版社.2012:70-292.

5

附录A源程序代码

#include

#include

#define uchar unsigned char

sbit p21=P2^1;

sbit p22=P2^2;

sbit p23=P2^3;

sbit EOC=P3^1;

sbit OE=P3^0;

sbit ST=P3^2;

sbit p34=P3^4;

sbit p35=P3^5;

sbit p36=P3^6;

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;i

for(j=0;j<125;j++);

}

void convert(uchar volt_data)

{

6

unsigned int temp;

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; //不选通百分位

}

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_data

OE=0;

convert(volt_data);

}

}

7

相关文档
最新文档