设计与开发

51单片机ds18b20 小项目:51单片机控制的DS18B20温度测量报警系统(可设置范围)

小编 2024-10-06 设计与开发 23 0

小项目: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/...

猜你喜欢