数字温度计实验报告.docx

上传人:b****1 文档编号:3334070 上传时间:2023-05-05 格式:DOCX 页数:15 大小:276.37KB
下载 相关 举报
数字温度计实验报告.docx_第1页
第1页 / 共15页
数字温度计实验报告.docx_第2页
第2页 / 共15页
数字温度计实验报告.docx_第3页
第3页 / 共15页
数字温度计实验报告.docx_第4页
第4页 / 共15页
数字温度计实验报告.docx_第5页
第5页 / 共15页
数字温度计实验报告.docx_第6页
第6页 / 共15页
数字温度计实验报告.docx_第7页
第7页 / 共15页
数字温度计实验报告.docx_第8页
第8页 / 共15页
数字温度计实验报告.docx_第9页
第9页 / 共15页
数字温度计实验报告.docx_第10页
第10页 / 共15页
数字温度计实验报告.docx_第11页
第11页 / 共15页
数字温度计实验报告.docx_第12页
第12页 / 共15页
数字温度计实验报告.docx_第13页
第13页 / 共15页
数字温度计实验报告.docx_第14页
第14页 / 共15页
数字温度计实验报告.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

数字温度计实验报告.docx

《数字温度计实验报告.docx》由会员分享,可在线阅读,更多相关《数字温度计实验报告.docx(15页珍藏版)》请在冰点文库上搜索。

数字温度计实验报告.docx

数字温度计实验报告

数字温度计实验报告

一实验目的

1.熟悉温度传感器ds18b20、LED或LCD液晶显示器、数码显示器的原理和特点,掌握其实际应用的工作原理与方法。

2.在熟悉数字显示温度计的电路组成与工作原理,掌握相关芯片的作用与使用基础上,培养设计、制作、调试电路等一系列工程设计的能力。

二实验要求

1:

能够实时显示环境温度。

2:

能够保存使用时间内的最大值和最小值,能够查阅。

3:

有温度报警功能,能够设置报警温度。

用绿灯表示正常温度,红灯表示报警同时发声。

4:

自由发挥其他功能。

5:

要求有单片机硬件系统框图,电路原理图,软件流程图。

三实验基本原理

1.硬件部分

此次实验主要使用到的芯片有传感器DS18B20、单片机AT89C51、七段译码器CD4511、以及LED数码管。

由于传感器DS18B20的输出即为数字信号,因此省去了很多工作,如电流\电压转换、转换等。

A\D此次电路的基本原理为:

传感器读入温度信息,发送给单片机处理,单片机处理后将信号发送给译码器进行译码后送给LED即显示出当前温度;温度过高时蜂鸣器实行报警。

2.软件部分

软件部分主要包括初始化程序,初始化ds18b20程序,读ds18b20程序,数据转摄氏温度BCD码程序,报警程序,显示程序,中断程序,延时程序等,具体程序见附录。

其中下列程序的编程方法做以下说明:

(1)数据转摄氏温度BCD码程序:

由于要实现分辨率可调,所以编程时小数位的值是根据分辨率的值来对从ds18b20读入的四位小数位进行取舍,百位、十位和个位的数则由二进制数除以一百、一十和余数求得,这样即实现把从ds18b20读入的温度装换成代显示的摄氏温度BCD码。

(2)报警程序:

对所得的温度进行判断,当温度超30°C时,即驱动蜂鸣器(P1^2口)。

四实验设计分析

针对要实现的功能,采用AT89S51单片机进行设计,AT89S51单片机是一款低功耗,高性能CMOS8位单片机,片内含4KB在线可编程(ISP)的可反复擦写1000次的Flash只读程序存储器,器件采用高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构。

这样,既能做到经济合理又能实现预期的功能。

在程序方面,采用分块设计的方法,这样既减小了编程难度、使程序易于理解,又能便于添加各项功能。

程序可分为初始化程序,初始化ds18b20程序,读ds18b20程序,数据转摄氏温度BCD码程序,报警程序,显示程序,中断程序,延时程序等。

运用这种方法,关键在于各模块的兼容和配合,若各模块不匹配会出现意想不到的错误。

首先,在编程之前必须了解硬件结构尤其是各引脚的用法,以及内部寄存器、存储单元的用法,否则,编程无从下手,电路也无法设计。

这是前期准备工作。

第二部分是硬件部分:

依据想要的功能分块设计设计,比如输入需要开关电路,输出需要显示驱动电路和数码管电路等。

第三部分是软件部分:

先学习理解基于KeiluVision4的c语言编程方法再根据设计的硬件电路进行分块的编程调试,最终完成程序设计。

第四部分是软件画图部分:

设计好电路后进行画图,包括电路图和仿真图的绘制。

第五部分是软件仿真部分:

软硬件设计好后将软件载入芯片中进行仿真,仿真无法完成时检查软件程序和硬件电路并进行修改直到仿真成功。

第六部分是硬件实现部分:

连接电路并导入程序检查电路,若与设计的完全一样一般能实现想要的功能。

最后进行功能扩展,在已经正确的设计基础上,添加额外的功能!

五实验要求实现

A.电路设计

1.整体设计

整体设计图如下:

2.硬件设计

硬件设计图如下:

3.数字温度传感器:

ds18b20

数字温度传感器ds18b20由DALLAS半导体公司生产的DS18B20型单线智能温度传感器,属于新一代适配微处理器的智能温度传感器,可广泛用于工业、民用、军事等领域的温度测量及控制仪器、测控系统和大型设备中。

它具有体积小,接口方便,传输距离远等特点。

1.ds18b20性能特点:

1采用单总线专用技术,既可通过串行口线,也可通过其它I/O口线与微机接口,无须经过其它变换电路,直接输出被测温度值(9位二进制数,含符号位)。

2测温范围为-55℃-+125℃,测量分辨率为0.0625℃。

3内含64位经过激光修正的只读存储器ROM。

4适配各种单片机或系统机。

5用户可分别设定各路温度的上、下限。

6内含寄生电源。

2.ds18b20内部结构

ds18b20内部结构主要由四部分组成:

64位光刻ROM,温度传感器,非挥发的温度报警触发器TH和TL,高速暂存器。

64位光刻ROM是出厂前被光刻好的,它可以看作是该ds18b20的地址序列号。

64位ROM结构图如图2所示。

不同的器件地址序列号不同。

ds18b20的管脚排列图、引脚分布图如图所示。

3.ds18b20控制方法

ds18b20有六条控制命令,如表所示:

4.复位和应答脉冲时隙

5.读写时序

4软件设计

软件部分主要包括初始化程序,初始化ds18b20程序,读ds18b20程序,数据转摄氏温度BCD码程序,显示程序,中断程序,延时程序等。

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitDQ=P1^2;

sbitbeef=P1^3;

sbitred=P1^4;

sbitgreen=P1^5;

unsignedcharcodeduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0xFF};

/*0123456789ABCDEF*/

unsignedcharcodeduan1[]={0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF};//加小数点

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

uintrecord[50];

voiddelay();//延时函数

voidinit_ds18b20();//初始化ds18b20

voidwrite_byte(uchardat);//写数据函数

ucharread_byte();//读数据函数

uintreadtemp();//读温度函数

voiddisplay(uinttemp);//显示函数

voidkey();//键盘函数

voidshowmaxtemp();//显示最大温度函数

voidshowmintemp();//显示最小温度函数

voidshowwarntemp();//显示警告温度函数

uinttemp;

uchara;

ucharc;

uintmaxtemp;

uintmintemp;

ucharn=0;

ucharm=0;

uchare=0;

uintd;

uintwarntemp=300;

voidmain(void)

{

EA=1;//打开总中断开关

TMOD=0x01;//设置定时器0为工作方式1

TH0=(65535-50000)/256;//赋处置

TL0=(65535-50000)%256;

ET0=1;//打开定时器中断

TR0=1;//启动定时器

while

(1)

{

temp=readtemp();//读出温度并赋值给temp

key();

record[c]=temp;

if(n==0&&m==0&&e==0)

display(temp);

if(temp>=warntemp)

{

beef=0;

red=0;

green=1;

}

else

{

beef=1;

red=1;

green=0;

}

showmaxtemp();

showmintemp();

showwarntemp();

}

}

voidtime1()interrupt1//中断程序

{

TH0=(65535-50000)/256;

TL0=(65535-50000)%256;

a++;

if(a==20)

{

a=0;

record[c]=temp;

mintemp=record[0];maxtemp=record[0];

for(d=1;d<=c;d++)

{

if(mintemp>record[d])mintemp=record[d];//

if(maxtemp

}

c++;

}

}

voiddelay(uintt)//延时函数

{

while(t--);

}

voidinit_ds18b20()//ds18b20初始化函数

{

ucharx;

DQ=1;

delay(8);

DQ=0;

delay(250);

DQ=1;

delay(100);

x=DQ;

delay(4);

}

voidwrite_byte(uchardat)//写数据函数

{

uchari;

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

{

DQ=0;

DQ=dat&0x01;

delay(10);

DQ=1;

dat>>=1;

}

delay(4);

}

ucharread_byte()//读数据函数

{

uchari,t,dat;

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

{

DQ=0;

t>>=1;

DQ=1;

dat=DQ;

if(dat==1)

t|=0x80;

delay(10);

}

returnt;

}

uintreadtemp()//数据转摄氏温度BCD码程序

{

uchara,b;

floatt;

init_ds18b20();

write_byte(0xcc);//跳过rom

write_byte(0x44);//启动温度测量

delay(300);

init_ds18b20();

write_byte(0xcc);

write_byte(0xbe);//读温度

a=read_byte();

b=read_byte();

temp=b;

temp<<=8;

temp=temp|a;

t=temp*0.0625;

temp=t*10+0.5;

 

returntemp;

}

voiddisplay(uinttemp)//显示函数

{

P3=wei[4];

P2=duan[temp/100];//取显示数据,段码

delay(300);

P3=wei[3];

P2=duan1[temp%100/10];//取显示数据,段码

delay(300);

P3=wei[2];

P2=duan[temp%10];

delay(300);

P3=wei[1];

P2=0x00;

}

voidshowmaxtemp()

{

if(n==1)display(maxtemp);

}

voidshowmintemp()

{

if(m==1)display(mintemp);

}

voidshowwarntemp()

{

if(e==1)display(warntemp);

}

 

voidKey()

{

uchark,x,y,z;

P0=0xff;

P0=0x0f;

if(P0!

=0x0f)

{

delay(20);

if(P0!

=0x0f)

{

x=P0;

P0=0xf0;

y=P0;

z=x|y;

while(P0!

=0xf0);

switch(z)

{

case0xe7:

n=1;m=0;e=0;break;//数字1[1,1]

case0xeb:

m=1;n=0;e=0;break;//数字2[1,2]

case0xed:

n=0;m=0;e=0;break;//数字3[1,3]

case0xee:

e=1;n=0;m=0;break;//运算符+[1,4]

case0xd7:

k=1;break;//数字4[2,1]

case0xdb:

k=2;break;//数字5[2,2]

case0xdd:

break;//数字6[2,3]

case0xde:

break;//运算符-[2,4]

case0xb7:

break;//数字7[3,1]

case0xbb:

break;//数字8[3,2]

case0xbd:

break;//数字9[3,3]

case0xbe:

break;//运算符*[3,4]

case0x77:

break;//数字0[4,1]

case0x7b:

break;//小数点[4,2]

case0x7d:

break;//运算符=[4,3]

case0x7e:

break;//运算符/[4,4]

}

if(k==1){warntemp++;display(warntemp);}

if(k==2){warntemp--;display(warntemp);}

}

}

}

六设计总结

本系统以AT89S52单片机、DS18B20温度传感器为核心,实现了低功耗高精度便携式数字温度计的设计.对于便携式仪器,本设计实现了低成本宽测温范围条件下的低功耗高精度要求,具有一定的实用价值.整个便携式低功耗高精度数字温度计使用方便,工作稳定,待机时间长,具有广阔的应用前景.通过本次设计,使得我对之前学习过的知识比如:

电路分析,数字电子技术,有了更进一步的认识.同时,锻炼了我独立思考和独立完成任务的能力.在本次设计中,不但查阅了很多书本上的资料,也通过网络查阅了芯片的结构,接线等方面很多相关知识.

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

当前位置:首页 > PPT模板 > 动态背景

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2