广西科技大学单片机DS18b20温度传感器课程设计_第1页
广西科技大学单片机DS18b20温度传感器课程设计_第2页
广西科技大学单片机DS18b20温度传感器课程设计_第3页
广西科技大学单片机DS18b20温度传感器课程设计_第4页
广西科技大学单片机DS18b20温度传感器课程设计_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

1、广西科技大学(筹)单片机课程设计报告课题名称 数字温度计 姓 名: 学 号:专业班级:电科指导教师: 所在学院:理学院 摘要随着时代的进步和发展,单片机技术已经普及到我们生活、工作、科研、各个领域,已经成为一种比较成熟的技术, 本文主要介绍了一个基于STC12C5A16S2单片机的测温系统,详细描述了利用数字温度传感器DS18B20开发测温系统的过程,重点对传感器在单片机下的硬件连接,软件编程以及各模块系统流程进行了详尽分 析,特别是数字温度传感器DS18B20的数据采集过程。对各部分的电路也一一进 行了介绍,该系统可以方便的实现实现温度采集和显示,并可根据需要任意设定上下限报警温度,它使用起

2、来相当方便,具有精度高、量程宽、灵敏度高、体积 小、功耗低等优点,适合于我们日常生活和工、农业生产中的温度测量,也可以当作温度处理模块嵌入其它系统中,作为其他主系统的辅助扩展。DS18B2与STC12C5A16S2结合实现最简温度检测系统,该系统结构简单,抗干扰能力强,适合于恶劣环境下进行现场温度测量,有广泛的应用前景。 关键词:单片机 DS18B20 温度传感器 数字温度计STC12C5A16S2 目录1.概述11.1课程设计的意义11.2设计的任务和要求12 .系统总体方案及硬件设计12.1数字温度计设计方案论证1方案一1方案二12.2系统总体设计22.3系统模块 2主控制器2显示电路22

3、.3.3 温度传感器2报警温度调整按键33.系统软件算法分析33.1主程序流程图33.2读出温度子程序43.3温度转换命令子程序53.4计算温度子程序53.5显示数据刷新子程序63.6按键扫描处理子程序74.实验仿真75.总结与体会8参考文献9附1 源程序代码10附2原理图 . 19 1.概述1.1课程设计的意义 本次课程设计是在我们学过单片机后的一次实习,可增加我们的动手能力。特别是对单片机的系统设计有很大帮助。本课程设计由六个人共同完成,在锻炼了自己的同时也增强了自己的团队意识和团队合作精神。1.2设计的任务和要求 1、基本范围-55-125 2、精度误差小于0.5 3、LCD 液晶显示

4、4、可以任意设定温度的上下限报警功能 2 .系统总体方案及硬件设计2.1数字温度计设计方案论证2.1.1方案一 由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温 度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示 电路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路,其中还涉及到电阻与温度的对应值的计算,感温电路比较麻烦。而且在对采集的信号进行放大时容易受温度的影响出现较大的偏差。方案二 进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传感

5、器,可以很容易直接读取被测 温度值,进行转换,电路简单,精度高,软硬件都以实现,而且使用单片机的接口便于系统的再扩展,满足设计要求。从以上两种方案,很容易看出,采用方案二,电路比较简单,费用较低,可靠性高,软件设计也比较简单,故采用了方案二。2.2系统总体设计温度计电路设计总体设计方框图如图1所示,控制器采用单片机STC12C5A16S2,温度传感器采用DS18B20,用LCD液晶以串口传送数据实现温度显示。2.3系统模块 系统由单片机最小系统、时钟振荡、显示电路、按键、温度传感 器等组成。 主控制器 单片机STC12C5A16S2具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路

6、系统的设计需要,很适合便携手持式产品的设计使用系统可用二节电池供电。晶振采用12MHZ。复位电路采用上电加按钮复位。显示电路 显示电路采用LCD液晶显示,P0口由上拉电阻提高驱动能力,作为段码输出。 温度传感器 DS18B20温度传感器是美国DALLAS 半导体公司最新推出的一种改进型智能温度传感 器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现1位的数字值读数方式。DS18B20的性能特点如下: 1、独特的单线接口仅需要一个端口引脚进行通信; 2、多个DS18B20 可以并联在惟一的三线上,实现多点组网功能 3、无须外部器件; 4、可通过数据线供

7、电,电压范围为3.05.5; 5、零待机功耗; 6、温度以或位数字; 7、用户可定义报警设置; 8、报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件; 9、负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作; DS18B20可以采用两种方式供电,一种是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源。另一种是寄生电源供电方式,如图4 所示单片机端口接单线 总线,为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个MOSFET管来完成对 总线的上拉。 当DS18B20处于写存储器操作和温度A/D转换操作时,总线上必须有强的上拉,上拉

8、开启时间最大为10us。采用寄生电源供电方式时VDD端接地。由于单线制只有一根线,因此发送接口必须是三态的。 报警温度调整按键 本系统设计只需三个按键,采用查询方式,一个用于选择切换 设置报警温度,另外两个分别用于设置报警温度的加和减。均采用软件消抖。 3.系统软件算法分析系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序,按键扫描处理子程序等。3.1主程序流程图 主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,温度测量每1s进行一次。这样可以在一秒之内测量一次被测温度,其程序流程见下图所 示。3.2读出温度子程序

9、读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。其程序流程图如下图示 。3.3温度转换命令子程序 温度转换命令子程序主要是发温度转换开始命令,当采用12位分辨率时转换时间约为 750ms,在本程序设计中采用1s显示程序延时法等待转换的完成。温度转换命令子程序流程图如下图。3.4计算温度子程序 计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定,其程序流程图如下图所示。 3.5显示数据刷新子程序 显示数据刷新子程序主要是对分离后的温度显示数据进行刷新操作,当标志位位为1 时将符号显示位移入第一位。程序流程图如下图

10、。3.6按键扫描处理子程序 按键采用扫描查询方式。4.实验仿真 进入protuse 后,连接好电路,并将程序下载进去。将DS18B20 的改为0.1,LCD显示温度与传感器的温度相同。 当按下选择键一次时,进入温度报警上线调节,此时显示软件设置的温度报警上线,按up 或down分别对报警温度进行加一或减一。 当再次按下选择键时,进入温度报警下线调节,此时显示软件设置的温度报警下线,按up 或down分别对报警温度进行加一或减一。 当第三次按下选择键时,退出温度报警线设置,显示当前温度。5.总结与体会通过这次对数字温度计的设计与制作,让我了解了设计电路的程序,也让我了解了关于数字温度计的原理与设

11、计理念,要设计一个电路总要先用仿真仿真成功之后才实际接线的。但是最后的成品却不一定与仿真时完全一样,因为,再实际接线中有着各种各样的条件制约着。而且,在仿真中无法成功的电路接法,在实际中因为芯片本身的特性而能够成功。所以,在设计时应考虑两者的差异,从中找出最适合的设计方法。通过这次学习,让我对各种电路都有了大概的了解,所以说,坐而言不如立而行,对于这些电路还是应该自己动手实际操作才会有深刻理解。在焊接过程中,我们粗心大意将电源开关焊反了,虽然不影响使用,可是还是给我们提了个醒,焊接任何元件之前必须得弄清它的正确焊接方法,不能自以为然、想当然,要实实在在,脚踏实地。电路板可能由于在焊接过程没掌握

12、好时间,使得板子持续高温,损坏某些元件,从而影响了板子的一些功能,焊接技术有待在以后的实践中提高。由于本人的的编程能力有限,无法实现修改上下限温度。从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收获。参考文献1曹巧媛主编. 单片机原理及应用(第二版). 北京:电子工业出版社,20022全国大学生电子设计竞赛组委会编.第五届全国大学生电子设计竞赛获奖作品选编(2001), 北京:北京理工大学出版社,20033何力民编. 单片机高级教程. 北京:北

13、京航空大学出版社,20004金发庆等编. 传感器技术与应用.北京机械工业出版社,20025王锦标,方崇智过程计算机控制北京:清华大学出版社,1997;6邵惠鹤工业过程高级控制上海:上海交通大学出版社,1997;7胡寿松自动控制原理北京:国防工业出版社,2000;8刘伯春智能PID调节器的设计及应用电子自动化,1995;9 Katsuhiko OgataModen Control EngineeringPublishing house of electronics industry,2000:10 周润景,张丽娜基于PROTEUS 的电路及单片机系统设计与仿真M北京:航空航天大学出版社 ,200

14、611王忠飞,胥芳MCS-51 单片机原理及嵌入式系统应用M西安:西安电子科技大学出版社,200712 刘国钧,陈绍业,王凤翥.图书馆目录.第1版.北京:高等教育出版社,195713 Microchip 24C01B/02B 8 位PIC®单片机产品手册ED/OL,14赵娜,赵刚,于珍珠等.基于51 单片机的温度测量系统J. 微计算机信息,200715 Borko H,Bernier C LIndexing concepts and methods .New York:Academic 附1 源程序代码#include<reg52.h>#include <intri

15、ns.h>#include<math.h>#define uint unsigned int#define uchar unsigned charsbit beep=P10;/位定义报警显示灯sbit xuanze=P00;/位定义选择按键sbit up=P01;/位定义极限加sbit down=P02;/位定义极限减int th=35,tl=20;/初始上限值和下限值uchar i,num=0;/定义变量/* 延时函数*/void delay(uint t) uint x,y; for (x=t;x>0;x-) for(y=110;y>0;y-);/* LCD部

16、分*/sbit rs=P21;sbit rw=P22;sbit E=P23;uchar tmp5="temp:"uchar tmp6="C"uchar code tab1="TH:"uchar code tab2="TL:"write_com(uchar com)/LCD写地址函数 P2=0X18;/rs=0,rw=0, E=1 P0=com; delay(5); E=0; write_data(uchar dat)/LCD写数据函数 P2=0X1A;/rs=1,rw=0,E=1 P0=dat; delay(5);

17、 E=0;init_lcd()/LCD初始化函数 write_com(0x38);/16*2显示,5*7点阵,8位数据 write_com(0x0c);/设置为显示开,关光标,不闪烁 write_com(0x06);/写操作后,AC自动加1 write_com(0x01); /LCD清屏 write_com(0x80+0x01);/LCD第一行第二个位置起显示"TH:" for(i=0;i<3;i+) write_data(tab1i); write_com(0x80+0x09);/LCD第一行第10个位置起显示"TL:" for(i=0;i<

18、;3;i+) write_data(tab2i); write_com(0x80+0X40+0x00);/LCD第二行开始出显示"temp:" for(i=0;i<5;i+) write_data(tmp5i); write_com(0x80+0X40+8);/显示温度的单位 for(i=0;i<2;i+) write_data(tmp6i); /以下是温度的上限和下限初始化显示部分 write_com(0x80+0x00+4); write_data('+'); write_data(th/10+0x30); write_data(th%10+

19、0x30); write_com(0x80+0x00+12); write_data('+'); write_data(tl/10+0x30); write_data(tl%10+0x30);/* DS18B20部分*/uchar timecount;/定义中断次数uchar test0,test1,test;/温度值变量uchar a1,a2,a3;/温度整数部分的十位,个位和小数部分的十分位uchar readdate2;/定义数组,用来暂存读取的温度值sbit DQ=P17;/DS18B20数据口bit flag;/定义温度的正负标志位void delay1(uint i

20、)/短延时函数while (i-);void reset()/DS18B20的复位函数 uchar x=0; DQ=1;/使总线为高电平 delay1(8);/延时 DQ=0;/使总线为低电平 delay1(80);/延时,大于480us DQ=1;/使总线为高电平 delay1(14);/延时,等待DS18B20回应低电平 x=DQ;/将DS18B20的回应读到变量x,用于判断复位是否成功delay1(20);/延时一段时间结束void writecmd(uchar cmd)/DS18B20的写字节函数 uchar i=0;/定义位循环变量 for(i=8;i>0;i-)/循环8次 D

21、Q=0;/总线拉低 DQ=cmd&0x01;/将发送字节的最低位送到总线 delay1(5);/延时(30us),等待DS18B20取走总线数据 DQ=1;/总线拉高 cmd>>=1;/将待发送的字节右移后,继续发送 uchar readdat()/DS18B20的读字节函数 uchar i=0;/定义位循环变量 uchar temp=0;/定义暂存变量 for(i=8;i>0;i-)/循环8次 DQ=0;/总线为低电平 temp>>=1;/暂存变量右移 DQ=1;/总线拉高,执行如下的读操作 if(DQ)/如果DS18B20输出高电平 temp|=0x8

22、0;/将暂存变量的最高位置1 delay1(4);/延时一段时间 return temp;/程序结束后,将暂存变量返回调用程序/* 按键设置上线温度和下限温度值函数 */void key1()P0=0X28;P2=0X90;P2=0X10;P0=0xff;P2=0X00;/打开74hc245delay(10);/延时if (P0=0xfe)/如果选择键按下delay(10);/延时消抖if (P0=0xfe)/如果按键还处于按下状态num+;/次数加1while (P0=0xfe);/等待按键抬起 if (num=1)/如果按下选择键的次数为1TR0=0;/关闭中断write_com(0x80

23、+0x00+6);/光标移到第一行第七个位置write_com(0x0f);/设置为显示开,开光标,闪烁if (num=2)/如果按下选择键的次数为2write_com(0x80+0x00+14);/光标移到第一行第十五个位置write_com(0x0f);/设置为显示开,开光标,闪烁if (num=3)/如果按下选择键的次数为3num=0;/次数清零write_com(0x0c);/设置为显示开,关光标,不闪烁TR0=1;/开中断 void key2()P0=0X28;P2=0X90;P2=0X10;P0=0xff;P2=0X00;/打开74hc245delay(10);/延时if(num=

24、1) if (P0=0xfd) delay(10);if (P0=0xfd)th+;while(P0=0xfd); if(num=2) if (P0=0xfb)delay(10);if (P0=0xfb)tl+;while(P0=0xfb); if(num=1) if(th>=0)/如果上线值为正 write_com(0x80+0x00+4); write_data('+');/显示正号 write_com(0x80+0x00+5); write_data(th/10+0x30);/显示上限温度值的十位 write_data(th%10+0x30);/显示上限温度值的个位

25、 if(th<0) write_com(0x80+0x00+4); write_data('-');/显示负号 write_com(0x80+0x00+5); write_data(th/10+0x30);/显示上限温度值的十位 write_data(th%10+0x30);/显示上限温度值的个位 if(num=2)/如果选择键按了两次 if(tl>=0)/如果下限温度值为正 write_com(0x80+0x00+12); / 显示正号 write_data('+');/ write_com(0x80+0x00+13); write_data(tl

26、/10+0x30);/显示下限温度值的十位 write_data(tl%10+0x30);/显示下限温度值的个位 if(tl<0) write_com(0x80+0x00+12); write_data('-');/显示负号 write_com(0x80+0x00+13); write_data(tl/10+0x30);/显示上限温度值的十位 write_data(tl%10+0x30);/显示上限温度值的个位 /* 报警函数*/void BEEP() if(test>=th)|(test<=tl)/如果测得的温度值>=上限温度值(TH)或<=下限

27、温度值(TL) beep=beep;/蜂鸣器响 else beep=0;/否则发蜂鸣器不响 /* 主函数*/void main() init_lcd();/初始化LCD TMOD=0X01;/定时器0,方式1 TH0=0X3C;/50ms溢出一次 TL0=0XB0; TR0=1;/启动定时器0 ET0=1;/开定时器0 EA=1;/开总中断 while(1) key1();/调用按键函数 key2(); BEEP();/调用报警函数 /* 中断函数*/void timer0() interrupt 1/定时器0中断,中断标号为1 uint result;/ TH0=0X3C; TL0=0XB0; timecount+;/每中断一次,timecount加1if(timecount=20)/中断定时达到1S,50ms*20=1s timecount=0;/timecount清零 reset();

温馨提示

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

最新文档

评论

0/150

提交评论