CC2530+DHT11测温度

2024-03-19 07:08
文章标签 dht11 温度 cc2530

本文主要是介绍CC2530+DHT11测温度,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

DHT11是一款有已校准数字信号输出的温湿度传感器。 其精度湿度+-5%RH, 温度+-2℃,量程湿度20-90%RH, 温度0~50℃。


 

data线连接P0_0

  • DHT11.h
#include <ioCC2530.h>
#define uint unsigned int
#define uchar unsigned char
#define DATA_PIN P0_0//温湿度定义uchar ucharFLAG,uchartemp;
uchar shidu_shi,shidu_ge,wendu_shi,wendu_ge=4;
uchar ucharT_data_H,ucharT_data_L,ucharRH_data_H,ucharRH_data_L,ucharcheckdata;
uchar ucharT_data_H_temp,ucharT_data_L_temp,ucharRH_data_H_temp,ucharRH_data_L_temp,ucharcheckdata_temp;
uchar ucharcomdata;//延时函数
void Delay_us() //1 us 延时
{
asm("nop");//如果太多,很有可能校验通不过
asm("nop");
asm("nop");
asm("nop");
}void Delay1_10us() //10 us 延时
{
Delay_us();
Delay_us();
}void Delay_ms(uint Time)//n ms 延时
{
unsigned char i;
while(Time--)
{
for(i=0;i<100;i++)
Delay1_10us();
}
}//温湿度传感
void COM(void) // 温湿写入
{
uchar i;
for(i=0;i<8;i++)
{
ucharFLAG=2;
while((!DATA_PIN)&&ucharFLAG++);
Delay1_10us();
Delay1_10us();
Delay1_10us();
uchartemp=0;
if(DATA_PIN)uchartemp=1;
ucharFLAG=2;
while((DATA_PIN)&&ucharFLAG++);
if(ucharFLAG==1)break;
ucharcomdata<<=1;
ucharcomdata|=uchartemp;
}
}void DHT11(void) //温湿传感启动
{
DATA_PIN=0;
Delay_ms(30); //>18MS
DATA_PIN=1;
P0DIR &= ~0x01; //重新配置 IO 口方向 输入
Delay1_10us();
Delay1_10us();
Delay1_10us();
Delay1_10us();
if(!DATA_PIN)
{
ucharFLAG=2;
while((!DATA_PIN)&&ucharFLAG++);
ucharFLAG=2;
while((DATA_PIN)&&ucharFLAG++);
COM();
ucharRH_data_H_temp=ucharcomdata;
COM();
ucharRH_data_L_temp=ucharcomdata;
COM();
ucharT_data_H_temp=ucharcomdata;
COM();
ucharT_data_L_temp=ucharcomdata;
COM();
ucharcheckdata_temp=ucharcomdata;
DATA_PIN=1;
uchartemp=(ucharT_data_H_temp+ucharT_data_L_temp+ucharRH_data_H_temp+ucharRH_data_L_temp);if(uchartemp==ucharcheckdata_temp)
{
ucharRH_data_H=ucharRH_data_H_temp;
ucharRH_data_L=ucharRH_data_L_temp;
ucharT_data_H=ucharT_data_H_temp;
ucharT_data_L=ucharT_data_L_temp;
ucharcheckdata=ucharcheckdata_temp;
wendu_shi=ucharT_data_H/10;
wendu_ge=ucharT_data_H%10;
shidu_shi=ucharRH_data_H/10;
shidu_ge=ucharRH_data_H%10;
}
else //没用成功读取,重新运行函数
{DHT11();
}
}
P0DIR |= 0x01; //IO 口需要重新配置
}

 

调用函数getWS()即可得到当前的温湿度。

  • DHT11.c
#include "DHT11.h"
#include <ioCC2530.h>
#include <string.h>#define uint unsigned int
#define uchar unsigned char
char temp_humidity[4]; 
extern char* getWS(void);
void DelayMS(uint msec)
{
uint i,j;
for (i=0; i<msec; i++)
for (j=0; j<1070; j++);
}
char* getWS(void){ memset(temp_humidity, 0, 4);DHT11();temp_humidity[2]=(char)wendu_shi+0x30;//转化为Char类型temp_humidity[3]=(char)wendu_ge+0x30;temp_humidity[0]=(char)shidu_shi+0x30;temp_humidity[1]=(char)shidu_ge+0x30;DelayMS(1000); //延时return temp_humidity;
}
//temp_humidity[2]和temp_humidity[3]温度char表示
//temp_humidity[0]和temp_humidity[1]湿度char表示

 

这篇关于CC2530+DHT11测温度的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/825182

相关文章

力扣 739. 每日温度【经典单调栈题目】

1. 题目 理解题意: 1.1. 给一个温度集合, 要返回一个对应长度的结果集合, 这个结果集合里面的元素 i 是 当前 i 位置的元素的下一个更高温度的元素的位置和当前 i 位置的距离之差, 若是当前元素不存在下一个更高温度的元素, 则这个位置用0代替; 2. 思路 本题用单调栈来求解;单调栈就适用于来求当前元素左边或者右边第一个比当前元素大或者小的元素;【单调栈:让栈中的元素保持单调

优化采样参数提升大语言模型响应质量:深入分析温度、top_p、top_k和min_p的随机解码策略

当向大语言模型(LLM)提出查询时,模型会为其词汇表中的每个可能标记输出概率值。从这个概率分布中采样一个标记后,我们可以将该标记附加到输入提示中,使LLM能够继续输出下一个标记的概率。这个采样过程可以通过诸如 temperature 和 top_p 等参数进行精确控制。但是你是否曾深入思考过temperature和top_p参数的具体作用? 本文将详细解析并可视化定义LLM输出行为的

CC2530单片机介绍

一、什么是CC2530? CC2530单片机是一款高性能、低功耗的片上系统解决方案,专门用于2.4GHz IEEE 802.15.4、ZigBee和RF4CE应用。它结合了先进的RF收发器、业界标准的增强型8051 CPU、系统内可编程闪存、8KB RAM以及其他许多强大功能。 CC2530具有四种不同闪存版本:CC2530F32/64/128/256,分别具有32/64/128/256KB的

STM32+DHT11+OLED显示

前言 使用STM32和DHT11温湿度传感器对环境进行的温湿度进行监测,将监测到的数据通过OLED进行显示。 一、前期准备 软件环境:Keil5 硬件设备:STM32F103ZET6、四针OLED显示屏、温湿度传感器DHT11、ST-Link仿真器 二、接线表 STM32ST-LINKOLEDDHT113V33.3VSWOSWDIOSWCLKSWCLKGNDGNDPB6SDAPB7SC

LeetCode 热题100-72 每日温度

每日温度 给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。 示例 1: 输入: temperatures = [73,74,75,71,69,72,76,73]输出: [1,1,4,2,1,1,0,0] 示例 2:

NASA:ASTER L2 表面辐射率(E(辐射率)和 T(地表温度)) V003数据集

ASTER L2 Surface Emissivity V003 ASTER L2 表面辐射率 V003 简介 ASTER L2 地表发射率是一种按需生成的产品((https://lpdaac.usgs.gov/documents/996/ASTER_Earthdata_Search_Order_Instructions.pdf)),利用 8 至 12 µm 光谱范围内的五个热红外(TIR)

2024.9.2 Python,用栈写每日温度,等差数列划分,子串所有可能性,等差数列划分,深度优先搜索解决累加数

1.每日温度 给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。 示例 1: 输入: temperatures = [73,74,75,71,69,72,76,73] 输出: [1,1,4,2,1,1,0,0] 示例 2: 输入

Linux驱动开发基础(DS18B20温度模块)

所学来自百问网 目录 1.DS18B20 简介 2.硬件设计 3.软件设计 3.1 存储器介绍 3.2 通信时序 3.2.1 初始化时序 3.2.2 写时序 3.2.3 读时序 3.3 常用命令 4. 示例代码 4.1 驱动代码 4.2 应用代码 4.3 Makefile 4.4 实验效果 1.DS18B20 简介 DS18B20 温度传感器具有线路简单、

使用MSP430单片机进行温度监测,但读数总是不稳定

使用MSP430单片机进行温度监测时,遇到读数不稳定的问题确实令人困扰。为了解决这一问题,下面将详细分析可能导致温度读数不稳定的原因,并提供针对性的解决建议: 1. 传感器选择与连接    传感器类型:选择合适的温度传感器是确保测量准确性的第一步。MSP430通常与如PT100热敏电阻、DS18B20数字温度传感器等传感器配合使用。其中,DS18B20具有数字化输出,可以减少因模拟信号传输引起

基于DS18B20的温度检测

前言         DS18B20是DALLAS半导体公司生产的单总线数字温度传感器,其输出的是数字信号,具有体积小,功耗低,抗干扰能力强,精度高的特点。         温度范围-55摄氏度至+125摄氏度,在-10摄氏度至+85摄氏度可以达到不超过 0.5摄氏度的误差。单端口节省FPGA接口资源。传感器内部含EEPROM内部存储温度阈值,测量分辨率,系统掉电保护数据。 正文