单片机报告温度采集.docx

上传人:b****5 文档编号:28245997 上传时间:2023-07-09 格式:DOCX 页数:14 大小:138.21KB
下载 相关 举报
单片机报告温度采集.docx_第1页
第1页 / 共14页
单片机报告温度采集.docx_第2页
第2页 / 共14页
单片机报告温度采集.docx_第3页
第3页 / 共14页
单片机报告温度采集.docx_第4页
第4页 / 共14页
单片机报告温度采集.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

单片机报告温度采集.docx

《单片机报告温度采集.docx》由会员分享,可在线阅读,更多相关《单片机报告温度采集.docx(14页珍藏版)》请在冰豆网上搜索。

单片机报告温度采集.docx

单片机报告温度采集

 

数字化产品设计报告

 

专业:

嵌入式系统

班级:

姓名:

指导教师:

 

哈尔滨工业大学华德应用技术学院

2010年12月9日

 

姓名:

周铁

班级:

0891141

学号:

14

课题编号:

02

课题名称:

基于DS18B20的温度采集系统

基本功能:

设计实现基于DS18B20的温度采集系统,并要求实现使用LCD1602显示采集到的温度。

 

扩展功能:

实现多路温度采集及显示。

 

成绩:

评审老师:

一、需求分析:

1.应用场合

该设计可应用于各种地点的温度测量,测量温度在-55~125度之间,可以实现多点测试。

2.设计目的

1)掌握DS18B20数字温度传感器的工作原理和使用方法;

2)掌握对18B20转换数据进行处理的方法;

3)熟练单片机在实际中的基本应用方法;

4)提高自身的动手能力。

3.立题意义

通过这个实验,希望能够对动手能力有所帮助,能够在实际中做到对单片机的基础应用,将课程所学初步应用到实际中,自己动手设计一个属于自己的开发板。

二、硬件设计方案

用AT89S52控制DS18B20,读取数据,并对DS18B20转换后的数据进行处理,最后在数码管上显示DS18B20的温度。

在设计中用到单片机最小系统:

复位电路以及时钟(晶振)电路、DS18B20温度传感器、共阴极7段数码管显示系统。

复位电路:

复位是单片机的初始化操作,目的是使CPU以及各个寄存器处于一个确定的初始状态。

分为手动复位方式和上电自动方式。

时钟电路:

51单片机的时钟信号可由芯片内部的震荡电路产生,也可以由外部产生。

DS18B20:

DS18B20数字温度传感器是达拉斯半导体公司生产的1——Wire器件,即单总线器件,它与传统的热敏电阻不同的是,它可以直接将被测温度转换成串行数字信号供主机处理,并且根据具体要求,通关简单的编程实现9位温度度数。

具有线路简单,体积小的特点。

它有三个引脚(如图1.1):

GND脚:

接地;

DQ脚:

数据输入输出引脚。

开漏单总线接口引脚。

当被用在寄生电源下,也可以向器件提供电源(注:

需要在该引脚出加一个上拉电阻)

VDD:

可选的VDD引脚,接电源。

在工作于寄生电源时,必须接地。

图1.1温度传感器仿真图

7段共阴极数码管:

用于显示采集到的温度数据给用户。

七段数码管有四个片选信号点,分别控制四个7段数码管显示(如图1.2),另外八个引脚接受数据显示段码。

由此实现数码管的显示。

图1.27段共阴极数码管仿真图

三、软件设计方案(*画流程图、写出算法分析)

首先初始化设置,设置常量,再进行对DS18B20进行初始化,之后进行温度采集,给DS18B20一个温度转换命令实现温度转换,读取转换的温度值,通过数据处理,将处理后的数据传送到数码管中显示出来,实现温度的采集与显示。

流程图:

1)主程序流程图(如图1.3)

2)DS18B20复位子程序流程图(如图1.4)

3)读温度值子程序(如图1.5)

4)写DS18B20命令子程序(如图1.6)

5)读温度子程序流程图(如图1.7)

 

 

N

Y

 

 

图1.3主程序流程图图1.4DS18B20复位子程序流程图

 

 

图1.5读温度值子程序流程图1.6写命令子程序流程图

 

 

N

Y

 

图1.7读温度子程序流程图

四、系统调试

在设计中,用到了ProteusISIS与Keil软件联合仿真系统,在手动焊接电路后用到了捎写电路以及捎写程序软件。

在课堂上所学的仿真器材在本课程设计中得到了正确的应用。

五、总结

问题1:

在程序中DS18B20的初始化总是不成功。

解决办法:

由于DS18B20对程序的时序要求严格,在延时程序中没有注意到这一点导致出错,经过老师指点,顺利解决问题。

问题2:

无法读取DS18B20中的数据。

解决办法:

由于在电路中没有在DS18B20的DQ引脚加上上拉电阻,在上拉电阻加上后完成数据采集。

问题3:

数码管显示不正常。

解决办法:

由于对真实的数码管了解不够,不知道哪个引脚是干什么的,经过老师指点以及查找资料找到了测试引脚的方法,最后自己用万用表测出各个引脚的作用。

总结:

通过本次课程设计,加强了我的动手操作能力,将课堂上所学的知识应用到实践中来,并且了解了DS18B20数字温度传感器的工作原理和使用方法,掌握了对DS18B20转换数据进行处理的方法,在实践过程中也练习了IO口的输入输出方式,熟练的掌握了数码管显示数据的方法,在两周的学习中,让我学到了在课堂上没有学到的东西,学会的自我学习的方法,在查找资料自我分析以及跟同学的讨论,加上老师的悉心教导,使我顺利的完成的本次课程设计,感觉受益匪浅。

在以后的学习生活中,我希望能够多几次这样的实训,这样能够增强我的动手能力,而且使我对动手实践产生了浓厚的兴趣。

附录1:

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitDQ=P2^4;

unsignedcharflag,presence;//负数标志

ucharcodescan[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

ucharcodetable[13]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x40,0x39,0x00};

ucharcodeditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,

0x07,0x08,0x08,0x09,0x09};

uchardispbuf[8];

uchartemper[2];

ucharx=1;

//ucharx=0;

voiddelay(unsignedintus)reentrant

{

while(us--);

}

//延时函数

voidreset(void)

{

DQ=1;

//delay(8);

DQ=0;

delay(90);

DQ=1;

delay(14);

x=DQ;

delay(20);

DQ=1;

}

//复位函数

 

ucharreadbyte(void)

{

uchari=0;

uchardat=0;

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

{

DQ=0;

dat>>=1;

DQ=1;

if(DQ)

dat|=0x80;

delay(4);

}

return(dat);

}

//从1820中读一个字节

voidwritebyte(unsignedchardat)

{

uchari=0;

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

{

DQ=0;

DQ=dat&0x01;

delay(5);

DQ=1;

dat>>=1;

}

delay(4);

}

//向1820中写入一个字节

voidreadtemp(void)

{

uchara=0,b=0;

reset();

while(x==0)

{

if(x==0)

reset();

elsebreak;

}

writebyte(0xcc);

writebyte(0x44);

reset();

writebyte(0xcc);

writebyte(0xbe);

a=readbyte();

b=readbyte();

if(b>0x0f)

{

a=~a+1;

if(a==0)

b=~b+1;

elseb=~b;

flag=10;

}

elseflag=12;

temper[0]=a&0x0f;

a=a>>4;

temper[1]=b<<4;

temper[1]=temper[1]|a;

}

//读取实时温度

voidscandisp()

{

unsignedchari,value;

for(i=0;i<6;i++)

{

P3=0xff;

value=table[dispbuf[i]];

if(i==3)

value|=0x80;

P0=value;

P3=scan[i];

delay(50);

}

}

//动态扫描显示函数

voidmain()

{

uchartemp=10,temp1;

while

(1)

{

readtemp();

temp1=temper[0];

temp=temper[1];

if(flag==10)

dispbuf[0]=flag;

else

dispbuf[0]=temp/100;

dispbuf[3]=ditab[temp1];

dispbuf[2]=temp%10;

temp=temp/10;

dispbuf[1]=temp%10;

scandisp();

}

}

附录2:

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

当前位置:首页 > 工程科技 > 环境科学食品科学

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

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