基于STC89C52DS18B20的电子温度计课设.docx

上传人:b****7 文档编号:9065351 上传时间:2023-02-03 格式:DOCX 页数:26 大小:209.31KB
下载 相关 举报
基于STC89C52DS18B20的电子温度计课设.docx_第1页
第1页 / 共26页
基于STC89C52DS18B20的电子温度计课设.docx_第2页
第2页 / 共26页
基于STC89C52DS18B20的电子温度计课设.docx_第3页
第3页 / 共26页
基于STC89C52DS18B20的电子温度计课设.docx_第4页
第4页 / 共26页
基于STC89C52DS18B20的电子温度计课设.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

基于STC89C52DS18B20的电子温度计课设.docx

《基于STC89C52DS18B20的电子温度计课设.docx》由会员分享,可在线阅读,更多相关《基于STC89C52DS18B20的电子温度计课设.docx(26页珍藏版)》请在冰豆网上搜索。

基于STC89C52DS18B20的电子温度计课设.docx

基于STC89C52DS18B20的电子温度计课设

正文

1.设计内容和要求。

随着社会的进步和工业技术的发展,人们越来越重视温度因素,许多产品对温度范围要求严格,而目前市场上普遍存在的温度检测仪器大都是单点测量,同时有温度信息传递不及时、精度不够的缺点,不利于工业控制者根据温度变化及时做出决定。

在这样的形式下,开发一种能够同时测量多点,并且实时性高、精度高,能够综合处理多点温度信息的测量系统就很有必要。

本课题以STC89C52单片机系统为核心,能对多点的温度进行实时巡检。

DS18B20是一种可组网的高精度数字式温度传感器,由于其具有单总线的独特优点,可以使用户轻松地组建起传感器网络,并可使多点温度测量电路变得简单、可靠。

本文结合实际使用经验,介绍了DS18B20数字温度传感器在单片机下的硬件连接及软件编程,并通过LCD1602显示当前温度,实现实时温度测量。

2、系统总体结构

系统的系统设计方框图如图1-1所示,它主要由三部分组成:

①控制部分主芯片采用单片机STC89C52;②显示部分采用LCD1602以动态扫描方式实现温度显示;③温度采集部分的温度传感器采用DS18B20智能温度温度传感器。

DS18B20进行温度采集和转换输出数字型的温度值,然后通过数据引脚传到单片机的P3.7口,单片机通过P2口将数据扫描到LCD1602显示屏上。

 

图2-1

3、硬件设计

3.1控制模块

本设计采用单片机基于数字温度传感器DS18B20的系统。

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

温度传感器DS18B20利用单总线的特点可以方便的实现多点温度的测量,组建传感器网络,且系统的抗干扰性好、设计灵活、方便,而且能在恶劣的环境下进行现场温度检测。

3.2温度采集模块

这一部分主要完成对温度信号的采集和转换工作,由DS18B20数字温度传感器及其与单片机的接口部分组成。

DS18B20智能温度温度传感器进行温度采集和转换输出数字型的温度值,然后通过数据引脚传到单片机的P3.7口,单片机接受温度并存储。

DS18B20是美国DALLAS半导体公司最新推出的一种单线智能温度传感器,属于新一代适配微处理器的智能温度传感器,它可将温度信号直接转换为数字信号,实现了与单片机的直接接口,从而省去了信号调理和A/D转换等复杂模/数转换电路。

DS18B20构成的温度采集模块电路简单、功能可靠、测量效率高,很好地弥补了传统温度测量方法的不足可广泛用于工业、民用、军事等领域的温度测量及控制仪器、测控系统和大型设备中。

它具有集成度高、模拟输入数字输出、抗干扰能力强、体积小、接口方便、传输距离远测温误差小等特点。

如图3-1.

 

图3-1

3.3温度显示模块

本课程设计的显示模块采用LCD1602液晶显示器显示温度数据,整数进行显示,从P0口送数,P2口扫描。

显示当前测量的温度。

3.4电源

220V的交流变压器经过变压器转换成10V的交流电,经过整流电路得到5V的直流电,供给电路使用。

4软件设计

按照硬件设计中的模块划分,软件设计业可分为三部分:

DS18B20模块程序设计,LCD1602驱动程序设计,单片机主程序设计。

其中前两部分是本例软件设计的关键,而相比较,主程序设计则比较简单。

下面分别为主程序流程图,DS18B20流程图和LCD1602液晶模块程序流程图。

如图4-1.

4.1单片机主程序

 

 

图4-1

 

4.2DS18B20模块程序设计

在主程序流程图中,先初始化液晶模块,然后延时几百微秒,进入While循环,先初始化DS18B20,然后启动温度转换,读取转换后的温度值,并进行处理,最终将温度显示在LCD屏幕上。

DS18B20是1-wire单线器材,即在一根数据线上实现数据的双向传输,这就需要严格的通信协议来保证各位数据传输的正确性和完整性。

单片机操作单线器材DS18B20的流程图如图4-2所示。

 

N

Y

 

 

图4-2

 

首先DS18B20初始化。

复位DS18B20,然后单片机等待DS18B20的应答脉冲,一旦单片机监测到应答脉冲,变发起跳过ROM匹配操作命令。

成功执行了ROM操作命令后,就可以使用内存操作命令,启动温度转换,延时一段时间后,等待温度转换完成。

再发起跳过ROM匹配操作命令,然后读暂存器,将转换结果读出,并转换为显示码,送液晶显示。

需要注意的是:

复位要求主CPU将数据线下拉500微秒,然后释放,DS18B20收到信号后等待16~60微秒左右,后发出60~240微秒的存在低脉冲,主CPU收到此信号表示复位成功。

4.3LCD1602驱动程序设计

用LCD1602液晶显示模块显示字符或字符串之前必须对其进行初始化,LCD1602液晶显示模块的初始化程序流程图如图4-3所示。

 

 

 

N

Y

 

N

N

Y

N

Y

N

Y

 

N

Y

N

Y

 

图4-3

上电复位以后,延时15ms,写3次38H指令,写指令前不监测忙标志位。

当3次写38H指令完成后,开始进行显示模式设置操作,此时必须先监测忙标志位,只有当其为空闲时,才能进行显示模式设置。

伺候依次为显示关闭。

显示清屏,显示光标移动设置和显示开关及光标设置。

同写显示模式设置一样,每次写之前,都必须先检测忙标志位。

5,系统调试

5.1综述

单片机应用系统的硬件调试和软件调试是分不开的.许多硬件故障只有通过软、硬件联调才能发现,但一般是先排除系统中比较明显的硬件故障后才和软件一起联调。

常见的硬件故障. 

5.2常见问题

逻辑错误 

样机硬件的逻辑错误是由于设计错误和加工过程中的工艺错误而造成的,包括错线、开路、短路、相位错误、时序错误等,其中最常见的是短路故障。

 

2元器件错误 

元器件错误的原因有器件损坏或性能不符合要求,电解电容、二极管的极性接反或集成块装反等。

 

3可靠性差 

应用系统可靠性差的原因很多,如金属化孔、接插件接触不良、内部和外部的干扰、电压纹波系数过大、器件负载过重等均会造成系统的可靠性差。

另外,走线和布置的不合理也会造成系统可靠性差。

 

4电源故障 

电源故障包括:

电压值不符合设计要求、电源功率不足、负载能力差、纹波太重等。

 

5.3.硬件调试力法 

(1)脱机调试 

脱机调试是在加电前,先用万用表等工具,按图纸仔细核对样机线路是否正确,并对元器件的安装、型号、规格等进行仔细检查,特别注意印制板加工和焊接时有无走线之间相互短路等。

 

(2)联机调试 

联机前先切断电源,把仿真插头插到样机的单片机插座上,检查一下开发机与样机之间的电源、接地是否良好。

一切正常后,即可打开电源。

通电后执行开发机读/写指令,对用者样机的存储器I/O口进行读/写操作,进行逻辑检查。

若有故障,可用示波器观察有关点的波形,寻找和分析故障原因,并进一步排除故障。

 

在用者系统的样机(主机部分)调试好后,便可按入用者系统的其它外围部件,如键盘、显示器等,再进一步进行调试。

 

5.4软件调试方法:

 

软件调试与所选用的软件结构有关,如果采用模块程序设计技术,则逐个模块调好后再进行系统程序总调。

如果采用实时多任务操作系统,一般是逐个任务进行调试。

 

对于模块结构程序.要一个个子程序分别调试。

调试时,一定要符合入口条件和出口条件,调试可用单步运行和断点运行方式,通过检查用者系统的CPU现场情况、RAM的内容和I/O口的状态,检测程序执行结果是否符合设计要求,有无循环错误、有无机器码错误以及转移地址的错误,同时,还可以发现用者系统中存在的硬件设计错误和软件算法错误。

 

各程序模块通过后,则可以把相关功能块连在一起进行总调。

这个阶段若有故障,可以考虑各子程序运行时是否破坏了现场,缓冲单元、工作寄存器是否发生冲突,标志位的建立和清除是否有误,堆栈区是否有溢出,输入设备的状态是否正常等等,若用者系统是在开发机的监控程序下运行时,还要考虑用者缓冲单元是否和监控程序的工作单元发生冲突。

 

单步和断点调试后,还应进行连续调试,用以确定定时精度、CPU的实时响应等问题。

对于实时多任务操作系统的调试方法和模块结构的调试方法类似,只是需逐个任务进行调试,在调试某一个任务时,同时也调试相关的子程序、中断服务程序。

逐个任务调试好后,再使各个任务同时运行。

 

当全部调试和修改完成后,将用者程序固化到EPROM中,插入用者样机后,用者系统即能独立工作,至此,单片机应用系统研制完成。

6,设计小结

本设计使用的温度控制器结构简单、测温准确,具有一定的实际应用价值。

该智能温度控制器只是DS18B20在温度控制领域的一个简单实例,还有许多需要完善的地方,例如可以将测得的温度通过单片机与通讯模块相连接,以手机短消息的方式发送给用户,使用户能够随时对温度进行监控。

此外,还能广泛地应用于其他一些工业生产领域,如建筑,仓储等行业。

本温度控制系统可以应用于多种场合,像花房的多点温度、育婴房的温度、水温的检测与控制。

用户可灵活选择本设计的用途,有很强的实用价值。

由衷感谢我们的老师,教予了我诸多传感器的理论知识。

指导了我顺利的独立地完成了这一次的课程设计。

期间,让我学到了许多在实践中需注意的问题。

怎样思考问题,然后如何去收集整理资料。

再次特别感谢庄老师对我们的帮助,以及平日对我们的谆谆教诲。

7:

参考文献及资料

[1]肖洪兵.跟我学用单片机[M]北京:

北京航空航天大学出版社,2002.8

[2]何立民.单片机高级教程.第1版[M]北京:

北京航空航天大学出版社,2001

[3]赵晓安.MCS-51单片机原理及应用[m]天津:

天津大学出版社,2001.3

[4]李广第.单片机基础.第1版[M]北京:

北京航空航天大学出版社,1999

[5]徐惠民、安德宁.单片微型计算机原理接口与应用[M]第1版.北京:

北京邮电大学出版社,1996

[6]何立民.从Cygnal80C51F看8位单片机发展之路[J]单片机与嵌入式系统应用,2002年,第5期:

P5~8

[7]常敏,51单片机应用程序开发与实践[M]电子工业出版社2009.3

 

四,附录

1)元器件清单

序号

名称

型号,参数

备注

价格

数量

1

CPU

STC89C52

DIP40封装

7

1

2

管座

DIP-40

0.5

1

3

晶振

12MHz

49S型

0.5

1

4

整流桥

2W10

2A圆桥

1

1

5

稳压IC

LM7805

TO-220

1

1

6

元片电容

30pf

0.5

2

7

电解电容

1000uf/16V

0.5

1

8

电解电容

470uf/16V

0.5

1

9

电解电容

10uf/16V

0.5

1

10

独石电容

0.47uf

0.5

2

11

自锁开关

8*8自锁开关-6P

8mm×8mm

1

1

12

电阻

10K/0.25W

金属膜1/4W

0.5

1

13

单排排针

直针1*40

2.54mm

2

4

14

杜邦线

5

30

15

温度传感器

DS18B20

5

1

16

LCD显示屏

LCD1602

20

1

17

变压器

温州升龙变压

12

1

18

焊锡丝

5

1

19

单排座

1

1

20

短路子

跳线帽

2.54mm

2

若干

成本总价

57

2)原理图

3)程序清单

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitDQ=P3^7;//ds18b20与单片机连接口

sbitRS=P3^0;

sbitRW=P3^1;

sbitEN=P3^2;

unsignedcharcodestr1[]={"temperature:

"};

unsignedcharcodestr2[]={""};

uchardatadisdata[5];

uinttvalue;//温度值

uchartflag;//温度正负标志

/*************************lcd1602程序**************************/

voiddelay1ms(unsignedintms)//延时1毫秒(不够精确的)

{unsignedinti,j;

for(i=0;i

for(j=0;j<100;j++);

}

voidwr_com(unsignedcharcom)//写指令//

{delay1ms

(1);

RS=0;

RW=0;

EN=0;

P2=com;

delay1ms

(1);

EN=1;

delay1ms

(1);

EN=0;

}

voidwr_dat(unsignedchardat)//写数据//

{delay1ms

(1);;

RS=1;

RW=0;

EN=0;

P2=dat;

delay1ms

(1);

EN=1;

delay1ms

(1);

EN=0;

}

voidlcd_init()//初始化设置//

{delay1ms(15);

wr_com(0x38);delay1ms(5);

wr_com(0x08);delay1ms(5);

wr_com(0x01);delay1ms(5);

wr_com(0x06);delay1ms(5);

wr_com(0x0c);delay1ms(5);

}

 

voiddisplay(unsignedchar*p)//显示//

{

while(*p!

='\0')

{

wr_dat(*p);

p++;

delay1ms

(1);

}

}

init_play()//初始化显示

{lcd_init();

wr_com(0x80);

display(str1);

wr_com(0xc0);

display(str2);

}

/******************************ds1820程序***************************************/

voiddelay_18B20(unsignedinti)//延时1微秒

{

while(i--);

}

voidds1820rst()/*ds1820复位*/

{unsignedcharx=0;

DQ=1;//DQ复位

delay_18B20(4);//延时

DQ=0;//DQ拉低

delay_18B20(100);//精确延时大于480us

DQ=1;//拉高

delay_18B20(40);

}

uchards1820rd()/*读数据*/

{unsignedchari=0;

unsignedchardat=0;

for(i=8;i>0;i--)

{DQ=0;//给脉冲信号

dat>>=1;

DQ=1;//给脉冲信号

if(DQ)

dat|=0x80;

delay_18B20(10);

}

return(dat);

}

voidds1820wr(ucharwdata)/*写数据*/

{unsignedchari=0;

for(i=8;i>0;i--)

{DQ=0;

DQ=wdata&0x01;

delay_18B20(10);

DQ=1;

wdata>>=1;

}

}

read_temp()/*读取温度值并转换*/

{uchara,b;

ds1820rst();

ds1820wr(0xcc);//*跳过读序列号*/

ds1820wr(0x44);//*启动温度转换*/

ds1820rst();

ds1820wr(0xcc);//*跳过读序列号*/

ds1820wr(0xbe);//*读取温度*/

a=ds1820rd();

b=ds1820rd();

tvalue=b;

tvalue<<=8;

tvalue=tvalue|a;

if(tvalue<0x0fff)

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitDQ=P3^7;//ds18b20与单片机连接口

sbitRS=P3^0;

sbitRW=P3^1;

sbitEN=P3^2;

unsignedcharcodestr1[]={"temperature:

"};

unsignedcharcodestr2[]={""};

uchardatadisdata[5];

uinttvalue;//温度值

uchartflag;//温度正负标志

/*************************lcd1602程序**************************/

voiddelay1ms(unsignedint1ms)//延时1毫秒(不够精确的)

{unsignedinti,j;

for(i=0;i

for(j=0;j<100;j++);

}

voidwr_com(unsignedcharcom)//写指令//

{delay1ms

(1);

RS=0;

RW=0;

EN=0;

P2=com;

delay1ms

(1);

EN=1;

delay1ms

(1);

EN=0;

}

voidwr_dat(unsignedchardat)//写数据//

{delay1ms

(1);;

RS=1;

RW=0;

EN=0;

P2=dat;

delay1ms

(1);

EN=1;

delay1ms

(1);

EN=0;

}

voidlcd_init()//初始化设置//

{delay1ms(15);

wr_com(0x38);delay1ms(5);

wr_com(0x08);delay1ms(5);

wr_com(0x01);delay1ms(5);

wr_com(0x06);delay1ms(5);

wr_com(0x0c);delay1ms(5);

}

 

voiddisplay(unsignedchar*p)//显示//

{

while(*p!

='\0')

{

wr_dat(*p);

p++;

delay1ms

(1);

}

}

init_play()//初始化显示

{lcd_init();

wr_com(0x80);

display(str1);

wr_com(0xc0);

display(str2);

}

/******************************ds1820程序***************************************/

voiddelay_18B20(unsignedinti)//延时1微秒

{

while(i--);

}

voidds1820rst()/*ds1820复位*/

{unsignedcharx=0;

DQ=1;//DQ复位

delay_18B20(4);//延时

DQ=0;//DQ拉低

delay_18B20(100);//精确延时大于480us

DQ=1;//拉高

delay_18B20(40);

}

uchards1820rd()/*读数据*/

{unsignedchari=0;

unsignedchardat=0;

for(i=8;i>0;i--)

{DQ=0;//给脉冲信号

dat>>=1;

DQ=1;//给脉冲信号

if(DQ)

dat|=0x80;

delay_18B20(10);

}

return(dat);

}

voidds1820wr(ucharwdata)/*写数据*/

{unsignedchari=0;

for(i=8;i>0;i--)

{DQ=0;

DQ=wdata&0x01;

delay_18B20(10);

DQ=1;

wdata>>=1;

}

}

read_temp()/*读取温度值并转换*/

{uchara,b;

ds1820rst();

ds1820wr(0xcc);//*跳过读序列号*/

ds1820wr(0x44);//*启动温度转换*/

ds1820rst();

ds1820wr(0xcc);//*跳过读序列号*/

ds1820wr(0xbe);//*读取温度*/

a=ds1820rd();

b=ds1820rd();

tvalue=b;

tvalue<<=8;

tvalue=tvalue|a;

if(tvalue<0x0fff)

tflag=0;

else

{tvalue=~tvalue+1;

tflag=1;

}

tvalue=tvalue*(0.625);//温度值扩大10倍,精确到1位小数

return(tvalue);

}

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

voidds1820disp()//温度值显示

{ucharflagdat;

disdata[0]=tvalue/1000+0x30;//百位数

disdata[1]=tvalue%1000/100+0x30;//十位数

disdata[2]=tvalue%100/10+0x30;//个位数

disdata[3]=tvalue%10+0x30;//小数位

if(tflag==0)

flagdat=0x20;//正温度不显示符号

else

flagdat=0x2d;//负温度显示负号:

-

if(disdata[0]==0x30)

{disdata[0]=0x20;//如果百位为0,不显示

if(disdata[1]==0x30)

{disdata[1]=0x20;//如果百位为0,十位为0也不显示

}

}

wr_com(0xc0);

wr_dat(fl

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

当前位置:首页 > 解决方案 > 学习计划

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

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