STC15F2K60S2读取DHT11温湿度串口显示实例

发布者:Yudie最新更新时间:2018-06-20 来源: eefocus关键字:STC15F2K60S2  读取DHT11  温湿度  串口显示 手机看文章 扫描二维码
随时随地手机看文章

//为了方便大家调试,另附程序工程共大家下载,下载地址:http://download.csdn.net/detail/liyu3519/9873073






//**************************

//程序说明:stc15f2k60s2采集dht11温湿度传感器数据,并从串口输出,实测可用,
//选择内部22.1184M晶振
//**************************


#include //调用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=0;




//函数声明


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 = 1;
while(1)
{
datas=read_temp();
serial_send_string("温度:");
serial_send_byte(datas%100/10+'0');//十位
serial_send_byte(datas%10+'0');//个位
serial_send_byte(' ');
datas=read_humi();
serial_send_string("湿度:");
serial_send_byte(datas%100/10+'0');//十位
serial_send_byte(datas%10+'0');//个位
serial_send_string("\r\n");
Delay1000ms();
}


}


void read_byte()
{
u8 i;
for(i=0;i<8;i++)
{
U8FLAG=2;
while((!dht11_io)&&U8FLAG++);//超时3毫秒跳出
Delay30us();
U8temp=0;
if(dht11_io)U8temp=1;
U8FLAG=2;
while((dht11_io)&&U8FLAG++);//超时3毫秒跳出
if(U8FLAG==1)break;
U8comdata<<=1;
 U8comdata|=U8temp;
}
}


u8 read_temp()
{
dht11_io=0;
Delay18ms();
dht11_io=1;
Delay40us();
dht11_io=1;
if(!dht11_io)
{
U8FLAG=2;
while((!dht11_io)&&U8FLAG++);//超时3毫秒跳出
U8FLAG=2;
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=1;

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=0;
Delay18ms();
dht11_io=1;
Delay40us();
dht11_io=1;
if(!dht11_io)
{
U8FLAG=2;
while((!dht11_io)&&U8FLAG++);//超时3毫秒跳出
U8FLAG=2;
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=1;

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 = 0;
AUXR &= ~0x01;//S1 BRT Use Timer1;
TMOD &= ~(1<<6);//Timer1 set As Timer
TMOD &= ~0x30;//Timer1_16bitAutoReload;2
AUXR |=  (1<<6);//Timer1 set as 1T mode
TH1 = (u8)(Timer1_Reload >> 8);
TL1 = (u8)Timer1_Reload;
TR1  = 1;
PS = 1;  //高优先级中断
REN = 1;  //允许接收
ES  = 1;  //允许中断


EA = 1;  //允许全局中断
}


void serial_send_byte(u8 dat)
{
SBUF=dat;
while(!TI);
TI=0;
}


void serial_send_string(u8 *dat)
{
while(*dat)
{
serial_send_byte(*dat++);
}
}


/********************* 串口1中断函数************************/
void UART1_int (void) interrupt UART1_VECTOR
{
if(RI)
{
RI = 0;
}


if(TI)
{
}
}


void Delay30us() //@22.1184MHz精确延时30微秒
{
unsigned char i, j;


i = 1;
j = 162;
do
{
while (--j);
} while (--i);
}


void Delay40us() //@22.1184MHz精确延时40微秒
{
unsigned char i, j;


_nop_();
i = 1;
j = 217;
do
{
while (--j);
} while (--i);
}


void Delay18ms() //@22.1184MHz精确延时18毫秒
{
unsigned char i, j, k;


_nop_();
i = 2;
j = 132;
k = 67;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}


void Delay1000ms() //@22.1184MHz
{
unsigned char i, j, k;


_nop_();
_nop_();
i = 85;
j = 12;
k = 155;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}


关键字:STC15F2K60S2  读取DHT11  温湿度  串口显示 引用地址:STC15F2K60S2读取DHT11温湿度串口显示实例

上一篇:DS18B20温度传感器完整C程序
下一篇:STC15F2K60S2串口通信程序代码

推荐阅读最新更新时间:2024-03-16 16:06

STM32读取温湿度传感器DHT11和DHT21(AM2301)系列问题
1、DHT11和DHT21传感器 这两种传感器都是奥松公司的产品,具体的传感器说明书在其官网上有(www.aosong.com)。 DHT11 数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数 字模块采集技术和温湿度传感技术,确保产品具有枀高的可靠性与卓越的长期稳定性。传感器包括一 个电容式感湿元件和一个 NTC 测温元件,并与一个高性能 8 位单片机相连接。 DHT21(AM2301)湿敏电容数字温湿度模块是一款含有己校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电容式感湿元件和一个
[单片机]
STM32<font color='red'>读取</font><font color='red'>温湿度</font>传感器<font color='red'>DHT11</font>和DHT21(AM2301)系列问题
基于无线传感器网络的大棚环境参数采集系统
    随着人们对新鲜蔬菜需求的不断提高以及土地资源的日渐紧缺,生产效率较高的温室农业得到了迅速发展。温室大棚内温湿度等因素对农作物的生长有着直接影响,对温室大棚内的温度、湿度及二氧化碳等参数的检测和控制至关重要。传统的温室数据采集工作大多是采用人工抄表或预先布线的有线采集方式。人工方式的缺点是工作量大、费用高、难以保障数据的实时性和有效性,而有线数据采集存在着布线 费用高、测量节点位置变化时需要改变线路走向及长度等诸多不利因素。     文中采用无线传感器网络技术设计了一种温室大棚温度、湿度及二氧化碳参数测量系统,具有超低功耗、不需布线、测量节点移动方便等优点,克服了人工抄表和有线数据采集系统的诸多缺点。 1 硬件设计     无
[嵌入式]
SHT11温湿度传感器AVR单片机程序
#include shtxx.h void shtxx_init(void) { shtxx_temp = shtxx_humi = 0; SHTXX_ SCK _LOW(); SHTXX_DAT_1(); shtxx_reconnect(); } void shtxx_reconnect(void) { SHTXX_DAT_1(); SHTXX_SCK_LOW(); for(uint8 i=0; i 9; i++) { SHTXX_SCK_HIGH(); SHTXX_SCK_LOW(); } SHTXX_START(); } uint8 shtxx_ SOF trst(voi
[单片机]
STC15F2K60S2实现A/D转换
1 实现功能 以中断方式进行A/D转换,取10位精度,并送P3和P2口LED灯显示(低电平驱动),P3口显示最高2位,P2口显示第8位。 2 程序代码 #include STC15F2K60S2.h unsigned char data adc_datah; //定义保存AD转换结果的绝对地址 unsigned char data adc_datal; void main() { unsigned int i; P1ASF=0x10; //设置P1.4为模拟量输入功能 ADC_CONTR=0x84; //打开A/D转换电源,设置输入通道 for(i=
[单片机]
<font color='red'>STC15F2K60S2</font>实现A/D转换
多通道智能温湿度测试仪的研制
   引言   温湿度的测量在工农业生产、日常生活及科学研究中有着广泛的应用,但由于常用湿度传感器的非线性输出及一致性较差,使湿度的测量方法和手段相对较复杂,且给电路的调试带来很大的困难。为此,采用Honeywell公司的线性电压输出湿度传感器HIH3610研制出一种测试精度高,能测试多点温湿度,且可与上位机通信的温湿度智能测试仪。该测试仪可实现温湿度的多点自动测量,为温湿度测量自动化奠定了良好的基础。    仪器硬件电路   多通道温湿度测试仪的硬件电路如图1所示。由于HIH3610为大信号输出且线性度良好,因此,可省去复杂的信号放大及调理电路,仅需一片A/D转换器将与湿度值成正比的电压值转换成数字量并与单片机接口即
[测试测量]
多通道智能<font color='red'>温湿度</font>测试仪的研制
16-基于51单片机的烟雾和温湿度检测控制系统仿真
具体实现功能 由STC89C52单片机+LCD1602液晶显示屏+ADC0832模块+蜂鸣器+DHT11温湿度传感器 +烟雾传感器+LED+按键构成。 具体功能: 1、LCD1602液晶第一行显示当前的烟雾值,第二行显示当前的温度和湿度值; 2、可以设置烟雾、温湿度上下限报警值。共4个按键:复位按键、减键、加键、设置键;设定的参数具有掉电保存,保存在STC单片机的内部,上电无需重新设置; 3、当烟雾值高于设定的报警值或温度湿度超出上下限范围,蜂鸣器和指示灯会发出声光报警; 4、当温湿度值低于或高于设定的范围时,相应的指示灯亮,蜂鸣器报警; 5、当同时满足烟雾过高、温度过高、湿度过低三个条件时,控制继电器吸合
[单片机]
16-基于51单片机的烟雾和<font color='red'>温湿度</font>检测控制系统仿真
单片机+VB上位机温湿度检测制作
单片机源程序如下: #include reg52.h // 头文件包含 #include intrins.h #define uchar unsigned char // 以后unsigned char就可以用uchar代替 #define uint unsigned int // 以后unsigned int 就可以用uint 代替 sbit Buzzer_P = P1^0; // 蜂鸣器 sbit DHT11_P = P1^1; // 温湿度传感器DHT11数据接入 sbit LcdRs_P = P2^
[单片机]
单片机+VB上位机<font color='red'>温湿度</font>检测制作
基于51单片机的库房温湿度控制系统
  引 言   目前,国内大中型库房在仓储管理中由于技术和资金上的原因,多数仅限于只对温度进行监测,当温度超标时进行强制通风和翻仓,即使如此,处理不及时或因设备人力条件有限仍会造成大量损失。实现库房储藏物的温升主要是由于湿度引起的,库房储藏物本身的水分过高或连续的高湿天气将导致储藏物新陈代谢加快而放出热量,放热引起的温升又使代谢进一步加剧以至发霉变质。这种恶性循环一旦形成很难进行有效控制。因此,库房在进行温度监测的同时,必须重视对空气湿度的检测,以利于提前采取有效措施控制库房储藏物升温而霉变。本文所介绍的温湿度控制系统以AT89C2051单片机为控制核心,结合传感器、通讯和数字电子电路技术,实现了温度和湿度检测与库房温度和湿度的
[单片机]
基于51单片机的库房<font color='red'>温湿度</font>控制系统
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved