STC15系列通用-STC15F2K60S2/STCW4K32S4读取DHT11温湿度传感器数据串口输出代码实例工程免费下载
//为了方便大家调试,另附程序工程共大家下载,下载地址:https://www.90pan.com/b1908750
//************************** //程序说明:stc15f2k60s2采集dht11温湿度传感器数据,并从串口输出,实测可用,
//选择内部22.1184M晶振
//************************** #include<stc15fxxxx.h> //调用stc15f系列头文件,下载地址: http://pan.baidu.com/s/1eRUbjLS //IO口声明 #define dht11_io P20 //P2.0口作为数据读取接口 //常量声明 #define MAIN_Fosc 22118400L//主时钟
#define baud_rate 115200L//波特率
#define Timer1_Reload(65536UL -(MAIN_Fosc / 4 / baud_rate))//Timer1重装值 //变量定义 u16 U8FLAG;
u8 U8temp;
u8 U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
u8 U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
u8 U8comdata;
u8 datas=; //函数声明 void Delay30us(); //22.1184M晶振精确延时30微秒
void Delay40us(); //22.1184M晶振精确延时40微秒
void Delay18ms(); //22.1184M晶振精确延时30毫秒
void Delay1000ms();//22.1184M晶振精确延时1000毫秒 void read_byte(); //读取一字节的数据,并赋值给U8comdata
u8 read_temp();//读取温度,返回温度值
u8 read_humi();//读取湿度,返回湿度值 void serial_init();//串口初始化
void serial_send_byte(u8 dat);//串口发送一个字节的数据
void serial_send_string(u8 *dat);//串口发送字符串 void main()
{
Delay1000ms();
serial_init();//串口初始化
dht11_io = ;
while()
{
datas=read_temp();
serial_send_string("温度:");
serial_send_byte(datas%/+'');//十位
serial_send_byte(datas%+'');//个位
serial_send_byte(' ');
datas=read_humi();
serial_send_string("湿度:");
serial_send_byte(datas%/+'');//十位
serial_send_byte(datas%+'');//个位
serial_send_string("\r\n");
Delay1000ms();
} } void read_byte()
{
u8 i;
for(i=;i<;i++)
{
U8FLAG=;
while((!dht11_io)&&U8FLAG++);//超时3毫秒跳出
Delay30us();
U8temp=;
if(dht11_io)U8temp=;
U8FLAG=;
while((dht11_io)&&U8FLAG++);//超时3毫秒跳出
if(U8FLAG==)break;
U8comdata<<=;
U8comdata|=U8temp;
}
} u8 read_temp()
{
dht11_io=;
Delay18ms();
dht11_io=;
Delay40us();
dht11_io=;
if(!dht11_io)
{
U8FLAG=;
while((!dht11_io)&&U8FLAG++);//超时3毫秒跳出
U8FLAG=;
while((dht11_io)&&U8FLAG++);//超时3毫秒跳出
read_byte();
U8RH_data_H_temp=U8comdata;
read_byte();
U8RH_data_L_temp=U8comdata;
read_byte();
U8T_data_H_temp=U8comdata;
read_byte();
U8T_data_L_temp=U8comdata;
read_byte();
U8checkdata_temp=U8comdata;
dht11_io=; U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);
if(U8temp==U8checkdata_temp)
{
U8RH_data_H=U8RH_data_H_temp;
U8RH_data_L=U8RH_data_L_temp;
U8T_data_H=U8T_data_H_temp;
U8T_data_L=U8T_data_L_temp;
U8checkdata=U8checkdata_temp;
}
}
return U8T_data_H;
} u8 read_humi()
{
dht11_io=;
Delay18ms();
dht11_io=;
Delay40us();
dht11_io=;
if(!dht11_io)
{
U8FLAG=;
while((!dht11_io)&&U8FLAG++);//超时3毫秒跳出
U8FLAG=;
while((dht11_io)&&U8FLAG++);//超时3毫秒跳出
read_byte();
U8RH_data_H_temp=U8comdata;
read_byte();
U8RH_data_L_temp=U8comdata;
read_byte();
U8T_data_H_temp=U8comdata;
read_byte();
U8T_data_L_temp=U8comdata;
read_byte();
U8checkdata_temp=U8comdata;
dht11_io=; U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);
if(U8temp==U8checkdata_temp)
{
U8RH_data_H=U8RH_data_H_temp;
U8RH_data_L=U8RH_data_L_temp;
U8T_data_H=U8T_data_H_temp;
U8T_data_L=U8T_data_L_temp;
U8checkdata=U8checkdata_temp;
}
}
return U8RH_data_H;
} void serial_init()
{
S1_8bit(); //8位数据
S1_USE_P30P31();//UART1 使用P30 P31口默认
TR1 = ;
AUXR &= ~0x01;//S1 BRT Use Timer1;
TMOD &= ~(<<);//Timer1 set As Timer
TMOD &= ~0x30;//Timer1_16bitAutoReload;2
AUXR |= (<<);//Timer1 set as 1T mode
TH1 = (u8)(Timer1_Reload >> );
TL1 = (u8)Timer1_Reload;
TR1 = ;
PS = ; //高优先级中断
REN = ; //允许接收
ES = ; //允许中断 EA = ; //允许全局中断
} void serial_send_byte(u8 dat)
{
SBUF=dat;
while(!TI);
TI=;
} void serial_send_string(u8 *dat)
{
while(*dat)
{
serial_send_byte(*dat++);
}
} /********************* 串口1中断函数************************/
void UART1_int (void) interrupt UART1_VECTOR
{
if(RI)
{
RI = ;
} if(TI)
{
}
} void Delay30us() //@22.1184MHz精确延时30微秒
{
unsigned char i, j; i = ;
j = ;
do
{
while (--j);
} while (--i);
} void Delay40us() //@22.1184MHz精确延时40微秒
{
unsigned char i, j; _nop_();
i = ;
j = ;
do
{
while (--j);
} while (--i);
} void Delay18ms() //@22.1184MHz精确延时18毫秒
{
unsigned char i, j, k; _nop_();
i = ;
j = ;
k = ;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
} void Delay1000ms() //@22.1184MHz
{
unsigned char i, j, k; _nop_();
_nop_();
i = ;
j = ;
k = ;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
STC15系列通用-STC15F2K60S2/STCW4K32S4读取DHT11温湿度传感器数据串口输出代码实例工程免费下载的更多相关文章
- 在树莓派上读取DHT11温湿度传感器-python代码实现及常见问题(全面简单易懂)
最近由于自己的课题需要,想要用在树莓派上使用DHT11温湿度传感器来读取空气中温湿度,遇到了几个问题,解决之后也对之前的知识进行了回顾,总结,特整理如下,希望能给也在学习树莓派的小伙伴们带来一些帮助. ...
- DHT11温湿度传感器编程思路以及代码的实现(转载)
源自:https://blog.csdn.net/qq_34952376/article/details/81193938 在我们刚开始进入单片机的学习中,练习写传感器的时序是必不可少的,其实我比较推 ...
- Arduino和C51开发DHT11温湿度传感器
技术:51单片机.Arduino.DHT11.温湿度传感器.传感器 概述 学习单片机离不开对传感器的学习,本文主要介绍DHT11温湿度传感器的使用方法,同学也可以了解更多的传感器,这对你以后开发产 ...
- DHT11温湿度传感器模块使用方法和驱动代码实现
DHT11模块简介 DHT11是一款价格便宜,易于使用的温度湿度测量二合一传感器.它具有超小体积.极低功耗的特点.它使用单根总线与单片机进行双向的串行数据传输,信号传输距离可达20米以上.非常适用于对 ...
- STM32驱动DHT11温湿度传感器
DHT11 是一款湿温度一体化的数字传感器.该传感器包括一个电阻式测湿元件和一个 NTC 测温元件,并与一个高性能 8 位单片机相连接.通过单片机等微处理器简单的电路连接就能够 实时的采集本地湿度和温 ...
- 树莓派使用DHT11温湿度传感器
一.相关介绍 DHT11介绍: DHT11是一款比较便宜的温湿度传感器模块.读取数据只需要占用一个IO口.能够同时测量温度和相对湿度. DHT11的数据手册可以看这里:http://wenku.bai ...
- 玩转X-CTR100 l STM32F4 l DHT11温湿度传感器
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] DHT11数字温湿度传感器是一款含有已校准数字信号输 ...
- 【雕爷学编程】Arduino动手做(55)--DHT11温湿度传感器
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践(动手试试)出真知的理念,以学习和交流为目的,这里准备 ...
- NPOI 2.1.1 系列(2) 使用NPOI读取List或者datatable数据生成 Excel文档 ;Npoi生成 xlsx 2007以上文档
结合上一篇文章 NPOI 2.1.1 系列(1) 使用NPOI读取 Excel文档 ;NpoiExcelHelper 导入导出 2003格式 2007格式的 Excel; Npoi 导出 xlsx ...
随机推荐
- WPF - 简单的UI框架
实现了一个简单的WPF应用程序UI框架 ,分享出来.界面效果图如下: 运行效果如下: 喜欢的可以下载源码参考:https://github.com/DuelWithSelf/WPFEffects 左侧 ...
- 关于Fragment的点击切换数据滞留问题
场景再现:当我使用tabLayout + Fragment 切换不同的fragment时,出现了数据重复显示的问题: 思考逻辑: - 每次切换fragment都会重新获取数据,但是list集合是全局的 ...
- (1)从通信中的MCS含义开始讲起
通信中的MCS:Modulation and Coding Scheme,意思为调制编码方案/调制编码策略,其内涵可分为两个部分:Modulation 和 Coding. 在基带的信号处理流程中, ...
- [poj2778 DNA Sequence]AC自动机,矩阵快速幂
题意:给一些字符串的集合S和整数n,求满足 长度为n 只含charset = {'A'.'T‘.'G'.'C'}包含的字符 不包含S中任一字符串 的字符串的种类数. 思路:首先对S建立ac自动机,考虑 ...
- Linux 命令行下搜索工具大盘点,效率提高不止一倍!
在 Linux 命令行下进行文本关键字的搜索,大家肯定第一时间会想到 grep 命令.grep 命令确实十分强大,但如果需要用到它更加灵活的功能时,可能命令就会显得十分复杂. 于是,为了简化 grep ...
- Python中range, np.arange, np.linspace的区别
目录 range np.arange np.linspace range 特点 range()是python内置函数,指定开始值,终值和步长生成等差数列的一维数组 不包含终值 步长只能是整数,生成整数 ...
- ql的python学习之路-day11
前言:本节主要学习python内置的方法 #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:qinjiaxi from collections ...
- 黑马vue学习的总结,vue笔记
cls:清除终端输出 $refs $http $route 使用this.$emit('show')来调用父方法
- 「雕爷学编程」Arduino动手做(8)——湿度传感器模块
37款传感器和模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器与模块,依照实践出真知(动手试试)的理念,以学习和交流为目的,这里准备 ...
- XShell 评估到期
刚刚打开XShell弹出”评估到期“,点击确定后自动打开中文官网,得购买后才能使用. 当初下载的时候没留意到会有这一天.. 手头拮据的朋友可以通过下面方法绕过: 删除XShell. 到英文官网下载页找 ...