基于单片机的数字自动档程电压表Word下载.docx
- 文档编号:21495041
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:25
- 大小:2.58MB
基于单片机的数字自动档程电压表Word下载.docx
《基于单片机的数字自动档程电压表Word下载.docx》由会员分享,可在线阅读,更多相关《基于单片机的数字自动档程电压表Word下载.docx(25页珍藏版)》请在冰豆网上搜索。
0~5V,0~10V,0~20V;
2)测量最小分辨率:
0.02V;
3)自动选择量程;
4)采用字符液晶LCD1602显示。
此次设计的是数字电压表,要求的电压范围是0`5v。
系统设计主要包括四个部分:
分别是电源模块、AD模数转换部分、51单片机最小系统部分、数码管显示部分。
首先由单片机初始化ADC0809模数转换芯片和共阴数码管显示,当外接被测电压后,ADC0809将模拟电压信号转换为数字信号输入到单片机的I/O口,通过单片机处理后将电压的大小显示在LCD1602液晶上面.
二:
硬件设计
以AT89C51单片机为核心,起着控制作用。
系统包括LCD1602液晶显示电路、复位电路、时钟电路、模数转换电路电路。
设计思路分为五个模块:
复位电路、晶振电路模块、AT89C51、LCD1602液晶显示电路、模数转换器电路这五个模块。
1、系统设计流程
2.1系统模块划分
2.2:
电源的设计
系统电源使用直流5伏。
由电脑USB接口提供电源。
USB是通用串行总线(UniversalSerialBus)接口的简称。
它是目前使用比较广泛的电脑接口之一,主要版本有1.0、1.1和最新的2.0三种版本。
根据USB总线的工业标准,它可以提供额定功率为5V/500mA的电源供USB设备使用
单片机最小原理图如图2-2-2所示
图2-2-2单片机最小系统
单片机最小系统说明:
时钟信号的产生:
在MCS-51芯片内部有一个高增益反相放大器,其输入端为芯片引脚XTAL1,其输出端为引脚XTAL2。
而在芯片的外部,XTAL1和XTAL2之间跨接晶体振荡器和微调电容,从而构成一个稳定的自激振荡器,这就是单片机的时钟振荡电路。
时钟电路产生的振荡脉冲经过触发器进行二分频之后,才成为单片机的时钟脉冲信号。
一般地,电容C2和C3取30pF左右,晶体的振荡频率范围是1.2-12MHz。
如果晶体振荡频率高,则系统的时钟频率也高,单片机的运行速度也就快。
单片机复位使CPU和系统中的其他功能部件都处在一个确定的初始状态下,并从这个状态开始工作。
单片机复位条件:
必须使9脚加上持续两个机器周期(即24个振荡周期)的高电平。
2、模块设计
2.1.1显示系统
图2-2-3LCD1602液晶显示电路
2.1.2模数转换
ADC0809是美国国家半导体公司生产的CMOS工艺8通道,8位逐次逼近式AD转换器。
其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。
(1)主要特性:
1)8路输入通道,2位A/D转换器,即分辨率为8位。
2)具有转换起停控制端。
3)转换时间为100μs(时钟为640kHz时),130μs(时钟为500kHz时)
4)单个+5V电源供电
5)模拟输入电压范围0~+5V,不需零点和满刻度校准。
6)工作温度范围为-40~+85摄氏度
7)低功耗,约15mW。
(2)内部结构
ADC0809是CMOS单片型逐次逼近式A/D转换器,内部结构如图13.22所示,它由8路模拟开关、地址锁存与译码器、比较器、2位开关树型A/D转换器、逐次逼近寄存器、逻辑控制和定时电路组成。
三:
软件设计
3.1软件设计的组成
该系统由延时子函数、LCD1602液晶忙检测子函数、LCD1602液晶写命令/写数据子函数、汉字显示子函数、LCD1602液晶显示字符串子函数、LCD1602液晶初始化子函数、ADC0809转换子函数、主函数和数据定义这几部分组成。
3.2源程序
//<
程序名>
:
数字电压表**
功能>
使用LCD显示被检测电压,精度为0.05V,范围是0~5V。
**
#include"
includes.h"
#defineTIME0H0x3C
#defineTIME0L0xB0
ucharuc_Clock=0;
//定时器0中断计数
bitb_DATransform=0;
把电压显示在LCD上>
voidvShowVoltage(uintuiNumber)
{
ucharucaNumber[3],ucCount;
if(uiNumber>
999)
uiNumber=999;
ucaNumber[0]=uiNumber/100;
//把计算数字的每个位存入数组。
ucaNumber[1]=(uiNumber-100*(int)ucaNumber[0])/10;
ucaNumber[2]=uiNumber-100*(int)ucaNumber[0]-10*ucaNumber[1];
for(ucCount=0;
ucCount<
3;
ucCount++)
{
vShowOneChar(ucaNumber[ucCount]+48);
//从首位到末位逐一输出。
if(ucCount==0)
vShowOneChar('
.'
);
}
//*主函数*
voidmain()
TMOD=0x01;
//定时器0,模式1。
TH0=TIME0H;
TL0=TIME0L;
TR0=1;
//启动定时器。
ET0=1;
//开定时器中断。
EA=1;
//开总中断
vdInitialize();
vWriteCMD(0x84);
//写入显示起始地址(第二行第一个位置)
vShowChar("
voltage"
vWriteCMD(0xC9);
(V)"
while
(1)
if(b_DATransform==1)
{
b_DATransform=0;
vWriteCMD(0xC4);
vShowVoltage(uiADTransform());
}
}
定时器0中断函数>
voidt0()interrupt1
if(uc_Clock==0)
uc_Clock=5;
b_DATransform=1;
else
uc_Clock--;
//恢复定时器0。
#include<
reg51.h>
sbitSTART=P3^4;
//ATART,ALE接口。
0->
1->
0:
启动AD转换。
sbitEOC=P3^3;
//转换完毕由0变1.
#defineOUTPORTP2
//AD转换函数,返回转换结果。
//转换结果是3位数,小数点在百位与十位之间。
unsignedintuiADTransform()
unsignedintuiResult;
START=1;
//启动AD转换。
START=0;
while(EOC==0);
//等待转换结束。
uiResult=OUTPORT;
//出入转换结果。
uiResult=(100*uiResult)/51;
//处理运算结果。
returnuiResult;
LCD1602.h"
voidvWriteCMD(ucharucCommand)
vDelay();
//先延时。
LCDE=1;
//然后把LCD改为写入命令状态。
LCDRS=0;
LCDRW=0;
LCDPORT=ucCommand;
//再输出命令。
LCDE=0;
//最后执行命令。
把1个数据写入LCD>
voidvWriteData(ucharucData)
//先延时。
//然后把LCD改为写入数据状态。
LCDRS=1;
LCDPORT=ucData;
//再输出数据。
//最后显示数据。
.......
延时函数>
voidvDelay()
uintuiCount;
for(uiCount=0;
uiCount<
250;
uiCount++);
#ifndef__LCD1602_H__
#define__LCD1602_H__
#include<
typedefunsignedcharuchar;
typedefunsignedintuint;
LCD设置函数>
#definevdInitialize()vWriteCMD(0x01);
vWriteCMD(0x38);
vWriteCMD(0x0C);
//初始化
sbitLCDRS=P3^5;
//寄存器选择信号:
//0--数据寄存器;
//1--指令寄存器。
sbitLCDRW=P3^6;
//读写信号:
//1--读LCD;
//0--写LCD。
sbitLCDE=P3^7;
//片选信号,当输入下降沿信号时,
//执行指令或传送数据。
#defineLCDPORTP0//LCD数据接口。
写数据命令函数>
voidvDelay();
//延时函数。
voidvWriteCMD(unsignedcharucCommand);
//把1个命令写入LCD。
voidvWriteData(unsignedcharucData);
//把1个数据写入LCD。
voidvShowOneChar(unsignedcharucChar);
voidvShowChar(unsignedcharucaChar[]);
第四章软件仿真
4.1仿真图
4.3原理图
4.4元件清单
第五章改进自动换挡电压表
电压表是用于测量当前电路两点之间电压值的仪器,而数字电压表是用模/数转换器将测量电压值转换成数字形式并以数字形式表示的仪器,它是电路设计中最常用的仪器之一。
本章应用实例涉及的知识如下:
数字电压表的实现原理;
运算放大器LM324的应用原理:
A/D芯片ADC0809的应用原理;
1602数字字符液晶模块的应用原理。
5.1:
自动换挡数字电压表的背景介绍
5.2:
自动换挡数字电压表的设计思路
自动换挡数字电压表的工作流程
自动换挡数字电压表的工作流程如图所示。
2.2自动换挡数字电压表的需求分析
设计自动换挡数字电压表,需要考虑以下几方面的内容:
(1)51单片机使用何种方式将模拟电压值转换为数字值;
(2)51单片机如何控制进行相应的挡位切换:
比较
(3)51单片机如何显示对应的采集值:
(4)需要设计合适的单片机软件。
5.3自动换挡数字电压表的换挡原理
自动换挡数字电压表对当前的输入电压信号进行调理,得到三种不同放大倍率的电压信号,然后分别对这三组信号进行检测,通过相应的算法选择合适的电压信号进行采集。
3自动换挡数字电压表的硬件设计
3.1自动换挡数字电压表的硬件模块
自动换挡数字电压表的硬件模块如图所示,其各个部分详细说明如下。
(1)51单片机:
自动换挡数字电压表的核心控制器。
(2)显示模块:
显示当前的测量电压。
(3)挡位切换/电压调理模块:
对输入电压进行调理,并且选择合适的测量挡位。
(4)A/D采集模块:
将当前的模拟电压信号转换为数字信号。
3.2自动换挡数字电压表的电路
自动换挡数字电压表的电路如图所示,51单片机使用P0端口以及P2.0.P2.1驱动一块1602液晶模块用于显示当前的电压值,使用P1和P3的部分引脚扩展一片ADC0808作为模拟擞字信号转换器,输入的待检测电压信号经过调理模块脚心调理后变成三路独立的信号输出。
由上图可知,输入信号经过三个不同放大倍率的放大电路进行放大之后,再通过一个跟随器处理得到三个不同倍率的电压信号,以供ADC0808进行处理。
3.3硬件模块基础-LI\/1324
LM324是四运放集成电路,它采用14脚双列直插塑料封装,其引脚封装结构如图所示。
LM324的内部集成了四组形式完全相同的运算放大器,它们除公用电源外彼此独立,其引脚说明如下。
(1)“+”:
同相输入引脚,表示和运放输出引脚Vo的信号相同。
(2)“-”:
反相输入引脚,表示和运放输出引脚Vo的信号相反。
(3)“V+”:
正电源输入引脚。
(4)“V-”:
负电源输入引脚。
(5)“Vo"
:
信号输出端。
运算放大器的具体使用方法可以参考如下内容。
uA741是最常用的通用高增益运算放大器,其基本参数如下:
(1)双列直插8引脚或圆筒8引脚封装。
(2)工作电压:
+、-12V。
(3)差分电压:
+/-30V。
(4)输入电压:
+/-18V
(5)允许功耗:
500mW。
其引脚与OP7运算放大器完全一样,可以互相替代。
使用方法如下:
单片机应用系统通常使用集成运算放大器来对信号进行放大操作。
集成运算放大器(运放)
是具有很高放大倍数的电路单元,在实际应用电路中,通常结合反馈网络共同组成某种功能模块。
由于早期应用于模拟计算机中,用于实现数学运算,故得名“运算放大器”,此名称一直沿用至今。
运算放大器是一个从功能的角度命名的电路单元,其功能既可以由分立的元器件实现,也可以在半导体芯片中实现。
随着半导体技术的发展,如今绝大部分的运算放大器是以单片的形式存在。
运算放大器的种类繁多,应用广泛。
如下图左所示,运算放大器通常包括反相输入端(-,引脚2)、同相输入端(+,引脚3)和一个输出端(引脚1),引脚4和引脚8则分别接供电电源正极和供电电源负极,最常见的集成运算放大器的芯片有uA741等。
使用运算放大器对输入信号进行放大的应用电路如上图右所示,运算放大器的输入和输出电压的关系如下。
从上式可以看到,通过修改R1和R2的电阻值,可以得到不同的放大倍率,下图是一个正弦波通过同相放大器的输入、输出信号波形的对比。
上图是使用集成放大器实现同相放大(也就是说输出电压和输出电压的极性是相同的)的应用电路,而在实际使用中常常使用反相放大电路对电压进行放大,其应用电路如下图所示。
运算放大器反相放大电路的输入、输出电压关系可通过下式获得,下图是正弦波通过反相放大器的输入、输出信号波形对比。
同理可知,通过修改R1和R3的电阻值,可以获得不同的放大倍率。
3.4硬件模块基础——ADC0809
图是ADC0809的外部引脚封装结构,其详细说明如下。
(1)OUT1~OUT8:
8位并行数字量输出引脚。
(2)INO~IN7:
8位模拟量输入引脚。
(3)VCC:
正电源(图中无标示)。
(4)GND:
电源地(图中无标示)。
(5)VREF(+):
参考电压正端引脚。
(6)VREF(-):
参考电压负端引脚。
(7)START:
A/D转换启动信号输入端。
(8)ALE:
地址锁存允许信号输入端。
(9)EOC:
转换结束信号输出引脚,开始转换时为低电平,当转换结束时为高电平。
(10)OE:
输出允许控制端,用于打开三态数据输出锁存器。
(11)CLOCK:
时钟信号输入引脚。
(12)ADDA、ADDB、ADDC:
地址输入引脚,用于选择输入通道。
ADC0808进行模拟数字转换的操作步骤如下。
(1)清除START和OE引脚电平,对ADC0809进行初始化。
(2)设置地址通道ADDA~ADDC,选择待采集的通道数。
(3)设置START引脚,发送启动采集信号。
(4)等待转换完成,EOC引脚输出高电平。
(5)设置OE引脚为高电平,读取A/D转换数据。
4自动换挡数字电压表的软件设计
4.1自动换挡数字电压表的软件模块划分和工作流程
自动换挡数字电压表的软件可以划分为显示模块和A/D采集模块两个部分,其工作流程如下图所示。
4.21602液晶驱动模块函数设计
1602液晶驱动模块函数主要用于对1602液晶进行相应的基础操作,包括以下操作函数,其应用代码如下所示。
(1)voiddelay(unsignedintz):
ms级延时函数。
(2)voiclwrite_com(unsignedcharc):
向1602写命令子函数。
(3)voidwrite_data(unsignedchard):
向1602写数据子函数。
(4)voidlnltialize():
LCD初始化子函数。
应用代码使用P0端口作为数据通信端口,然后使用P2.0和P2.1作为相应的控制引脚对1602进行控制。
voiddelay(unsignedintz)//延时子函数z*1ms
unsignedintx,y;
for(x=z;
x>
0x--)
for(y=110;
y>
0;
y--);
voidwrite_com(unsignedcharc)//写命令子函数
lcdrs=0;
//低电平选择为“写指令”
lcden=0;
LEDDATA=c;
//把指令写入P0口
delay(5);
//参考时序图
lcden=1;
//开使能
//读取指令
//关闭使能
voidwrite_data(unsignedchard)//写数据子函数
lcdrs=1;
//高电平选择为“写数据”
LEDDATA=d;
//把数据写入P0口
//参考时序图
//读取数据
//关闭使能
voidinitialize()//LCD初始化函数
unsignedcharnum;
write_com(0x38);
//设辫16x2显示,5x7点阵显示.8位数据接口
writc_com(0x0c);
//00001DCB,D(开关显示).C(是否显示光标),B(光标闪烁,
//光标不显示)
write_com(0x06);
//000001N0,N(地址指针+-1)
write_com(0x01);
//清屏指令每次显示下一屏内容时,必须清屏
write_com(0x80+0xl0);
//第一行,顶格显示
tor(num=0;
num<
17;
num++)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 数字 自动档 电压表