您好,欢迎来到好走旅游网。
搜索
您的当前位置:首页温度传感器(单片机-)

温度传感器(单片机-)

来源:好走旅游网
温度传感器

一、实验目的

通过对基于单片机的温度传感器的制作,进一步加深了实践动手设计能力和对单片机知识的巩固,从而让自己为以后的动手制作做好铺垫。

二、实验材料

发光二级管一个、三极管S8850两个、温度传感器18B20三极管一个、插脚若干、12兆晶振一个、USB接口一个、开关一个、30皮发电容两个、电容CD110一个、C52单片机一个插槽一个、2位数码显示管一个、九脚排阻A103J一个、

470k电阻两个、120Ω电阻一个、1000Ω电阻一个、PCB板一块。

三、实验原理

接触式温度传感器的检测部分与被测对象有良好的接触,又称温度计。温度计通过传导或对流达到热平衡,从而使温度计的示值能直接表示被测对象的温度。一般测量精度较高。在一定的测温范围内,温度计也可测量物体内部的温度分布。但对于运动体、小目标或热容量很小的对象则会产生较大的测量误差。

原理电路图如下:

四、实验总结

通过本次实验,了解自己在动手能力上的不足和对单片机知识的缺乏,让自己更清楚自己需要认真多家努力去弥补。同时也要加强与同学的交流,让自己有更大更快的进步。

五、程序编码

//18B20单线温度检测的应用样例程序

#include

#include

#include

#define uchar unsigned char

#define uint unsigned int;

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

/**********系统管脚定义说明

DS18B20数据口为P3^7

数码管数据口为

********/

sbit DQ=P3^7;//ds18b20 端口

sfr dataled=0x80;//显示数据端口

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

uchar temp;

uchar flag_get,count,num,minute,second;

uchar code

tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,/*9*/};//数码管段码表

共阳

uchar a,b;

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

void delay1(uchar MS);

unsigned char ReadTemperature(void);

void Init_DS18B20(void);

unsigned char ReadOneChar(void);

void WriteOneChar(unsigned char dat);

void delay(unsigned int i);

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

main()

{

TMOD|=0x01;//定时器设置

TH0=0xef;

TL0=0xf0;

IE=0x82;

TR0=1;//启动定时器

P2=0x00;

count=0;

while(1)

{

a=tab[temp/10]; //十位温度

b=tab[temp%10]; //个位温度

if(flag_get==1) //定时读取当前温度

{

temp=ReadTemperature()-1;/*********(括号后面的数字为温度校准,根据自己系统的误差,自己调节温度误差即可.现在默认-1)********/

flag_get=0;

}

}

}

void tim(void) interrupt 1 using 1//中断,用于数码管扫描和温度检测间隔

{

TH0=0xef;//定时器重装值

TL0=0xf0;

num++;

if (num==50)

{num=0;

flag_get=1;//标志位有效

second++;

if(second>=60)

{second=0;

minute++;

}

}

count++;

if(count==1)

{P2=0xbf;

dataled=a;}//数码管扫描

if(count==2)

{P2=0x7f;

dataled=b;count=0;}

/*if(count==3)

{ P1=2;

dataled=str[2];

count=0;}*/

}

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

void delay(unsigned int i)//延时函数

{

while(i--);

}

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

//18b20初始化函数

void Init_DS18B20(void)

{

unsigned char x=0;

DQ = 1; //DQ复位

delay(8); //稍做延时

DQ = 0; //单片机将DQ拉低

delay(80); //精确延时 大于 480us

DQ = 1; //拉高总线

delay(10);

x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败

delay(5);

}

//读一个字节

unsigned char ReadOneChar(void)

{

unsigned char i=0;

unsigned char dat = 0;

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

{

DQ = 0; // 给脉冲信号

dat>>=1;

DQ = 1; // 给脉冲信号

if(DQ)

dat|=0x80;

delay(5);

}

return(dat);

}

//写一个字节

void WriteOneChar(unsigned char dat)

{

unsigned char i=0;

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

{

DQ = 0;

DQ = dat&0x01;

delay(5);

DQ = 1;

dat>>=1;

}

delay(5);

}

//读取温度

unsigned char ReadTemperature(void)

{

unsigned char a=0;

unsigned char b=0;

unsigned char t=0;

//float tt=0;

Init_DS18B20();

WriteOneChar(0xCC); // 跳过读序号列号的操作

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

delay(200);

Init_DS18B20();

WriteOneChar(0xCC); //跳过读序号列号的操作

WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度

a=ReadOneChar();

b=ReadOneChar();

b<<=4;

b+=(a&0xf0)>>4;

t=b;

return(t);

}

六、参考文献

《单片机原理与应用》第2版 编著 赵德安 《单片机原理及应用》 编著 韩俊峰、海涛、陈文辉机械工业出版社

机械工业出版社

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- haog.cn 版权所有 赣ICP备2024042798号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务