基于STC12C5A60S2单片机数字电压表的设计Word格式.docx

上传人:b****3 文档编号:8201614 上传时间:2023-05-10 格式:DOCX 页数:16 大小:463.71KB
下载 相关 举报
基于STC12C5A60S2单片机数字电压表的设计Word格式.docx_第1页
第1页 / 共16页
基于STC12C5A60S2单片机数字电压表的设计Word格式.docx_第2页
第2页 / 共16页
基于STC12C5A60S2单片机数字电压表的设计Word格式.docx_第3页
第3页 / 共16页
基于STC12C5A60S2单片机数字电压表的设计Word格式.docx_第4页
第4页 / 共16页
基于STC12C5A60S2单片机数字电压表的设计Word格式.docx_第5页
第5页 / 共16页
基于STC12C5A60S2单片机数字电压表的设计Word格式.docx_第6页
第6页 / 共16页
基于STC12C5A60S2单片机数字电压表的设计Word格式.docx_第7页
第7页 / 共16页
基于STC12C5A60S2单片机数字电压表的设计Word格式.docx_第8页
第8页 / 共16页
基于STC12C5A60S2单片机数字电压表的设计Word格式.docx_第9页
第9页 / 共16页
基于STC12C5A60S2单片机数字电压表的设计Word格式.docx_第10页
第10页 / 共16页
基于STC12C5A60S2单片机数字电压表的设计Word格式.docx_第11页
第11页 / 共16页
基于STC12C5A60S2单片机数字电压表的设计Word格式.docx_第12页
第12页 / 共16页
基于STC12C5A60S2单片机数字电压表的设计Word格式.docx_第13页
第13页 / 共16页
基于STC12C5A60S2单片机数字电压表的设计Word格式.docx_第14页
第14页 / 共16页
基于STC12C5A60S2单片机数字电压表的设计Word格式.docx_第15页
第15页 / 共16页
基于STC12C5A60S2单片机数字电压表的设计Word格式.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于STC12C5A60S2单片机数字电压表的设计Word格式.docx

《基于STC12C5A60S2单片机数字电压表的设计Word格式.docx》由会员分享,可在线阅读,更多相关《基于STC12C5A60S2单片机数字电压表的设计Word格式.docx(16页珍藏版)》请在冰点文库上搜索。

基于STC12C5A60S2单片机数字电压表的设计Word格式.docx

STC12C5A60S2单片机系统,数码管显示系统、时钟电路、复位电路档位调节电路以及测量电压输入电路。

硬件电路设计框图如图1所示。

时钟电路

测量电压输入

LCD1602显示

STC12C5A60S2

P1

P0

P2

P2

P0

复位电路

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

第3章硬件电路设计

3.1STC12C5A60S2单片机

图3.1STC12C5A60S2单片机引脚图及实物图

3.2STC12C5A60S2系列单片机主要性能

1)高速:

1个时钟/机器周期,增强型8051内核,速度比普通8051快6~12倍。

2)宽电压:

5.5~3.3V,2.2~3.6V(STC12LE5A60S2系列)。

3)增加第二复位功能脚/P4.6(高可靠复位,可调整复位门槛电压,频率<

12MHz时,无需此功能)。

4)增加外部掉电检测电路/P4.6,可在掉电时,及时将数据保存进EEPROM,正常工作时无需操作EEPROM。

5)低功耗设计:

空闲模式(可由任意一个中断唤醒)。

6)低功耗设计:

掉电模式(可由外部中断唤醒),可支持下降沿/上升沿和远程唤醒。

7)支持掉电唤醒的管脚:

INT0/P3.2,INT1/P3.3,T0/P3.4,T1/P3.5,RxD/P3.0,

CCP0/P1.3(或P4.2),CCP1/P1.4(或P4.3),EX_LVD/P4.6。

8)工作频率:

0~35MHz,相当于普通8051:

0~420MHz。

9)时钟:

外部晶体或内部RC振荡器可选,在ISP下载编程用户程序时设置。

10)8/16/20/32/40/48/52/56/60/62K字节片内Flash程序存储器,擦写次数10万次以上。

11)1280字节片内RAM数据存储器。

12)芯片内EEPROM功能,擦写次数10万次以上。

13)ISP/IAP,在系统可编程/在应用可编程,无需编程器/仿真器。

14)8通道,10位高速ADC,速度可达25万次/秒,2路PWM还可当2路D/A使用。

15)2通道捕获/比较单元(PWM/PCA/CCP),也可用来再实现2个定时器或2个外部中断(支持上升沿/下降沿中断)。

16)4个16位定时器,兼容普通8051的定时器T0/T1,2路PCA实现2个定时器。

17)可编程时钟输出功能,T0在P3.4输出时钟,T1在P3.5输出时钟,BRT在P1.0输出时钟。

18)硬件看门狗(WDT)。

19)高速SPI串行通信端口。

20)全双工异步串行口(UART),兼容普通8051的串口。

21)通用I/O口(36/40/44个),复位后为:

准双向口/弱上拉(普通8051传统I/O口)。

可设置成四种模式:

准双向口/弱上拉,推挽/强上拉,仅为输入/高阻,开漏。

每个I/O口驱动能力均可达到20mA,但整个芯片最大不得超过120mA。

3.3STC12C5A60S2系列单片机的A/D转换器的结构

STC12C5A60S2系列单片机的A/D转换口在P1口(P1.7-P1.0),有8路10位高速A/D转换器,速度可达到250KHz(25万次/秒)。

8路电压输入型A/D,可做温度检测、电源电压检测、按键扫描、频谱检测等。

上电复位后P1口为弱上拉型I/O口,用户可以通过软件设置将8路中的任何一路设置为A/D转换,不需作为A/D使用的I/O口可以继续作为I/O口使用。

STC12C5A60S2系列单片机ADC的结构如下图所示

图3.2STC12C5A60S2系列单片机ADC的结构

图3.3当AUXR.1/ADRJ=0时,A/D转换结果寄存器格式

图3.4当AUXR.1/ADRJ=1时,A/D转换结果寄存器格式

STC12C5A60S2系列单片机ADC由多路选择开关、比较器、逐次比较寄存器、10位ADC转换寄结果存器(ADC_RES和ADC_RESL)以及ADC_CONTR构成。

STC12C5A60S2系列单片机的ADC是逐次比较型ADC,逐次比较型ADC由一个比较D/A转换器构成,通过逐次比较逻辑,从最高位(MSB)开始,顺序地对每一输入电压与内置D/A转换器输出比较,经过多次比较,使转换所得的数字量逐次比逼近输入模拟量对应值。

逐次比较型A/D转换器具有速度高,功耗低等特点。

从上图可以看出,通过模拟多路开关,将通过ADC0-ADC7的模拟量输入送给比较器。

用数/模转换器(DAC)转换的模拟量与本次输入的模拟量通过比较器进行比较,将比较结果保存到逐次比较器,并通过逐次比较寄存器输出转换结果。

A/D转换结束后,最终的转换结果保存到ADC转换结果寄存器ADC_RES和ADC_RESL,同时,置位ADC控制寄存器ADC_CONTR中的A/D转换结束标志位ADC_FLAG,以供程序查询或发出中断申请。

模拟通道的选择控制由ADC控制寄存器ADC_CONTR中的CHS2~CHS0确定。

ADC的转换速度由ADC控制寄存器中的SPEED1和SPEED0确定。

在使用ADC之前,应先给ADC上电,也就是置位ADC控制寄存器中的ADC_POWER位。

当ADRJ=0时,如果取10位结果,则按下面公式计算:

10-bitA/DConversionResult:

(ADC_RES[7:

0],ADC_RESL[1:

0])=1023*Vin/Vcc

当ADRJ=0时,如果取8位结果,则按下面公式计算:

8-bitA/DConversionResult:

0])=255*Vin/Vcc

当ADRJ=1时,如果取10位结果,则按下面公式计算:

(ADC_RESL[1:

0],ADC_RES[7:

当ADRJ=1时,如果取8位结果,则按下面公式计算:

2])=255*Vin/Vcc

式中,Vin为模拟输入电压,Vcc为单片机实际工作电压,用单片机工作电压作为模拟参考电压。

3.4与A/D转换相关的寄存器及说明

与STC12C5A60S2系列单片机A/D转换相关的寄存器

表3.1A/D转换相关的寄存器

1.P1口模拟功能控制寄存器P1ASF

STC12C5A60S2系列单片机的A/D转换通道与P1(P1.7-P1.0)复用,上电复位后P1为弱上拉型I/O口,用户可以通过将8路中的如何一路设置为A/D转换,不需作为A/D使用的P1口可继续作为I/O口使用(建议只作为输入)。

需作为A/D使用的口需要先将P1ASF特殊功能寄存器中的相应位置为“1”,将相应的口设置为模拟功能。

P1ASF寄存器的格式如下:

P1ASF:

P1口模拟功能控制寄存器(只读)

表3.2P1ASF寄存器

当P1口中的相应位作为A/D使用时,要将P1ASF中的相应位置“1”

表3.3P1ASF寄存器设置

2.ADC控制寄存器ADC_CONTR

ADC_CONTR寄存器的格式如下:

ADC_CONRTR:

ADC控制寄存器

表3.4ADC控制寄存器

对ADC_CONTR寄存器进行操作,建议直接用MOV赋值语句,不要用“与”和“或”语句。

ADC_POWER:

ADC电源控制位。

0:

关闭A/D转换电源;

1:

打开A/D转换电源;

建议进入控模式前,将ADC电源关闭,即ADC_POWER=0.启动A/D转换前一定要确认A/D电源已打开,A/D转换结束后关闭A/D电源可决定功耗,也可以不关闭。

初次打开内部A/D转换模拟电源,需适当延时,等内部模拟电源稳定后,再启动A/D转换。

建议启动A/D转换后,在A/D转换结束之前,不要改变任何I/O口的状态,有利于高精度A/D转换,若能将定时器/串行口/中断系统关闭更好。

SPEED1,SPEED0:

模数转换速度控制位

表3.5模数转换速度控制位设置

STC12C5A60S2系列单片机的A/D转换模块所使用的时钟时内部(或外部石英晶体)所产生的系统时钟,不使用时钟分频寄存器CLK_DIV对系统分频后所产生的供给CPU工作的时钟。

(好处:

这样可以让ADC用较高频率工作,提高A/D的转换速度。

让CPU工作工作在较低频率,降低系统功耗)。

ADC_FLAG:

模数转换结束标志位,当A/D转换完成后,ADC_FLAG=1,要由软件清零。

不管是A/D转换完成后由该位申请中断,还是由软件查询该标志A/D转换是否结束,当A/D转换完成后,ADC_FLAG=1,一定要软件清零。

ADC_START:

模数转换器(ADC)转换启动控制位,设置为“1”时,开始转换,转换结束后ADC_START=1;

CHS2/CHS1/CHS0:

模拟输入通道选择

表3.6模拟输入通道选择

设置ADC_CONTR控制寄存器后,要加4个空操作延时后才能正确度到ADC_CONTR寄存器的值。

原因是设置ADC_CONTR控制寄存器的语句执行后,要经过4个CPU时钟的延时,其值才能够保证被设置进ADC_CONTR控制寄存器。

MOVADC_CONTR,#DATA

NOP

MOVA,ADC_CONRT

3、A/D转换结果寄存器ADC_RES、ADC_RESL

特殊功能寄存器ADC_RES和ADC_RESL寄存器用于存放A/D转换结果,其格式如下:

表3.7用于存放A/D转换结果寄存器ADC_RES、ADC_RESLAUXR1寄存器的ADRJ位是A/D转换结果寄存器的数据格式调整控制位。

表3.8当ADRJ=0时,10位A/D转换结果的高8位存放在ADC_RES中,低2位存放在ADC_RESL的低2位中。

表3.9当ADRJ=1时,10位A/D转换结果的高2位存放在ADC_RES的低2位中,低8位存放在ADC_RESL中。

4、与A/D中断有关的寄存器

IE:

中断允许寄存器

表3.10中断允许寄存器

EA:

CPU的中断开放标志,EA=1,CPU开放中断,EA=0,CPU屏蔽所有的中断请求。

EADC:

A/D转换中断允许位。

EADC=1,允许A/D中断;

EADC=0,屏蔽A/D中断。

IPH:

中断优先级控制寄存器高(不可位寻址)

表3.11中断优先级控制寄存器高

IP:

中断优先级控制寄存器低(可以位寻址)

表3.12中断优先级控制寄存器低

PADCH,PADC:

ADC转换优先级控制位。

5、ADC初始化程序

/*----------------------------

初始化ADC

----------------------------*/

voidInitADC(void)

{

P1ASF=0x58;

//设置P1口为AD口0100011101011000

ADC_RES=0;

//清除结果寄存器

ADC_CONTR=ADC_POWER|ADC_SPEEDLL;

Delay(50);

//ADC上电并延时

}

6、ADC读子函数

发送ADC结果到PC

voidShowResult(BYTEch)

floatvalue;

change_long_data_to_array(disadch,2,ch);

value=GetADCResult(ch);

value=value/255*4.8;

change_data_to_array(disadcval,5,1,value);

读取ADC结果

BYTEGetADCResult(BYTEch)

ADC_CONTR=ADC_POWER|ADC_SPEEDLL|ch|ADC_START;

_nop_();

//等待4个NOP

while(!

(ADC_CONTR&

ADC_FLAG));

//等待ADC转换完成

ADC_CONTR&

=~ADC_FLAG;

//CloseADC

returnADC_RES;

//返回ADC结果

3.5系统电路设计、说明

3.5.1系统电路总原理图

图3.5系统原理图

3.5.2晶振电路简介

时钟信号的振荡器提供正常工作稳定的供应链接管理。

晶振也被称为晶振谐振器,是一种机电设备,是需要精密磨削的石英晶体镀上电极焊上导线制成。

这种晶体有一个很关键的特性----压电效应,给它导电,产生机械振荡,反之,给它机械力,便会产生电[7]。

它的形状,材质,切割方向影响到振荡的频率。

根据石英晶体等效为一个谐振回路,它的机电效应是机-电-机-电..的不断转换,由电感和电容组成的谐振回路是电场-磁场的不断转换。

AT89S52的反相放大器,振荡器,时钟信号可以由单片机产生周期性功能是机械指令驱动芯片实现。

这个放大器与石英晶体或陶瓷谐振器一起可构成一个自激振荡器,外接石英晶体或陶瓷谐振器以及电容C8和C10组成并联谐振电路,接在放大器的反馈回路中。

一个外部电容C8和C10的值虽然没有严格的要求,但会影响许多电容振荡器的频率稳定度、振荡器、起振圈内部振荡的接法的快速及时性和温度稳定性。

AT89S52芯片里面有一个反相高增益放大器,它两头跟石英晶体及两个常用30pF电容相连接,组成稳定的自激振荡器微调震荡频率。

震荡电路如图5所示。

图3.6晶振电路

3.5.3复位电路

系统CPU和其辅助部件是在一个精确的状态开始运行,单片机成功复位。

不论是电源故障或刚接上电源,要使用单片机就要先复位。

施密特触发器通过AT89S52单片机RST引脚接收复位信号。

当系统振荡稳定没发生异常情况下,假如RST出现一个持续24个振荡周期的高电平,则系统复位。

本设计系统是自动电源复位。

本系统中采用上电电路复位,即在单片机运行期间人工的复位,方便又简单。

工作按钮接通电源,单片机便可复位,即手动复位完成。

系统上电运行后,如果要复位,则动手复位即可,手动复位电路如图6所示。

图3.7复位电路

3.5.4显示电路

LCD1602显示32个字符内容,分为2行显示。

当前面向市场上字符液晶显示模块几近都是一样在HD44780液晶芯片的控制原理上完成的。

图3.8LCD1602显示电路

第4章系统软件设计

4.1程序设计框图

ADC初始化

延时400ms

读取被测电

压并计算

1602显示

开始

图4.1程序设计框图

#include<

STC12C5A60s2.h>

stdio.h>

#include"

1602.h"

adc.h"

delay.h"

intrins.h"

#defineRatio2.0//用来确定电阻比值,电阻总阻值除以承载电压的那个电阻

/*------------------------------------------------

主函数

------------------------------------------------*/

voidmain(void)

floatVo=0.0;

unsignedinttemp_data=0;

unsignedchartemp[16];

LCD_Init();

LCD_Clear();

LCD_Write_String(6,0,"

test"

);

while

(1)

{

temp_data=GetADCResult(0);

//使用ADC得到电压值

Vo=(float)temp_data*Ratio*Vcc/255.0/100.0;

//将得到的电压值进行处理

sprintf(temp,"

U=%.2fV"

Vo);

LCD_Write_String(0,1,temp);

DelayMs(200);

}

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

当前位置:首页 > 解决方案 > 工作计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2