zigbee学习之DHT11

DHT11模块代码如下

#include <ioCC2530.h>

typedef unsigned char uchar;
typedef unsigned int  uint;

#define DATA_PIN P0_7

//温湿度定义
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");
    asm("nop");    
    asm("nop");
    asm("nop");
    asm("nop");    
    asm("nop"); 
}

void Delay_10us() //10 us延时
{
  Delay_us();
  Delay_us();
  Delay_us();
  Delay_us();
  Delay_us();
  Delay_us();
  Delay_us();
  Delay_us();
  Delay_us();
  Delay_us();   
}

void Delay_ms(uint Time)//n ms延时
{
    unsigned char i;
    while(Time--)
    {
        for(i=0;i<100;i++)
            Delay_10us();
    }
}

//温湿度传感
void COM(void)    // 温湿写入
{     
    uchar i;         
    for(i=0;i<8;i++)    
    {
        ucharFLAG=2; 
        while((!DATA_PIN)&&ucharFLAG++);
        Delay_10us();
        Delay_10us();
        Delay_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(19);  //>18MS
    DATA_PIN=1; 
    P0DIR &= ~0x80; //重新配置IO口方向
    Delay_10us();
    Delay_10us();                        
    Delay_10us();
    Delay_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 //没用成功读取,返回0
    {
        wendu_shi=0; 
        wendu_ge=0;
        
        shidu_shi=0; 
        shidu_ge=0;  
    } 
    
    P0DIR |= 0x80; //IO口需要重新配置 
}

时间: 2024-08-07 10:51:18

zigbee学习之DHT11的相关文章

zigbee学习之中断led

从今天开始我就得开始学习zigBee了,一直由于学校有两个创新项目需要我做,二是发现者现在无线传输还是比较有优势的,顺便学习一下,多掌握点技能毕竟不是坏处,学习zigbee的同时我也得继续研究学习Linux驱动,也会写一些相关的文章.下面是我自己的总结,不会给你一行一行的分析代码,我只是把我理解的东西写上来,也是一些重点,加上自己的总结.不喜欢的勿喷,请多多指教,第一天学习zigbee感觉上手还是挺快的,毕竟有51加上stm32的硬件基础. #define LED1 P1_0       //

zigbee学习之串口通信

纠错:U0DBUF发送缓冲区,但是我在中文手册手册上没有找的到这个寄存器,手册上只有U0BUF,U0BUF编译会出错, 我去查了下英文手册,才发现原来是翻译人员翻译错误了,只有U0DBUF,建议看英文手册. 串口通信: P_2 接收端 P_3发送端(单片机和电脑的电频不同,通过PL2303转换,这是针对zigbee模块的 ,想51单片机可以通过232,485来转换). TTL 输出:低电平小于0.8,高电平大于2.4 .TTL 输入:低电平小于1.2,高电平大于2 P_2和P_3可以复用到串口,

zigbee学习之OLED

OLED模块如下: #include <ioCC2530.h> #define LCD_SCL P1_2       //SCLK  时钟 D0(SCLK) #define LCD_SDA P1_3       //SDA   D1(MOSI) 数据 #define LCD_RST P1_7       //_RES  hardware reset   复位  #define LCD_DC  P0_0       //A0  H/L 命令数据选通端,H:数据,L:命令 #define XLev

zigbee学习之ADC采集芯片内部的温度

这个章节没得什么讲得,用的时候记得调用模块,自己配置一些寄存器. ADC对自身芯片温度的采集: void InitClock(void)//还是原来的味道 {        CLKCONCMD &= ~0x40;              //设置系统时钟源为 32MHZ晶振     while(CLKCONSTA & 0x40);         //等待晶振稳定      CLKCONCMD &= ~0x47;              //设置系统主时钟频率为 32MHZ }

zigbee学习之睡眠定时器

睡眠定时器: void InitSleepTimer(void)  {      ST2 = 0x00; //设置时间     ST1 = 0x00;      ST0 = 0x00;      EA = 1;     //开中断      STIE = 1;   //睡眠定时器中断使能 0: 中断禁止     1: 中断使能     STIF = 0;   //睡眠定时器中断标志 0: 无中断未决   1: 中断未决 } void SysPowerMode(uchar mode) //设置系统

zigbee学习之看门狗定时器

看门狗的理解: 用的是独立的时钟源. void Init_Watchdog(void) //初始化看门狗 { WDCTL = 0x00;       //打开IDLE==0置看门狗 WDCTL |= 0x08;      //看起看门狗模式 WDCTL &= ~0x03;      //1s没有喂狗就发生复位 } void FeetDog(void) //喂狗 {      WDCTL = 0xa0;       //清除定时器.当0xA跟随0x5写到这些位,定时器被清除     WDCTL =

zigbee学习之定时器

以下是我自己的总结,我不会分析代码,代码简单讲起来没有好大意思,主要是抓住核心知识框架. 脉冲:32MHZ就是一秒钟32000000个脉冲 时钟周期:1/f=1/32us 指令周期等于时钟周期(在51中是机械周期=12*时钟周期) 内部是16MHZ,定时器内部一个脉冲,定时器计数就加一 定时器 1(查询法) T1CTL寄存器 定时器1控制和状态: T1CTL (Bit 3:2) 分频器划分值,如下:  00: 标记频率/1  01: 标记频率/8  10: 标记频率/32  11: 标记频率/1

zigbee学习总结

我们修改代码主要是在SampleApp.c这个文件夹下面, SampleApp_ProcessEvent() 用户应用任务的事件处理函数 下面有两个系统消息 消息一SYS_EVENT_MSG 普通的事件 if ( events & SYS_EVENT_MSG ) //接收系统消息再进行判断 //接收属于本应用任务 SampleApp的消息,以 SampleApp_TaskID标记  MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( Sampl

【STM32 .Net MF开发板学习-16】Zigbee遥控智能小车

Zigbee技术目前在物联网领域和RFID一样,受关注度非常高.日前中科院上海微系统与信息技术研究所.无锡物联网产业研究院等传感器网络标准工作组成员单位联合发布了名为VW628.WSNS1_SCBR的两款中国自主知识产权的无线传感网SoC芯片,其中WSNS1_SCBR为中国首款符合IEEE802.15.4g标准的验证型全集成传感网节点SoC芯片. 其实封装好的Zigbee模块,使用起来和操作串口一样,特别是我们把其通信模式设置为透明传输模式,这时候我们已经感觉不到是在用Zigbee模块,而觉得是