单片机课程设计——数字温度计(张涛)_第1页
单片机课程设计——数字温度计(张涛)_第2页
单片机课程设计——数字温度计(张涛)_第3页
单片机课程设计——数字温度计(张涛)_第4页
单片机课程设计——数字温度计(张涛)_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、成都理工大学工程技术学院单片机课程设计报告数字温度计设计 指导教师: 韩冰 学生: 张涛 组员:周鹏 2013年12月24日摘要在这个信息化高速发展的时代,单片机作为一种最经典的微控制器,单片机技术已经普及到我们生活,工作,科研,各个领域,已经成为一种比较成熟的技术,作为自动化专业的学生,我们学习了单片机,就应该把它熟练应用到生活之中来。本文将介绍一种基于单片机控制的数字温度计,本温度计属于多功能温度计,可以设置上下报警温度,当温度不在设置范围内时,可以报警。本文设计的数字温度计具有读数方便,测温范围广,测温精确,数字显示,适用范围宽等特点。关键词:单片机,数字控制,数码管显示,温度计,DS1

2、8B20,AT89S52。 目录1概述11.1设计目的11.2设计原理11.3设计难点12 系统总体方案及硬件设计22.1数字温度计设计方案论证22.2 总体设计框图 22.2.1 主控制器22.2.2 显示电路32.2.3温度传感器32.3 DS18B20温度传感器与单片机的接口电路32.4 系统整体硬件电路设计42.4.1 主板电路42.4.2 显示电路 53 系统软件设计63.1初始化程序63.2读出温度子程序73.3读、写时序子程序83.4 温度处理子程序93.5 显示程序104 Proteus软件仿真115 硬件实物126 课程设计体会13参考文献13附录1:13 1概述 1.1设计

3、目的 随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中数字温度计就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。 本设计所介绍的数字温度计与传统的温度计相比,具有读数方便,测温范围广,测温准确,其输出温度采用数字显示,主要用于对测温比较准确的场所,或科研实验室使用,可广泛用于食品库、冷库、粮库、温室大棚等需要控制温度的地方。目前,该产品已在温控系统中得到广泛的应用。1.2设计原理 本系统是一个基于单片机AT89S52的数字温度计

4、的设计,用来测量环境温度,测量范围为-50110度。整个设计系统分为3部分:单片机控制、温度传感器、数码显示。整个设计是以AT89S52为核心,通过数字温度传感器DS18B20来实现环境温度的采集和A/D转换,同时因其输出为数字形式,且为串行输出,这就方便了单片机进行数据处理,但同时也对编程提出了更高的要求。单片机把采集到的温度进行相应的转换后,使之能够方便地在数码管上输出。LED采用三位一体共阳的数码管。1.3设计难点 此设计的重点在于编程,程序要实现温度的采集、转换、显示,其外围电路所用器件较少,相对简单,实现容易。2 系统总体方案及硬件设计2.1数字温度计设计方案论证由于本设计是测温电路

5、,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路,感温电路比较麻烦。进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。2.2 总体设计框图 温度计电路设计总体设计方框图如图1所示,控制器采用单片机AT89S52,温度传感器采用DS18B20,用3位共阳极LED数码管以串口传送数据实现温度显示。

6、主控制器 AT89S52 复位电路3位LED显示电路时钟振荡电路DS18B20温度传感器 图1 总体设计框图2.2.1 主控制器 单片机AT89S52具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,适合便携手持式产品的设计使用。AT89S52单片机芯片具有以下特性:1)指令集合芯片引脚与Intel公司的8052兼容;2)8KB片内在系统可编程FLASH程序存储器;3)时钟频率为033MHZ;4)256字节片内随机读写存储器(RAM);5)8个中断源,2级优先级;6)3个16位定时/计数器;7)全双工串行通信接口;8)监视定时器;9)两个数据指针;2.2.2 显示电

7、路显示部分采用共阳极LED数码管作为温度显示器,显示驱动电路采用了74LS47译码器和2N5551三极管放大器。其中P0.0到P0.3口用于数码管的段选控制端,P0.4到P0.6口用于数码管的位选控制端,小数点用P2.0口控制。2.2.3温度传感器DS18B20温度传感器是美国DALLAS半导体公司推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9-12位的数字值读数方式。DS18B20的性能特点如下:1)只需要一个端口即可实现数据通信2)在DS18B20中每个器件上都有唯一的序列号,可实现多点组网3)实际应用中不需要外

8、部任何器件即可实现温度检测4)测量温度范围在-55摄氏度到+125摄氏度之间5)可通过数据线的寄生电源供电,电压范围3.05.5V6)数字温度计的分辨率用户可以从9位到12位选择7)用户可定义的非易失温度报警设置2.3 DS18B20温度传感器与单片机的接口电路 图2 DS18B20温度传感器与单片机的接口电路2.4 系统整体硬件电路设计2.4.1 主板电路系统整体硬件电路包括,传感器数据采集电路,温度显示电路,单片机主板电路等,单片机主板电路如图3 所示: 图3 单片机主板电路2.4.2 显示电路 图4 温度显示电路 3 系统软件设计系统程序主要包括主程序,读出温度子程序,温度转换命令子程序

9、,计算温度子程序,显示数据刷新子程序等。3.1初始化程序开始 主机释放总线 总线发出复位脉冲 延时2us主机释放总线(进入接收状态) 延时400960us接收存在脉冲 延时1560us 释放总线 持续60240us返回 图5 初始化程序流程图开始3.2读出温度子程序读出温度子程序的主要功能是读出RAM中的2字节,读出温度的低八位和高八位,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。其程序流程图如图6示 初始化DS18B20主机检验DS18B20是否存在脉冲 Y N跳出ROM(0CCH)返回温度转换(44H)重置DS18B20 开中断,延时确保温度转换完成,关中断检测DS18b20

10、是否存在脉冲 Y N返回跳出ROM(0CCH) 读暂存器(0BEH) 温度低八位温度高八位温度处理返回 图6 读温度程序流程图3.3读、写时序子程序读写的程序是本次设计中的重点和难点,通过我们对其时序的分析,从而写出高效的程序。 写1,0时序 读0,1时序开始开始释放总线释放总线拉低总线拉低总线 延时2us 延时大于1us 延时115us 延时2us释放总线对总线采样(持续1560us) >1us读时序(013us)高电平(写1时序)低电平(写0时序)释放总线释放总线返回返回 图7 写时序子程序流程图 图8 读时序子程序流程图3.4 温度处理子程序 计算温度子程序将RAM中读取值进行BC

11、D码的转换运算,并进行温度值正负的判定,其程序流程图如图9所示开始温度低八位温度高八位取第四位取高四位取低四位查表重新组合互换高、低四位小数位保存除以10商取余(个位)保存除以10取余(十位)商(百位)保存 图9 温度处理程序流程图 3.5 显示程序此函数实现的对数码管显示的处理,其亮点在于可以直接对数码管进行操作,其本身是个两变量函数,第一个变量是要开通的位选,第二个变量是要显示的数据,这样我们可以直接方便而又简单直观的对数码管进行操作。程序流程图如图10所示:开始 返回赋值显示小数位打开数码管位选3赋值显示个位,且显示小数点打开数码管位选2赋值显示十位打开数码管位选1 图10 显示程序流程

12、图4 Proteus软件仿真 图11 Proteus软件仿真5 硬件实物 图12 硬件实物6 课程设计体会在这两周的单片机课程设计中,我学到了很多书本上没有学到的东西,其中最宝贵的我觉得是实际动手操作所得来的经验,这是学不来的,只能靠自己。我们做的课题是基于单片机控制的数字温度计,虽然还没有达到很理想的设计要求,但是这对于我来说,任然是一次非常丰富的和有趣的经历,其中还体会到了团队合作的重要性,正所谓人多力量大嘛。这次设计能够很成功的把实物做出来并且调试好这是值得高兴的。但是,在这一次的课程设计中,我发现很多的问题,首先就是数电和模电方面的知识还必须得好好补一下,还有很多常用的元器件和集成芯片

13、应该知道怎么用。我觉得单片机课程设计重点在于系统软件的设计,各种各样的算法,要慢慢的学会灵活运用才行。要有学习的激情和耐心,因为在软件设计时,难免会遇到一些想破脑袋都解决不了的问题!其次就是硬件电路的设计,要注重电路的简洁和可观性。有很多的东西,只有我们去尝试着做了,才能真正的体会到甚至于掌握。只学习理论而不实践,有些东西是很难理解的,更谈不上掌握。在这一次的课程设计中,我懂得了既要学习书本上的知识,也要在实践中去运用所学知识。 参考文献1DS18b20数据手册。2 求是科技编著8051系列单片机C程序设计完全手册北京: 人民邮电出版社, 20063 余发山,王福忠.单片机原理及应用技术.徐州

14、:中国矿业大学出版社,2003附录1: DQ BIT P3.7 ;1 wire line swpH equ 0E7H swpL equ 40H WDLSB DATA 30H WDMSB DATA 31H ;* ORG 0000H LJMP MAIN ORG 000BH ;定时器0中断入口 LJMP TMR0 ; Timer0 isr;*; Timer0 Interrupt Service Routine(定时器0中断服务程序)TMR0: MOV TH0,#swpH ;轮流送温度值的高低两位到数码管 MOV TL0,#swpL CJNE R7,#00H,DS0 SJMP DS1DS0: CJNE

15、 R7,#01H,DS3 SJMP DS2DS1: MOV P0,42H ORL P0,#01000000B ;选中P0.6,显示十位MOV P2,#01HLCALL DELAY10SJMP EXITDS2: MOV P0,43H ORL P0,#00100000B ;选中P0.5,显示个位 MOV P2,#00H ;显示小数点 LCALL DELAY10 SJMP EXIT DS3: MOV P0,44H ORL P0,#00010000B ;选中P0.4,显示小数位 MOV P2,#01H LCALL DELAY10EXIT: INC R7 CJNE R7,#03H,EXIT1 MOV R

16、7,#00HEXIT1: RETI;*; Main program(主程序)MAIN: TOINIT: CLR EA ;关总中断 MOV TMOD,#01H ;设置定时器0,工作方式1(16位定时/计数器) MOV TH0,#swpH ;给定计数初值 MOV TL0,#swpLMOV R7,#00H SETB EA ;开总中断 SETB ET0 ;允许T0中断 SETB TR0 ;打开定时器T0,开始定时;* ; (初始化42H、43H单元内容并接着循环读温度) MOV R2,#3 ;R2作为循环计数器,初值为3 MOV R0,#42H ;将42H作为首地址存入R0OVER: MOV R0,#

17、00H ;通过连续的两次间接寻址,得出:(42H)=#00H,(43H)=#00H,;(44H)=#00H INC R0 DJNZ R2,OVER LOOP: LCALL DSWD ;循环调用读温度子程序 SJMP LOOP ;*; Read a temperature from the DS18B20(从温度传感器中读出温度值)DSWD: LCALL RSTSNR ;Init of the DS18B20(初始化DS18B20) JNB F0,KEND ;若F0=0,表示主机没有检测到DS18B20的存在脉冲,则退出 MOV R0,#0CCH ;当F0=1,表示主机检测到了DS18B20的存

18、在脉冲,准备发送“跳过ROM” ;指令,即0CCH LCALL SEND_BYTE ;调用发送子程序,发送一个“跳过ROM”指令 MOV R0,#44H ;接着R0中放入“温度变换”指令,即44H,准备发送 LCALL SEND_BYTE ;Send a Convert Command(发送一个转换命令) SETB EA ;开总中断 MOV 48H,#1 ;延时1usSS2: MOV 49H,#255 ;延时1usSS1: MOV 4AH,#255 ;延时1usSS0: DJNZ 4AH,SS0 ;延时255*2us=510us DJNZ 49H,SS1 ;本指令执行时间2us,本循环体执行2

19、55次 DJNZ 48H,SS2 ;本指令执行时间2us,本循环体执行1次 ;总共延时时间:1+1+1+510+(1+510+2)*255+(1+1+510+(1+510+2)*255+2)*1=0.262657 s ;确保温度转换完成 CLR EA ;进入读时序禁用任何中断 LCALL RSTSNR ;再次重置总线 JNB F0,KEND ;若F0=0,表示主机没有检测到DS18B20的存在,则退出 MOV R0,#0CCH ;当F0=1,表示主机检测到了DS18B20的存在,准备发送“跳过ROM”指令, ;即0CCH LCALL SEND_BYTE ;调用发送子程序 ,发送一个“跳过ROM

20、”指令 MOV R0,#0BEH ;接着R0中放入读暂存存储器命令BEH,准备发送 LCALL SEND_BYTE ;Send Read Scratchpad command(调用发送子程序,发送读暂存存储器 ;命令) LCALL READ_BYTE ;Read the low byte from scratchpad(调用读子程序,从暂存存储器中 ;读低8位字节) MOV WDLSB,A ;Save the temperature (low byte)(将温度的低8位存入地址单元30H) LCALL READ_BYTE ;Read the high byte from scratchpad(

21、调用读子程序,从暂存存储器中 ;读高8位字节) MOV WDMSB,A ;Save the temperature (high byte)(将温度的高8位存入地址单元 ;31H) LCALL TRANS12 ;调用温度处理程序KEND: SETB EA ;开总中断 RET ;子程序返回;*TRANS12: MOV A,30H ;30H存从1820取的温度值低8位 ANL A,#0F0H ;将30H单元中的温度值低4位(即小数位)全部清零,高4位保持不变 MOV 3AH,A ;保存在3AH单元 MOV A,31H ;31H存从1820取的温度值高8位 ANL A,#0FH ;将31H单元中的温度

22、值高4位全部清零,低4位保持不变 ORL A,3AH SWAP A MOV B,#10 ;转换为10进制 DIV AB MOV 43H,B ; 除10 取余数,余数部分存入43H单元(个位存入43H单元) MOV B,#10 DIV AB MOV 42H,B ;再次对整数部分取余数,放入42H单元(十位存入42H单元) MOV 41H,A ;(百位存入41H单元)MOV A,30H ;30H存从1820取的温度值低8位ANL A,#0FH ;只保留温度的小数部分MOV DPTR,#1000HMOVC A,A+DPTRMOV 44H,A RET ;*; Send a byte to the 1

23、wire lineSEND_BYTE: MOV A,R0;(A)=0CCH MOV R5,#8;设置写位个数为8SEN3: CLR C RRC A ;寄存器值带进位循环右移,即把要写的位放到C(先发低位,后发高位) JC SEN1 ;若c=1,则转移 LCALL WRITE_0 ;c=0,调用 WRITE_0 SJMP SEN2 SEN1: LCALL WRITE_1 ;c=1,调用 WRITE_1SEN2: DJNZ R5,SEN3 ;8位是否全部发送完?若没有,则继续发送下一位 RET;发送完毕,子程序返回;*; Read a byte from the 1 wire lineREAD_B

24、YTE: MOV R5,#8 ;设置读位个数为8READ1: LCALL READ ;调用读位子程序 RRC A ;接收所读位,先接收低位,后接收高位 DJNZ R5,READ1 ;8位是否全部读完?若没有,则继续读下一位 MOV R0,A ;读完后,保存在R0中 RET ;返回;*; Reset 1 wire lineRSTSNR: SETB DQ;首先主机释放总线 NOP;延时1us NOP;延时1us CLR DQ;主机总线发出一复位脉冲 MOV R6,#250 ;延时1us DJNZ R6,$;延时时间:250*2 us=500 us MOV R6,#50;延时1us DJNZ R6,$;延时时间:50*2 us=100 us SETB DQ ;主机释放总线并进入接收状态 MOV R6,#15;延时1us DJNZ R6,$;延时时间:15*2 us=30 us (DSl820在检测到总线的上升沿之后,等待;15-60us) LCALL CHCK ;调用检测DS18B20发出的存在脉冲的子程序 MOV R6,#60;延时1us DJNZ R6,$;延时时间:60*2 us=120 us SETB DQ;再次释放总线 RET;子程序返回(初始化完成);*; low level subrouti

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论