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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

基于单片机的简易测温计.docx

1、基于单片机的简易测温计信息与电气工程学院课程设计说明书(2010 /2011 学年 第二学期)课程名称 : 单片机课程设计 题 目 : 简易数字温度计 专业班级 : 学生姓名 : 学 号: 设计周数 : 设计成绩 : 2011年06月18日一.课设目的.2二.技术要求.2 2.1.3 2.2.4 2.3.5三.总图设计方案.6 3.1热敏电阻.6 3.2数据通信技术.6四系统各部分电路的选择和设计.7 4.1系统工作原理.7 4.2 STC90C52AD单片机简介.8 4.3 STC90C52AD单片机引脚功能以及最小控制系统.9 4.4 NTC非平衡桥和分压法数据采集系统.12 4.4.1分

2、压法.12 4.4.2非平衡电桥法.13 4.5七段数码管显示系统.14 4.6 PCB电路板.15五,系统软件设计.15 5.1编程语言的选择.15 5.2主程序的设计.16 5.3系统的测量温度主程序.17 5.4对于运用NTC做测温度系统的心得.20六,课程设计总结.20七参考资料以及元件清单.21八附件.22一:课设目的用STC90C52AD单片机作为核心控制器,用NTC负温度系数热敏电阻设计一个简易的数字温度计,测量结果用三位数码管进行显示,结果精确到小数点后一位。我们这里设计的简易数字温度计是一种很简单的温度测量装置,没有使用特别多的、复杂的元器件,只是一个单片机控制系统和NTC元

3、件,它的特点是电路简单、制作方便、操作简单、性能可靠。二:技术要求基于STC90C52AD单片机的最小系统设计,单电源5V供电,用单片机里自带的AD功能测出电压,通过进一步的数学运算算出测试环境的温度。测量范围50100摄氏度内的温度,结果用LED数码管示。:开发软件Keil C51 uVision3简介Keil uVISION2 是众多单片机应用开发软件中优秀的软件之一,它支持众多不同公司的MCS-51 架构的芯片,它集编辑,编译,仿真等于一体,同时还支持、PLM、汇编和C语言的程序设计,界面友好,易学易用,在调试程序,软件仿真方面也有很强大的功能。Keil C51集成开发环境主要由菜单栏、

4、工具栏、源文件编辑窗口、工程窗口和输出窗口五部分组成。工具栏为一组快捷工具图标,主要包括基本文件工具栏、建造工具栏和调试工具栏,基本文件工具栏包括新建、打开、拷贝、粘贴等基本操作。建造工具栏主要包括文件编译、目标文件编译连接、所有目标文件编译连接、目标选项和一个目标选择窗口。调试工具栏位于最后,主要包括一些仿真调试源程序的基本操作,如单步、复位、全速运行等。在工具栏下面,默认有三个窗口。左边的工程窗口包含一个工程的目标(target)、组(group)和项目文件。右边为源文件编辑窗口,编辑窗口实质上就是一个文件编辑器,我们可在这里对源文件进行编辑、修改、粘贴等。下边的为输出窗口,源文件编译之后

5、的结果显示在输出窗口中,会出现通过或错误(包括错误类型及行号)的提示。如果通过则会生成“HEX”格式的目标文件,用于仿真或烧录芯片。基本环境如图2-1所示:MCS-51单片机软件Keil C51开发过程为:建立一个工程项目,选择芯片,确定选项。建立汇编源文件或C源文件。用项目管理器生成各种应用文件。检查并修改源文件中的错误。编译连接通过后进行软件模拟仿真或硬件在线仿真。单片机程序烧写软件图2-1 Keil C51软件的运行界面STC90C52AD系列单片机大部分具有在系统可编程特性,单片机在用户系统上即可现在烧录用户程序,而无需将单片机从已经生产好的产品上拆下,在用通用编程器进行烧写程序。大部

6、分STC90C50AD系列单片机在销售给用户之前已经在单片机系统内部固化啦ISP系统引导程序配合PC端得控制程序即可将用户的程序代码下载进单片机内部,故无需编程器烧写程序。三:总体设计方案3.1 热敏电阻由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路,感温电路比较麻烦。热敏电阻的外观如图3-1所示。本系统用的是MF52系列NTC负温度系数热敏电阻。3.2 数据通信技术目前,常用的微机和外设之间数据传输的串行总线有I2C总

7、线、SPI总线等,其中,I2C总线采用同步串行双线(一根时钟线,一根数据线)方式,而SPI总线采用同步串行三线(时钟线,输入线,数据输入线)方式。这两种总线需要至少两根或两根以上的信号线。I2C是PHILIPS公司推出的一种串行总线。它是目前使用较广泛的芯片间的串行扩展总线。该总线用两条连线实现全双工同步数据传送。它可以使具有I2C总线的单片机直接与具有I2C总线接口的各种扩展器件连接。本次课程设计就采用这种通信方式。美国达拉斯半导体公司推出了一项特有的单线技术。该技术于上述总线不同,它采用单根信号线,即可传输时钟,又能传输数据,而且数据传输时是双向的,因而这种单线技术具有线路简单,硬件开销少

8、,成本低廉,便于扩展的优点。四:系统各部分电路的选择和设计;系统的工作原理本简易温度计系统的主要功能是测量温度,并显示温度测量结果,并附带了单片机和PC机之间通讯接口(烧写程序用的串口,与PC机实现通信实际也是经过串口来进行数据的通信)。系统结构包括单片机最小控制系统部分、温度传感器(NTC热敏电阻非平衡桥电路或者分压电路的数据采集系统)、数码管显示电路、图4-1为系统的总体结构框图。:STC90C52AD单片机简介对于单片机的选择,可以考虑使用8031与8051系列,由于8031没有内部RAM,系统又需要大量内存存储数据,因而不适用。所以,我们选用51系列单片机STC90C52AD。STC9

9、0C52AD是中国宏晶公司生产的低功耗,高性能8位单片机,片内含8KB的可编程的Flash只读程序存储器,兼容标准8051指令系统及引脚,并集成了 Flash 程序存储器,既可在线编程(ISP),也可用传统方法进行编程,因此,低价位STC90C52AD单片机可应用于许多高性价比的场合,可灵活应用于各种控制领域,对于简单的测温系统已经足够。该单片机还内部带有8路10位的AD模数转换电路,省去本系统运用AD采集数据二需要外接专门的AD转换芯片的麻烦,是得系统设计更为简单。单片机STC90C52AD具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设

10、计使用系统可用二节电池供电。STC90C52AD的主要特性如下:与MCS-51 兼容; 8K字节可编程闪烁存储器;三级程序存储器锁定;1288位内部RAM; 32根可编程I/O线;两个16位定时器/计数器; 5个中断源;可编程串行通道; 片内振荡器和时钟电路。8路10位的AD告诉转换系统工作原理是:电路在上电后,NTC的非平衡桥或者电阻分压电路采集信号(这个电压信号是和NTC的电阻息息相关的,二NTC的电阻又是温度的函数,故而电压值也是温度的函数),单片机在用AD采集得电压信号后,经过一系列的数学函数运算,即可将温度计算出来,从而把温度数据送到LED上显示。完成整个简易温度计的设计。:STC9

11、0C52AD单片机的引脚功能以及最小控制系统图4.2 单片机控制系统单片机芯片STC90C52AD为40引脚双列直插式封装。其各个引脚功能介绍如下,芯片STC90C52AD的引脚排列和逻辑符号如图4-2 所示。各引脚分别为:VCC:供电电压GND:接地P0口P0口为一个8位漏级开路双向I/O口,每个管脚可吸收8TTL门电流。当P1口的管脚写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。要是P0口输出高电平,必须外接上拉电阻。P1口P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流P1口管脚写入”1”后,电位被内部上拉

12、为高可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。另外P1口作为AD的模拟信号输入口,次功能需通过设置单片机的特殊功能寄存器来选择,如下所示四个寄存器:sfr P1_ADC_EN=0X97;sfr ADC_CONTR=0XC5;sfr ADC_DATA=0XC6;sfr ADC_LOW2=0XC7;P2口P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流当P2口被写”1”时,其管脚电位被内部上拉电阻拉高,且作为输入。作为输入时P2口的管脚电位被外部拉低,将输出电流,这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部

13、数据存储器进行存取时,P2口输出地址的高八位。在给出地址”1”时,它利用内部上拉的优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P3口P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入”1”后,它们被内部上拉为高电平,并用作输入。作为输入时,由于外部下拉为低电平,P3口将输出电流(ILL),也是由于上拉的缘故。RST:复位输入端。当振荡器复位时,要保持RST两个机器周期的高电平时间。PSEN外部程序存储器的选通信号。在由外部程序存储器取址期间,每个机器周期PSEN两次有效。但在访问外部数据存储器时,这两次有效的PSEN信号将不

14、出现。EA/VPP当EA保持低电平时,访问外部ROM;注意加密方式1时,EA将内部锁定为RESET;当EA端保持高电平时,访问内部ROM。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)复位电路已经外部振荡电路的设计单片机的复位电路如上图所示。该复位电路采用手动复位与上电复位相结合的方式。当按下按键S1时,VCC通过R8电阻给复位输入端口一个高电平,实现复位功能,即手动复位。上电复位就是VCC通过电阻R2和电容C2构成回路,该回路是一个对电容C1充电和放电的电路,所以复位端口得到一个周期性变化的电压值,并且有一定时间的电压值高于CPU复位电压,实现上电复位功能。外部晶振电路为单片

15、机系统提供时钟。:NTC热敏电阻的非平衡桥和分压数据采集电路A:分压法如上图所示即为NTC的分压法,由于NTC的电阻值随着温度变化,将会是得NTC上的电压与温度成函数的关系,通过AD采集这个电压,即可通过数学运算侧得当时环境下的温度!B:非平衡电桥法非平衡电桥的工作原理为:上下桥壁对应电阻相等时,桥两端输出电压为零,当其中一个电阻换为NTC时,由于电阻不平衡导致有电压的输出,这个电压为差分电压,因为单片机的AD能采集到的电压信号为对地的电压信号,为了能使系统采集到电压,需先将这个差分电压信号经过一个不放大信号的减法电路,如上图所示,其输出电压即为对地电压,此电压就能被采集,之后就可经过一系列的

16、数学运算算的环境的温度。单电源运放LM358用作减法电路的运放!:七段LED数码显示电路显示电路中单片机STC90C52AD的P2口,通过总线驱动74LS245直接驱动8段数码管,完成字形码的输出(字形选择)。而P0.5-P0.6(P0口要输出高电平必须外接上拉电阻)控制3位数码管的位选信号,这样在任一时刻,只有一位LED是点亮的,但只要扫描的频率足够高(一般大于25Hz),由于人眼的视觉暂留特性,直观上感觉却是连续点亮的,这就是我们常说的动态扫描电路。:PCB电路板上图为NTC信号采集电路和数码管的显示电路电路板五: 系统软件设计5.1 编程语言选择51的编程语言常用的有两种,一种是汇编语言

17、,一种是C语言。汇编语言的机器代码生成效率很高但可读性却并不强,复杂一点的程序就更是难读懂,而C语言在大多数情况下其机器代码生成效率和汇编语言相当,C 语言很好的结构性和模块化更容易阅读和维护,用C 编写程序比汇编更符合人们的思考习惯,开发者可以更专心的考虑算法而不是考虑一些细节问题这样就减少了开发和调试的时间,而且C语言还可以嵌入汇编来解决高时效性的代码编写问题。5.2 主程序的设计5.3 主要程序#include#include#include#define uint unsigned int /宏定义#define uchar unsigned char#define ulong uns

18、igned longdouble Z1,Z2,Z3,X,result,voltage,resistance,temperature;ulong i;uint m;sbit LED=P37;sbit Key=P36;double count_resistance(); /子函数的声明double count_voltage();double count_temperature();void delay(uint z) /延时函数 uint x,y; for(x=15;x0;x-) for(y=z;y0;y-);void display(ulong i) /数码管显示函数 uint a=0,b=0

19、; uchar table010=0X3F,0X06,0X5B,0X4F,0X66, 0X6D,0X7D,0X07,0X7F,0X6F; /09段码 uchar table13=0X01,0X02,0X04; /三个数码管的位码 uchar table23=0,0,0; table20=i/100; table21=i%100/10; table22=i%10; for(b=0;b50;b+) for(a=0;a3;a+) /P2=0x00; P0=table1a; P2=table0table2a; if(m=1&a=1) P2=table0table2a+0X80; /是第二个数后面显示小

20、数点 delay(1); if(m=2&a=0) P2=table0table2a+0X80; /是第一个数后面显示小数点 delay(1); if(m=3&a=0) P2=table0table2a+0X80; /是第一个数后面显示小数点 delay(1); LED=LED;/灯闪烁,用来指示一直进来了显示函数,从而指示一直在测,在更新温度值/ADC转换函数double ADC_transform() uint AD_finished=0; /转换结束标志 double DATA=0; P1=0X01; /P1.0口为AD转换用,先设置为1 P1_ADC_EN=0x01; /P1.0口作为A

21、D使用,自动断开内部上拉 ADC_CONTR=0X02;/1次AD转换需要178个时钟,P1.0口作为AD的输入口 /清零转换结束标志位 ADC_DATA=0; /清零数据寄存器 delay(1); /使输入电压达到稳定 ADC_CONTR=0X28; /开始转换 AD_finished=0; while(AD_finished=0) AD_finished=(ADC_CONTR&0X10); ADC_CONTR&=0XF7; /令ADC_START=0,关闭AD DATA=ADC_DATA*4+ADC_LOW2; return(DATA);/计算NTC分得的电压函数double count_

22、voltage() result=ADC_transform(); voltage=result*5/1024; Z1=voltage*100; return(Z1);/计算NTC电阻值函数double count_resistance() resistance=count_voltage()/10/(5-voltage);/用测的得电压求得要测温度 /下NTC热敏电阻的电阻值 Z2=resistance*100; /测试电阻值是不是正确 return(Z2);/计算环境温度的函数double count_temperature() X=count_resistance()/0.047; te

23、mperature=1/(log(X)/3950+1/25.0); Z3=temperature*10; /RT=RN*expB(1/T-1/Tn) NTC热敏电阻温度与电阻关系的经验公式 return(Z3);/主函数 void main() while(1) if(Key=0) delay(1); while(Key); m+; if(m=0|m=4) /最开始上电后什么都不显示 P2=0X00; if(m=1) /按一下按键后,显示温度值 display(count_temperature(); if(m=2) /按而下按键后,显示电压值 display(count_voltage();

24、 if(m=3) /按三下按键后,显示电阻值 display(count_resistance(); if(m=4) /按四下按键,m值重新从0开始计数 m=0; 5.4 对于用NTC测温度的心得通过这个课程设计,学会了用单片机和NTC做数字温度计。通过设计程序,运行测试后发现了NTC测量温度有一个巨大的弊端:NTC热敏电阻温度与电阻关系RT=RN*expB(1/T-1/Tn) 只是一个经验公式,测试后发现,NTC的电阻在不同温度下,其电阻值变化是很大的,AD采集到的电压也是变化很大的(通过单片机的采集,我调试的时候将电压值和NTC的电阻值我用数码管显示出来啦),说明NTC还是很敏感的,但是经过上面的那个公式进行计算环境温度值得时候发现,就算电阻值变化再大,得到的温度值都没有变化,开始以为是我软件写的不精确,经过一段时间的调试,以及运用计算器计算对结果进行比较,发现是那个经验公式在作怪,除非使用非常精确的算法,运用更精确的NTC电阻值与温度的函数关系,才能算出比较准确的温度值。故而我得出结论,要想测出很准确的环境温度值,不能选用这个方法!现在用的最多的是高精度数字温度传感器DS18B20,用这个传感器侧得的温度非常

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

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