基于C8051F410的DHT11温湿度传感器驱动编写

发布者:Yuexiang最新更新时间:2022-04-13 来源: eefocus关键字:C8051F410  DHT11  温湿度传感器  驱动编写 手机看文章 扫描二维码
随时随地手机看文章

这个也是在暑假培训时做的一个小东西,之前在网上买了一些传感器,还花了不少大洋,于是就拿来练手了。


这个DHT11的输出引脚还要加上拉电阻,真是麻烦,程序也比较不好,如果连线出现问题就会死机,建议参考下篇文章对AM2305的驱动编写,不过那东西可要一百多呢,这个才几块钱。


#include                  // SFR declarations

#include

 

#define SYSCLK        24500000         // SYSCLK frequency in Hz

#define BAUDRATE      9600           // Baud rate of UART in bps

 

sbit led1 = P2^1;

sbit led2 = P2^3;

sbit dht_dat = P0^6;

 

void Oscillator_Init (void);

void Port_Init(void);

void UART0_Init (void);

void delay(unsigned int m);

void delay_ms(unsigned int m);

void read_dth(void);

 

 

void main (void)

{

   PCA0MD &= ~0x40;                    // WDTE = 0 (clear watchdog timer

                                       // enable)

 

   Oscillator_Init ();                 // Initialize system clock to

                                       // 24.5MHz

   Port_Init();

   UART0_Init();                       // Initialize UART0 for printf's

 

   EA = 1;                             // Enable global interrupts

 

   printf("初始化完成!nn");

   delay_ms(5000);

   led1 = 1;

   led2 = 1;

   dht_dat = 1;

   while (1)

   {

    delay_ms(2000);

read_dth();

   }

}

 

void Oscillator_Init (void)

{

   OSCICN = 0x87;                      // Configure internal oscillator for

                                       // its highest frequency

   RSTSRC = 0x04;                      // Enable missing clock detector

}

 

void Port_Init (void)

{

   P1SKIP |= 0x40;                      // Skip all analog pins

 

   XBR0 = 0x01;                        // UART0 TX and RX pins enabled

   XBR1 = 0x40;                        // Enable crossbar and weak pull-ups

 

   P0MDOUT |= 0x10;                    // Enable TX0 as a push-pull output

 

}

 

void UART0_Init (void)

{

   SCON0 = 0x10;                       // SCON0: 8-bit variable bit rate

                                       //        level of STOP bit is ignored

                                       //        RX enabled

                                       //        ninth bits are zeros

                                       //        clear RI0 and TI0 bits

   if (SYSCLK/BAUDRATE/2/256 < 1) {

      TH1 = -(SYSCLK/BAUDRATE/2);

      CKCON |=  0x08;                  // T1M = 1; SCA1:0 = xx

   } else if (SYSCLK/BAUDRATE/2/256 < 4) {

      TH1 = -(SYSCLK/BAUDRATE/2/4);

      CKCON &= ~0x0B;                  // T1M = 0; SCA1:0 = 01

      CKCON |=  0x01;

   } else if (SYSCLK/BAUDRATE/2/256 < 12) {

      TH1 = -(SYSCLK/BAUDRATE/2/12);

      CKCON &= ~0x0B;                  // T1M = 0; SCA1:0 = 00

   } else if (SYSCLK/BAUDRATE/2/256 < 48) {

      TH1 = -(SYSCLK/BAUDRATE/2/48);

      CKCON &= ~0x0B;                  // T1M = 0; SCA1:0 = 10

      CKCON |=  0x02;

   } else {

      while (1);                       // Error.  Unsupported baud rate

   }

 

   TL1 = TH1;                          // Init Timer1

   TMOD &= ~0xF0;                      // TMOD: timer 1 in 8-bit autoreload

   TMOD |=  0x20;

   TR1 = 1;                            // START Timer1

   TI0 = 1;                            // Indicate TX0 ready

}

 

void delay(unsigned int m)

{

while(m--);

}

 

void delay_ms(unsigned int m)

{

while(m--)

delay(2046);

}

 

void read_dth(void)

{

unsigned char wei=0;

unsigned char humi_int=0,humi_float=0,temp_int=0,temp_float=0,chk_dat=0;

 

dht_dat=1;

printf("nnn开始发送请求。n");

delay_ms(100);

dht_dat=0;

delay_ms(25);

dht_dat=1;

delay(64);

while(1==dht_dat);

//printf("下位机已响应--当前低电平。n");

while(0==dht_dat);

//printf("下位机已响应--当前高电平。n");

while(1==dht_dat);

//printf("下位机开始传送数据n");

 

//开始接收数据

for (wei=0;wei<8;wei++)

{

humi_int*=2;

while(0==dht_dat);

delay(62);

if(1==dht_dat)

{

humi_int++;

while(1==dht_dat);

}

} //湿度整数接受完成

for (wei=0;wei<8;wei++)

{

humi_float*=2;

while(0==dht_dat);

delay(62);

if(1==dht_dat)

{

humi_float++;

while(1==dht_dat);

}

} //湿度小数接收完成

for (wei=0;wei<8;wei++)

{

temp_int*=2;

while(0==dht_dat);

delay(62);

if(1==dht_dat)

{

temp_int++;

while(1==dht_dat);

}

} //温度整数接收完成

for (wei=0;wei<8;wei++)

{

temp_float*=2;

while(0==dht_dat);

delay(62);

if(1==dht_dat)

{

temp_float++;

while(1==dht_dat);

}

} //湿度小数接收完成

for (wei=0;wei<8;wei++)

{

chk_dat*=2;

while(0==dht_dat);

delay(62);

if(1==dht_dat)

{

chk_dat++;

while(1==dht_dat);

}

} //校验码接收完成

printf("湿度为:%d.%dn",(int)humi_int,(int)humi_float);

printf("温度为:%d.%dn",(int)temp_int,(int)temp_float);

printf("校验码为:%dn",(int)chk_dat);

 

 

 

delay_ms(1500);

}


引脚我就不多说了,注意必须有上拉,没上拉不行的,我试过了,AM2305可以不要上拉。

关键字:C8051F410  DHT11  温湿度传感器  驱动编写 引用地址:基于C8051F410的DHT11温湿度传感器驱动编写

上一篇:基于C8051F410的矩阵键盘设计
下一篇:基于C8051F410的am2305温湿度传感器的驱动编写

推荐阅读最新更新时间:2024-11-02 10:39

基于温度传感器MAX6613和IH3605的温湿度监控系统
引言 温、湿度控制广泛应用于人们的生产和生活中,人们使用温度计、湿度计来采集温度和湿度,通过人工操作加热、加湿、通风和降温设备来控制温湿度,这样不但控制精度低、实时性差,而且操作人员的劳动强度大。即使有些用户采用半导体二极管作温度传感器,但由于其互换性差,效果也不理想。本文提出了用集成温度传感器MAX6613和集成湿度传感器IH3605作为检测元件,结合ADuC824,构建温湿度监控系统的方法,该系统可以方便地实现温度、湿度的实时控制,无纸记录及语音报警,还可与上位机(PC机)通信,实现温度、湿度的打印、分析等功能。 系统组成及工作原理 温湿度监控系统的硬件原理如图1所示,由单片机系统(含键盘、液晶显示器、数据存储器和
[嵌入式]
基于MSP430单片机和HM1500传感器实现温湿度监测系统设计
引言 随着社会经济的发展和科学技术的不断进步,许多情况下都需要对环境的温湿度进行限定,因此,必须在某些特定环境安装温湿度报警器以进行监控。为此,本文利用集成温湿度传感器HM1500的测温快速、使用简便等特点,同时结合MSP430单片机强大的功能,设计了一个监控系统来对温湿度进行实时监控以进行超限报警。本系统测量准确、调试方便、可实时记录报警信息、方便工作人员排故,并可广泛应用于条件恶劣、人员不便进入的场合。 1 、系统结构和总体设计方案 本系统的总体设计方案如图1所示。本方案采用分别设计温度和湿度采样电路的方法,将集成温度传感器AD590采集得到的电流信号和湿度传感器HM1500采集到的电压信号转换为给定范围内的电压信号。然后
[单片机]
基于MSP430单片机和HM1500<font color='red'>传感器</font>实现<font color='red'>温湿度</font>监测系统设计
TI高精度、低功耗温湿度传感器HDC1050加入Mouser产品阵营
贸泽电子 (Mouser Electronics) 即日起开始分销Texas Instruments (TI) 的HDC1050低功耗数字湿度传感器。HDC1050器件集成了工厂预校准温湿度传感元件,以超低功耗实现高达14位的测量分辨率和出色的精度。 Mouser分销的Texas Instruments HDC1050低功耗数字湿度传感器采用3 mm 3 mm PWSON 6引脚DMB封装,在2.7V-5.5V电压范围下工作时能够以超低功耗提供出色的精度。此器件拥有 3 %的典型相对湿度 (RH) 精度和 0.2 C的温度精度,以及1.3 A (1sps、11位RH与温度测量时)的低电源电流,并通过I2C 接口输出。
[传感器]
串口驱动(Serial Drivers)编写实例解读
串口驱动(Serial Drivers)编写实例解读(连载:一) 。初始化 。定义支持的串口通道数 。初始化驱动的设备描述 。写你的设备初始化代码 。写入口程序(entry point routines) 。写ISRs(中断服务程序)来管理设备 。使用模板 wind/target/src/drv/ssio/templateSio.c 注意:串口驱动在VxWorks系统开始的代码里初始化 。XX_DRV结构每个通道有一个XX_CHAN 。每个XX_CHAN指向SIO_DRV_FUNCS 。SIO_DRV_FUNCS引诱驱动的入口(entry point) 。XX_DRV是xxDrv使用的中心数据结构 。xx_CHAN包括:
[嵌入式]
基于C8051F410单片机的光纤传输组件设计
光纤通信在现代通信领域的地位日趋重要,因其具有带宽大、信噪比低、抗干扰的特点在工程建设中应用广泛。某新品研制中需要一款能够同时传输多路模拟电压信号、脉冲控制信号及故障指示信号的传输组件,若采用传统的电缆传输方式将不可避免地存在体积大、重量沉及传输性能受外界电磁辐射干扰大的问题。基于以上情况,文中采用以光纤通信的方式设计了一款实用的传输组件,满足新品设计要求。 1 整体架构 光纤传输组件是指以光纤作为传输信道的功能器件,通常包括发射端、接收端、光纤跳线3部分。主要原理即是在采集端实现电光转换,在接收端实现光电转换,通过光纤实现两端通信的连接。由于其特殊的传输材质和模式,使得光纤传输组件可满足在某些特殊工作环境下的要求。组件主
[单片机]
基于<font color='red'>C8051F410</font>单片机的光纤传输组件设计
C51(DHT11温湿度+LCD1602
前言:软件延时真的很坑,校园网真的很烂 直接上码 LCD1602部分 (1).LCD1602.C #include reg52.h #include LCD1602.h #include INTRINS.h sbit LCD_RS=P2^6; sbit LCD_RW=P2^5; sbit LCD_E=P2^7; #define LCD_DatrPort P0 //指令函数 void LCD_WeitrCommand(unsigned char Command) { LCD_RS=0;//0写指令,1写数据 LCD_RW=0;//write mode LCD_DatrPort=Command; LCD_E
[单片机]
C51(<font color='red'>DHT11</font>)<font color='red'>温湿度</font>+LCD1602
STC单片机AD和EEPROM的驱动C程序设计与编写
stc单片机具有在应用编程,调试起来比较方便;带有10位AD;内部eeprom;可在1T/机器周期下工作,速度是传统51单片机的12倍;下面是我写的AD和EEPROM的驱动C代码: /*---------------------------------------------------------------- *File Name: stc_AD.c - *Description: A/D 转换程序 *Project: - *MCU type: STC12C5410AD -
[单片机]
基于C8051F410单片机实现集装箱的安全监测装置与系统设计
引言 随着当前物流行业的快速发展。作为物流主要运输方式的集装箱运输.其运输效率及货运安全性日益受到人们关注。近几年来,随着RFID技术的发展和推广,将RFID技术用于集装箱信息识别.实现集装箱运输的智能化已经成为各集装箱厂家竞相开发的目标。RFID技术是一种利用射频通信方法实现的非接触式、快速、实时和准确的采集与处理信息的自动射频识别技术。目前集装箱运输上对RFlD技术的应用仅仅限于利用阅读器射频信道识别电子标签内集装箱信息.并有实现其运输安全上的保证。本文设计了一种基于C8051F410单片机的双频固定式阅读器。该阅读器与智能集装箱安全设备及路标设备配合实用.不仅能快速识别集装箱信息,而且能监测集装箱内货物的安全。一旦集装箱被非
[单片机]
基于<font color='red'>C8051F410</font>单片机实现集装箱的安全监测装置与系统设计
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved