0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ZS03/ZS05温湿度模组应用例程

Harmony&嵌入式学习 来源:Harmony&嵌入式学习 作者:Harmony&嵌入式学 2023-06-14 10:45 次阅读
//****************************************************************//
//ZS03单总线数据读取程序

//****************************************************************//
 
#ifndef _ZS03_H_
#define _ZS03_H_
#include "stm32f10x.h"
#include "sys.h"
#include "delay.h"
#include "stdio.h"
 
//IO方向设置
#define SDA_IN()  {GPIOB->CRH&=0XF0FFFFFF;GPIOB->CRH|=0x08000000;}//上下拉输入
#define SDA_OUT() {GPIOB->CRH&=0XF0FFFFFF;GPIOB->CRH|=0x03000000;}//通用推挽输出
 
 
//IO操作函数
//#define IIC_SCL    PBout(13) //SCL输出	
#define SEND_SDA   PBout(14) //SDA输出	 
#define READ_SDA   PBin(14)  //SDA输入 
 
 
 
void ZS03_Init(void);//初始化SDA(PB14),CLK(PB13)
u8 ZS03_Rdata(void);
u8 ZS03_READ(void);
 
 
 
 
#endif	//_ZS03_H_
 
 
 
#include "ZS03.h"
 
 
float Temprature,Humi;//定义温湿度变量 ,此变量为全局变量
u8 Sensor_AnswerFlag=0;//定义传感器响应标志
u8 Sensor_ErrorFlag;  //定义读取传感器错误标志
 
 
/********************************************
|* 功能: 初始化SDA(PB14),CLK(PB13)	        *|
********************************************/
void ZS03_Init(void)
{					     
	GPIO_InitTypeDef GPIO_InitStructure;
	RCC_APB2PeriphClockCmd(	RCC_APB2Periph_GPIOB, ENABLE );//使能GPIOB	
	   
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14;//PB13,PB14
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD ;   //开漏输出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOB, &GPIO_InitStructure);
	GPIO_ResetBits(GPIOB,GPIO_Pin_13|GPIO_Pin_14); 	//PB13,PB14 输出低(SCL上电立即拉低)
}
 
 
/********************************************
|* 功能: 读传感器发送的单个字节	        *|
********************************************/
u8 ZS03_Rdata(void)
{
	u8 i;
	u16 j;
	u8 data=0,bit=0;
	
	for(i=0;i< 8;i++)
	{
		while(!READ_SDA)//检测上次低电平是否结束
		{
			if(++j >=50000) //防止进入死循环
			{
				break;
			}
		}
		//延时Min=26us Max70us 跳过数据"0" 的高电平		 
		delay_us(30);
 
		//判断传感器发送数据位
		bit=0;
		if(READ_SDA)
		{
			bit=1;
		}
		j=0;
		while(READ_SDA)	//等待高电平结束
		{
			if(++j>=50000) //防止进入死循环
			{
				break;
			}		
		}
		data< <=1;
		data|=bit;
	}
	return data;
}
 
 
/********************************************
|* 功能:ZS03读取温湿度函数       *|
********************************************/
//变量:Humi_H:湿度高位;Humi_L:湿度低位;Temp_H:温度高位;Temp_L:温度低位;Temp_CAL:校验位
//数据格式为:湿度高位(湿度整数)+湿度低位(湿度小数)+温度高位(温度整数)+温度低位(温度小数)+ 校验位
//校验:校验位=湿度高位+湿度低位+温度高位+温度低位
u8 ZS03_READ(void)
{
	u32 j;
	u8 Humi_H,Humi_L,Temp_H,Temp_L,Temp_CAL,temp;
 
	//主机发送起始信号
	SDA_OUT() //设为输出模式
	SEND_SDA=0;	//主机把数据总线(SDA)拉低
	delay_ms(20);//拉低一段时间(至少18ms), 通知传感器准备数据
	SEND_SDA=1;	 //释放总线
	SDA_IN();	//设为输入模式,判断传感器响应信号
	delay_us(30);//延时30us
 
	Sensor_AnswerFlag=0;	//传感器响应标志
	//判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行	  
	if(READ_SDA==0)
	{
		Sensor_AnswerFlag=1;	//收到起始信号
 
		j=0;
		while((!READ_SDA)) //判断从机发出 80us 的低电平响应信号是否结束	
		{
			if(++j >=500) //防止进入死循环
			{
				Sensor_ErrorFlag=1;
				break;
			}
		}
 
		j=0;
		while(READ_SDA)//判断从机是否发出 80us 的高电平,如发出则进入数据接收状态
		{
			if(++j>=800) //防止进入死循环
			{
				Sensor_ErrorFlag=1;
				break;
			}		
		}
		//接收数据
		Humi_H=ZS03_Rdata();
		Humi_L=ZS03_Rdata();
		Temp_H=ZS03_Rdata();	
		Temp_L=ZS03_Rdata();
		Temp_CAL=ZS03_Rdata();
 
		temp=(u8)(Humi_H+Humi_L+Temp_H+Temp_L);//只取低8位
 
		if(Temp_CAL==temp)//如果校验成功,往下运行
		{
			Humi=Humi_H*10+Humi_L; //湿度
	
			if(Temp_L&0X80)	//为负温度
			{
				Temprature =0-(Temp_H*10+((Temp_L&0x7F)));
			}
			else   //为正温度
			{
				Temprature=Temp_H*10+Temp_L;//为正温度
			}
			//判断数据是否超过量程(温度:-20℃~60℃,湿度20%RH~95%RH)
			if(Humi>950) 
			{
			  Humi=950;
			}
			if(Humi< 200)
			{
				Humi =200;
			}
			if(Temprature >600)
			{
			  Temprature=600;
			}
			if(Temprature< -200)
			{
				Temprature = -200;
			}
			Temprature=Temprature/10;//计算为温度值
			Humi=Humi/10; //计算为湿度值
			printf("rn温度为:  %.1f  ℃rn",Temprature); //显示温度
			printf("湿度为:  %.1f  %%RHrn",Humi);//显示湿度	
		}
		
		else
		{
		 	printf("CAL Error!!rn");
			printf("%d r%d r%d r%d r%d r%d rn",Humi_H,Humi_L,Temp_H,Temp_L,Temp_CAL,temp);
		}
	}
	else
	{
		Sensor_ErrorFlag=0;  //未收到传感器响应
		printf("Sensor Error!!rn");
	}
 
	return 1;
}
 
 
//****************************************************************//
//				ZS03——单总线使用范例
// 单片机:  stm32f103系列
// 功能:    使用串口1发送温湿度数据 晶振8M,时钟72M,波特率9600
//硬件连接: PB13连接ZS03D的SCL脚,PB14连接ZS03的SDA脚,ZS03的地连接单片机的地,电源连接+5V,单片机串口连接电脑
//****************************************************************//
 
 
#include "usart.h"
#include "ZS03.h"
 
 
int main(void)
{
	ZS03_Init(); //ZS03初始化
	delay_init();//延时初始化,系统时钟初始化
	uart_init(9600);//串口初始化,波特率为9600  
 
	while(1)
	{
		delay_ms(1000);	 //至少延时2s读一次数据
 		delay_ms(1000);	
 
		ZS03_READ();//读取温湿度数据
		
	}
 
 
}
 

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 传感器
    +关注

    关注

    2525

    文章

    48129

    浏览量

    740198
  • 总线
    +关注

    关注

    10

    文章

    2714

    浏览量

    87228
  • 模组
    +关注

    关注

    6

    文章

    1259

    浏览量

    29325
收藏 人收藏

    评论

    相关推荐

    ZS5887与ZS5889的特点

    ZS5887 USB充电识别IC,单口 ,SOT23-5封装,输出电流可设定。ZS5889 USB充电识别IC,双口 ,SOT23-6L封装。ZS5887/ZS5889都可用于充电器、
    发表于 08-28 11:27

    太阳能锂电充电管理ZS6093/ZS6073/ZS6075/ZS6076/ZS6077/ZS6078全系列分享

    太阳能锂电充电管理ZS6093/ZS6073/ZS6075/ZS6076/ZS6077/ZS60
    发表于 11-19 10:57

    ZS6093设计资料赏析

    概述:ZS6093(注1)是一款可使用太阳能电池供电的PWM 降压模式充电管理集成电路,具有太阳能电池最大功率点跟踪功能。ZS6093 非常适合对单节或多节锂电池或磷酸铁锂电池的充电管理,具有封装
    发表于 12-10 11:19

    如何快速设计一款温湿度产品原型(MCU接入)

    三明治开发板温湿度传感套件主要包含:温湿度传感器功能板,板载 SHT30 温湿度传感器,I2C 接口,负责温湿度数据的采集传输。Wi-Fi MCU 通信板,板载涂鸦 TYWE3S
    发表于 06-27 11:00

    库房无线温湿度监控方案 无线温湿度监控系统 仓储物流无线温湿度

    【库房无线温湿度监控方案】[无线温湿度监控系统]【无线温湿度传感器】【医药库房、大型物流存储温湿度远程监控系统】今现代化建设和国民经济发展迅速。社会对生产环境和生活环境意识的要求也越来
    发表于 03-01 10:15

    GPRS无线温湿度变送器

    GPRS无线温湿度变送器GPRS无线温湿度变送器GPRS无线温湿度变送器
    发表于 03-02 17:45 22次下载

    温湿度监测

    进行温湿度的仿真,采用PROTEUS进行粮仓温湿度的检测与控制。
    发表于 05-11 14:33 25次下载

    基于STM32串口显示温湿度例程资料下载

    基于STM32串口显示温湿度例程资料下载
    发表于 04-22 10:44 65次下载
    基于STM32串口显示<b class='flag-5'>温湿度</b><b class='flag-5'>例程</b>资料下载

    温湿度计怎么使用_温湿度计怎么调

    本文首先阐述了温湿度计的使用方法,其次介绍了温湿度计的调节,最后介绍了家用指针式温湿度计调校方法。
    发表于 02-28 11:16 9.9w次阅读

    温湿度传感器的原理

    温湿度传感器是指能将温度量和湿度量转换成容易被测量处理的电信号的设备或装置。市场上的温湿度传感器一般是测量温度量和相对湿度量。金鸽科技研发生产无线
    发表于 05-11 14:59 1.6w次阅读

    工业级温湿度传感器与日常温湿度计的区别

    温湿度产品在现代的应用非常广泛,机房、工业、农业,仓储等都离不开温湿度管理,特别是在实时记录温湿度变化的工作中最为广泛,温湿度传感器可以根据所记录的数据,对各个不同的领域进行科学有效的
    发表于 06-12 16:29 2279次阅读

    温湿度记录仪如何读取,温湿度记录仪的操作介绍

    温湿度记录仪是温湿度测量仪器中温湿度计中的一种。其具有内置温湿度传感器或可连接外部温湿度传感器测量温度和
    发表于 06-28 16:31 3577次阅读

    温湿度记录仪在温湿度监测系统中的应用有哪些

    当前随着人们生活水平质量不断提高,因温度引发的各行业越来越重视产品生产、物品设备和仓库存储的温湿度管理环境,温湿度记录仪便是其中之一。今天小编带你了解温湿度记录仪在温湿度监测系统中有
    发表于 08-02 11:24 1099次阅读

    温湿度自记仪是什么,该如何选购温湿度自记仪

    今天要给大家说的是温湿度自记仪,在传统的种植环境中对温湿度进行检测时,多半是采用长度法或者干湿法。时至今日,这些检测方法已经不满足现在农业生产,而温湿度自记仪的出现,可以说满足了用户的需求。那么
    的头像 发表于 10-28 10:43 2301次阅读

    ZS2933SL.ZS2934SL.ZS2935SL产品规格书

    ZSpoweric立元微ZS2931SL.ZS2932SL.ZS2933SL.ZS2934SL.ZS2935SL产品规格书
    发表于 09-18 17:58 2次下载