基于STC12C5A60S2单片机的无极档位直流电压表的设计.doc

上传人:精*** 文档编号:848746 上传时间:2023-09-09 格式:DOC 页数:38 大小:701.45KB
下载 相关 举报
基于STC12C5A60S2单片机的无极档位直流电压表的设计.doc_第1页
第1页 / 共38页
基于STC12C5A60S2单片机的无极档位直流电压表的设计.doc_第2页
第2页 / 共38页
基于STC12C5A60S2单片机的无极档位直流电压表的设计.doc_第3页
第3页 / 共38页
基于STC12C5A60S2单片机的无极档位直流电压表的设计.doc_第4页
第4页 / 共38页
基于STC12C5A60S2单片机的无极档位直流电压表的设计.doc_第5页
第5页 / 共38页
点击查看更多>>
资源描述

1、摘 要本文介绍了一种基于单片机的简易数字电压表的设计。其主要特点是电压档位不是固定的,它可以通过电位器调节电压表的档位,以选择一个合适电压档位。该设计主要由四部分组成:一、电压采集部分由STC12C5A60S2单片机内部自带的10位A/D来完成。二、档位无极调节部分由一个双联电位器构成,通过对电源电压的分压而得到档位值。三、基准电压由TLC431产生。四、显示部分,采用LCD1602。该系统的数字电压表电路简单,所用的元件较少,成本低,且测量精度和可靠性较高。此数字电压表可以测量0-150V的1路直流输入电压值,并通过LCD1602显示出来。【关键词】单片机;数字电压表;A/D转换;STC12

2、C5A60S2;LCD1602目 录第1章 引言第2章 系统主题方案选择与说明 2.1 设计要求2.2 设计路 2.3 设计案第3章 硬件电路设计3.1 STC12C5A60S2单片机3.2 TLC431 3.3 字符液晶模块LCD1602 3.4 系统电路设计、说明、实物第4章软件设计4.1 系统软件设计程序 第1章 引言在电量的测量中,电压、电流和频率是最基本的三个被测量,其中电压量的测量最为经常。而且随着电子技术的发展,更是经常需要测量高精度的电压,所以数字电压表就成为一种必不可少的测量仪器。数字电压表简称DVM,它是采用数字化测量技术,把连续的模拟量转换成不连续、离散的数字形式并加以显

3、示的仪表。由于数字式仪器具有读数准确方便、精度高、误差小、测量速度快等特而得到广泛应用1。 传统的指针式刻度电压表功能单一,进度低,容易引起视差和视觉疲劳,因而不能满足数字化时代的需要。采用单片机的数字电压表,将连续的模拟量如直流电压转换成不连续的离散的数字形式并加以显示,从而精度高、抗干扰能力强,可扩展性强、集成方便,还可与PC实时通信。数字电压表是诸多数字化仪表的核心与基础2。以数字电压表为核心,可以扩展成各种通用数字仪表、专用数字仪表及各种非电量的数字化仪表。目前,由各种单片机和A/D转换器构成的数字电压表作全面深入的了解是很有必要的。最近的几十年来,随着半导体技术、集成电路(IC)和微

4、处理器技术的发展,数字电路和数字化测量技术也有了巨大的进步,从而促使了数字电压表的快速发展,并不断出现新的类型4。数字电压表从1952年问世以来,经历了不断改进的过程,从最早采用继电器、电子管和形式发展到了现在的全固态化、集成化(IC化),另一方面,精度也从0.01%-0.005%。目前,数字电压表的内部核心部件是A/D转换器,转换的精度很大程度上影响着数字电压表的准确度,因而,以后数字电压表的发展就着眼在高精度和低成本这两个方面3。本文是以简易数字直流电压表的设计为研究内容,本系统主要包括三大模块:转换模块、数据处理模块及显示模块。 第2章 系统总体方案设计选择与说明2.1 设计要求1、增强

5、型MCS-51系列单片机STC12C5A60S2为核心器件,组成一个简单的电压档可以无极调节的直流数字电压表。2、采用1路模拟量输入,能够测量0-150V之间的直流电压值。3、电压显示采用LCD1602显示。 4、尽量使用较少的元器件。2.2 设计思路1、根据设计要求,选择STC12C5A60S2单片机为核心控制器件。2、基准电压由TLC31输出。3、A/D转换采用STC12C5A60S2内部自带A/D实现。4、档位调节采用双联电位器对电源电压的分压实现。5、电压显示采用LCD1602。2.3 设计方案硬件电路设计由7个部分组成:STC12C5A60S2单片机系统,LCD显示系统、时钟电路、复

6、位电路档位调节电路以及测量电压输入电路,基准电压输入电路。硬件电路设计框图如图1所示。 时钟电路 档位调节电路测量电压输入LCD显示系统STC12C5A60S2 P1 P2 P0复位电路 基准电压电路 图2.1 数字电压表系统硬件设计框图第3章 硬件电路设计3.1 STC12C5A60S2单片机3.1.1 STC12C5A60S2系列单片机主要性能1)高速:1个时钟/机器周期,增强型8051内核,速度比普通8051快612倍。2)宽电压:5.53.3V,2.23.6V(STC12LE5A60S2系列)。3)增加第二复位功能脚/P4.6(高可靠复位,可调整复位门槛电压,频率12MHz时,无需此功

7、能)。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) 工作频率:035MHz,相当于普通8051:0420MHz。9) 时钟:外部晶体或内部RC振荡器可选,在ISP下载编程用户程序时设置。10)

8、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) 可编程时钟输

9、出功能,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.1.2 STC12C5A60S2系列单片机的A/D转换器的结构STC12C5A60S2系列单片机的A/D转换口在P1口(P1.7-P1.0),有

10、8路10位高速A/D转换器,速度可达到250KHz(25万次/秒)。8路电压输入型A/D,可做温度检测、电源电压检测、按键扫描、频谱检测等。上电复位后P1口为弱上拉型I/O口,用户可以通过软件设置将8路中的任何一路设置为A/D转换,不需作为A/D使用的I/O口可以继续作为I/O口使用。STC12C5A60S2系列单片机ADC的结构如下图所示图3.1.1 STC12C5A60S2系列单片机ADC的结构图3.1.2 当AUXR.1/ADRJ=0时,A/D转换结果寄存器格式图3.1.3 当AUXR.1/ADRJ=1时,A/D转换结果寄存器格式STC12C5A60S2系列单片机ADC由多路选择开关、比

11、较器、逐次比较寄存器、10位ADC转换寄结果存器(ADC_RES和ADC_RESL)以及ADC_CONTR构成。STC12C5A60S2系列单片机的ADC是逐次比较型ADC,逐次比较型ADC由一个比较D/A转换器构成,通过逐次比较逻辑,从最高位(MSB)开始,顺序地对每一输入电压与内置D/A转换器输出比较,经过多次比较,使转换所得的数字量逐次比逼近输入模拟量对应值。逐次比较型A/D转换器具有速度高,功耗低等特点。从上图可以看出,通过模拟多路开关,将通过ADC0-ADC7的模拟量输入送给比较器。用数/模转换器(DAC)转换的模拟量与本次输入的模拟量通过比较器进行比较,将比较结果保存到逐次比较器,

12、并通过逐次比较寄存器输出转换结果。A/D转换结束后,最终的转换结果保存到ADC转换结果寄存器ADC_RES和ADC_RESL,同时,置位ADC控制寄存器ADC_CONTR中的A/D转换结束标志位ADC_FLAG,以供程序查询或发出中断申请。模拟通道的选择控制由ADC控制寄存器ADC_CONTR中的CHS2CHS0确定。ADC的转换速度由ADC控制寄存器中的SPEED1和SPEED0确定。在使用ADC之前,应先给ADC上电,也就是置位ADC控制寄存器中的ADC_POWER位。当ADRJ=0时,如果取10位结果,则按下面公式计算:10-bitA/D Conversion Result:(ADC_R

13、ES7:0,ADC_RESL1:0)=1023*Vin/Vcc当ADRJ=0时,如果取8位结果,则按下面公式计算:8-bitA/D Conversion Result:(ADC_RES7:0)=255*Vin/Vcc当ADRJ=1时,如果取10位结果,则按下面公式计算:10-bitA/D Conversion Result:( ADC_RESL1:0 ,ADC_RES7:0)=1023*Vin/Vcc当ADRJ=1时,如果取8位结果,则按下面公式计算:8-bitA/D Conversion Result:( ADC_RESL1:0 ,ADC_RES7:2)=255*Vin/Vcc式中,Vin为

14、模拟输入电压,Vcc为单片机实际工作电压,用单片机工作电压作为模拟参考电压。3.1.3 与A/D 转换相关的寄存器及说明与STC12C5A60S2系列单片机A/D转换相关的寄存器表3.1.1 A/D转换相关的寄存器1.P1口模拟功能控制寄存器P1ASFSTC12C5A60S2系列单片机的A/D转换通道与P1(P1.7-P1.0)复用,上电复位后P1为弱上拉型I/O口,用户可以通过将8路中的如何一路设置为A/D转换,不需作为A/D使用的P1口可继续作为I/O口使用(建议只作为输入)。需作为A/D使用的口需要先将P1ASF特殊功能寄存器中的相应位置为“1”,将相应的口设置为模拟功能。P1ASF寄存

15、器的格式如下:P1ASF:P1口模拟功能控制寄存器(只读)表3.1.2 P1ASF寄存器当P1口中的相应位作为A/D使用时,要将P1ASF中的相应位置“1”表3.1.3 P1ASF寄存器设置2.ADC控制寄存器ADC_CONTRADC_CONTR寄存器的格式如下:ADC_CONRTR:ADC控制寄存器表3.1.4 ADC控制寄存器对ADC_CONTR寄存器进行操作,建议直接用MOV赋值语句,不要用“与”和“或”语句。ADC_POWER:ADC电源控制位。0:关闭A/D转换电源;1:打开A/D转换电源;建议进入控模式前,将ADC电源关闭,即ADC_POWER=0.启动A/D转换前一定要确认A/D

16、电源已打开,A/D转换结束后关闭A/D电源可决定功耗,也可以不关闭。初次打开内部A/D转换模拟电源,需适当延时,等内部模拟电源稳定后,再启动A/D转换。建议启动A/D转换后,在A/D转换结束之前,不要改变任何I/O口的状态,有利于高精度A/D转换,若能将定时器/串行口/中断系统关闭更好。SPEED1,SPEED0:模数转换速度控制位表3.1.5 模数转换速度控制位设置STC12C5A60S2系列单片机的A/D转换模块所使用的时钟时内部(或外部石英晶体)所产生的系统时钟,不使用时钟分频寄存器CLK_DIV对系统分频后所产生的供给CPU工作的时钟。(好处:这样可以让ADC用较高频率工作,提高A/D

17、的转换速度。让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.1.6模拟输入通道选择设置ADC_CONTR控制寄存器后,要加4个空操作延时后才能正确度到ADC_CONTR寄存器的值。原因是设置A

18、DC_CONTR控制寄存器的语句执行后,要经过4个CPU时钟的延时,其值才能够保证被设置进ADC_CONTR控制寄存器。MOV ADC_CONTR,#DATANOPNOPNOPNOPMOV A,ADC_CONRT3、A/D转换结果寄存器ADC_RES、ADC_RESL特殊功能寄存器ADC_RES和ADC_RESL寄存器用于存放A/D转换结果,其格式如下:表3.1.7 用于存放A/D转换结果寄存器ADC_RES、ADC_RESLAUXR1寄存器的ADRJ位是A/D转换结果寄存器的数据格式调整控制位。表3.1.8 当ADRJ = 0 时,10位A/D转换结果的高8位存放在ADC_RES中,低2位存

19、放在ADC_RESL的低2 位中。表3.1.9 当ADRJ = 1 时,10位A/D转换结果的高2位存放在ADC_RES的低2 位中,低8位存放在ADC_RESL中。4、与A/D中断有关的寄存器IE:中断允许寄存器表3.1.10 中断允许寄存器EA: CPU的中断开放标志,EA = 1,CPU开放中断,EA = 0,CPU屏蔽所有的中断请求。EADC:A/D转换中断允许位。EADC = 1,允许A/D中断;EADC = 0,屏蔽A/D中断。IPH:中断优先级控制寄存器高(不可位寻址)表3.1.11 中断优先级控制寄存器高IP: 中断优先级控制寄存器低(可以位寻址)表3.1.12中断优先级控制寄

20、存器低PADCH,PADC:ADC转换优先级控制位。5、ADC初始化程序void Init_AD()P1M1=0X07;P1M0=0X00;/设置P1.0,P1.1,P1.2为高阻态P1ASF=0X07;/设置P1.0,P1.1,P1.2为模拟输入AUXR1&=0Xfb;ADC_CONTR =0XE0;6、ADC读子函数uint Read_AD(uchar add) ADC_CONTR = 0xE8|add; while (1) /等待A/D转换结束 if (ADC_CONTR & 0x10) /0001,0000 测试A/D转换结束否 break; ADC_CONTR &= 0xE7; /1

21、111,0111 清 ADC_FLAG 位, 关闭A/D转换, return (ADC_RES ;/*函数原型: main() 函数功能:主函数输入参数:输出参数:说 明:STC12C5A系列单片机*/*TLC431、DATA1、U_tlc431 =基准电压POT、DATA2 =档位U、DATA3 =被测电压1、电源电压:VCC=1023*U_tlc431/DATA1;2、档位电压:Ud=VCC*1023/DATA2; 档位被测电压:Udi=VCC*DATA2/1023;3、被测电压:U =(DATA3*VCC/1023)*(1023*Udi/DATA2) =Udi*/void main()u

22、nsigned long voltage=0,U=0,VCC,Udi;unsigned int DATA1,DATA2,DATA3;Delayms(20);Init_1602();Delayms(20);Init_AD();INIT();while(1)DATA1=Read_AD(TLC431);VCC=U_tlc431*1023.0/DATA1; /电源电压DATA2=Read_AD(POT);Udi=VCC*1023/DATA2;/档位电压(被测输入最大电压) DATA3=Read_AD(V); /读取被测电压Display_shujuchuli(Udi);WriteString(0,1,

23、Umax: );WriteString(8,1,Dat);voltage=VCC*DATA3/DATA2; /计算被测电压值if(voltage=Udi)Dat0=1;Dat1= ;Dat2= ;Dat3= ;Dat4= ;Dat5= ;Dat6= ;Dat7= ;Dat8=0;elseDisplay_shujuchuli(voltage); /显示数据处理WriteString(0,0,voltage:);WriteString(8,0,Dat);Delayms(500);/*函数原型: Delayms(uint k) 函数功能:延时 k ms输入参数:输出参数:说 明:STC12C5A系列

24、单片机*/void Delayms(uint k)/12.000MHzunsigned char i, j;while(k-)i = 24;j = 84;dowhile (-j); while (-i);/*函数原型: Disp_shujuchuli() 函数功能:显示数据处理输入参数:输出参数:说 明:STC12C5A系列单片机*/void Display_shujuchuli(unsigned long voltage)if(voltage/100000=1)&(voltage/10000%10=5) Dat0= 1+0;Dat1= ;Dat2= ;Dat3= ;Dat4= ;Dat5=

25、;Dat6= ;Dat7= ;Dat8= 0;elseif(voltage/100000)Dat0=voltage/100000%10+0; Dat1=voltage/10000%10+0;Dat2=voltage/1000%10+0;Dat3=.;Dat4=voltage/100%10+0;Dat5=voltage/10%10+0;Dat6=voltage%10+0;Dat7=V;Dat8=0;else if(voltage/10000) Dat0=voltage/10000%10+0;Dat1=voltage/1000%10+0;Dat2=.;Dat3=voltage/100%10+0;D

26、at4=voltage/10%10+0;Dat5=voltage%10+0;Dat6=V;Dat7= ;Dat8=0;else Dat0=voltage/1000%10+0;Dat1=.;Dat2=voltage/100%10+0;Dat3=voltage/10%10+0;Dat4=voltage%10+0;Dat5=V;Dat6= ;Dat7= ;Dat8=0;/*函数原型: INIT_() 函数功能:开机界面输入参数:输出参数:说 明:STC12C5A系列单片机*/void INIT() uchar x,temp;LED = 0;WriteString(0,1, DC Voltmeter );for(temp=64;temp0;temp-)for(x=0;x16;x+)WriteChar(x,0,Dat(temp+x)%19);Delayms(150);LED = 1;/*ADC头文件说 明:STC12C5A系列单片机*/#ifndef _AD_h_#define _AD_h_

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 毕业设计

版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1 

陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922