广西科技大学单片机DS18b20温度传感器课程设计Word文件下载.docx

上传人:b****5 文档编号:19226587 上传时间:2023-01-04 格式:DOCX 页数:23 大小:219.93KB
下载 相关 举报
广西科技大学单片机DS18b20温度传感器课程设计Word文件下载.docx_第1页
第1页 / 共23页
广西科技大学单片机DS18b20温度传感器课程设计Word文件下载.docx_第2页
第2页 / 共23页
广西科技大学单片机DS18b20温度传感器课程设计Word文件下载.docx_第3页
第3页 / 共23页
广西科技大学单片机DS18b20温度传感器课程设计Word文件下载.docx_第4页
第4页 / 共23页
广西科技大学单片机DS18b20温度传感器课程设计Word文件下载.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

广西科技大学单片机DS18b20温度传感器课程设计Word文件下载.docx

《广西科技大学单片机DS18b20温度传感器课程设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《广西科技大学单片机DS18b20温度传感器课程设计Word文件下载.docx(23页珍藏版)》请在冰豆网上搜索。

广西科技大学单片机DS18b20温度传感器课程设计Word文件下载.docx

参考文献9

附1源程序代码10

附2原理图…..…………………………………………………………………19

1.概述

1.1课程设计的意义

本次课程设计是在我们学过单片机后的一次实习,可增加我们的动手能力。

特别是对单片机的系统设计有很大帮助。

本课程设计由六个人共同完成,在锻炼了自己的同时也增强了自己的团队意识和团队合作精神。

1.2设计的任务和要求

1、基本范围-55℃-125℃2、精度误差小于0.5℃3、LCD液晶显示4、可以任意设定温度的上下限报警功能

2.系统总体方案及硬件设计

2.1数字温度计设计方案论证

2.1.1方案一

由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路,其中还涉及到电阻与温度的对应值的计算,感温电路比较麻烦。

而且在对采集的信号进行放大时容易受温度的影响出现较大的偏差。

2.2.2方案二

进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,电路简单,精度高,软硬件都以实现,而且使用单片机的接口便于系统的再扩展,满足设计要求。

从以上两种方案,很容易看出,采用方案二,电路比较简单,费用较低,可靠性高,软件设计也比较简单,故采用了方案二。

2.2系统总体设计

温度计电路设计总体设计方框图如图1所示,控制器采用单片机STC12C5A16S2,温度传感器采用DS18B20,用LCD液晶以串口传送数据实现温度显示。

2.3系统模块系统由单片机最小系统、时钟振荡、显示电路、按键、温度传感器等组成。

2.3.1主控制器

单片机STC12C5A16S2具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统可用二节电池供电。

晶振采用12MHZ。

复位电路采用上电加按钮复位。

2.3.2显示电路

显示电路采用LCD液晶显示,P0口由上拉电阻提高驱动能力,作为段码输出。

2.3.3温度传感器

DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。

DS18B20的性能特点如下:

1、独特的单线接口仅需要一个端口引脚进行通信;

2、多个DS18B20可以并联在惟一的三线上,实现多点组网功能3、无须外部器件;

4、可通过数据线供电,电压范围为3.0~5.5V;

5、零待机功耗;

6、温度以9或12位数字;

7、用户可定义报警设置;

8、报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;

9、负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作;

DS18B20可以采用两种方式供电,一种是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源。

另一种是寄生电源供电方式,如图4所示单片机端口接单线总线,为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个MOSFET管来完成对总线的上拉。

当DS18B20处于写存储器操作和温度A/D转换操作时,总线上必须有强的上拉,上拉开启时间最大为10us。

采用寄生电源供电方式时VDD端接地。

由于单线制只有一根线,因此发送接口必须是三态的。

2.3.4报警温度调整按键

本系统设计只需三个按键,采用查询方式,一个用于选择切换设置报警温度,另外两个分别用于设置报警温度的加和减。

均采用软件消抖。

3.系统软件算法分析

系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序,按键扫描处理子程序等。

3.1主程序流程图

主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,温度测量每1s进行一次。

这样可以在一秒之内测量一次被测温度,其程序流程见下图所示。

3.2读出温度子程序

读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。

其程序流程图如下图示。

3.3温度转换命令子程序

温度转换命令子程序主要是发温度转换开始命令,当采用12位分辨率时转换时间约为750ms,在本程序设计中采用1s显示程序延时法等待转换的完成。

温度转换命令子程序流程图如下图。

3.4计算温度子程序

计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定,其程序流程图如下图所示。

3.5显示数据刷新子程序

显示数据刷新子程序主要是对分离后的温度显示数据进行刷新操作,当标志位位为1时将符号显示位移入第一位。

程序流程图如下图。

3.6按键扫描处理子程序

按键采用扫描查询方式。

4.实验仿真

进入protuse后,连接好电路,并将程序下载进去。

将DS18B20的改为0.1,LCD显示温度与传感器的温度相同。

当按下选择键一次时,进入温度报警上线调节,此时显示软件设置的温度报警上线,按up或down分别对报警温度进行加一或减一。

当再次按下选择键时,进入温度报警下线调节,此时显示软件设置的温度报警下线,按up或down分别对报警温度进行加一或减一。

当第三次按下选择键时,退出温度报警线设置,显示当前温度。

5.总结与体会

通过这次对数字温度计的设计与制作,让我了解了设计电路的程序,也让我了解了关于数字温度计的原理与设计理念,要设计一个电路总要先用仿真仿真成功之后才实际接线的。

但是最后的成品却不一定与仿真时完全一样,因为,再实际接线中有着各种各样的条件制约着。

而且,在仿真中无法成功的电路接法,在实际中因为芯片本身的特性而能够成功。

所以,在设计时应考虑两者的差异,从中找出最适合的设计方法。

通过这次学习,让我对各种电路都有了大概的了解,所以说,坐而言不如立而行,对于这些电路还是应该自己动手实际操作才会有深刻理解。

在焊接过程中,我们粗心大意将电源开关焊反了,虽然不影响使用,可是还是给我们提了个醒,焊接任何元件之前必须得弄清它的正确焊接方法,不能自以为然、想当然,要实实在在,脚踏实地。

电路板可能由于在焊接过程没掌握好时间,使得板子持续高温,损坏某些元件,从而影响了板子的一些功能,焊接技术有待在以后的实践中提高。

由于本人的的编程能力有限,无法实现修改上下限温度。

从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收获。

参考文献

1曹巧媛主编.单片机原理及应用(第二版).北京:

电子工业出版社,2002

2全国大学生电子设计竞赛组委会编.第五届全国大学生电子设计竞赛获奖作品选编(2001),北京:

北京理工大学出版社,2003

3何力民编.单片机高级教程.北京:

北京航空大学出版社,2000

4金发庆等编.传感器技术与应用.北京机械工业出版社,2002

5王锦标,方崇智.过程计算机控制.北京:

清华大学出版社,1997;

6邵惠鹤.工业过程高级控制.上海:

上海交通大学出版社,1997;

7胡寿松.自动控制原理.北京:

国防工业出版社,2000;

8刘伯春.智能PID调节器的设计及应用.电子自动化,1995;

9KatsuhikoOgata.ModenControlEngineering.Publishinghouseofelectronicsindustry,2000:

10周润景,张丽娜.基于PROTEUS的电路及单片机系统设计与仿真[M].北京:

航空航天

大学出版社,2006

11王忠飞,胥芳.MCS-51单片机原理及嵌入式系统应用[M].西安:

西安电子科技大学出

版社,2007.

12刘国钧,陈绍业,王凤翥.图书馆目录.第1版.北京:

高等教育出版社,1957

13Microchip24C01B/02B8位PIC®

单片机产品手册[ED/OL],

14赵娜,赵刚,于珍珠等.基于51单片机的温度测量系统[J].微计算机信息,2007

15BorkoH,BernierCL.Indexingconceptsandmethods.NewYork:

Academic

附1源程序代码

#include<

reg52.h>

#include<

intrins.h>

math.h>

#defineuintunsignedint

#defineucharunsignedchar

sbitbeep=P1^0;

//位定义报警显示灯

sbitxuanze=P0^0;

//位定义选择按键

sbitup=P0^1;

//位定义极限加

sbitdown=P0^2;

//位定义极限减

intth=35,tl=20;

//初始上限值和下限值

uchari,num=0;

//定义变量

/*******************************************************

延时函数

*******************************************************/

voiddelay(uintt)

{

uintx,y;

for(x=t;

x>

0;

x--)

for(y=110;

y>

y--);

}

/*************************************************

LCD部分

***************************************************/

sbitrs=P2^1;

sbitrw=P2^2;

sbitE=P2^3;

uchartmp5[]="

temp:

"

;

uchartmp6[]="

^C"

ucharcodetab1[]="

TH:

ucharcodetab2[]="

TL:

write_com(ucharcom)//LCD写地址函数

{

P2=0X18;

//rs=0,rw=0,E=1

P0=com;

delay(5);

E=0;

write_data(uchardat)//LCD写数据函数

P2=0X1A;

//rs=1,rw=0,E=1

P0=dat;

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第一行第二个位置起显示"

for(i=0;

i<

3;

i++)

{

write_data(tab1[i]);

}

write_com(0x80+0x09);

//LCD第一行第10个位置起显示"

{

write_data(tab2[i]);

write_com(0x80+0X40+0x00);

//LCD第二行开始出显示"

5;

write_data(tmp5[i]);

write_com(0x80+0X40+8);

//显示温度的单位

2;

write_data(tmp6[i]);

//以下是温度的上限和下限初始化显示部分

write_com(0x80+0x00+4);

write_data('

+'

);

write_data(th/10+0x30);

write_data(th%10+0x30);

write_com(0x80+0x00+12);

write_data(tl/10+0x30);

write_data(tl%10+0x30);

/*********************************************************

DS18B20部分

**********************************************************/

uchartimecount;

//定义中断次数

uchartest0,test1,test;

//温度值变量

uchara1,a2,a3;

//温度整数部分的十位,个位和小数部分的十分位

ucharreaddate[2];

//定义数组,用来暂存读取的温度值

sbitDQ=P1^7;

//DS18B20数据口

bitflag;

//定义温度的正负标志位

voiddelay1(uinti)//短延时函数

while(i--);

voidreset()//DS18B20的复位函数

ucharx=0;

DQ=1;

//使总线为高电平

delay1(8);

//延时

DQ=0;

//使总线为低电平

delay1(80);

//延时,大于480us

delay1(14);

//延时,等待DS18B20回应低电平

x=DQ;

//将DS18B20的回应读到变量x,用于判断复位是否成功

delay1(20);

//延时一段时间结束

voidwritecmd(ucharcmd)//DS18B20的写字节函数

uchari=0;

//定义位循环变量

for(i=8;

i>

i--)//循环8次

//总线拉低

DQ=cmd&

0x01;

//将发送字节的最低位送到总线

delay1(5);

//延时(30us),等待DS18B20取走总线数据

//总线拉高

cmd>

>

=1;

//将待发送的字节右移后,继续发送

ucharreaddat()//DS18B20的读字节函数

uchartemp=0;

//定义暂存变量

//总线为低电平

temp>

//暂存变量右移

//总线拉高,执行如下的读操作

if(DQ)//如果DS18B20输出高电平

temp|=0x80;

//将暂存变量的最高位置1

delay1(4);

//延时一段时间

returntemp;

//程序结束后,将暂存变量返回调用程序

/***************************************************

按键设置上线温度和下限温度值函数

****************************************************/

voidkey1()

P0=0X28;

P2=0X90;

P2=0X10;

P0=0xff;

P2=0X00;

//打开74hc245

delay(10);

if(P0==0xfe)//如果选择键按下

delay(10);

//延时消抖

if(P0==0xfe)//如果按键还处于按下状态

{

num++;

//次数加1

while(P0==0xfe);

//等待按键抬起

}

if(num==1)//如果按下选择键的次数为1

TR0=0;

//关闭中断

write_com(0x80+0x00+6);

//光标移到第一行第七个位置

write_com(0x0f);

//设置为显示开,开光标,闪烁

if(num==2)//如果按下选择键的次数为2

write_com(0x80+0x00+14);

//光标移到第一行第十五个位置

if(num==3)//如果按下选择键的次数为3

num=0;

//次数清零

write_com(0x0c);

TR0=1;

//开中断

voidkey2()

if(num==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_data('

//显示正号

write_com(0x80+0x00+5);

write_data(th/10+0x30);

//显示上限温度值的十位

//显示上限温度值的个位

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+13);

//显示下限温度值的十位

//显示下限温度值的个位

if(tl<

write_com(0x80+0x00+12);

write_data('

write_com(0x80+0x00+13);

write_data(tl/10+0x30);

write_data(tl%10+0x30);

/******************************************************

报警函数

********************************************************/

voidBEEP()

if((test>

=th)||(test<

=tl))//如果测得的温度值>

=上限温度值(TH)或<

=下限温度值(TL)

beep=~beep;

//蜂鸣器响

else

beep=0;

//否则发蜂鸣器不响

/********************************************************

主函数

voidmain()

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();

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 理化生

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

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