//为了方便大家调试,另附程序工程共大家下载,下载地址: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温湿度传感器数据串口输出代码实例工程免费下载的更多相关文章

  1. 在树莓派上读取DHT11温湿度传感器-python代码实现及常见问题(全面简单易懂)

    最近由于自己的课题需要,想要用在树莓派上使用DHT11温湿度传感器来读取空气中温湿度,遇到了几个问题,解决之后也对之前的知识进行了回顾,总结,特整理如下,希望能给也在学习树莓派的小伙伴们带来一些帮助. ...

  2. DHT11温湿度传感器编程思路以及代码的实现(转载)

    源自:https://blog.csdn.net/qq_34952376/article/details/81193938 在我们刚开始进入单片机的学习中,练习写传感器的时序是必不可少的,其实我比较推 ...

  3. Arduino和C51开发DHT11温湿度传感器

    技术:51单片机.Arduino.DHT11.温湿度传感器.传感器   概述 学习单片机离不开对传感器的学习,本文主要介绍DHT11温湿度传感器的使用方法,同学也可以了解更多的传感器,这对你以后开发产 ...

  4. DHT11温湿度传感器模块使用方法和驱动代码实现

    DHT11模块简介 DHT11是一款价格便宜,易于使用的温度湿度测量二合一传感器.它具有超小体积.极低功耗的特点.它使用单根总线与单片机进行双向的串行数据传输,信号传输距离可达20米以上.非常适用于对 ...

  5. STM32驱动DHT11温湿度传感器

    DHT11 是一款湿温度一体化的数字传感器.该传感器包括一个电阻式测湿元件和一个 NTC 测温元件,并与一个高性能 8 位单片机相连接.通过单片机等微处理器简单的电路连接就能够 实时的采集本地湿度和温 ...

  6. 树莓派使用DHT11温湿度传感器

    一.相关介绍 DHT11介绍: DHT11是一款比较便宜的温湿度传感器模块.读取数据只需要占用一个IO口.能够同时测量温度和相对湿度. DHT11的数据手册可以看这里:http://wenku.bai ...

  7. 玩转X-CTR100 l STM32F4 l DHT11温湿度传感器

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] DHT11数字温湿度传感器是一款含有已校准数字信号输 ...

  8. 【雕爷学编程】Arduino动手做(55)--DHT11温湿度传感器

    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践(动手试试)出真知的理念,以学习和交流为目的,这里准备 ...

  9. 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 ...

随机推荐

  1. neo4j企业版集群搭建

    一.HA高可用集群搭建 版本采用的是neo4j-enterprise-3.5.3-unix.tar.gz 1.1.集群ip规划 192.168.56.10 neo4j-node1 192.168.56 ...

  2. Linux系统如何安装qt-desinger

    前言:最近想在python3.7.3下玩下PyQt5,写UI有两种方式一种是使用手写,第二个就是使用Qt Designer工具来写,所以首先就是安装PyQt5和pyqt5-tools工具了. 一.安装 ...

  3. json 格式要求

    json 格式中, 字符串类型需要使用双引号,不能为单引号

  4. [Abp vNext 入坑分享] - 7.Automapper与validation的使用

    简要说明 [项目源码] [章节目录] 本文主要介绍Automapper与Validation的使用方法.首先使用Automapper的目的是引入组件完成entity与dto之间的转换以达到简化代码的目 ...

  5. 关于mysql中的锁总结

    一.锁的基本信息: 共享锁(s):又称读锁.允许一个事务去读一行,阻止其他事务获得相同数据集的排他锁.若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁 ...

  6. mysql小白系列_03 体系结构-线程池

    thread pool的原理是什么? 为什么用double write就能解决page坏的问题? Innodb redo log 与 binlog有什么区别?有了Innodb redo log为什么还 ...

  7. CS0016: 未能写入输出文件“c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\ad888a2

    http://wenwen.sogou.com/z/q445150234.htm IIS_USRS

  8. PAT-1059 Prime Factors (素数因子)

    1059. Prime Factors Given any positive integer N, you are supposed to find all of its prime factors, ...

  9. HDU4315 Climbing the Hill

    题目链接:https://cn.vjudge.net/problem/HDU-4315 知识点: 博弈论 题目大意: \(Alice\) 和 \(Bob\) 轮流指挥 \(N\) 个人爬山,这 \(N ...

  10. SpringBoot踩坑日记

    1.Closing JPA EntityManagerFactory for persistence unit 'default'错误导致springboot启动后终止 --------------- ...