51单片机简易数字电压表的设计.docx

上传人:b****5 文档编号:3525291 上传时间:2022-11-23 格式:DOCX 页数:24 大小:373.42KB
下载 相关 举报
51单片机简易数字电压表的设计.docx_第1页
第1页 / 共24页
51单片机简易数字电压表的设计.docx_第2页
第2页 / 共24页
51单片机简易数字电压表的设计.docx_第3页
第3页 / 共24页
51单片机简易数字电压表的设计.docx_第4页
第4页 / 共24页
51单片机简易数字电压表的设计.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

51单片机简易数字电压表的设计.docx

《51单片机简易数字电压表的设计.docx》由会员分享,可在线阅读,更多相关《51单片机简易数字电压表的设计.docx(24页珍藏版)》请在冰豆网上搜索。

51单片机简易数字电压表的设计.docx

51单片机简易数字电压表的设计

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

 

二级学院铜陵学院

专业自动化

班级

组号

组员

指导教师

设计周期:

20012年6月5日~2008年6月28日

目录

一课程设计任务书2

1.1设计题目、目的2

1.2题目的基本要求和拓展功能2

1.3设计时间及进度安排2

二设计内容3

2.1元器件选型3

2.2系统方案确定3

2.351单片机相关知识4

2.4AD转换器相关知识6

三数字电压表系统设计7

3.1系统设计框图8

3.2单片机电路9

3.3ADC采样电路10

3.4显示电路11

3.5供电电路和参考电压

3.6数字电压表系统电路原理图

四软件部分

4.1主程序

4.2显示子程序

五数字电压表电路仿真

5.1仿真总图

5.2仿真结果显示

六系统性能分析

七心得体会

 

一课程设计任务书

智能仪表课程设计是自动化专业的专业实践课程。

本课程的任务是通过设计完成功能的单片机系统,使学生掌握目前典型的自动化易表的一般设计要求和设计方法,掌握开发及设计工具的使用方法,通过这一实践过程,锻炼学生的动手能力和分析、解决问题的能力,培养对所学知识的综合应用能力。

1、设计的题目

简易数字电压表的设计

对简易数字电压表的设计,掌握目前自动仪表的一般设计要求,工程设计方法,开发及设计工具的使用方法。

数字电压表简称DVM,数字电压表基本原理是将输入的模拟电压信号转化为数字信号,再进行输出显示。

而A/D转换器的作用是将连续变化的模拟信号量转化为离散的数字信号,器基本结构是由采样保持,量化,编码等几部分组成。

因此AD转换是此次设计的核心元件。

输入的模拟量经过AD转换器转换,再由驱动器驱动显示器输出,便得到测量的数字电压。

2、基本功能要求:

1.可以选择测量测量8路0-5V的8路输入电压值;

2.可轮流显示或单路选择显示(可选);

3.测量显示最小分辨率为0.01V;测量误差约为0.02V;

4.具有电压过低、过高声光报警功能,报警限可独立设置;

拓展功能:

(1):

测量电压范围扩大,可测量小电压和大电压;可测量显示0-2mA电流;

(2):

带通讯功能,电压测量值可在PC机上显示;

(3):

带实时存储记忆和复现功能;

3、设计时间及进度安排:

1、学分:

3分

2、时间安排:

3周

计划安排:

第17周任务布置,确定分组。

任务分析,方案,绘制原理图:

第18周进行设计方案的确认,提交原理图,元器件清单何预定价格,进行购买;

第18周硬件焊接,调试;软件编程,联合硬件的调试;

第19周撰写课程实际报告,分组验收答辩;

二设计内容:

2.1元器件选型:

A/D转换器芯片ADC0809,AT89C52单片机,1602液晶显示器;

2.2系统方案确定:

按系统功能实现要求,决定控制系统采用AT89C52单片机,A/D转换采用ADC0809。

系统除能确保实现要求的功能外,还可以方便地进行8路其他A/D转换量的测量、远程测量结果传送等扩展功能。

数字电压表系统设计方案框图如图。

 

 

 

P0:

地址数据低8位口P1:

普通I/O口P2:

地址高8位口P3:

特殊功能口

晶振电路保证信号传输同步,串口通信是与外界进行信息交换的一种方式,按键电路中一个按键是单路和轮流显示的选择,一个按键是单路时的通道选择。

 

实现过程:

当外部0~5V的模拟信号输入时,首先通过ADC8090转换模块进行转换,转换成数字信号并进入通道进行选择后,将信号传入AT89C52单片机时,单片机通过按键电路中的一个按键来选择单路还是8路,另一个按键作单路显示时选择通道,当选择完毕后将数据送入到显示器,通过P3特殊功能口经三极管驱动输出控制位。

2.351单片机相关知识

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单片机引脚图

引脚功能:

Vcc:

电源电压

GND:

P0口:

P0口是一组8位漏极开路型双向I/O口,也即地址/数据总线复用口。

作为输出口用时,每位能吸收电流的方式驱动8个TTL逻辑门电路,对端口P0写“1”时,可作为高阻抗输入端用。

在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。

在Flash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。

P1口:

P1是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。

对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。

作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流

与AT89C51不同之处是,P1.0和P1.1还可分别作为定时/计数器2的外部计数输入.flash编程和程序校验期间,P1接收低8位地址。

(P1.0/T2)和输入(P1.1/T2EX),

P2口:

P2是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。

对端口P2写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流

在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVX@DPTR指令)时,P2口送出高8位地址数据。

在访问8位地址的外部数据存储器(如执行MOVX@RI指令)时,P2口输出P2锁存器的内容。

P3口:

P3口是一组带有内部上拉电阻的8位双向I/O口。

P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。

对P3口写入“1”时,它们被内部上位电阻拉高并可作为输入端口。

此时,被外部拉低的P3口将用上拉电阻输出电流

P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能,

P3口还接收一些用于Flash闪速存储器编程和程序校验的控制信号。

RST:

复位输入。

当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片复位。

ALE/PROG:

当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。

一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。

要注意的是:

每当访问外部数据存储器时将跳过一个ALE脉冲。

 对Flash存储器编程期间,该引脚还用于输入编程脉冲(PROG)。

如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。

该位置位后,只有一条MOVX和MOVC指令才能将ALE激活。

此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE禁止位无效。

PSEN:

程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89C52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲。

在此期间,当访问外部数据存储器,将跳过两次RSEN信号。

EA/VPP:

外部访问允许。

欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地)。

需注意的是:

如果加密位LB1被编程,复位时内部会锁存EA端状态。

如EA端为高电平(接Vcc端),CPU则执行内部程序存储器中的指令。

 Flash存储器编程时,该引脚加上+12V的编程允许电源VPP,当然这必须是该器件是使用12V编程电压VPP。

XTAL1:

振荡器反相放大器的及内部时钟发生器的输入端。

XTAL2:

振荡器反相放大器的输出端。

2.外部时钟:

输入端接在XTAL1

输出端接在XTAL2

晶体可以在1.2mhz-12mhz之间任选,电容可以在20-60uf之间选择。

3.74ls244:

是一个缓冲输入口,同时也是一个单向驱动器一减轻总线负担。

4.mc14024:

用与二进制计数。

5.ADC0809:

A/D转换器:

2.4AD转换器相关知识

ADC0809是美国国家半导体公司生产的CMOS工艺8通道,8位逐次逼近式AD转换器。

其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。

ADC0809是采样频率为8位的、以逐次逼近原理进行模—数转换的器件。

其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8个单断模拟输入信号中的一个进行A/D转换。

1.主要特性

  1)8路8位A/D转换器,即分辨率8位。

2)具有转换起停控制端。

3)转换时间为100μs

  4)单个+5V电源供电

  5)模拟输入电压范围0~+5V,不需零点和满刻度校准。

  6)工作温度范围为-40~+85摄氏度

7)低功耗,约15mW。

2内部结构

ADC0809是CMOS单片型逐次逼近式A/D转换器,内部结构如图13.22所示,它由8路模拟开关、地址锁存与译码器、比较器、8位开关树型A/D转换器、逐次逼近寄存器、逻辑控制和定时电路组成。

3.外部特性(引脚功能)

  ADC0809芯片有28条引脚,采用双列直插式封装,如图所示。

下面说明各引脚功能。

  IN0~IN7:

8路模拟量输入端。

  2-1~2-8:

8位数字量输出端。

  ADDA、ADDB、ADDC:

3位地址输入线,用于选通8路模拟输入中的一路

ALE:

地址锁存允许信号,输入,高电平有效。

  START:

A/D转换启动信号,输入,高电平有效。

  EOC:

A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)。

  OE:

数据输出允许信号,输入,高电平有效。

当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。

  CLK:

时钟脉冲输入端。

要求时钟频率不高于640KHZ。

  REF(+)、REF(-):

基准电压。

  Vcc:

电源,单一+5V。

  GND:

地。

ADC0809的工作过程是:

首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。

此地址经译码选通8路模拟输入之一到比较器。

START上升沿将逐次逼近寄存器复位。

下降沿启动A/D转换,之后EOC输出信号变低,指示转换正在进行。

直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。

当OE输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线上。

图2ADC0909引脚

三数字电压表系统设计

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数字电压表系统电路原理图

简易数字电压测量电路由A/D转换、数据处理及显示控制等组成,电路原理图如图所示。

A/D转换由集成电路0809完成。

0809具有8路模拟输入端口,地址线(23~25脚)可决定对哪一路模拟输入作A/D转换。

22脚为地址锁存控制,当输入为高电平时,对地址信号进行锁存。

6脚为测试控制,当输入一个2uS宽高电平脉冲时,就开始A/D转换。

7脚为A/D转换结束标志,当A/D转换结束时,7脚输出高电平。

9脚为A/D转换数据输出允许控制,当OE脚为高电平时,A/D转换数据从该端口输出。

10脚为0809的时钟输入端,利用单片机30脚的六分频晶振频率再通过14024二分频得到1MHz时钟。

单片机的P1、P3.0~P3.3端口作为四位LED数码管显示控制。

P3.5端口用作单路显示/循环显示转换按钮,P3.6端口用作单路显示时选择通道。

P0端口作A/D转换数据读入用,P2端口用作0809的A/D转换控制。

图8数字电压表总原理图

 

 

MC14024:

二进制计数器

74LS244:

是一个缓冲输入口,同时也是一个单向驱动器以减轻总线负担

 

四软件部分:

主程序:

在刚上电时,系统默认为循环显示8个通道的电压值状态。

当进行一次测量后,将显示每一通道的A/D转换值,每个通道的数据显示时间为1S左右。

主程序在调用显示子程序和测试之程序之间循环,主程序流程图见图。

 

显示子程序:

显示子程序采用动态扫描法实现四位数码管的数值显示。

测量所得的A/D转换数据放在70H~77H内存单元中,测量数据在显示时需转换成10进制BCD码放在78H~7BH单元中,其中7BH存放通道标志数。

寄存器R3用作8路循环控制,R0用作显示数据地址指针。

 

 

 

以下是简易数字电压表的单片机控制源程序:

#include

#include//延时函数用

#defineaddataP0//模拟电压数据采集入口

#defineDisdataP1//显示数据段码输出口

#defineucharunsignedchar

#defineuintunsignedint

sbitSTART=P2^4;//启动一次转换位

sbitALE=P2^3;//地址锁存位

sbitOE=P2^5;//0809输出控制位

sbitEOC=P3^7;//A/D转换结束标志位

sbitDISX=Disdata^0;//LED小数点控制位

sbitk1=P3^5;//循环/单路选择控制位

sbitk2=P3^6;//显示通道控制位

sbitA=P2^0;

sbitD=P2^1;

sbitC=P2^2;

ucharcodedis_7[11]={0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09,0xFF};

/*共阳8段LED数码管段码表0.1.2.3.4.5.6.7.8.9.不亮*/

ucharcodescan_con[4]={0xf1,0xf2,0xF4,0xF8};

//四位数码管数值动态扫描显示控制

uchardataad_data[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};

//定义8个数据内存单元

uintdatadis[5]={0x00,0x00,0x00,0x00,0x00};

//定义4个显示数据单元和1个数据存储单元

/**********1ms延时子函数***********/

delaylms(uintt)//t=1

{

uinti,j;

for(i=0;i

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

;

}

/************显示扫描子函数***************/

scan()

{

uchark,n;

inth;

dis[3]=1;//通道初值为1

for(n=0;n<8;n++)//每次显示8个数据

{

if(k2==0)break;

dis[2]=ad_data[n]/51;

dis[4]=ad_data[n]%51;//余数暂存

dis[4]=dis[4]*10;//计算十位

dis[1]=dis[4]/51;

dis[4]=dis[4]%51;

dis[4]=dis[4]*10;//计算百分位

dis[0]=dis[4]/51;

for(h=0;h<100;h++)

//每个通道显示时间控制约为一秒

{

if(k2==0)break;

for(k=0;k<4;k++)//4位LED扫描控制

{

if(k2==0)break;

Disdata=dis_7[dis[k]];

if(k==2)

{

DISX=0;

}

P3=scan_con[k];//P3.0-P3.3控制四个数码管的输出

delaylms(3);

P3=0xff;

}

}

if(k2==1)dis[3]++;

if(dis[3]>=8)dis[3]=0;

}

}

/*************通道选择函数*********************/

tongdao()

{

uintm,i,n;

dis[2]=ad_data[n]/51;

dis[4]=ad_data[n]%51;//余数暂存

dis[4]=dis[4]*10;//计算十分位

dis[1]=dis[4]/51;

dis[4]=dis[4]%51;

dis[4]=dis[4]*10;//计算百分位

dis[0]=dis[4]/51;

for(m=0;m<100;m++)//每个通道显示时间控制约为一秒

{

if(k2==0)break;

for(i=0;i<4;i++)//4位LED扫描控制

{

Disdata=dis_7[dis[i]];

if(i==2)

{

DISX=0;

}

P3=scan_con[i];//P3.0-P3.3控制四个数码管的输出

delaylms(3);

P3=0xff;

}

}

}

/*************0809A/D转换子函数*******************/

test()

{

ucharm;

for(m=0;m<8;m++)

{switch(m)

{

case0:

{A=0;D=0;C=0;break;}

case1:

{A=1;D=0;C=0;break;}

case2:

{A=0;D=1;C=0;break;}

case3:

{A=1;D=1;C=0;break;}

case4:

{A=0;D=0;C=1;break;}

case5:

{A=1;D=0;C=1;break;}

case6:

{A=0;D=1;C=1;break;}

case7:

{A=1;D=1;C=1;break;}

}

START=1;

ALE=START;//转换通道地址锁存

_nop_();

_nop_();

START=0;

ALE=0;//开始转换命令

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();//延时8US

while(EOC==0)

{

_nop_();

}//等待转换结束

OE=1;

ad_data[m]=addata;

delaylms

(1);

OE=0;

}

}

/************************主函数***************************/

main()

{

uintn,m;

P0=0xff;//初始化窗口

P1=0x00;

P3=0xff;

while

(1)

{

if(k2==0)

{

while

(1)

{

test();

for(m=0;m<250;m++)

{

n=k2;

tongdao();

if(k1==0)break;

if(k2==0)break;

}

if(n==1)

{

if(k2==0)dis[3]++;

}

if(dis[3]>=8)dis[3]=0;

if(k1==0)break;

}

}

else

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

当前位置:首页 > 幼儿教育 > 家庭教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1