ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:22.35KB ,
资源ID:12190942      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/12190942.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于STC12C5A60S2单片机数字电压表的设计.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

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

1、基于STC12C5A60S2单片机数字电压表的设计数字电压表的设计精选文库第1章 引言在电量的测量中, 电压、电流和频率是最基本的三个被测量, 其中电压量的测量最为经常。 而且随着电子技术的发展, 更是经常需要测量高精度的电压, 所以数字电压表就成为一种必不可少的测量仪器。数字电压表简称 DVM,它是采用数字化测量技术, 把连续的模拟量转换成不连续、 离散的数字形式并加以显示的仪表。由于数字式仪器具有读数准确方便、精度高、误差小、测量速度快等特而得到广泛应用。传统的指针式刻度电压表功能单一, 精度低,容易引起视差和视觉疲劳, 因而不能满足数字化时代的需要。 采用单片机的数字电压表, 将连续的模

2、拟量如直流电压转换成不连续的离散的数字形式并加以显示, 从而精度高、抗干扰能力强,可扩展性强、集成方便,还可与 PC实时通信。数字电压表是诸多数字化仪表的核心与基础。 以数字电压表为核心, 可以扩展成各种通用数字仪表、 专用数字仪表及各种非电量的数字化仪表。 目前,由各种单片机和 A/D 转换器构成的数字电压表作全面深入的了解是很有必要的。目前,数字电压表的内部核心部件是 A/D 转换器,转换的精度很大程度上影响着数字电压表的准确度, 因而,以后数字电压表的发展就着眼在高精度和低成本这两个方面。本文是以简易数字直流电压表的设计为研究内容,本系统主要包括三大模块:转换模块、数据处理模块及显示模块

3、。第 2 章 系统总体方案设计选择与说明2.1 设计要求1、增强型 MCS-51系列单片机 STC12C5A60S2为核心器件,组成一个简单的直流数字电压表。2、采用 1 路模拟量输入,能够测量 0-10V 之间的直流电压值。3、电压显示采用 LCD1602显示。- 2精选文库4、尽量使用较少的元器件。2.2 设计思路1、根据设计要求,选择 STC12C5A60S2单片机为核心控制器件。2、 A/D 转换采用 STC12C5A60S2内部自带 A/D 实现。3、电压显示采用 LCD1602显示。2.3 设计方案硬件电路设计由 7 个部分组成: STC12C5A60S2单片机系统,数码管显示系统

4、、时钟电路、复位电路档位调节电路以及测量电压输入电路。 硬件电路设计框图如图 1 所示。STC12C5A6时钟电路 0S2P1测量电压输入入P0P2LCD1602 显示复位电路图 2.1 数字电压表系统硬件设计框图第 3 章 硬件电路设计3.1 STC12C5A60S2单片机- 3精选文库图 3.1 STC12C5A60S2单片机引脚图及实物图3.2 STC12C5A60S2系列单片机主要性能1)高速: 1个时钟 / 机器周期,增强型 8051内核,速度比普通 8051快612倍。2)宽电压: 5.53.3V ,2.23.6V(STC12LE5A60S2系列 ) 。3)增加第二复位功能脚 /P

5、4.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)工作频率: 035MH

6、z,相当于普通 8051:0420MHz。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 ,在系统可编程 / 在应用可编程,无需编程器 / 仿真器。- 4精选文库14)8通道, 10位高速 ADC,速度可达 25万次 / 秒, 2路 PWM还可当 2路D/A使用。15)2 通道捕获 / 比较单元 (PWM/PCA/CC

7、P),也可用来再实现 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 口 ) 。可设置成四种模式:准双向口 / 弱上拉,推挽 / 强上

8、拉,仅为输入 / 高阻,开漏。每个 I/O 口驱动能力均可达到 20mA,但整个芯片最大不得超过 120mA。3.3 STC12C5A60S2系列单片机的 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

9、系列单片机 ADC的结构如下图所示- 5精选文库图3.2 STC12C5A60S2系列单片机 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)开始,顺序地对每一输入电压与内

10、置 D/A转换器输出比较,经过多次比较,使转换所得的数字量逐次比逼近输入模拟量对应值。逐次比较型 A/D转换器具有速度高,功耗低等特点。从上图可以看出,通过模拟多路开关,将通过 ADC0-ADC7的模拟量输入送给比较器。用数 / 模转换器(DAC)转换的模拟量与本次输入的模拟量通过比较器进行比较,将比较结果保存到逐次比较器,并通过逐次比较寄存器输出转换结果。A/D转换结束后,最终的转换结果保存到 ADC转换结果寄存器 ADC_RES和 ADC_RESL,- 6精选文库同时,置位 ADC控制寄存器 ADC_CONTR中的 A/D转换结束标志位 ADC_FLAG,以供程序查询或发出中断申请。模拟通

11、道的选择控制由 ADC控制寄存器 ADC_CONTR中的CHS2CHS0确定。 ADC的转换速度由 ADC控制寄存器中的 SPEED1和SPEED0确定。在使用 ADC之前,应先给 ADC上电,也就是置位 ADC控制寄存器中的 ADC_POWER位。当ADRJ=0时,如果取 10位结果,则按下面公式计算:10-bitA/D ConversionResult:(ADC_RES7:0,ADC_RESL1:0)=1023*Vin/Vcc当ADRJ=0时,如果取 8位结果,则按下面公式计算:8-bitA/D Conversion Result:(ADC_RES7:0)=255*Vin/Vcc当ADRJ

12、=1时,如果取 10位结果,则按下面公式计算:10-bitA/D ConversionResult:( ADC_RESL1:0 ,ADC_RES7:0)=1023*Vin/Vcc当ADRJ=1时,如果取 8位结果,则按下面公式计算:8-bitA/D ConversionResult:( ADC_RESL1:0 ,ADC_RES7:2)=255*Vin/Vcc式中, Vin 为模拟输入电压, Vcc为单片机实际工作电压,用单片机工作电压作为模拟参考电压。3.4 与 A/D 转换相关的寄存器及说明与STC12C5A60S2系列单片机 A/D转换相关的寄存器表 3.1 A/D 转换相关的寄存器- 7

13、精选文库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寄存器的格式如下:P1ASF:P1口模拟功能控制寄存器(只读)表 3.2 P1ASF 寄存器当 P1 口中的相应位作为 A/D 使用时,要将 P1ASF中的相应

14、位置“ 1”表 3.3 P1ASF 寄存器设置2.ADC控制寄存器 ADC_CONTRADC_CONTR寄存器的格式如下:ADC_CONRTR:ADC控制寄存器表 3.4 ADC 控制寄存器对 ADC_CONTR寄存器进行操作, 建议直接用 MOV赋值语句,不要用“与”和“或”语句。ADC_POWER:ADC电源控制位。0:关闭 A/D 转换电源;1:打开 A/D 转换电源;- 8精选文库建议进入控模式前, 将 ADC电源关闭,即 ADC_POWER=0启动. A/D 转换前一定要确认 A/D 电源已打开, A/D 转换结束后关闭 A/D 电源可决定功耗,也可以不关闭。初次打开内部 A/D 转

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

16、低系统功耗) 。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: 模拟输入通道选择- 9精选文库表 3.6 模拟输入通道选择设置 ADC_CONTR控制寄存器后, 要加 4 个空操作延时后才能正确度到 ADC_CONTR寄存器的值。原

17、因是设置 ADC_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.7 用于存放 A/D 转换结果寄存器 ADC_RES、ADC_RESL AUXR1寄存器的 ADRJ位是 A/D 转换结果寄存器的数据格式调整控制位。- 10精选文库表 3.8 当 ADRJ = 0 时,

18、 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: 中断优先级控制寄存

19、器高(不可位寻址)表 3.11 中断优先级控制寄存器高IP: 中断优先级控制寄存器低(可以位寻址)- 11精选文库表 3.12 中断优先级控制寄存器低PADCH,PADC:ADC转换优先级控制位。5、ADC初始化程序/*-初始化 ADC-*/void InitADC(void)P1ASF = 0x58; / 设置 P1 口为 AD口 0100 01110101 1000ADC_RES = 0; / 清除结果寄存器ADC_CONTR = ADC_POWER | ADC_SPEEDLL;Delay(50); /ADC 上电并延时6、 ADC读子函数/*-发送 ADC结果到 PC-*/void Sh

20、owResult(BYTE ch)float value;change_long_data_to_array(disadch,2,ch);value=GetADCResult(ch);value=value/255*4.8;change_data_to_array(disadcval,5,1,value);- 12精选文库/*-读取 ADC结果-*/BYTE GetADCResult(BYTE ch)ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;_nop_(); / 等待 4 个 NOP_nop_();_nop_();_nop_();

21、_nop_(); / 等待 4 个 NOP_nop_();_nop_();_nop_();_nop_(); / 等待 4 个 NOP_nop_();_nop_();_nop_();while (!(ADC_CONTR & ADC_FLAG);/ 等待 ADC转换完成ADC_CONTR &= ADC_FLAG; /Close ADCreturn ADC_RES; / 返回 ADC结果3.5 系统电路设计、说明3.5.1 系统电路总原理图- 13精选文库图 3.5 系统原理图3.5.2 晶振电路简介时钟信号的振荡器提供正常工作稳定的供应链接管理。 晶振也被称为晶振谐振器,是一种机电设备, 是需要精

22、密磨削的石英晶体镀上电极焊上导线制成。 这种晶体有一个很关键的特性 - 压电效应,给它导电,产生机械振荡,反之,给它机械力,便会产生电 7 。它的形状,材质,切割方向影响到振荡的频率。根据石英晶体等效为一个谐振回路,它的机电效应是机 - 电- 机- 电. 的不断转换,由电感和电容组成的谐振回路是电场 - 磁场的不断转换。AT89S52 的反相放大器,振荡器 , 时钟信号可以由单片机产生周期性功能是机械指令驱动芯片实现。 这个放大器与石英晶体或陶瓷谐振器一起可构成一个自激振荡器 , 外接石英晶体或陶瓷谐振器以及电容 C8和 C10组成并联谐振电路 , 接在放大器的反馈回路中。一个外部电容 C8

23、和 C10 的值虽然没有严格的要求 , 但会影响许多电容振荡器的频率稳定度、 振荡器、起振圈内部振荡的接法的快速及时性和温度稳定性。AT89S52芯片里面有一个反相高增益放大器, 它两头跟石英晶体及两个常用30pF 电容相连接,组成稳定的自激振荡器微调震荡频率。震荡电路如图 5 所示。- 14精选文库图 3.6 晶振电路3.5.3 复位电路系统 CPU 和其辅助部件是在一个精确的状态开始运行 , 单片机成功复位。不论是电源故障或刚接上电源,要使用单片机就要先复位。施密特触发器通过AT89S52单片机 RST引脚接收复位信号。当系统振荡稳定没发生异常情况下, 假如 RST出现一个持续 24 个振

24、荡周期的高电平 , 则系统复位。本设计系统是自动电源复位。本系统中采用上电电路复位, 即在单片机运行期间人工的复位 , 方便又简单。工作按钮接通电源,单片机便可复位,即手动复位完成。系统上电运行后,如果要复位,则动手复位即可,手动复位电路如图 6 所示。图 3.7 复位电路3.5.4 显示电路LCD1602显示 32 个字符内容,分为 2 行显示。当前面向市场上字符液晶显- 15精选文库示模块几近都是一样在 HD44780液晶芯片的控制原理上完成的。图 3.8 LCD1602 显示电路第 4 章 系统软件设计4.1 程序设计框图开始读取被测电压并计算ADC 初始化LCD1602 显示延时 40

25、0ms图 4.1 程序设计框图- 16精选文库#include #include #include 1602.h#include adc.h#include delay.h#include intrins.h#define Ratio 2.0 / 用来确定电阻比值,电阻总阻值除以承载电压的那个电阻/*-主函数-*/void main(void)float Vo=0.0;unsigned int temp_data=0;unsigned char temp16;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=%.2f V ,Vo);LCD_Write_String(0,1,temp);- 17精选文库DelayMs(200);- 18

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

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