基于STC89C52和ADC0809简易数字电压表的设计.docx
《基于STC89C52和ADC0809简易数字电压表的设计.docx》由会员分享,可在线阅读,更多相关《基于STC89C52和ADC0809简易数字电压表的设计.docx(22页珍藏版)》请在冰豆网上搜索。
基于STC89C52和ADC0809简易数字电压表的设计
基于stc89c52单片机的数字电压表
设
计
报
告
专业:
智能电网
学生:
喻卫
湖南铁道职业技术学院电气工程系
设计报告
一、设计题目
二、设计内容与要求
三、设计目的意义
四、系统硬件电路图
五、程序流程图与源程序
六、系统功能分析与说明
七、设计体会
八、参考文献
基于STC89C52的简易数字电压表的设计
摘要:
本课题是利用单片机设计一个数字电压表,能够测量0-5V之间的直流电压值,四位数码管显示,使用的元器件数目较少。
外界电压模拟量输入到A/D转换部分的输入端,通过ADC0809转换变为数字信号,输送给单片机。
然后由单片机给数码管数字信号,控制其发光,从而显示数字。
此外,本文还讨论了设计过程中的所用的软件硬件环境,调试所出现的问题等。
关键词:
单片机;STC89C52;数字电压表;ADC0809,四位数码管
Abstract:
Thistopicistheuseofmicrocontrollerdesignadigitalvoltmeter,capableofmeasuringbetween0-5VDCvoltage,fourdigitaldisplay,theuseoffewercomponents.ExternalanalogvoltageinputtotheA/DconversionpartoftheinputoftheconversionintoadigitalsignalthroughtheADC0809,transmissiontothemicrocontroller.Andthenbythemicrocontrollertothedigitalcontroldigitalsignal,controlthelight,sothedisplayednumber.Inaddition,thearticlealsodiscussesthedesignprocessofsoftwareusedinthehardwareenvironment,debuggingtheproblemsandsoon.
Keywords:
SCM;STC89C52;digitalvoltmeter;ADC0809,fourdigital
4.2STC89C52的结构
在本次课题设计中我们选择了STC89C52芯片。
STC89C52是一种带8K字节闪烁可编程可檫除只读存储器(FPEROM-FlashProgramableandErasableReadOnlyMemory)的低电压,高性能COMOS8的微处理器,俗称单片机。
该器件采用ATMEL搞密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
4.2.1STC89C52内部结构概述
主要功能特性
兼容MCS51指令系统
8K可反复擦写FlashROM
32个双向I/O口
256x8bit内部RAM
3个16位可编程定时/计数器中断
时钟频率0-24MHz
2个串行中断
可编程UART串行通道
2个外部中断源
共6个中断源
2个读写中断口线
3级加密位
低功耗空闲和掉电模式
软件设置睡眠和唤醒功能
图4.2单片机(AT89S51)引脚及外观
引脚图
4.2.2CPU结构
CPU是单片机的核心部件。
它由运算器和控制器等部件组成。
1. 运算器
运算器以完成二进制的算术/逻辑运算部件ALU为核心。
它可以对半字节(4)、单字节等数据进行操作。
例如,能完成加、减、乘、除、加1、减1、BCD码十进制调整、比较等算术运算,完成与、或、异或、求反、循环等逻操作,操作结果的状态信息送至状态寄存器。
运算器还包含有一个布尔处理器,用以处理位操作。
它以进位标志位C为累加器,可执行置位、复位、取反、位判断转移,可在进位标志位与其他可位寻址的位之间进行位数据传诵等操作,还可以完成进位标志位与其他可位寻址的位之间进行逻辑与、或操作。
2.程序计数器PC
PC是一个16位的计数器,用于存放一条要执行的指令地址,寻址范围为64kB,PC有自动加1功能,即完成了一条指令的执行后,其内容自动加1。
3.指令寄存器
指令寄存器用于存放指令代码。
CPU执行指令时,由程序存储器中读取的指令代码送如指令寄存器,经指令译码器译码后由定时有控制电路发出相应的控制信号,完成指令功能。
4.2.3存储器和特殊功能寄存器
1.存储器(Memory)是计算机系统中的记忆设备,用来存放程序和数据。
计算机中的全部信息,包括输入的原始数据、计算机程序、中间运行结果和最终运行结果都保存在存储器中。
它根据控制器指定的位置存入和取出信息。
2.特殊功能寄存器
特殊功能寄存器(SFR)的地址范围为80H~FFH。
在MCS-51中,除程序计数器PC和四个工作寄存器区外,其余21个特殊功能寄存器都在这SFR块中。
其中5个是双字节寄存器,它们共占用了26个字节。
各特殊功能寄存器的符号和地址见附表2。
其中带*号的可位寻址。
特殊功能寄存器反映了8051的状态,实际上是8051的状态字及控制字寄存器。
用于CPUPSW便是典型一例。
这些特殊功能寄存器大体上分为两类,一类与芯片的引脚有关,另一类作片内功能的控制用。
与芯片引脚有关的特殊功能寄存器是P0~P3,它们实际上是4个八位锁存器(每个I/O口一个),每个锁存器附加有相应的输出驱动器和输入缓冲器就构成了一个并行口。
MCS-51共有P0~P3四个这样的并行口,可提供32根I/O线,每根线都是双向的,并且大都有第二功能。
其余用于芯片控制的寄存器中,累加器A、标志寄存器PSW、数据指针DPTR等的功能前已提及。
4.2.4P0-P3口结构
P0口功能:
P0口具有两种功能:
第一,P0口可以作为通用I/O接口使用,P0.7—P0.0用于传送CPU的输入/输出数据。
输出数据时可以得到锁存,不需外接专用锁存器,输入数据可以得到缓冲。
第二,P0.7—P0.0在CPU访问片外存储器时用于传送片外存储器de低8位地址,然后传送CPU对片外存储器的读写
P1口功能 :
P1口的功能和P0口de第一功能相同,仅用于传递I/O输入/输出数据。
P2口的功能:
P2口的第一功能和上述两组引脚的第一功能相同,即它可以作为通用I/O使用。
它的第二功能和P0口引脚的第二功能相配合,作为地址总线用于输出片外存储器的高8位地址。
P3口功能:
P3口有两个功能:
第一功能与其余三个端口的第一功能相同;第二功能作控制用,每个引脚都不同。
表4.1P3口第二功能
引脚
名称
功能
P3.0
RXD
串行数据接收口
P3.1
TXD
串行数据发送口
P3.2
INT0
外中断0输入
P3.3
INT1
外中断1输入
P3.4
T0
计数器0计数输入
P3.5
T1
计数器1计数输入
P3.6
WR
外部RAM写选通信号
P3.7
RD
外部RAM读选通信号
4.2.5时钟电路和复位电路
1.时钟电路
单片机的时钟一般需要多相时钟,所以时钟电路由振荡器和分频器组成。
MCS-51内部有一个用于构成振荡器的可控高增益反向放大器。
两个引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。
在片外跨接一晶振和两个匹配电容C1、C2如图2.5所示。
就构成一个自激振荡器。
振荡频率根据实际要求的工作速度,从几百千赫至24MHz可适当选取某一频率。
匹配电容C1、C2要根据石英晶体振荡器的要求选取。
当晶振频率为12MHz时,C1C2一般选30pF左右。
图2.5中PD是电源控制寄存器PCON.1的掉电方式位,正常工作方式PD=0。
当PD=1时单片机进入掉电工作方式,是一种节能工作方式。
上述电路是靠MCS-51单片机内部电路产生振荡的。
也可以由外部振荡器或时钟直接驱动MCS-51。
图4.3复位电路的内部及外部方式
2.复位电路
复位是单片机的初始化操作。
其功能主要是将程序计数器(PC)初始化为0000H,使单片机从0000H单元开始执行程序,并将特殊功能寄存器赋一些特定值。
复位是使单片机退出低功耗工作方式而进入正常状态一种操作。
复位是上电的第一个操作,然后程序从0000H开始执行。
在运行中,外界干扰等因素可能会使单片机的程序陷入死循环状态或“跑飞”。
要使其进入正常状态,唯一办法是将单片机复位,以重新启动。
复位后,程序计数器(PC)及各特殊功能寄存器(SFR)的值如表4.2所示。
表4.2程序计数器及各特殊功能寄存器的复位值
寄存器
复位状态
寄存器
复位状态
PC
0000H
TH1
00H
ACC
00H
P0~P3
FFH
PSW
00H
IP
xx000000B
SP
07H
IE
0xx00000B
DPTR
0000H
TMOD
00H
TCON
00H
SCON
00H
TL0
00H
SBUF
不定
TH0
00H
PCON
0xxx0000B
TL1
00H
RST引脚是复位端,高电平有效。
在该引脚输入至少连续两个机器周期以上的高电平,单片机复位。
RST引脚内部有一个斯密特ST触发器(图2.10)以对输入信号整形,保证内部复位电路的可靠,所以外部输入信号不一定要求是数字波形。
使用时,一般在此引脚与VSS引脚之间接一个8.2kΩ的下拉电阻,与VCC引脚之间接一个约10μF的电解电容,即可保证上电自动复位。
上电或手动复位要求电源接通后,单片机自动复位,并且在单片机运行期间,用开关操作也能使单片机复位。
上电后,由于电容C3的充电和反相门的作用,使RST持续一段时间的高电平。
当单片机已在运行当中时,按下复位键K后松开,也能使RST为一段时间的高电平,从而实现上电或手动复位的操作。
4.3器件的比较与选择
4.3.1显示器
本次设计中有显示模块,而常用的显示器件比较多,有数码管,LED点阵,1602液晶,12864液晶等。
1.数码管是最常用的一种显示器件,它是由几个发光二极管组成的8字段显示器件,其特点是价格非常的便宜,使用也非常的方便,显示效果非常的清楚。
小电流下可以驱动每光,发光响应时间极短,体积小,重量轻,抗冲击性能好,寿命长。
但数码管只能是显示0——9的数据。
不能够显示字符。
这也是数码管的不足之处。
2.LED点阵显示器件是由好多个发光二极管组成的。
具有高亮度,功耗低,视角大,寿命长,耐湿,冷,热等特点,LED点阵显示器件可以显示数字,英文字符,中文字符等。
3.1602液晶是工业字符型液晶,能够同时显示16*2即32个字符。
1602液晶模块内部的字符发生存储器已经存储了160个不同的点阵字符图形,这些字这些字符有:
阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码。
使用时直接编写软件程序按一定的时序驱动即可。
它的特点是显示字迹清楚,价格相对便宜。
4.12864液晶也是一种工业字符型液晶,它不仅能够显示1602液晶所可以显示的字符,数字等信息,而且还可以显示8*4个中文汉字和一些简单的图片,显示信息也非常的清楚。
使用时也直接编写软件程序按一定的时序驱动即可。
不过它的价格比1602液晶贵了很多。
综合上述,根据本设计的要求和价格的考虑,选择数码管显示器。
单位数码管如图4.4所示,四位共阳极数码管如图4.5所示。
图4.4单位数码管
4.3.2模数(A/D)芯片
A/D转换器是模拟量输入通道中的一个环节,单片机通过A/D转换器把输入模拟量变成数字量再处理。
A/D转换的常用方法有:
①计数式A/D转换,②逐次逼近型A/D转换,③双积分式A/D转换,④V/F变换型A/D转换。
在这些转换方式中,记数式A/D转换线路比较简单,但转换速度较慢,所以现在很少应用。
双积分式A/D转换精度高,多用于数据采集及精度要求比较高的场合,如5G14433(31/2位),AD7555(41/2位或51/2位)等,但速度更慢。
随着大规模集成电路的发展,目前不同厂家已经生产出了多种型号的A/D转换器,以满足不同应用场合的需要。
如果按照转换原理划分,主要有3种类型,即双积分式A/D转换器、逐次逼近式A/D转换器和并行式A/D转换器。
目前最常用的是双积分和逐次逼近式。
(1)A/D芯片的比较
双积分式A/D转换器具有抗干扰能力强、转换精度高、价格便宜等优点,比如ICL71XX系列等,它们通常带有自动较零、七段码输出等功能。
与双积分相比,逐次逼近式A/D转换的转换速度更快,而且精度更高,比如ADC0808、ADC0809等,它们通常具有8路模拟选通开关及地址译码、锁存电路等,它们可以与单片机系统连接,将数字量送单片机进行分析和显示。
1.AD0809是8位逐次逼近型A/D转换器,它是由一个8路的模拟开关、一个地址锁存译码器、一个A/D转换器和一个三态输出锁存器组成。
多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D转换器进行转换。
些A/D转换器是的特点是8位精度,属于并行口,如果输入的模拟量变化大快,必须在输入之前增加采样电路。
2.AD0832也是8位逐次逼近型A/D转换器,可支持致命伤个单端输入通道和一个差分输入通道。
它易于和微处理器接口或独立使用;可满量程工作;可用地址逻辑多路器选通各输入通道。
3.TLC2543C是12位开关电容逐次逼近A/D转换,每个器件有三个控制输入端,片选,输入/输出时钟以及地址输入端。
它可以从主机高速传输转换数据。
它有高速的转换,通用的控制能力,具有简化比率转换,刻度以及模拟电路与逻辑电路和电源噪声隔离,耐高温等特点。
综合上述,逐次逼近型A/D转换既照顾了转换速度,有具有一定的精度,这里选用的是逐次逼近型的A/D转换芯片ADC0809。
图4.6ADC0809内部结构
图4.6ADC0809引脚图
(2)ADC0809的工作原理
1.IN0-IN7:
8条模拟量输入通道
ADC0809对输入模拟量要求:
信号单极性,电压范围是0-5V,若信号太小,必须进行放大;输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需在输入前增加采样保持电路。
地址输入和控制线:
4条。
ALE为地址锁存允许输入线,高电平有效。
当ALE线为高电平时,地址锁存与译码器将A,B,C三条地址线的地址信号进行锁存,经译码后被选中的通道的模拟量进转换器进行转换。
A,B和C为地址输入线,用于选通IN0-IN7上的一路模拟量输入。
通道选择表如表4.3所示。
表4.3ADC0809通道选择表
2.数字量输出及控制线:
11条
ST为转换启动信号。
当ST上跳沿时,所有内部寄存器清零;下跳沿时,开始进行A/D转换;在转换期间,ST应保持低电平。
EOC为转换结束信号。
当EOC为高电平时,表明转换结束;否则,表明正在进行A/D转换。
OE为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。
OE=1,输出转换得到的数据;OE=0,输出数据线呈高阻状态。
D7-D0为数字量输出线。
CLK为时钟输入信号线。
因ADC0809的内部没有时钟电路,所需时钟信号必须由外界提供,通常使用频率为500KHZ,
VREF(+),VREF(-)为参考电压输入。
3.ADC0809应用说明
①ADC0809内部带有输出锁存器,可以与AT89S51单片机直接相连。
②初始化时,使ST和OE信号全为低电平。
③送要转换的哪一通道的地址到A,B,C端口上。
④在ST端给出一个至少有100ns宽的正脉冲信号。
⑤是否转换完毕,我们根据EOC信号来判断。
⑥当EOC变为高电平时,这时给OE为高电平,转换的数据就输出给单片机了。
AD0809的启动方式为脉冲启动方式,启动信号START启动后开始转换,EOC信号在
START的下降沿10us后才变为无效的低电平。
这要求查询程序待EOC无效后再开始查询,
转换完成后,EOC输出高电平,再由OE变为高电平来输出转换数据。
我们在设计程序时
可以利用EOC信号来通知单片机(查询法或中断法)读入已转换的数据,也可以在启动
AD0809后经适当的延时再读入已转换的数据。
AT89S51的输出频为晶振频的1/6(2MHZ),AT89S1与SUN7474连接经与7474的ST脚提供AD0809的工作时钟。
AD0809的工作频范围为10KHZ-1280KHZ,当频率范围为500KHZ时,其转换速度为128us。
4.4.2系统原理图
4.4.3系统PCB图
五、程序流程图与源程序
5.1程序流程图
5.4C语言程序清单
#include
typedefunsignedcharuchar;
typedefunsignedintuint;
codeunsignedcharSEGMENT[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
codeunsignedcharSELECT[4]={0xFD,0xF7,0xDF,0x7F};
uintX1;
sbitP2_1=P2^1;
sbitP2_3=P2^3;
sbitP2_5=P2^5;
sbitP2_7=P2^7;
sbitSTART=P2^2;
sbitOE=P2^6;
sbitEOC=P2^4;
sbitspk=P2^0;
voiddelay(uinti)
{
uintj;
for(j=0;j<=i;j++);
}
voidDelayms(uinti)
{
ucharj,k;
for(j=0;j<=i;j++)
for(k=0;k<=114;k++);
}
voidtimer(void)
{
TMOD=0x01;
TH0=0xdc;
TL0=0x00;
EA=1;
ET0=1;
TR0=1;
}
ucharScankey(void)
{
ucharkey;
if((P3&0x0f)==0x0f)return(0xff);
Delayms(10);
if((P3&0x0f)==0x0f)return(0xff);
key=P3&0x0f;
while((P3&0x0f)!
=0x0f);
return(key);
}
voiddisplay(unsignedintwen)
{
staticunsignedcharnum=0;
P2_1=1;
P2_3=1;
P2_5=1;
P2_7=1;
P0=0xff;
switch(num)
{
case0:
P0=SEGMENT[wen%10];break;
case1:
P0=SEGMENT[wen/10%10];break;
case2:
P0=SEGMENT[wen/100%10];break;
case3:
P0=SEGMENT[wen/1000]&0x7f;break;
}
P2=SELECT[num];
num++;
num%=4;
}
voidADC0809()
{
uchartemp=2;
START=0;
delay(5);
START=1;
delay(5);
START=0;
delay(5);
while(!
EOC);
OE=1;
P1=0xff;
temp=P1;
X1=(unsignedint)temp*19.53;
OE=0;
if(X1==0)
{
spk=0;
}
else
spk=1;
}
voidtimer_0(void)interrupt1
{
staticunsignedintnum=0;
TH0=0xdc;
TL0=0x00;
num++;
if(num==50)
{
num=0;
ADC0809();
}
}
voidmain()
{
timer();
while
(1)
{
display(X1);
delay(500);
}
}
六、系统功能分析与说明
6.1数字电压表的概述
数字电压表(DigitalVoltmeter)简称DVM,它是采用数字化测量技术,把连续的模拟量(直流输入电压)转换成不连续、离散的数字形式并加以显示的仪表。
传统的指针式电压表功能单一、精度低,不能满足数字化时代的需求,采用单片机的数字电压表,由精度高、抗干扰能力强,可扩展性强、集成方便,还可与PC进行实时通信。
目前,由各种单片A/D转换器构成的数字电压表,已被广泛用于电子及电工测量、工业自动化仪表、自动测试系统等智能化测量领域,示出强大的生命力。
与此同时,由DVM扩展而成的各种通用及专用数字仪器仪表,也把电量及非电量测量技术提高到崭新水平。
本章重点介绍单片A/D转换器以及由它们构成的基于单片机的数字电压表的工作原理。
6.2数字电压表的介绍
模拟电压表具有电路简单、成本低、测量方便等特点,但测量精度较差,特别是受表头精度的限制,即使采用0.5级的高灵敏度表头,读测时的分辨力也只能达到半格。
再者,模拟式电压表的输入阻抗不高,测高内阻源时精度明显下降。
数字电压表作为数字技术的成功应用,发展相当快。
数字电压表(DigitalVoItMe-ter,DVM),以其功能齐全、精度高、灵敏度高、显示直观等突出优点深受用户欢迎。
特别是以A/D转换器为代表的集成电路为支柱,使DVM向着多功能化、小型化、智能化方向发展。
DVM应用单片机控制,组成智能仪表;与计算机接口,组成自动测试系统。
目前,DVM多组成多功能式的,因此又称数字多用表(DigitalMultiMeter,DMM)。
DVM是将模拟电压变换为数字显示的测量仪器,这就要求将模拟量变成数字量。
这实质上是个量化过程,即将连续的无穷多个模拟量用有限个数字表示的过程,完成这种变换的核心部件是A/D转换器,最后用电子计数器计数显示,困此,DVM的基本组成是A/D转换器和电子计数器。
DVM最基本功能是测直流电压,考虑到仪器的多功能化,可将其他物理量,如电阻、电容、交流电压、电流等,都变成直流电压,因此,还应有一个测量功能选择变换器,它包含在输入电路中。
DVM对直流电压直接测量时的测量精度最高,其他物理量在变换成直流电压时,受功能选择变换器精度的限制,测量精度有所下降。
6.3数字电压表工作原理
数字电压表的系统工作原理:
首先,被测电压信号进入A/D转换器,单片机中控制信号线发出控制信号,启动A/D转换器进行转换,其采样得到的数字信号数据在相应的码制转换模块中转换为显示代码。
最后发出显示控制与驱动信号,驱动外部的数码管显示相应的数据。
图2.1所示为DVM的基本组成框图,需指出的是,图中将DVM分