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

上传人:b****8 文档编号:29986289 上传时间:2023-08-04 格式:DOCX 页数:26 大小:376.98KB
下载 相关 举报
51单片机数字电压表设计.docx_第1页
第1页 / 共26页
51单片机数字电压表设计.docx_第2页
第2页 / 共26页
51单片机数字电压表设计.docx_第3页
第3页 / 共26页
51单片机数字电压表设计.docx_第4页
第4页 / 共26页
51单片机数字电压表设计.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

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

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

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

51单片机数字电压表设计

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

 

二级学院铜陵学院

专业自动化

班级

组号

组员

指导教师

 

三数字电压表系统设计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〈t;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

while

(1)

{

test();

scan();

if(k2==0)break;

}

}

五数字电压表电路仿真

5。

1仿真总图

为了验证此次设计原理图的正确性,在制作实物之前用专业软件做了仿真,在Proteus软件中设置AT89C51单片机的晶振频率为12MHz。

本电路EA接高电平,没有扩展片外ROM。

如下图是此次系统仿真的总原理图部分:

图8仿真总图

通过用protues软件的仿真发现此次设计的系统原理图能够实现电压的正确测量,而且电压的误差较小,1602液晶屏能够正确显示出测量出来的结果。

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

当前位置:首页 > PPT模板 > 其它模板

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

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