【单片机】17-温度传感器DS18B20

这篇具有很好参考价值的文章主要介绍了【单片机】17-温度传感器DS18B20。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ds18b20的运行需要cpu吗,51单片机,单片机,嵌入式硬件

1.DS18B20相关背景知识

1.温度传感器

(1)测温度的方式:物理(汞柱,气压),电子(金属电性能随温度变化)

(2)早期:热敏电阻(模拟接口---》A/D转换

(3)现代:专用sensor(数字接口,如I2C,DS18B20单总线接口等)

2.DS18B20的基本特征

DS18B20可编程分辨率单总线温度传感器

(1)内置集成ADC,外部数字接口

(2)单总线数字接口,布线成本低【单根数据线进行传输】---》串口【一根线】

ds18b20的运行需要cpu吗,51单片机,单片机,嵌入式硬件

(3)温度范围宽,精度率高(相对)---》内部的精确度可以调节

ds18b20的运行需要cpu吗,51单片机,单片机,嵌入式硬件

(4)数字值温度分辨率位数可软件设置---》内部的A/D转换器【位数越多,精度越高】

(5)温度阈值报警功能,且阈值(TH和TL)可内置存储掉电不丢失(使用EEPROM)

(6)温度采集速度快(750ms)---》CPU下命令进行A/D转换,然后通过数据总线将数据传输出去。

(7)内置唯一64位的序列码,CPU可以单线串联无限多个DS18B20

ds18b20的运行需要cpu吗,51单片机,单片机,嵌入式硬件

(8)支持VDD供电,或通过数据总线(DQ)及内部电容实现寄生电源供电【使用DQ供电】--------》如果使用DQ供电,则表示DQ要一直为高电平(1),如果DQ为低电平(0),则与GND两者都是低电平,无法供电。实际上在DS18B20内部还有一个电容,当DQ为1的时候,会一边供电,一边给电容充电;当DQ为低电平的时候,电容会放电供DS18B20使用。使用我们平常都将DQ置为高电平(1)防止出现两根线都为低电平。

ds18b20的运行需要cpu吗,51单片机,单片机,嵌入式硬件

(9)没有CLK,所以是异步通信

3.综合评价

(1)DS18B20是很多年前的东西

(2)现在趋向于温度+湿度的综合传感器

(3)现实应用一般低端用热敏电阻【单片机中有A/D+热敏电阻即可】,热点偶,高端用精度传感器

(4)学习难点是单总线协议的时序编程实现

2.原理图

1.原理图确认

ds18b20的运行需要cpu吗,51单片机,单片机,嵌入式硬件

2.实体图确认

ds18b20的运行需要cpu吗,51单片机,单片机,嵌入式硬件

3.接线确认

注意不要接反了,否则很容易烧坏

ds18b20的运行需要cpu吗,51单片机,单片机,嵌入式硬件

3.数据手册

DS18B20数据手册-中文版 - 知乎 (zhihu.com)

ds18b20数据手册-中文版-140407 - 豆丁网

https://atta.szlcsc.com/upload/public/pdf/source/20230321/E2B7C84673F98AE08C6B0E4EDF67430D.pdf

1.基本性能

ds18b20的运行需要cpu吗,51单片机,单片机,嵌入式硬件

ds18b20的运行需要cpu吗,51单片机,单片机,嵌入式硬件

2.结构框图

ds18b20的运行需要cpu吗,51单片机,单片机,嵌入式硬件

ds18b20的运行需要cpu吗,51单片机,单片机,嵌入式硬件

3.测温操作

ds18b20的运行需要cpu吗,51单片机,单片机,嵌入式硬件

ds18b20的运行需要cpu吗,51单片机,单片机,嵌入式硬件

ds18b20的运行需要cpu吗,51单片机,单片机,嵌入式硬件

4.报警操作信号

ds18b20的运行需要cpu吗,51单片机,单片机,嵌入式硬件

ds18b20的运行需要cpu吗,51单片机,单片机,嵌入式硬件

5.6 4 位 只 读 存 储 器

ds18b20的运行需要cpu吗,51单片机,单片机,嵌入式硬件

7.存储器

ds18b20的运行需要cpu吗,51单片机,单片机,嵌入式硬件

ds18b20的运行需要cpu吗,51单片机,单片机,嵌入式硬件

8.温度寄存器

ds18b20的运行需要cpu吗,51单片机,单片机,嵌入式硬件

ds18b20的运行需要cpu吗,51单片机,单片机,嵌入式硬件

3.单总线系统

1.“多点”VS“单点”

单总线系统采用一个单总线控制器(CPU)来控制一个活多个从机。DS18B20总是充当从机。

当只有一个从机挂在总 线上时,系统被称为“单点”系统;

如果由多个从机挂在总线上,系统被称为“多点”系统。

2.字节从低位开始读

所有的数据和指令的传递都是从最低有效位开始通过单总线的。

关于单总线系统分三个方面讨论:硬件结构、执行序列和单总线信号(信号类型和时序)。

3.硬件结构

单总线硬件连接要求:

(1)漏极开路式+5K欧姆是上拉电阻

(2)总线低电平超过480us,从设备(DS18B20)将被复位

ds18b20的运行需要cpu吗,51单片机,单片机,嵌入式硬件

ds18b20的运行需要cpu吗,51单片机,单片机,嵌入式硬件

4.单总线协议标准执行步骤

(1)主机必须按照单总线协议设定好的完整序列和DS18B20通信,每一个回合包含3个步骤:

初始化+ROM操作指令+功能操作指令

顺序不能错也不能省略任何一个。

ds18b20的运行需要cpu吗,51单片机,单片机,嵌入式硬件

1.初始化

通过单总线的所有执行操作都从一个初始化程序序列开始。初始化序列包含一个由总线控制器发出的复位脉冲(将总线拉低超过480us)和 其后由从机发出的存在脉冲(回复主设备)。存在脉冲让总线控制器知道DS18B20在总线上且已经准备好操作。

初始化:就是主设备线拉低数据总线超过480us以发出一个复位脉冲,然后从设备DS18B20收到复位脉冲后内部进行硬件复位,复位完成后回复主设备一个存在脉冲,主设备接收到存在脉冲后就认为从设备已经准备好,初始化完成。

复 位 序 列 : 复 位 和 存 在 脉 冲

1)先将DATA电平拉低

2)延时480us

开始读取数据

3)主设备将DATA拉高

4)从设备将电平拉低,延时60-240us

ds18b20的运行需要cpu吗,51单片机,单片机,嵌入式硬件

​​​​​​​ds18b20的运行需要cpu吗,51单片机,单片机,嵌入式硬件

// 返回0则表示初始化成功,返回1则表示初始化失败
static unsigned char ds18b20_init(void){
	
	unsigned char i=0;
	//按照时序图先将数据线电平拉低
	DATA=0;//拉低480us-960us
	Delay750us();// 实际延时750us,符合480-960之间的条件
	//按照时序图将电平拉高【释放总线】
	DATA=1;//然后拉高总线,如果DS18B20做出反应会将在15us~60us后总线拉低
	
	i=0;
	while(DATA){//等待DS18B20拉低总线
		i++;
		if(i>5)//等待>5s【超时】
		{
			return 1;//初始化失败
		}
		Delay15us();//每隔15us去读一次
	}
	return 0;//初始化成功
}

2.ROM指令

ds18b20的运行需要cpu吗,51单片机,单片机,嵌入式硬件

ds18b20的运行需要cpu吗,51单片机,单片机,嵌入式硬件

3.功能指令

ds18b20的运行需要cpu吗,51单片机,单片机,嵌入式硬件

4.读 / 写 时 序

1. 写时序--CPU控制

(1)DS18B20有两种写时序:写1时序和写0时序。总线控制器通过写1时序来写逻辑1;通过写0时序来写逻辑0。

写 时序必须最少持续60us,包括两个写周期之间至少1us的恢复时间。【无法连续读】

当总线控制器把数据线从逻辑高电平拉低到低电 平的时候,写时序开始。

(2)总线控制器要写产生一个写时序,必须把数据线拉到低电平然后释放,且需在15us内释放总线。当总线被释放【变为高电平】后, 上拉电阻将总线拉高。总线控制器要生成写0时序,必须把数据线拉到低电平且继续保持至少60us。

(3)总线控制器初始化写时序后,DS18B20在一个15us到60us的窗口内对信号线进行采用【DS18B20将数据接收走--》采样时间不固定】。如果线上是高电平,就 是写1。反之,如果线上是低电平,就是写0。

ds18b20的运行需要cpu吗,51单片机,单片机,嵌入式硬件

1. 写“0”

ds18b20的运行需要cpu吗,51单片机,单片机,嵌入式硬件

ds18b20的运行需要cpu吗,51单片机,单片机,嵌入式硬件

2. 写“1”

ds18b20的运行需要cpu吗,51单片机,单片机,嵌入式硬件

3.官方代码实现

//在开始之前数据总线是释放的【高电平】
//所以在调用这个函数之前要确保数据总线状态为1
void Ds18b20WriteByte(unsigned char dat)
{
	unsigned int i = 0, j = 0;

	for (j=0; j<8; j++)
	{
		DSPORT= 0;	     	  	//每写入一位数据之前先把数据总线拉低1us
		i++;//中间间隔1us,因为太小了,所以不能使用delay
		DATA = dat & 0x01;  	//然后写入一个数据,从最低位开始
		delay70us();			// 时序要求最少60us
		DSPORT= 1;	//然后释放总线,至少1us给总线恢复时间才能接着写入第二个数值
		dat >>= 1;     //这句代码就代表可以延时1us并且将数据位移动到对应的位置
	}
}

2.读时序--CPU和DS18B20一起控制

总线控制器发起读时序时,DS18B20仅被用来传输数据给控制器。因此,总线控制器在发出读寄存器指令[BEh ]或读电源模式指令[B4h]后必须立刻开始读时序,以便DS18B20提供请求的数据。除此之外,总线控制器在发出发送 温度转换指令平[44h]或召回EEPROM指令[B8h]之后读时序,详见DS18B20功能指令节。

所有读时序必须最少60us,包括两个读周期间至少1us的恢复时间。当总线控制把数据线从高电平拉低到低电平时,读时序开始,数据线必须至少保持1us,然后总线被释放。在总线控制器发出读时序后,DS18B20读/写时隙时序图过拉高或拉低总线上来传输1或0。当传输0结束后,总线将被释放,通过上拉电阻回到高电平空闲状态。从DS18B20 输出的数据在读时序的下降沿出现后15us内有效。因此,总线控制器在读时序开始15us内释放总线然后采样总线状态, 以读取数据线的状态。【在0-15us之有效,其他时间没有干其他事情】

1.读“0”

ds18b20的运行需要cpu吗,51单片机,单片机,嵌入式硬件

ds18b20的运行需要cpu吗,51单片机,单片机,嵌入式硬件

2.读“1”

ds18b20的运行需要cpu吗,51单片机,单片机,嵌入式硬件

3.官方代码实现

unsigned char Ds18b20ReadByte()
{
	unsigned char byte = 0, bi = 0;//bi:存储读出的bit
	unsigned int i = 0, j = 0;
		
	for (j=8; j>0; j--)
	{
		DATA = 0;		//先将总线拉低1us
		i++;//中间间隔1us,因为太小了,所以不能使用delay
		DSPORT= 1;		//然后释放总线
		i++;
		i++;			//延时6us等待数据稳定
		bi = DSPORT;	 	//读取数据,从最低位开始读取
		/*将byte左移一位,然后与上右移7位后的bi,注意移动之后移掉那位补0。*/
		byte = (byte >> 1) | (bi << 7);	
		//byte |= (bi << (8-j));//可以替代上面
		delay45us();
	}				
	return byte;
}

5.DS18B20工作流程分析

1.温度获取过程

(1)DS18B20自己本身不会主动取进行温度测量,而是需要主控CPU主动发起一个温度转换的过程,这么设计是因为温度转换本身是要耗电的,所以设计位拼死待机等待温度转换命令后才取进行温度AD转换

(2)主控CPU和DS18B20之间的通信是分周期,比如我们要让DS18B20进行温度转换就是一个周期。这个周期包括=初始化+n个指令(每一个周期的开始都要有一个初始化,然后跟着n个命令)

(3)初始化过程主要是探测目标DS18B20是否存在(查看是否有响应),如存在将芯片初始化。

(4)命令很重要。(18B20中是存在CPU的)所以DS18B20是一个典型的“命令-响应”型外设。

(5)学习这种外设的关键是:命令集。

//开启温度转换
void Ds18b20ChangTemp(void)
{
	Ds18b20Init();
	delay1ms();
	Ds18b20WriteByte(0xcc);		//跳过ROM操作命令		 
	Ds18b20WriteByte(0x44);	    //温度转换命令
	delay750ms();	//等待转换成功,而如果你是一直刷着的话,就不用这个延时了 
}

void Ds18b20ReadTempCom(void)
{	
	Ds18b20Init();
	delay1ms();
	Ds18b20WriteByte(0xcc);	 //跳过ROM操作命令
	Ds18b20WriteByte(0xbe);	 //发送读取温度命令
}


//将读取到的温度输出
int Ds18b20ReadTemp(void)
{
	unsigned int temp = 0;
	unsigned char tmh, tml;
	double t = 0;

	Ds18b20ChangTemp();			 	//先写入转换命令
	Ds18b20ReadTempCom();			//然后等待转换完后发送读取温度命令
	tml = Ds18b20ReadByte();		//读取温度值共16位,先读低字节
	tmh = Ds18b20ReadByte();		//再读高字节
 	temp = tmh;
 	temp <<= 8;
 	temp |= tml;


	return temp ;
}

2.ROM操作指令

(1)DS18B20支持多个芯片串联在一根总线上,也就是所谓的单总线协议,所以必须要主控CPU要能够区分总线上多个18B20,因此有个ROM操作指令来完成这个任务(区分多个1SD8B20)

(2)ROM操作指令和温度采集一点关系都没有,所以当我们总线上只有一个18B20的时候ROM操作指令我们不需要去管

(3)一旦系统中单总线上有多个18B20,那么我们必须借助ROM操作指令来区分多个18B20,而且这个区分过程可能需要多个ROM指令来完成。

(4)如果系统中只有一个18B20,那么就用一条skip rom命令(0xCC)就可以跳过这个阶段。【因为只有一个所以可以不用进行响应直接发送即可】

ds18b20的运行需要cpu吗,51单片机,单片机,嵌入式硬件

ds18b20的运行需要cpu吗,51单片机,单片机,嵌入式硬件

3.功能指令

(1)ROM操作指令目的是为了在单总线上多个18B20中挑选到那个当前我们要操作的18B20,而功能指令是为了和选定的18B20通信从而获取温度。

ds18b20的运行需要cpu吗,51单片机,单片机,嵌入式硬件

ds18b20的运行需要cpu吗,51单片机,单片机,嵌入式硬件

ds18b20的运行需要cpu吗,51单片机,单片机,嵌入式硬件

6.DS18B20的编程要点

1.几种工作思路

(1)参考文档自己编写

(2)参考示例代码移植

2.DS18B20移植注意点

(1)注意延时函数的本地实现---DS18B20对时间要求很高【代码里的时间有关的部分必须重写

(2)注意引脚配置(看原理图)

(3)注意时序

(4)线通过初始化来检测芯片是否能通再做其他的

(5)注意读到的温度值是否会变

3.代码实践

1.移植初始化函数

//初始化函数
//返回0则表示初始化成功,1表示失败
unsigned char Ds18b20Init(void){
	
	unsigned char i=0;
	DQIO=0;//将数据总线拉低
	Delay750us();//数据手册要求480us-900us
	DQIO=1;//然后拉高总线,如果DS18B20做出翻译会将再15us-60us后总线拉低
	
	//如果DS18B20接收到并且回应则DQIO=1,如果没有回应则DQIO=0
	i=0;
	while(DQIO){//ds18b20没有回应
		
		i++;
		if(i>5){//因为我们要求再15us-60us之间进行响应
			//而且我们设置延迟函数为15us,则表示15us进行一次检验
			//60/15=4次
			return 1;
		}
		Delay15us();
		
		
	}
	return 0;//初始化成功
	
	
}

2.移植串口函数作为调试

uart.c

#include "uart.h"


// 串口设置为: 波特率9600、数据位8、停止位1、奇偶校验无
// 使用的晶振是11.0592MHz的,注意12MHz和24MHz的不行
void uart_init(void)
{
	// 波特率9600
	SCON = 0x50;   	// 串口工作在模式1(8位串口)、允许接收
	PCON = 0x00;	// 波特率不加倍

	// 通信波特率相关的设置
	TMOD = 0x20;	// 设置T1为模式2
	TH1 = 253;
	TL1 = 253;	   	// 8位自动重装,意思就是TH1用完了之后下一个周期TL1会
					// 自动重装到TH1去

	TR1 = 1;		// 开启T1让它开始工作
//	ES = 1;
//	EA = 1;
}

// 通过串口发送1个字节出去
void uart_send_byte(unsigned char c)
{
   // 第1步,发送一个字节
   SBUF = c;

   // 第2步,先确认串口发送部分没有在忙
   while (!TI);

   // 第3步,软件复位TI标志位
   TI = 0;
}

main.c 

void main(){
	
	unsigned char ret=0;
	uart_init();
	uart_send_byte('!');//串口测试成功
	ret=Ds18b20Init();
	if(ret==0){
		uart_send_byte('K');//输出,则表示初始化成功
	}else{
		uart_send_byte('A');
	}
		
	
	while(1);
}

10.DS18B20移植

1.写函数

//写函数
void Ds18b20_write_byte(unsigned char dat){
	
	unsigned int i=0,j=0;
	for(j=0;j<8;j++){
		
		DQIO=0;//每写入一位数据之前先将总线拉低1us
		i++;//延时效果
		DQIO=dat&0x01;//写入一个数据,从最低位开始
		Delay68us();//时序要求最少60us
		DQIO=1;//然后释放总线,至少1us给总线恢复时间
		dat>>=1;//将倒数第二位移动到倒数第一位
		
	}
	
}

2.读函数

//读函数
unsigned char Ds18b20_read_byte(){
	
	unsigned char byte=0,bi=0;
	unsigned int i=0,j=0;
	for(j=8;j>0;j--){
		DQIO=0;//先将总线低
		i++;//延时1us
		DQIO=1;//然后释放总线
		//【注意点:这个地方的时间控制很重要,如果太长或者太短都可能读取不到数据
		i++;
		i++;//延时6us等待数据稳定
		bi=DQIO;//读取数据,从最低位开始读取
		//将byte左移一位,然后与上右移7位后的bi,注意移动之后移掉的那位补0【因为我们从最低位开始读取】
		byte=(byte>>1) | (bi<<7);
		
		Delay45us();
	}

3.转换温度

注意点:温度转换是需要时间的,所以在转换温度后记得要延时一定的时间才可以(750ms)

void Ds18b20ChangeTemp(void){
	
	Ds18b20Init();
	Delay1ms();
	
	Ds18b20_read_byte(0xcc);//跳过ROM操作命令
	Ds18b20_read_byte(0x44);//温度转换命令
	//因为我们转换温度需要时间才可以进行读取,所以我们需要时间等待
	//温度转换过程要750ms
	Delay750ms();//等待转换成功,而如果你是一直刷着,就不用延时
}

4.读取温度

void Ds18b20ReadTemp(void){
	
	Ds18b20Init();
	Delay1ms();
	
	Ds18b20_read_byte(0xcc);//跳过ROM操作命令
	Ds18b20_read_byte(0xbe);//发送读取温度命令
	
}

5.将读取到的温度合并

//将寄存器中(包括读取到)的温度(2位)合并成一位
//但是如果这样写不方便在主函数调用
//因为16位,用int无法输出,则我们使用串口直接输出
/*
unsigned int Ds18b20ReadTemp(void){
	
	unsigned int temp=0;//合并结果
	unsigned char tmh,tml;//高8位与低8位
	
	
	Ds18b20ChangeTemp();//先写入转换命令
	Ds18b20ReadTempCom();//然后等待转换完发送读取温度命令
	//读取温度一共12位(但是实际上显示16位)
	tml=Ds18b20ReadByte();//先读取温度的低8位
	tmh=Ds18b20ReadByte();//再读温度的高8位
	//将结果合并
	//(tmh<<8):因为高位是在合并结果的bit8,所以将tmh左移8位
	temp=tml | (tmh<<8);
	
	return temp;
}
*/
void Ds18b20ReadTemp(void){
	
	unsigned int temp=0;//合并结果
	unsigned char tmh,tml;//高8位与低8位
	
	
	Ds18b20ChangeTemp();//先写入转换命令
	Ds18b20ReadTempCom();//然后等待转换完发送读取温度命令
	//读取温度一共12位(但是实际上显示16位)
	tml=Ds18b20ReadByte();//先读取温度的低8位
	tmh=Ds18b20ReadByte();//再读温度的高8位
	
	uart_send_byte(0);
	uart_send_byte(tml);
	uart_send_byte(tmh);//前面四位为0
}

主函数

#include"ds18b20.h"
#include"uart.h"

void main(){
	
	/*
	unsigned char ret=0;
	uart_init();
	//uart_send_byte('!');//串口测试成功
	ret=Ds18b20Init();
	if(ret==0){
		uart_send_byte('K');//输出,则表示初始化成功
	}else{
		uart_send_byte('A');
	}
		*/
	
	
	while(1){
		
		Ds18b20ReadTemp();
		
	}
}

6.温度数据的移位组合

ds18b20的运行需要cpu吗,51单片机,单片机,嵌入式硬件

7.数字值转为温度值

ds18b20的运行需要cpu吗,51单片机,单片机,嵌入式硬件

换算:tml :0x99   tmh:0x01,意味着,温度数字值:0x199,换算成十进制为:409

当前默认精度是12位,每一个数字值对应的应该是0.0625摄氏度

所以计算出来的温度值应该是:409*0.0625=25.56摄氏度

在单片机中,应该尽量避免进行小数运算。小数运算一般转换成整数运算。

409*0.0625=409*625/10000

注意点:

(1)12位对应的是0.0625,可能会溢出

temp=temp*625/10000;//此处产生溢出

(2)强制类型转换文章来源地址https://www.toymoban.com/news/detail-762750.html


//将数值转换为温度值
void Ds18b20ReadTemp2(void){
	
	unsigned int temp=0;//合并结果
	unsigned int tmh,tml;//高8位与低8位
	//因为我们要进行温度转换,所以0.0625是double
	double t=0;
	
	
	Ds18b20ChangeTemp();//先写入转换命令
	Ds18b20ReadTempCom();//然后等待转换完发送读取温度命令
	//读取温度一共12位(但是实际上显示16位)
	tml=Ds18b20ReadByte();//先读取温度的低8位
	tmh=Ds18b20ReadByte();//再读温度的高8位
	
	//将结果合并
	//(tmh<<8):因为高位是在合并结果的bit8,所以将tmh左移8位
	temp=tml | (tmh<<8);
	
	//temp=temp*625/10000;//此处产生溢出
	t=temp*0.0625;
	uart_send_byte(0);
	//uart_send_byte(temp);
	uart_send_byte((unsigned char)t);//因为t是double,所以要进行强制类型转换
}

到了这里,关于【单片机】17-温度传感器DS18B20的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STC51单片机学习9--DS18B20温度传感器

    DS18B20是Dallas半导体公司的一款数字温度传感器芯片; DS18B20是一款支持 1-wire总线接口的温度传感器; DS18B20能测量的温度范围-55℃--125℃,精度是±0.5℃; DS18B20可以将分辨率设定为9到12位; DS18B20的工作电压范围3--5.5V 单片机的P4.1引脚用来接DS18B20的数据引脚 以下是友台半导体

    2024年02月12日
    浏览(53)
  • 【蓝桥杯-单片机学习笔记(十三)】DS18B20温度传感器

    一、温度传感器-DS18B20介绍 DS18B20是单总线数字化温度传感器,测量温度范围是-55℃~+125℃,在-10℃~+85℃范围内,精度为±0.5℃。支持3V~5.5V的供电电压范围。DS18B20可以程序设定9~12位的分辨率,精度为±0.5℃。 1.DS18B20内部结构 DS18B20内部结构主要由四部分组成:64位光刻ROM、温度

    2023年04月09日
    浏览(63)
  • 51单片机DS18B20温度传感器使用及数码管温度计、LCD1602温度显示代码详解

    温馨提示:读者若要彻底理解并会灵活使用DS18B20温度传感器,请详细阅读中文手册,并且对照代码注释充分分析代码。请不要觉得中文手册内容繁多!如能静心分析,定能深有体会,获益匪浅! 主函数操作顺序(执行序列) 功能指令 最后希望我的分享对你有所帮助!敬请关

    2024年02月12日
    浏览(53)
  • 单片机实现温度传感器

    (1)硬件图 Proteus仿真图: (2)软件设计 #includereg51.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(){ uchar i,temp; delay5(1000);

    2024年02月11日
    浏览(48)
  • 单片机设计:stm32远程水位检测灌溉系统(水泵+电机驱动+OLED显示屏+水位传感器+防水式ds18b20+光敏传感器+按键+WiFi+手机app)

    单片机设计:stm32远程水位检测灌溉系统(水泵+电机驱动+OLED显示屏+水位传感器+防水式ds18b20+光敏传感器+按键+WiFi+手机app) 一、主要功能:    1.水位传感器检测水的高度、光敏传感器检测周围光照强度、ds18b20检测水温 2.0LED、手机app显示当前数据以及阈值 3.手机app远程调节阈值,

    2024年02月05日
    浏览(51)
  • 单片机传感器类型一览

    一、单片机: c51、attiny85    arduino、stm8/stm32    esp8266、esp32、raspiberry pico 功能简单型:C51、Attiny85等 功能可以较复杂型:Arduino STM32 联网、人工智能等高级复杂型:esp8266 esp32、pico 二、基础元件(分为贴片式(SMT)和非贴片式): 晶振、电阻、电容、电感、led、开关、蜂鸣、

    2024年02月14日
    浏览(38)
  • 51单片机 DHT11温湿度传感器 MQ2传感器

    目录 前言 程序思路 DHT11 一、DHT11基础储备  二、接口说明 三、协议及数据格式 ​编辑 四、DHT11代码 MQ-2烟雾传感器 一、MQ-2烟雾传感器介绍 二、工作原理 三、时序配置 四、指令配置 ​编辑 五、代码 LCD1602 一、LCD1602介绍 二、LCD1602指令介绍 ​编辑 三、LCD1602代码  HC-05 一

    2024年02月04日
    浏览(56)
  • 基于51单片机温湿度传感器

    DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,应用领域:暖通 空调;汽车;消费品;气象站;湿度调节器;除湿器;家电;医疗;自动控制 相对湿度和温度测量 全部校准,数字输出 长期稳定性 超长的信号传输距离:20米 超低能耗:休眠 4 引脚

    2023年04月10日
    浏览(91)
  • 51单片机(DHT11温湿度传感器)

    DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,应用领域:暖通 空调;汽车;消费品;气象站;湿度调节器;除湿器;家电;医疗;自动控制 相对湿度和温度测量 全部校准,数字输出 长期稳定性 超长的信号传输距离:20米 超低能耗:休眠 4 引脚

    2024年02月02日
    浏览(72)
  • 51单片机驱动TCS3200颜色识别传感器

    TCS3200颜色传感器是一款全彩的颜色检测器,包括了一块TAOS TCS3200RGB感应芯片和4个白色LED灯,TCS3200能在一定的范围内检测和测量几乎所有的可见光。TCS3200有大量的光检测器,每个都有红绿蓝和清除4种滤光器。每种颜色滤光器均匀地按数组分布来清除颜色中偏移位置的颜色分

    2023年04月14日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包