基于51单片机的数字电压表课程设计.docx

上传人:b****6 文档编号:6389649 上传时间:2023-01-06 格式:DOCX 页数:31 大小:399.70KB
下载 相关 举报
基于51单片机的数字电压表课程设计.docx_第1页
第1页 / 共31页
基于51单片机的数字电压表课程设计.docx_第2页
第2页 / 共31页
基于51单片机的数字电压表课程设计.docx_第3页
第3页 / 共31页
基于51单片机的数字电压表课程设计.docx_第4页
第4页 / 共31页
基于51单片机的数字电压表课程设计.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

基于51单片机的数字电压表课程设计.docx

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

基于51单片机的数字电压表课程设计.docx

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

信息与电气工程学院

电子应用系统CDIO一级项目

设计说明书

(2011/2012学年第二学期)

 

题目:

____数字电压表__________

专业班级:

电子信息0902班

学生姓名:

张文盛

学号:

090070213

指导教师:

贾少锐、李晓东、马永强

李丽宏、贾东立、刘会军

设计周数:

设计成绩:

2012年6月28日

1、CDIO设计目的

本次CDIO设计题目是:

利用所学的51单片机,C语言,数字电路等知识,设计一个符合要求的数字电压表。

主控芯片可以是AT89C51,而采集电压的模拟量转换成数字量的芯片可以是ADC0804,也可以是PCF8591。

而显示模块可以是数码管,也可以是液晶LCD1602,从而展示给我们所得的电压值。

2、CDIO设计正文

2.1数字电压表系统设计框图

本次数字电压表系统设计框图如图1所示:

模拟量数字量程序液晶

处理驱动

 

图1数字电压表设计框图

数字电压表主要由模/数转换电路、单片机控制电路、显示电路等三部分组成。

其中PCF8591等器件组成的转换电路,将输入的模拟量信号进行取样、转换、然后将转换的数字信号送进单片机。

单片机控制电路主要实现对数据进行程序处理;显示电路主要用于将单片机的信号数据转换后显示测量结果。

模拟信号产生模块:

输入电源电路(变压器、整流电路、滤波电路、稳压电路组成)和分压电路(9万欧姆和1万欧姆的电阻分压)。

模数转换模块组成部分:

PCF8591芯片

程序处理的单片机控制模块:

AT89C51芯片

电压结果显示部分:

LCD1602液晶

2.2各模块介绍

2.2.1AT89C51芯片介绍

AT89S52具有以下标准功能:

8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。

另外,AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。

空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。

掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。

AT89C52的引脚图如图2所示。

 

VCC:

接电源

GND:

接地

P0口:

P0口是一个8位漏极开路的双向I/O口。

作为输出口,每位能驱动8个TTL逻辑电平。

对P0端口写“1”时,引脚用作高阻抗输入。

当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。

在这种模式下,P0具有内部上拉电阻。

在flash编

程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。

程序校时,需要外部上拉电阻。

P1口:

P1口是一个具有内部上拉电阻的8位双向I/O口,p1输出缓冲器能驱动4个TTL逻辑电平。

对P1端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。

作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。

P2口:

P2口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。

对P2端口写

“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。

作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX@DPTR)时,P2口送出高八位地址。

P3口:

P3口是一个具有内部上拉电阻的8位双向I/O口,p2输出缓冲器能驱动4个TTL逻辑电平。

对P3端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。

作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。

P3口亦作为AT89C52特殊功能(第二功能)使用,AT89C52的P3口的第二功能表如表1所示。

表1AT89C52的P3口的第二功能表

脚号

第二功能

P3.0

RXD(串行输入)

P3.1

TXD(串行输出)

P3.2

INT0(外部中断0)

P3.3

INT0(外部中断0)

P3.4

T0(定时器0外部输入)

P3.5

T1(定时器1外部输入)

P3.6

WR(外部数据存储器写选通)

P3.7

RD(外部数据存储器写选通)

RST:

复位输入。

晶振工作时,RST脚持续2个机器周期高电平将使单片机复位。

看门狗计时完成后,RST脚输出96个晶振周期的高电平。

特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能无效。

DISRTO默认状态下,复位高电平有效。

ALE/PROG:

地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8位地址的输出脉冲。

在flash编程时,此引脚(PROG)也用作编程输入脉冲。

在一般情况下,ALE以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。

然而,特别强调,在每次访问外部数据存储器时,ALE脉冲将会跳过。

PSEN:

外部程序存储器选通信号(PSEN)是外部程序存储器选通信号。

当AT89S52从外部程序存储器执行外部代码时,PSEN在每个机器周期被激活两次,而在访问外部数据存储器时,PSEN将不被激活。

EA/VPP:

访问外部程序存储器控制信号。

为使能从0000H到FFFFH的外部程序存储器读取指令,EA必须接GND。

为了执行内部程序指令,EA应该接VCC。

在flash编程期间,EA也接收12V编程电源(VPP)。

XTAL1:

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

XTAL2:

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

(2)晶振电路

晶振电路是单片机的最小系统的组成部分。

典型的晶振取11.0592MHz(因为可以准确地得到9600波特率和19200波特率,用于有串口通讯的场合)/12MHz(产生精确的uS级时歇,方便定时操作)。

特别注意:

对于31脚(EA/Vpp),当接高电平时,单片机在复位后从内部ROM的0000H开始执行;当接低电平时,复位后直接从外部ROM的0000H开始执行。

(3)复位电路

复位电路也是单片机的最小系统的组成部分。

当单片机系统在运行中,受到环境干扰出现程序执行错乱的时候,按下复位按钮内部的程序自动从头开始执行。

复位电路的原理是单片机RST引脚接收到2us以上的电平信号,只要保证电容的充放电时间大于2US,即可实现复位,所以电路中的电容值是可以改变的。

按键按下系统复位,是电容处于一个短路电路中,释放了所有的电能,电阻两端的电压增加引起的。

单片机最小系统复位电路的极性电容的大小直接影响单片机的复位时间,一般采用10~30uF,51单片机最小系统容值越大需要的复位时间越短。

2.2.2PCF8591AD/DA芯片

PCF8591是一个单片集成、单独供电、低功耗、8-bitCMOS数据获取器件。

PCF8591具有4个模拟输入、1个模拟输出和1个串行I²C总线接口。

PCF8591的3个地址引脚A0,A1和A2可用于硬件地址编程,允许在同一个I²C总线上接入8个PCF8591器件,而无需额外的硬件。

在PCF8591器件上输入输出的地址、控制和数据信号都是通过双线双向I²C总线以串行的方式进行传输。

PCF8591的功能包括多路模拟输入、内置跟踪保持、8-bit模数转换和8-bit数模转换。

PCF8591的最大转化速率由I²C总线的最大速率决定。

1、主要技术指标和特性

单独供电

PCF8591的操作电压范围2.5V-6V

低待机电流

通过I2C总线串行输入/输出

PCF8591通过3个硬件地址引脚寻址

PCF8591的采样率由I2C总线速率决定

4个模拟输入可编程为单端型或差分输入

自动增量频道选择

PCF8591的模拟电压范围从Vss到VDD

PCF8591内置跟踪保持电路

8-bit逐次逼近A/D转换器

通过1路模拟输出实现DAC增益

2、ADC0808引脚功能

PCF8591引脚图如图3所示

AIN0~AIN3:

模拟信号输入端。

A0~A3:

引脚地址端。

VDD、VSS:

电源端。

(2.5~6V)

SDA、SCL:

I2C总线的数据线、时钟线。

OSC:

外部时钟输入端,内部时钟输出端。

EXT:

内部、外部时钟选择线,使用内部时钟时EXT接地。

AGND:

模拟信号地。

AOUT:

D/A转换输出端。

VREF:

基准电源端。

4功能描述

(1)地址

IIC总线系统中的每一片PCF8591通过发送有效地址到该地址器件来激活。

该地址包括固定部分和可编程部分。

可编程部分必需根据地址引脚A0、A1和A2来设置。

在IIC总线协议中地址必需是起始条件后作为第一个字节发送。

地址字节的最后一位是用于设置以后数据传输方向的读/写。

 

(2)控制字

控制字节用于实现器件的各种功能,如模拟信号由哪几个通道输入等。

控制字节存放在控制寄存器中。

总线操作时为主控器发送的第二字节。

其格式如下图5所示:

 

 

其中:

D1、D0两位是A/D通道编号:

00通道0,01通道1,10通道2,11通道3

       D2 自动增益选择(有效位为1)

  D5、D4模拟量输入选择:

00为四路单数入、01为三路差分输入、10为单端与差分配合输入、11为模拟输出允许有效

   当系统为A/D转换时,模拟输出允许为0。

模拟量输入选择位取值由输入方式决定:

四路单端输入时取00,三路差分输入时取01,单端与差分输入时取10,二路差分输入时取11。

最低两位时通道编号位,当对0通道的模拟信号进行A/D转换时取00,当对1通道的模拟信号进行A/D转换时取01,当对2通道的模拟信号进行A/D转换时取10,当对3通道的模拟信号进行A/D转换时取11。

   在进行数据操作时,首先是主控器发出起始信号,然后发出读寻址字节,被控器做出应答后,主控器从被控器读出第一个数据字节,主控器发出应答,主控器从被控器读出第二个数据字节,主控器发出应答…一直到主控器从被控器中读出第n个数据字节,主控器发出非应答信号,最后主控器发出停止信号。

(3)A/D转换

A/D转换器采用逐次逼近转换技术。

在A/D转换周期将临时使用片上转换器和高增益比较器。

一个A/D转换周期总是开始于发送一个有效读模式地址给PCF8591之后。

A/D转换周期子在应答时钟脉冲的后延被触发。

并在传输前一次转换结果时执行(见图6)

 

图6A/D转换

一旦一个转换周期被触发,所选通的输入电压采样将保存到芯片并被转换为对应的8位二进制码,取自差分输入的采样将被转换为8位二进制补码

转换结果被保存在ADC数据寄存器等待传输。

如果自动增量标志被置1,将选择下一个通道。

在读周期传输的第一个字节包含前一次读周期的转换结果代码,以上电复位之后读取的第一个字节是0x80。

最高A/D转换速率取决于实际的IIC总线速度。

(4)D/A转换

发送给PCF8591的第三个字节被存储到DAC数据存储器,并使用片内D/A转换器转换成对应的模拟电压。

这个D/A转换器由连接到外部参考电压的具有256个接头的电阻分压电路和选择开关组成。

接头译码器切换一个接头至DAC输出线。

模拟输出电压由自动清零单位增益放大器缓冲。

这个缓冲放大器可通过设置控制寄存器的模拟输出允许标志来打开或关闭。

在激活状态,输出电压将保持到新的数据字节被发送。

提供给模拟输出AOUT的输出电压由下式给出。

D/A转换顺序的波形图如图7

=

+

图7D/A转换

(5)振荡器

片上振荡器产生A/D转换周期和刷新自动清零缓冲放大器需要的时钟信号。

在使用这个振荡器时EXT引脚必须连接到VSS。

在OSC引脚振荡频率是可用的。

如果EXT引脚被连接到VDD,振荡输出OSC将切换到高阻态以允许用户连接外部时钟信号至OSC。

6I2C总线特性

I2C总线是不同的IC或模块之间的双向两线通信,这两条线是串行数据线(SDA)和串行时钟线(SCL),这两条线必须通过上拉电路连接至正电源。

数据传输只能是在总线不忙时启动。

(1)位传输

一个数据位在每一个时钟脉冲期间传输。

SDA线上的数据必须在时钟脉冲的高电平期间保持稳定。

这个期间数据线上的改变被当作控制信号。

具体时序如图8所示:

图8位传输

(2)开始或停止条件

数据和时钟线在总不忙时保持高电平。

在时钟为高电平时,数据线上的一个由高到低的变化被定义为开始条件。

时钟为高电平时,数据线上的一个由低到高的变化被定义为停止条件。

具体时序如图9所示

图9开始和停止条件

(3)系统配置

产生信息的器件称作“发送机”,接收信息的器件称作“接收机”。

控制信息的器件称作“主机”,被控制的器件称作“从机”。

如图10所示:

图10系统配置

(4)应答

在开始和停止条件之间从发送机传输到接收机的数据字节数是没有限制的。

每个8位数据字节之后紧跟着一个应答位。

应答位是由发送机放在总线的一个高电平,而主机也产生一个额外的与应答有关的时钟脉冲。

地址匹配的从接收机必须在接收每一个字节后产生一个应答。

在应答时钟脉冲期间,应答的器件必须将SDA线拉低。

因此在应答相应的时钟脉冲的高电平期间,SDA线必须保持稳定的低电平。

在由从机终止的最后一个字节,主接收机必须通过产生一个低电平应答向发送机发送一个数据结束信号,这样发送机必须将数据线SDA拉高以允许主机产生停止条件。

具体时序如图11所示

图11I2C总线应答

(5)总线协议

在开始条件后一个有效的硬件地址必须发送至PCF8591。

读/写位定义了以后单个或多个字节数据传输的方向。

开始条件、停止条件和应答位的格式应定时参考I2C总线特性。

在写模式数据传输通过发送下一个数据的停止条件或开始条件来约束。

总线协议具体时序如图12,13所示:

图12写模式的总线协议,D/A转换

图13读模式的总线协议,A/D转换

2.2.3LCD1602液晶

字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD。

①引脚功能说明

表21602LCD的引脚说明

1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表2所示。

编号

符号

引脚说明

编号

符号

引脚说明

1

VSS

电源地

9

D2

数据

2

VDD

电源正极

10

D3

数据

3

VL

液晶显示偏压

11

D4

数据

4

RS

数据/命令选择

12

D5

数据

5

R/W

读/写选择

13

D6

数据

6

E

使能信号

14

D7

数据

7

D0

数据

15

BLA

背光源正极

8

D1

数据

16

BLK

背光源负极

第1脚:

VSS为地电源。

第2脚:

VDD接5V正电源。

第3脚:

VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。

第4脚:

RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。

第5脚:

R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。

当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。

第6脚:

E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。

第7~14脚:

D0~D7为8位双向数据线。

第15脚:

背光源正极。

第16脚:

背光源负极。

②1602LCD的指令说明及时序

1602液晶模块内部的控制器共有11条控制指令,如表3所示:

表3液晶内部指令表

序号

指令

RS

R/W

D7

D6

D5

D4

D3

D2

D1

D0

1

清显示

0

0

0

0

0

0

0

0

0

1

2

光标返回

0

0

0

0

0

0

0

0

1

*

3

置输入模式

0

0

0

0

0

0

0

1

I/D

S

4

显示开/关控制

0

0

0

0

0

0

1

D

C

B

5

光标或字符移位

0

0

0

0

0

1

S/C

R/L

*

*

6

置功能

0

0

0

0

1

DL

N

F

*

*

7

置字符发生存贮器地址

0

0

0

1

字符发生存贮器地址

8

置数据存贮器地址

0

0

1

显示数据存贮器地址

9

读忙标志或地址

0

1

BF

计数器地址

10

写数到CGRAM或DDRAM)

1

0

要写的数据内容

11

从CGRAM或DDRAM读数

1

1

读出的数据内容

1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。

(说明:

1为高电平、0为低电平)

指令1:

清显示,指令码01H,光标复位到地址00H位置。

指令2:

光标复位,光标返回到地址00H。

指令3:

光标和显示模式设置I/D:

光标移动方向,高电平右移,低电平左移S:

屏幕上所有文字是否左移或者右移。

高电平表示有效,低电平则无效。

指令4:

显示开关控制。

D:

控制整体显示的开与关,高电平表示开显示,低电平表示关显示C:

控制光标的开与关,高电平表示有光标,低电平表示无光标B:

控制光标是否闪烁,高电平闪烁,低电平不闪烁。

指令5:

光标或显示移位S/C:

高电平时移动显示的文字,低电平时移动光标。

指令6:

功能设置命令DL:

高电平时为4位总线,低电平时为8位总线N:

低电平时为单行显示,高电平时双行显示F:

低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。

指令7:

字符发生器RAM地址设置。

指令8:

DDRAM地址设置。

指令9:

读忙信号和光标地址BF:

为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。

指令10:

写数据。

指令11:

读数据。

与HD44780相兼容的芯片时序如表4所示:

表4芯片时序

读状态

输入

RS=L,R/W=H,E=H

输出

D0—D7=状态字

写指令

输入

RS=L,R/W=L,D0—D7=指令码,E=高脉冲

输出

读数据

输入

RS=H,R/W=H,E=H

输出

D0—D7=数据

写数据

输入

RS=H,R/W=L,D0—D7=数据,E=高脉冲

输出

读操作时序如图14所示。

写操作时序如图15所示。

2.3系统硬件仿真

用Protues绘制数字电压表的电路图后,将Keil4生成的HEX文件下载进主控芯片AT89C51芯片里,运行,电路图和结果如图16所示

 

 

2.4系统程序设计

根据设计要求结合硬件电路,采用的是PCF8591模数数模转换芯片,采用的是液晶显示方式,在液晶显示之前,需对采集回的二进制数字量进行转换显示,这段过程5V电压为基准进行数据处理。

图16是程序流程图:

 

图16程序流程图

2.5程序

2.5.1主程序模块

#include

#include

#include"config.h"

#include"lcd.h"

/****与AD转换有关的全局变量**********/

ucharAD_result=0;

floatVolt=0;

/****与LCD显示有关的全局变***********/

chartemp[16],temp1[16];

/***************************************************************

**函数名**voidLCD_DIS()

**功能**显示函数

**参数**

**说明**

**********

****************************************************************/

voidLCD_DIS()

{

sprintf((char*)temp,"Volt:

%-6.4fV",Volt);

LCD_Str_DIS((char*)temp,0,1);

sprintf((char*)temp1,"FINISH");

LCD_Str_DIS((char*)temp1,1,5);

}

/***************************************************************

**函数名**voidAD_WORK()

**功能**AD转换函数

**参数**

**说明**

**********

****************************************************************/

voidAD_WORK()

{

AD_start();

AD_write(0x90);

AD_respons();

AD_write(0x41);

AD_respons();

AD_end();

AD_start();

AD_write(0x90);

AD_respons();

AD_write(0x41);

AD_respons();

AD_start();

AD_write(0x91);

AD_respons();

AD_result=AD_read();

AD_respons();

AD_end();

AD_start();

AD_write(0x90);

AD_respons();

AD_write(0x41);

AD_respons();

AD_write(AD_result);

AD_respons();

AD_end();

}

/***************************************************************

**函数名**voidData_Done()

**功能**数据处理函数

**参数**

**说明**

**********

****************************************************************/

voidData_Done()

{

P1=~AD_result;//AD转换的值通过流水灯显示

Volt=(AD_result*5)/255.0;//以5V电压为基准,转换成真正的电压

}

/***************************************************************

**函数名**voidmain()

**功能**

**参数**

**说明**

**********

****

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

当前位置:首页 > 表格模板 > 合同协议

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

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