小项目:51单片机控制的DS18B20温度测量报警系统(可设置范围)
最近南方天天下大雨,下得人心情都郁闷了,最近应一个粉丝的留言,说毕业设计课题是一个单片机的温度自动测量报警装置。希望我可以帮帮他, 我就用常见的DS18B20做了一个报警系统,供大家学习和参考。
需要的功能及作用
单片机DS18B20温度测量系统的测量范围为0-99.9摄氏度,可设置上限报警温度、下限报警温度(即高于上限值或者低于下限值时蜂鸣器报警),默认上限报警温度为38℃、默认下限报 警温度为5℃。报警值可设置范围:最低上限报警值等于当前下限报警值,最高下限值等于当前上限报警值。将下限报 警值调为0时为关闭下限报警功能。电源电压VCC为5V,可以焊一只USB座到板上,然后用相应的USB线连接至电脑,通过电脑USB口供电;DS18B20也可以根据需要用屏蔽电缆引出来。K1为进入/退出设置键;K2为增加键;K3为减少键。
老规矩废话不多说,先上实物图:
电路设计原理图如下:
制作好的PCB成品如下:
因为项目比较简单就不放一些具体的工艺图片了
本项目C语言参考源代码 如下:
#include <AT89X52.h>
#define DQ P3_6 //定义DS18B20总线I/O
/*****延时子程序*****/
void Delay_DS18B20(int num)
{
while(num--) ;
}
/*****初始化DS18B20*****/
void Init_DS18B20(void)
{
unsigned char x=0;
DQ = 1; //DQ复位
Delay_DS18B20(8); //稍做延时
DQ = 0; //单片机将DQ拉低
Delay_DS18B20(80); //精确延时,大于480us
DQ = 1; //拉高总线
Delay_DS18B20(14);
x = DQ; //稍做延时后,如果x=0则初始化成功,x=1则初始化失败
Delay_DS18B20(20);
}
/*****读一个字节*****/
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_DS18B20(4);
}
return(dat);
}
/*****写一个字节*****/
void WriteOneChar(unsigned char dat)
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 0;
DQ = dat&0x01;
Delay_DS18B20(5);
DQ = 1;
dat>>=1;
}
}
/*****读取温度*****/
unsigned int ReadTemperature(void)
{
unsigned char a=0;
unsigned char b=0;
unsigned int t=0;
float tt=0;
Init_DS18B20();
WriteOneChar(0xCC); //跳过读序号列号的操作
WriteOneChar(0x44); //启动温度转换
Init_DS18B20();
WriteOneChar(0xCC); //跳过读序号列号的操作
WriteOneChar(0xBE); //读取温度寄存器
a=ReadOneChar(); //读低8位
b=ReadOneChar(); //读高8位
t=b;
t<<=8;
t=t|a;
tt=t*0.0625;
t= tt*10+0.5; //放大10倍输出并四舍五入
return(t);
}
鉴于篇幅有限,只能写部分代码,如需要完整技术文件请私信我或者在下方留言,看到后会第一时间回复。如果有不同的意见或者建议欢迎大家批评指正,让我们一起学习,共同进步!
最后祝大家学业有成,如果有兴趣也可以跟着做一做哦!
51单片机学习31-DS18B20
这篇讲DS18B20温度传感器
仿真图用的是我自己做的一个51单片机开发板 图纸比较大,截图可能看不清,需要的话可以私信联系我。
程序:
源代码:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit DQ=P2^2;
sbit smg1=P2^4;
sbit smg2=P2^5;
sbit smg3=P2^6;
uchar temp; unsigned char code smg_du[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77, 0x7c,
0x39,0x5e,0x79,0x71,0x00};
unsigned char code smg_we[]={
0x08,0x18,0x28,0x38,
0x48,0x58,0x68,0x78};
void init_ds18b20(void);
void write_byte(uchar dat);
uchar read_byte(void);
uchar readtemperature(void);
void display(void);
void delay(uint t);
void delay_50us(uint t);
//************************************************//延时函数,在12MHz 的晶振频率下//大约50us 的延时//************************************************
void delay_50us(uint t)
{
uchar j;
for(;t>0;t--)
for(j=19;j>0;j--);
}
///////////////////////////////
void delay(uint t)
{ while(t--); }
////////////////////////////
void main(void)
{
while(1)
{
temp=readtemperature();
display();
}
}
/////////////////////////
void init_ds18b20(void)
{
uchar n;
DQ=1;
delay(8);
DQ=0;
delay(80);
DQ=1;
delay(8);
n=DQ;
delay(14);
}
///////////////////////////////
void write_byte(uchar dat)
{
uchar i;
for(i=0;i<8;i++)
{
DQ=0;
DQ=dat&0x01;
delay(8);
DQ=1;
dat>>=1;
}
delay(8);
}
uchar read_byte(void)
{
uchar i,value;
for(i=0;i<8;i++)
{
DQ=0;
value>>=1;
DQ=1;
if(DQ)
value|=0x80;
delay(4);
}
return value;
}
////////////////////////////
uchar readtemperature(void)
{
uchar a,b;
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();
b<<=4;
b+=(a&0xf0)>>4;
return b;
}
void display(void)
{
smg3=0;
smg2=0;
smg1=0;
P1=smg_du[temp/10];
delay_50us(20);
smg2=0;
smg1=1;
P1=smg_du[temp%10];
delay_50us(20);
}
仿真结果:
数码管显示的数字就是温度传感器的温度,数码显示的跟实际的温度位置相反,这个可以程序里面的数码管的位定义即可。
相关问答
DS18B20 温度传感器, 51单片机 ,通过NRF24L01发射、接收,最...新浪共享上有源码和电路图,去下载即可已通过测试
ds18b20 与 单片机 有什么区别?要看是多少位的了?可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃。转化后得到的12位数据,存储在18B20的两个8比特的RAM...
c 51单片机 中如何使用多线控制 ds18b20 ?18B20的电源和电源连在一起,地和地连一起。18B20数据线和数据线连一起,最后数据线连接到单片机上一个IO口就可以了。通过程序来区分每个18B20.每个18B20有...
用一个 DS18B20 传感器和一个 单片机 最小系统和四位共阳极数码...这个挺简单的,网上搜搜一大把DS18B20的程序。51单片机开发板使用例程,你找找,里面有一百个C的程序,有一个是关于这个的。我有。
温度传感器 DS18B20 和 单片机 AT89 C51 ,怎么焊接啊,电路图也看不...51讨论回答(6)给你一个连接图,只要你焊接的时候,能够按图连上,就能工作,程序...18B20的1脚接电源,2脚接51的第12脚(P3。2中断0),3脚接地DS18B20是最简单的电...
单片机 p2.0口外接 ds18b20 为什么要加10k上拉电阻?这个为啥要加上拉电阻,上啦电阻是多少,这个都是DS18B20手册告诉你加多少就是多少,这个是设计者提供的最佳参数,DS18B20是单线通信,即接收和发送都是这个通...
使用温度传感器 DS18B20 设计一温控系统,当温度超过35度或低于 20 度时,LED红灯闪烁,蜂鸣器发出报警声?//这是我曾经做的一个温度控制系统,可以调节上下限温度,低于下限温度启动加热,高于上限停止加热。//温控系统控制程序//版本号:V1.0;2015.6.19//温度传感器...
单片机 ,两个系统肿么合并成一个系统?-ZOL问答做了一个DS18B20的温度报警系统,一个用滑动变阻器模拟的红外报警系统。单个运...另一个操作系统下直接删掉格式化掉就行了,然后把boot.ini文件中另一个的相关项...
51单片机 支持什么芯片?1.通信芯片:PL2303--USB转TTL串口。MAX232---RS232转TTL2.实时时钟芯片,比较常用的有DS1302,PCF8563,DS12C8873.EEPROM存储芯片,如AT2...
单片机 、光耦那么针对粮食储藏的特殊性,我们选择了粮仓内的温度和湿度作为主要监测参数,把粮虫发生情况作为辅助参数。整个监测系统由上位管理主机(HOST)、USB/...