文章目录
一、单总线温度采集
实验内容:利用DS18B20和LED数码管实现单总线温度测量系统
关于单总线温度传感器DS18B20
1.DS18B20是美国DALLAS公司生产的数字温度传感器,体积小、低功耗、抗干扰能力强。可直接将温度转化成数字信号传送给单片机处理,因而可省去传统的信号放大、A/D转换等外围电路。结构:采用TO-92、SOIC等封装形式,尺寸小巧,便于集成到各种应用中。它包含一个温度传感器和一个12位的模数转换器(ADC),用于将模拟温度值转换为数字信号输出。
2.DS18B20的工作时序包括初始化时序、写时序和读时序。
下面是其部分命令:
protues仿真原理图:
Proteus仿真时,用手动,即用鼠标单击DS18B20图标上的“↑”或“↓”来改变温度,注意手动调节温度同时,LED数码管会显示出与DS18B20窗口相同的2位温度数值。
相关代码:
#include "reg51.h"
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
#define out P0
sbit smg1=out^4;
sbit smg2=out^5;
sbit DQ=P3^7;
void delay5(uchar);
void init_ds18b20(void);
uchar readbyte(void);
void writebyte(uchar);
uchar retemp(void);
void main(void)
{
uchar i,temp;
delay5(1000);
while(1)
{
temp=retemp();
for(i=0;i<10;i++) //Á¬ÐøɨÃèÊýÂë¹Ü10´Î
{
out=(temp/10)&0x0f;
smg1=0;
smg2=1;
delay5(1000); //ÑÓʱ5ms
out=(temp%10)&0x0f;
smg1=1;
smg2=0;
delay5(1000); //ÑÓʱ5ms
}
}
}
/*--------------¾«È·ÑÓʱ5us×Ó³ÌÐò---------*/
void delay5(uchar n)
{
do
{
_nop_();
_nop_();
_nop_();
n--;
}
while(n);
}
/*--------------³õʼ»¯º¯Êý--------------------*/
void init_ds18b20(void)
{
uchar x=0;
DQ =0;
delay5(120);
DQ =1;
delay5(16);
delay5(80);
}
/*--------------¶ÁÈ¡Ò»×Ö½Úº¯Êý----------------*/
uchar readbyte(void)
{
uchar i=0;
uchar date=0;
for (i=8;i>0;i--)
{
DQ =0;
delay5(1);
DQ =1; //15΢ÃëÄÚÀÊÍ·Å×ÜÏß
date>>=1;
if(DQ)
date|=0x80;
delay5(11);
}
return(date);
}
/*--------------дһ×Ö½Úº¯Êý------------------*/
void writebyte(uchar dat)
{
uchar i=0;
for(i=8;i>0;i--)
{
DQ =0;
DQ =dat&0x01;//д"1" ÔÚ15΢ÃëÄÚÀµÍ
delay5(12); //д"0" ÀµÍ60΢Ãë
DQ = 1;
dat>>=1;
delay5(5);
}
}
/*--------------¶ÁȡζȺ¯Êý------------------*/
uchar retemp(void)
{
uchar a,b,tt;
uint t;
init_ds18b20();
writebyte(0xCC);
writebyte(0x44);
init_ds18b20();
writebyte(0xCC);
writebyte(0xBE);
a=readbyte();
b=readbyte();
t=b;
t<<=8;
t=t|a;
tt=t*0.0625;
return(tt);
}
protues仿真结果:
普中开发板结果:
keil逻辑分析仪分析波形:
总结:这次实践让我学习到了关于DS18B20 的更多相关知识。