找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1344|回复: 0
打印 上一主题 下一主题
收起左侧

STM32F401VE+DHT11温湿度自动报警程序

[复制链接]
跳转到指定楼层
楼主
以下是我用STM32F401VE与DHT11实现的温湿度自动报警,与按键点灯,全灭,流水灯,正反流水灯的仿真与代码分享

#include "stm32f4xx.h"                  // Device header
#include "misc.h"
#include "stm32f4xx_gpio.h"
#include "stm32f4xx_rcc.h"
#include "stm32f4xx_exti.h"
#include "stm32f4xx_syscfg.h"

typedef struct
{
        u8 humidity_int;
        u8 humidity_float;
        u8 temperature_int;
        u8 temperature_float;
        u8 crc;
}
DHT11_Type;

//unsigned char DHT11_ReadData(void);
void InitKEY();
void InitLED();
void state1();
void state2();
void Init_EXTIX_TI();
void InitLED_DHT11();
void DHT11_start();
int DHT11_SlaveResp();
int DHT11_Read(DHT11_Type * data);
//unsigned char DHT11_ReadByte();
void DHT11_ReadData();
void DATAPin_Mode_Out();
void DATAPin_Mode_In();
void SysTick_Init();
void delay_ms(unsigned int ms);
void delay_us(unsigned int us);
void delay_s(unsigned int s);

int exti0_flag = 0;
int exti1_flag = 0;
int exti2_flag = 0;
int exti3_flag = 0;            //???
int exti4_flag = 0;


int temp;  // ??
int humi;  //??


void Delay(int n)                //??
{
        int tt,jj;
        for(tt=0;tt<n;tt++)
                for(jj=0;jj<110;jj++);
}


int main()
{
        Init_EXTIX_TI();
        InitKEY();
        InitLED();
        InitLED_DHT11();
        SysTick_Init();
        
        while (1)
        {
                if (exti0_flag == 1)
                {
                        GPIO_ResetBits(GPIOB,GPIO_Pin_0);
                }else if (exti1_flag == 1)
                {
                        GPIO_SetBits(GPIOB,GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3);
                }else if (exti3_flag == 1 )
                {
                        state2();
                }else if (exti2_flag == 1 || exti3_flag == 2)
                {
                        state1();
                }else if (exti4_flag == 1)
                {

                        DHT11_ReadData();

                }
               

        }
}


void Init_EXTIX_TI(void)                //????
{
        EXTI_InitTypeDef EXTI_InitStructure;        
        NVIC_InitTypeDef NVIC_InitStructure;
        
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);

        SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0 | EXTI_PinSource1 | EXTI_PinSource2 | EXTI_PinSource3 | EXTI_PinSource4);
         
        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;        
        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
        EXTI_InitStructure.EXTI_Line = EXTI_Line0 | EXTI_Line1 | EXTI_Line2 | EXTI_Line3 | EXTI_Line4;
        EXTI_InitStructure.EXTI_LineCmd = ENABLE;
        EXTI_Init(&EXTI_InitStructure);
         
        NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;        
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;        
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);        
        
        NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn;        
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;        
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);        
        
        NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;        
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;        
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);        
        
        NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;        
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;        
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);        
        
        NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn;        
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;        
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);        
}


void EXTI0_IRQHandler(void)           //??????
{
//        if(EXTI_GetITStatus(EXTI_Line0)!= RESET)
//        {
//                GPIO_ResetBits(GPIOB,GPIO_Pin_0);
//        }
        if(EXTI_GetITStatus(EXTI_Line0)!= RESET)
        {
                exti1_flag = 0;
                exti2_flag = 0;
                exti3_flag = 0;
                exti4_flag = 0;
               
                exti0_flag = 1;
                EXTI_ClearITPendingBit(EXTI_Line0);
        }
        
}

void EXTI1_IRQHandler(void)           //??????
{
//        if (EXTI_GetITStatus(EXTI_Line1)!= RESET)
//        {
//                GPIO_SetBits(GPIOB,GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3);
//        }
        if (EXTI_GetITStatus(EXTI_Line1)!= RESET)
        {
                exti0_flag = 0;
                exti2_flag = 0;
                exti3_flag = 0;
                exti4_flag = 0;
               
                exti1_flag = 1;
                EXTI_ClearITPendingBit(EXTI_Line1);
        }
        
}

void EXTI2_IRQHandler(void)
{
        if (EXTI_GetITStatus(EXTI_Line2)!= RESET)
        {
                exti0_flag = 0;
                exti1_flag = 0;
                exti3_flag = 0;
                exti4_flag = 0;
               
                exti2_flag = 1;
                EXTI_ClearITPendingBit(EXTI_Line2);
        }
//        if (EXTI_GetITStatus(EXTI_Line2)!= RESET)
//        {
//                state1();
//        }
        
}        

void EXTI3_IRQHandler(void)
{
        if (EXTI_GetITStatus(EXTI_Line3)!= RESET)
        {
//                exti3_flag ++;
                exti0_flag = 0;
                exti1_flag = 0;
                exti2_flag = 0;
                exti4_flag = 0;
               
                if (exti3_flag == 0)
                        exti3_flag = 1;
                else if (exti3_flag == 1)
                        exti3_flag = 2;
                else if (exti3_flag == 2)
                {
                        exti3_flag = 1;
                }
                EXTI_ClearITPendingBit(EXTI_Line3);
        }
//        if (EXTI_GetITStatus(EXTI_Line3)!= RESET)
//        {
//                exti3_flag ++;
//                if ( exti3_flag%2 == 1)
//                {
//                        state2();
//                }else if (exti3_flag%2 == 0)
//                {
//                        state1();
//                }
//        }
        
}

void EXTI4_IRQHandler(void)
{
//        if (EXTI_GetITStatus(EXTI_Line4)!= RESET)
//        {
                exti0_flag = 0;
                exti1_flag = 0;
                exti2_flag = 0;
                exti3_flag = 0;
               
                exti4_flag = 1;
        
          EXTI_ClearITPendingBit(EXTI_Line4);
//        }
        
}        

void state1()
{
        GPIO_ResetBits(GPIOB,GPIO_Pin_0);
        GPIO_SetBits(GPIOB, GPIO_Pin_1);
        GPIO_SetBits(GPIOB, GPIO_Pin_2);
        GPIO_SetBits(GPIOB, GPIO_Pin_3);
//        delay_ms(100);
        Delay(5000);
        
        GPIO_ResetBits(GPIOB,GPIO_Pin_1);
        GPIO_SetBits(GPIOB, GPIO_Pin_0);
        GPIO_SetBits(GPIOB, GPIO_Pin_2);
        GPIO_SetBits(GPIOB, GPIO_Pin_3);
        Delay(5000);
        
        GPIO_ResetBits(GPIOB,GPIO_Pin_2);
        GPIO_SetBits(GPIOB, GPIO_Pin_1);
        GPIO_SetBits(GPIOB, GPIO_Pin_0);
        GPIO_SetBits(GPIOB, GPIO_Pin_3);
        Delay(5000);
        
        GPIO_ResetBits(GPIOB,GPIO_Pin_3);
        GPIO_SetBits(GPIOB, GPIO_Pin_1);
        GPIO_SetBits(GPIOB, GPIO_Pin_2);
        GPIO_SetBits(GPIOB, GPIO_Pin_0);
        Delay(5000);
}

void state2()                 //?????2
{
                GPIO_ResetBits(GPIOB,GPIO_Pin_3);
                GPIO_SetBits(GPIOB, GPIO_Pin_1);
                GPIO_SetBits(GPIOB, GPIO_Pin_2);
                GPIO_SetBits(GPIOB, GPIO_Pin_0);
                Delay(5000);
               
                GPIO_ResetBits(GPIOB,GPIO_Pin_2);
                GPIO_SetBits(GPIOB, GPIO_Pin_0);
                GPIO_SetBits(GPIOB, GPIO_Pin_1);
                GPIO_SetBits(GPIOB, GPIO_Pin_3);
                Delay(5000);
               
                GPIO_ResetBits(GPIOB,GPIO_Pin_1);
                GPIO_SetBits(GPIOB, GPIO_Pin_0);
                GPIO_SetBits(GPIOB, GPIO_Pin_2);
                GPIO_SetBits(GPIOB, GPIO_Pin_3);
                Delay(5000);
        
                GPIO_ResetBits(GPIOB,GPIO_Pin_0);
                GPIO_SetBits(GPIOB, GPIO_Pin_1);
                GPIO_SetBits(GPIOB, GPIO_Pin_2);
                GPIO_SetBits(GPIOB, GPIO_Pin_3);
                Delay(5000);
}

void InitKEY()                 //?????,PA0~PA4
{
        GPIO_InitTypeDef  GPIO_InitStructure;
        
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);   
        
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
        
        GPIO_Init(GPIOA, &GPIO_InitStructure);
}

void InitLED()             //???LED,PB0~PB3
{
        GPIO_InitTypeDef  GPIO_InitStructure;
        
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);   
        
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
        
        GPIO_SetBits(GPIOB,GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3);
        
        GPIO_Init(GPIOB, &GPIO_InitStructure);
}

void InitLED_DHT11()               //DHT11???,PD7~PD8
{
        GPIO_InitTypeDef  GPIO_InitStructure;
        
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);   
        
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
        
        GPIO_SetBits(GPIOD,GPIO_Pin_7 | GPIO_Pin_8);
        
        GPIO_Init(GPIOD, &GPIO_InitStructure);

}
        
///////////////////////////DHT11????////////////////////////////////////////
//1) ???PD0?????????????        
void DATAPin_Mode_Out()
{
        GPIO_InitTypeDef aaa;
        
        aaa.GPIO_Mode = GPIO_Mode_OUT;
        aaa.GPIO_OType = GPIO_OType_PP;
        aaa.GPIO_Pin = GPIO_Pin_0 ;
        aaa.GPIO_Speed = GPIO_Speed_50MHz;
        
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
        
        GPIO_Init(GPIOD , &aaa);
        

}

//2) ???PD0?????????
void DATAPin_Mode_In()
{
        GPIO_InitTypeDef aaa;
        
        aaa.GPIO_Mode = GPIO_Mode_IN;
        //aaa.GPIO_OType = GPIO_OType_PP;
        aaa.GPIO_Pin = GPIO_Pin_0 ;
        aaa.GPIO_Speed = GPIO_Speed_50MHz;
        aaa.GPIO_PuPd = GPIO_PuPd_UP;
        
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
        
        GPIO_Init(GPIOD , &aaa);

}

void DHT11_start()        //DHT11????
{
        //??PD0?????
        DATAPin_Mode_Out();
        
        //???? ????????
        GPIO_SetBits(GPIOD, GPIO_Pin_0);
        delay_ms(20);
        

        //??;????,??????
        GPIO_ResetBits(GPIOD, GPIO_Pin_0);
        delay_ms(20);        //??18ms
        
        //????????DHT11??
        GPIO_SetBits(GPIOD, GPIO_Pin_0);
        delay_us(30);        //??20~40us
}

//???????? ==>??????????????
int  DHT11_SlaveResp()
{
        int tmp = 0;
        //??PD0?????
        DATAPin_Mode_In();
        
        //1) ??PD0???DHT11??
        while(1)
        {
                delay_us(1);
               
                if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_0) == 0)        //?????,?????
                {
                        break;
                }
                tmp++;
                if(tmp > 99)        //??tmp>99,????
                {
                        return -1;        //????-1,????????
                }
        }
        tmp = 0;
        
        //2) ??PD0???????100us????????
        while(1)
        {
                delay_us(1);
               
                if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_0) == 1)        //?????,?????
                {
                        break;
                }
                tmp++;
                if(tmp > 99)        //??tmp>99,????
                {
                        return -1;        //????-1,????????
                }
        
        }
        tmp = 0;
        //3) ??PD0?????DHT11??
        while(1)
        {
                delay_us(1);
               
                if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_0) == 0)        //?????,?????
                {
                        break;
                }
                tmp++;
                if(tmp > 99)        //??tmp>99,????
                {
                        return -1;        //????-1,????????
                }
        }
        
        return 0;        //??0,??????????,??????,??-1.??????????
}


unsigned char tmp = 0;
//??????? 8bit
unsigned char DHT11_ReadByte()
{
        int i;
        unsigned char tmp = 0;//?????????  0000 0000

        for(i=0; i<8; i++)
        {
                //?????????
                while(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_0) == 0);
        
                //???????? 0, ??1
                delay_us(30);
               
                if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_0) == 1)//????????1
                {
                        tmp |= 0x01<<(7-i);
                        while(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_0) == 1);//????????????
                }
        }
               
        return tmp;        //??????????
        
}



unsigned char DHT11_Data[5];

void DHT11_ReadData()        
{
        DHT11_start();
        
        DHT11_SlaveResp();

        DHT11_Data[0] = DHT11_ReadByte();
        DHT11_Data[1] = DHT11_ReadByte();
        DHT11_Data[2] = DHT11_ReadByte();
        DHT11_Data[3] = DHT11_ReadByte();
        DHT11_Data[4] = DHT11_ReadByte();
        
        if(DHT11_Data[0] + DHT11_Data[1]+ DHT11_Data[2]+ DHT11_Data[3] != DHT11_Data[4])
        {
                while(1)
                {
                        GPIO_SetBits(GPIOA, GPIO_Pin_8);
                        delay_us(10);
                        GPIO_ResetBits(GPIOA, GPIO_Pin_8);
                }
        }
        
  if(DHT11_Data[0]> 60)
        {
                GPIO_ResetBits(GPIOD, GPIO_Pin_7);
        }else GPIO_SetBits(GPIOD, GPIO_Pin_7);
  if(DHT11_Data[2] > 30)
        {
                GPIO_ResetBits(GPIOD, GPIO_Pin_8);
        }else GPIO_SetBits(GPIOD, GPIO_Pin_8);
}

void SysTick_Init()
{
        SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);
}

void delay_us(unsigned int us)                 //?????
{
        unsigned int set_time = 84*us;
        unsigned int tmp;
        
        SysTick->LOAD = set_time;
        SysTick->VAL = 0;
        SysTick->CTRL |= 0x01;
        
        while(1)
        {
                tmp = SysTick->CTRL;
               
                if(tmp & 0x01<<16)
                {
                        break;
                }
        }
        
        SysTick->VAL = 0;
        SysTick->CTRL &= (~0x01);
}


void delay_ms(unsigned int ms)
{
        unsigned int set_time = 84000*ms;
        unsigned int tmp;
        
        SysTick->LOAD = set_time;
        SysTick->VAL = 0;
        SysTick->CTRL |= 0x01;
        
        while(1)
        {
                tmp = SysTick->CTRL;
               
                if(tmp & 0x01<<16)
                {
                        //GPIO_ToggleBits(GPIOB, GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3);
                        break;
                }
        }
        
        SysTick->VAL = 0;
        SysTick->CTRL &= (~0x01);
}

void delay_s(unsigned int s)
{
        while (s--)
        {
                delay_ms(100);
                delay_ms(100);
                delay_ms(100);
                delay_ms(100);
                delay_ms(100);
                delay_ms(100);
                delay_ms(100);
                delay_ms(100);
                delay_ms(100);
                delay_ms(100);
        }
}


//#include <stm32f4xx.h>                // Device header
//#include "stm32f4xx_exti.h"
//#include "stm32f4xx.h"                  // Device header
//#include "misc.h"
//#define EXTI_LINENONE    ((uint32_t)0x00000)  /* No interrupt selected */
//#define __STM32F4xx_SYSCFG_H
//#include "stm32f4xx_gpio.h"             //
//#include "stm32f4xx_rcc.h"              //
//int flag2=0;
//int Tem = 8;
//int Hum;
//int Read_Hum_Tem;
//int flag3=0;
//int flag4=0;
//int times =8;
//void init_key();
//void init_led1();
//void init_led2();
//void InitLED_DHT11();
//void DHT11_MasterStart();
//int  DHT11_SlaveResp();
//unsigned char DHT11_ReadByte();
//void DHT11_ReadData();
//void DATAPin_Mode_Out();
//void DATAPin_Mode_In();
//void SysTick_Init();
//void delay_ms();
//void delay_us();
//void delay_s();
//void delay_s1();
//void s_0();
//void s_1();
//void s_2();
//void s_3_down();
//void s_3_up();
//int i,a,b,c;
//int value;
//void Init_EXTIX_TI(void);
//void  EXTI3_IRQHandler(void);
//void EXTI2_IRQHandler(void) ;
//void EXTI4_IRQHandler(void);
//unsigned char table[]="Tem 00 Hum 00";

//void delay_s1(int n)                                                          //??
//{
//        int i;
//        for(i=0;i<n;i++)
//        {
//        int x=0x12345;
//                while(x--);
//        }
//}

//void Systick_Init()//????
//{
//        SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);
//}
////2,?????
//void delay_us(unsigned int us)
//{
//        unsigned int set_time = 84*us;
//        unsigned int tmp;
//        //1,?????
//        SysTick->LOAD = set_time;        //?????SysTick->LOAD? ?? 24bit
//        
//        SysTick->VAL = 0;        //???SysTick->VAL???,?????????????SysTick->LOAD??
//        
//        //2,???????
//        //SysTick->CTRL = SysTick->CTRL | 0x01;        //??????1 --?|  ?????
//        SysTick->CTRL |= 0x01;
//        
//        //3,??????
//        while(1)
//        {
//                tmp = SysTick->CTRL;        //???16????1?
//               
//                if(tmp & 0x01<<16)         //????????,????????16??1,??????,??????
//                {
//                        break;        
//                }
//               
//        }
//        //4,???????
//        SysTick->VAL = 0;
//        
//        SysTick->CTRL &= (~0x01);        //???????0

//}

////3,?????
//void delay_ms(unsigned int ms)        //ms????????199ms
//{
//        unsigned int set_time = 84000*ms;
//        unsigned int tmp;
//        //1,?????
//        SysTick->LOAD = set_time;        //?????SysTick->LOAD? ?? 24bit
//        
//        SysTick->VAL = 0;        //???SysTick->VAL???,?????????????SysTick->LOAD??
//        
//        //2,???????
//        //SysTick->CTRL = SysTick->CTRL | 0x01;        //??????1 --?|  ?????
//        SysTick->CTRL |= 0x01;
//        
//        //3,??????
//        while(1)
//        {
//                tmp = SysTick->CTRL;        //???16????1?
//               
//                if(tmp & 0x01<<16)         //????????,????????16??1,??????,??????
//                {
//                        break;        
//                }
//               
//        }
//        //4,???????
//        SysTick->VAL = 0;
//        
//        SysTick->CTRL &= (~0x01);        //???????0

//}

////4, ????
//void delay_s(unsigned int s)
//{
//        while(s--)
//        {
//                delay_ms(100);
//                delay_ms(100);
//                delay_ms(100);
//                delay_ms(100);
//                delay_ms(100);
//               
//                delay_ms(100);
//                delay_ms(100);
//                delay_ms(100);
//                delay_ms(100);
//                delay_ms(100);
//        }

//}



//void init_led1()
//{
//  GPIO_InitTypeDef GPIO_InitStructure;//led(pb0)?a?3???????3???????//????gpio???1??
//        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);//gpio3????
//        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;//???o???????|???a
//        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//????3????
//        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//????3?
//        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//?3????
//        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;//?T????
//        GPIO_Init(GPIOB, &GPIO_InitStructure);//
//}

//void init_led2()
//{
//  GPIO_InitTypeDef GPIO_InitStructure;//led(pb0)?a?3???????3???????//????gpio???1??
//        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);//gpio3????
//        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;//???o???????|???a
//        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//????3????
//        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//????3?
//        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//?3????
//        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;//?T????
//        GPIO_Init(GPIOD, &GPIO_InitStructure);//
//}



//void init_key()
//{
//  GPIO_InitTypeDef GPIO_InitStructure;
//        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//gpio3????
//        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;//???o???????|???a
//        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//????3????
//        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;//?T????
//        GPIO_Init(GPIOA, &GPIO_InitStructure);//        
//}

//void Init_EXTIX_TI(void)                //????
//{
//        EXTI_InitTypeDef EXTI_InitStructure;        
//        NVIC_InitTypeDef NVIC_InitStructure;
//        
//  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);

//        SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA,EXTI_PinSource2 | EXTI_PinSource3 | EXTI_PinSource4);
//         
//        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;        
//        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
//        EXTI_InitStructure.EXTI_Line = EXTI_Line2 | EXTI_Line3 | EXTI_Line4;
//        EXTI_InitStructure.EXTI_LineCmd = ENABLE;
//        EXTI_Init(&EXTI_InitStructure);
//        
//        NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;        
//        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
//        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;        
//        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
//        NVIC_Init(&NVIC_InitStructure);        
//        
//        NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;        
//        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
//        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 4;        
//        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
//        NVIC_Init(&NVIC_InitStructure);        
//        
//        NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn;        
//        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
//        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 5;        
//        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
//        NVIC_Init(&NVIC_InitStructure);        
//}

//void EXTI2_IRQHandler(void)
//{
//        if (EXTI_GetITStatus(EXTI_Line2)!= RESET)
//        {
//                flag2 = 1;
//        }

//        EXTI_ClearITPendingBit(EXTI_Line2);
//}        

//void EXTI3_IRQHandler(void)
//{
//        if (EXTI_GetITStatus(EXTI_Line3)!= RESET)
//        {

//                if (flag3 == 0)
//                {
//                flag3 = 1;
//                }
//                else
//                {
//                flag3 = 0;
//                }
//        }
//        EXTI_ClearITPendingBit(EXTI_Line3);
//}


//void EXTI4_IRQHandler(void)
//{
//                flag4=1;
//                flag3=0;
//                flag2=0;
//          EXTI_ClearITPendingBit(EXTI_Line4);
//}

//int main()
//{
//  Init_EXTIX_TI();
//        init_key();
//        init_led1();
//        init_led2();
//        //Systick_Init();
//        GPIO_SetBits(GPIOB, GPIO_Pin_All);
//        GPIO_SetBits(GPIOD, GPIO_Pin_All);
//        while(1)
//        {
//                times=4;
//                if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)==0)         
//                {
//                        s_0();
//                }

//          if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1)==0)
//                {
//                 s_1();
//                }
//               
//                if (flag2 == 1&&flag3 == 0)
//                {
//                   s_2();
//                }
//               
//                if (flag3 == 1)
//                 {
//                         s_3_down();
//                         flag2 =2;
//                        }
//    if (flag2 == 2&&flag3 == 0)
//                {
//                         s_3_up();
//                }
//                if(flag4==1)
//                {
//          DHT11_ReadData();
//                }
//        }
//        }



//void s_0()
//{
//  GPIO_ResetBits(GPIOB,GPIO_Pin_0);//???,pb0?
//}

//void s_1()
//{
//     GPIO_SetBits(GPIOB,GPIO_Pin_0);
//                 GPIO_SetBits(GPIOB,GPIO_Pin_1);
//                 GPIO_SetBits(GPIOB,GPIO_Pin_2);
//                 GPIO_SetBits(GPIOB,GPIO_Pin_3);
//}

//void s_2()
//{
//        GPIO_ResetBits(GPIOB,GPIO_Pin_0);                    //PA0???
//                                GPIO_SetBits(GPIOB,GPIO_Pin_1);  
//                                GPIO_SetBits(GPIOB,GPIO_Pin_2);  
//                                GPIO_SetBits(GPIOB,GPIO_Pin_3);  
//        delay_s1(10);
//                        
//        GPIO_SetBits(GPIOB,GPIO_Pin_0);                    //PA0???
//                                GPIO_ResetBits(GPIOB,GPIO_Pin_1);  
//                                GPIO_SetBits(GPIOB,GPIO_Pin_2);  
//                                GPIO_SetBits(GPIOB,GPIO_Pin_3);  
//          delay_s1(10);

//        GPIO_SetBits(GPIOB,GPIO_Pin_0);                    //PA0???
//                                GPIO_SetBits(GPIOB,GPIO_Pin_1);  
//                                GPIO_ResetBits(GPIOB,GPIO_Pin_2);  
//                                GPIO_SetBits(GPIOB,GPIO_Pin_3);  
//          delay_s1(10);                        
//                        
//        GPIO_SetBits(GPIOB,GPIO_Pin_0);                    //PA0???
//                                GPIO_SetBits(GPIOB,GPIO_Pin_1);  
//                                GPIO_SetBits(GPIOB,GPIO_Pin_2);  
//                                GPIO_ResetBits(GPIOB,GPIO_Pin_3);  
//          delay_s1(10);
//}

//void s_3_up()
//{
//        GPIO_ResetBits(GPIOB,GPIO_Pin_0);                    //PA0???
//                                GPIO_SetBits(GPIOB,GPIO_Pin_1);  
//                                GPIO_SetBits(GPIOB,GPIO_Pin_2);  
//                                GPIO_SetBits(GPIOB,GPIO_Pin_3);  
//        delay_s1(10);
//                        
//        GPIO_SetBits(GPIOB,GPIO_Pin_0);                    //PA0???
//                                GPIO_ResetBits(GPIOB,GPIO_Pin_1);  
//                                GPIO_SetBits(GPIOB,GPIO_Pin_2);  
//                                GPIO_SetBits(GPIOB,GPIO_Pin_3);  
//          delay_s1(10);

//        GPIO_SetBits(GPIOB,GPIO_Pin_0);                    //PA0???
//                                GPIO_SetBits(GPIOB,GPIO_Pin_1);  
//                                GPIO_ResetBits(GPIOB,GPIO_Pin_2);  
//                                GPIO_SetBits(GPIOB,GPIO_Pin_3);  
//          delay_s1(10);                        
//                        
//        GPIO_SetBits(GPIOB,GPIO_Pin_0);                    //PA0???
//                                GPIO_SetBits(GPIOB,GPIO_Pin_1);  
//                                GPIO_SetBits(GPIOB,GPIO_Pin_2);  
//                                GPIO_ResetBits(GPIOB,GPIO_Pin_3);  
//          delay_s1(10);
//                }

//void s_3_down()
//{
//    GPIO_ResetBits(GPIOB,GPIO_Pin_3);
//                GPIO_SetBits(GPIOB, GPIO_Pin_1);
//                GPIO_SetBits(GPIOB, GPIO_Pin_2);
//                GPIO_SetBits(GPIOB, GPIO_Pin_0);
//                 delay_s1(10);        
//               
//                GPIO_ResetBits(GPIOB,GPIO_Pin_2);
//                GPIO_SetBits(GPIOB, GPIO_Pin_0);
//                GPIO_SetBits(GPIOB, GPIO_Pin_1);
//                GPIO_SetBits(GPIOB, GPIO_Pin_3);
//                 delay_s1(10);        
//               
//                GPIO_ResetBits(GPIOB,GPIO_Pin_1);
//                GPIO_SetBits(GPIOB, GPIO_Pin_0);
//                GPIO_SetBits(GPIOB, GPIO_Pin_2);
//                GPIO_SetBits(GPIOB, GPIO_Pin_3);
//                 delay_s1(10);        
//        
//                GPIO_ResetBits(GPIOB,GPIO_Pin_0);
//                GPIO_SetBits(GPIOB, GPIO_Pin_1);
//                GPIO_SetBits(GPIOB, GPIO_Pin_2);
//                GPIO_SetBits(GPIOB, GPIO_Pin_3);
//                 delay_s1(10);        
//}               




//void DATAPin_Mode_Out()
//{
//        GPIO_InitTypeDef aaa;
//        
//        aaa.GPIO_Mode = GPIO_Mode_OUT;
//        aaa.GPIO_OType = GPIO_OType_PP;
//        aaa.GPIO_Pin = GPIO_Pin_0 ;
//        aaa.GPIO_Speed = GPIO_Speed_50MHz;
//        
//        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
//        
//        GPIO_Init(GPIOD , &aaa);
//        

//}

////2) ???PD0???????
//void DATAPin_Mode_In()
//{
//        GPIO_InitTypeDef aaa;
//        
//        aaa.GPIO_Mode = GPIO_Mode_IN;
//        //aaa.GPIO_OType = GPIO_OType_PP;
//        aaa.GPIO_Pin = GPIO_Pin_0 ;
//        aaa.GPIO_Speed = GPIO_Speed_50MHz;
//        aaa.GPIO_PuPd = GPIO_PuPd_UP;
//        
//        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
//        
//        GPIO_Init(GPIOD , &aaa);

//}

//void DHT11_Start()        //DHT11????
//{
//        //??PD0?????
//        DATAPin_Mode_Out();
//        
//        //????,????????
//        GPIO_SetBits(GPIOD, GPIO_Pin_0);
//        delay_ms(20);
//        

//        //??????,??????
//        GPIO_ResetBits(GPIOD, GPIO_Pin_0);
//        delay_ms(20);        //??18ms
//        
//        //????????DHT11??
//        GPIO_SetBits(GPIOD, GPIO_Pin_0);
//        delay_us(30);        //??20~40us
//}

////???????? ==>??????????????
//int  DHT11_SlaveResp()
//{
//        int tmp = 0;
//        //??PD0?????
//        DATAPin_Mode_In();
//        
//        //1) ??PD0???DHT11??
//        while(1)
//        {
//                delay_us(1);
//               
//                if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_0) == 0)        //?????,?????
//                {
//                        break;
//                }
//                tmp++;
//                if(tmp > 99)        //??tmp>99,??
//                {
//                        return -1;
//                }
//        }
//        tmp = 0;
//        
//        //2) ??PD0????100us???????
//        while(1)
//        {
//                delay_us(1);
//               
//                if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_0) == 1)        //??,?????
//                {
//                        break;
//                }
//                tmp++;
//                if(tmp > 99)        //??tmp>99,??
//                {
//                        return -1;        
//                }
//        
//        }
//        tmp = 0;
//        //3) ??PD0?????DHT11??
//        while(1)
//        {
//                delay_us(1);
//               
//                if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_12) == 0)        
//                {
//                        break;
//                }
//                tmp++;
//                if(tmp > 99)        
//                {
//                        return -1;        
//                }
//        }
//        
//        return 0;        //???????
//}
//unsigned char tmp = 0;
////?????? 8bit
//unsigned char DHT11_ReadByte()
//{
//        int i;
//        unsigned char tmp = 0;//  0000 0000

//        for(i=0; i<8; i++)
//        {
//                //?????????
//                while(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_0) == 0);
//        
//                //???0??1
//                delay_us(30);
//               
//                if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_0) == 1)//?1
//                {
//                        tmp |= 0x01<<(7-i);
//                        while(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_0) == 1);//?????????
//                }
//               
//        
//        }
//               
//        return tmp;        //??????????
//        
//}

//u8 d=0;
//unsigned char DHT11_Data[5];
//int i;
//void DHT11_ReadData()        //?????40bit???
//{
//        unsigned char DHT11_Data[5];
//        
//        DHT11_Start();//1,STM32??????
//        
//        DHT11_SlaveResp();//2,??DHT11????

//        
//        DHT11_Data[0] = DHT11_ReadByte();//3,??5??????
//        DHT11_Data[1] = DHT11_ReadByte();
//        DHT11_Data[2] = DHT11_ReadByte();
//        DHT11_Data[3] = DHT11_ReadByte();
//        DHT11_Data[4] = DHT11_ReadByte();
//        
//        if(DHT11_Data[0] + DHT11_Data[1]+ DHT11_Data[2]+ DHT11_Data[3] != DHT11_Data[4])//4,????? DHT11_Data[0] + DHT11_Data[1]+ DHT11_Data[2]+ DHT11_Data[3] = DHT11_Data[4]
//        {
//                while(1)
//                {
//                  
//                GPIO_SetBits(GPIOA, GPIO_Pin_8);
//                delay_s1(10);
//                GPIO_ResetBits(GPIOA, GPIO_Pin_8);
//                }
//        }

//        
//  if(DHT11_Data[0]> 60)//5????,????
//        {
//                GPIO_ResetBits(GPIOD, GPIO_Pin_2);
//                //GPIO_SetBits(GPIOB, GPIO_Pin_7);
//        }
//  if(DHT11_Data[2] > 30)
//        {
//                GPIO_ResetBits(GPIOD, GPIO_Pin_1);
////                GPIO_SetBits(GPIOB, GPIO_Pin_7);
//        }
//}

        

#include "stm32f4xx.h"                  // Device header
#include "misc.h"
#include "stm32f4xx_gpio.h"
#include "stm32f4xx_rcc.h"
#include "stm32f4xx_exti.h"
#include "stm32f4xx_syscfg.h"

typedef struct
{
        u8 humidity_int;
        u8 humidity_float;
        u8 temperature_int;
        u8 temperature_float;
        u8 crc;
}
DHT11_Type;

//unsigned char DHT11_ReadData(void);
void InitKEY();
void InitLED();
void state1();
void state2();
void Init_EXTIX_TI();
void InitLED_DHT11();
void DHT11_start();
int DHT11_SlaveResp();
int DHT11_Read(DHT11_Type * data);
//unsigned char DHT11_ReadByte();
void DHT11_ReadData();
void DATAPin_Mode_Out();
void DATAPin_Mode_In();
void SysTick_Init();
void delay_ms(unsigned int ms);
void delay_us(unsigned int us);
void delay_s(unsigned int s);

int exti0_flag = 0;
int exti1_flag = 0;
int exti2_flag = 0;
int exti3_flag = 0;            //???
int exti4_flag = 0;


int temp;  // ??
int humi;  //??


void Delay(int n)                //??
{
        int tt,jj;
        for(tt=0;tt<n;tt++)
                for(jj=0;jj<110;jj++);
}


int main()
{
        Init_EXTIX_TI();
        InitKEY();
        InitLED();
        InitLED_DHT11();
        SysTick_Init();
        
        while (1)
        {
                if (exti0_flag == 1)
                {
                        GPIO_ResetBits(GPIOB,GPIO_Pin_0);
                }else if (exti1_flag == 1)
                {
                        GPIO_SetBits(GPIOB,GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3);
                }else if (exti3_flag == 1 )
                {
                        state2();
                }else if (exti2_flag == 1 || exti3_flag == 2)
                {
                        state1();
                }else if (exti4_flag == 1)
                {

                        DHT11_ReadData();

                }
               

        }
}


void Init_EXTIX_TI(void)                //????
{
        EXTI_InitTypeDef EXTI_InitStructure;        
        NVIC_InitTypeDef NVIC_InitStructure;
        
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);

        SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0 | EXTI_PinSource1 | EXTI_PinSource2 | EXTI_PinSource3 | EXTI_PinSource4);
         
        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;        
        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
        EXTI_InitStructure.EXTI_Line = EXTI_Line0 | EXTI_Line1 | EXTI_Line2 | EXTI_Line3 | EXTI_Line4;
        EXTI_InitStructure.EXTI_LineCmd = ENABLE;
        EXTI_Init(&EXTI_InitStructure);
         
        NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;        
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;        
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);        
        
        NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn;        
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;        
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);        
        
        NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;        
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;        
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);        
        
        NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;        
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;        
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);        
        
        NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn;        
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;        
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);        
}


void EXTI0_IRQHandler(void)           //??????
{
//        if(EXTI_GetITStatus(EXTI_Line0)!= RESET)
//        {
//                GPIO_ResetBits(GPIOB,GPIO_Pin_0);
//        }
        if(EXTI_GetITStatus(EXTI_Line0)!= RESET)
        {
                exti1_flag = 0;
                exti2_flag = 0;
                exti3_flag = 0;
                exti4_flag = 0;
               
                exti0_flag = 1;
                EXTI_ClearITPendingBit(EXTI_Line0);
        }
        
}

void EXTI1_IRQHandler(void)           //??????
{
//        if (EXTI_GetITStatus(EXTI_Line1)!= RESET)
//        {
//                GPIO_SetBits(GPIOB,GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3);
//        }
        if (EXTI_GetITStatus(EXTI_Line1)!= RESET)
        {
                exti0_flag = 0;
                exti2_flag = 0;
                exti3_flag = 0;
                exti4_flag = 0;
               
                exti1_flag = 1;
                EXTI_ClearITPendingBit(EXTI_Line1);
        }
        
}

void EXTI2_IRQHandler(void)
{
        if (EXTI_GetITStatus(EXTI_Line2)!= RESET)
        {
                exti0_flag = 0;
                exti1_flag = 0;
                exti3_flag = 0;
                exti4_flag = 0;
               
                exti2_flag = 1;
                EXTI_ClearITPendingBit(EXTI_Line2);
        }
//        if (EXTI_GetITStatus(EXTI_Line2)!= RESET)
//        {
//                state1();
//        }
        
}        

void EXTI3_IRQHandler(void)
{
        if (EXTI_GetITStatus(EXTI_Line3)!= RESET)
        {
//                exti3_flag ++;
                exti0_flag = 0;
                exti1_flag = 0;
                exti2_flag = 0;
                exti4_flag = 0;
               
                if (exti3_flag == 0)
                        exti3_flag = 1;
                else if (exti3_flag == 1)
                        exti3_flag = 2;
                else if (exti3_flag == 2)
                {
                        exti3_flag = 1;
                }
                EXTI_ClearITPendingBit(EXTI_Line3);
        }
//        if (EXTI_GetITStatus(EXTI_Line3)!= RESET)
//        {
//                exti3_flag ++;
//                if ( exti3_flag%2 == 1)
//                {
//                        state2();
//                }else if (exti3_flag%2 == 0)
//                {
//                        state1();
//                }
//        }
        
}

void EXTI4_IRQHandler(void)
{
//        if (EXTI_GetITStatus(EXTI_Line4)!= RESET)
//        {
                exti0_flag = 0;
                exti1_flag = 0;
                exti2_flag = 0;
                exti3_flag = 0;
               
                exti4_flag = 1;
        
          EXTI_ClearITPendingBit(EXTI_Line4);
//        }
        
}        

void state1()
{
        GPIO_ResetBits(GPIOB,GPIO_Pin_0);
        GPIO_SetBits(GPIOB, GPIO_Pin_1);
        GPIO_SetBits(GPIOB, GPIO_Pin_2);
        GPIO_SetBits(GPIOB, GPIO_Pin_3);
//        delay_ms(100);
        Delay(5000);
        
        GPIO_ResetBits(GPIOB,GPIO_Pin_1);
        GPIO_SetBits(GPIOB, GPIO_Pin_0);
        GPIO_SetBits(GPIOB, GPIO_Pin_2);
        GPIO_SetBits(GPIOB, GPIO_Pin_3);
        Delay(5000);
        
        GPIO_ResetBits(GPIOB,GPIO_Pin_2);
        GPIO_SetBits(GPIOB, GPIO_Pin_1);
        GPIO_SetBits(GPIOB, GPIO_Pin_0);
        GPIO_SetBits(GPIOB, GPIO_Pin_3);
        Delay(5000);
        
        GPIO_ResetBits(GPIOB,GPIO_Pin_3);
        GPIO_SetBits(GPIOB, GPIO_Pin_1);
        GPIO_SetBits(GPIOB, GPIO_Pin_2);
        GPIO_SetBits(GPIOB, GPIO_Pin_0);
        Delay(5000);
}

void state2()                 //?????2
{
                GPIO_ResetBits(GPIOB,GPIO_Pin_3);
                GPIO_SetBits(GPIOB, GPIO_Pin_1);
                GPIO_SetBits(GPIOB, GPIO_Pin_2);
                GPIO_SetBits(GPIOB, GPIO_Pin_0);
                Delay(5000);
               
                GPIO_ResetBits(GPIOB,GPIO_Pin_2);
                GPIO_SetBits(GPIOB, GPIO_Pin_0);
                GPIO_SetBits(GPIOB, GPIO_Pin_1);
                GPIO_SetBits(GPIOB, GPIO_Pin_3);
                Delay(5000);
               
                GPIO_ResetBits(GPIOB,GPIO_Pin_1);
                GPIO_SetBits(GPIOB, GPIO_Pin_0);
                GPIO_SetBits(GPIOB, GPIO_Pin_2);
                GPIO_SetBits(GPIOB, GPIO_Pin_3);
                Delay(5000);
        
                GPIO_ResetBits(GPIOB,GPIO_Pin_0);
                GPIO_SetBits(GPIOB, GPIO_Pin_1);
                GPIO_SetBits(GPIOB, GPIO_Pin_2);
                GPIO_SetBits(GPIOB, GPIO_Pin_3);
                Delay(5000);
}

void InitKEY()                 //?????,PA0~PA4
{
        GPIO_InitTypeDef  GPIO_InitStructure;
        
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);   
        
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
        
        GPIO_Init(GPIOA, &GPIO_InitStructure);
}

void InitLED()             //???LED,PB0~PB3
{
        GPIO_InitTypeDef  GPIO_InitStructure;
        
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);   
        
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
        
        GPIO_SetBits(GPIOB,GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3);
        
        GPIO_Init(GPIOB, &GPIO_InitStructure);
}

void InitLED_DHT11()               //DHT11???,PD7~PD8
{
        GPIO_InitTypeDef  GPIO_InitStructure;
        
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);   
        
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
        
        GPIO_SetBits(GPIOD,GPIO_Pin_7 | GPIO_Pin_8);
        
        GPIO_Init(GPIOD, &GPIO_InitStructure);

}
        
///////////////////////////DHT11????////////////////////////////////////////
//1) ???PD0?????????????        
void DATAPin_Mode_Out()
{
        GPIO_InitTypeDef aaa;
        
        aaa.GPIO_Mode = GPIO_Mode_OUT;
        aaa.GPIO_OType = GPIO_OType_PP;
        aaa.GPIO_Pin = GPIO_Pin_0 ;
        aaa.GPIO_Speed = GPIO_Speed_50MHz;
        
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
        
        GPIO_Init(GPIOD , &aaa);
        

}

//2) ???PD0?????????
void DATAPin_Mode_In()
{
        GPIO_InitTypeDef aaa;
        
        aaa.GPIO_Mode = GPIO_Mode_IN;
        //aaa.GPIO_OType = GPIO_OType_PP;
        aaa.GPIO_Pin = GPIO_Pin_0 ;
        aaa.GPIO_Speed = GPIO_Speed_50MHz;
        aaa.GPIO_PuPd = GPIO_PuPd_UP;
        
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
        
        GPIO_Init(GPIOD , &aaa);

}

void DHT11_start()        //DHT11????
{
        //??PD0?????
        DATAPin_Mode_Out();
        
        //???? ????????
        GPIO_SetBits(GPIOD, GPIO_Pin_0);
        delay_ms(20);
        

        //??;????,??????
        GPIO_ResetBits(GPIOD, GPIO_Pin_0);
        delay_ms(20);        //??18ms
        
        //????????DHT11??
        GPIO_SetBits(GPIOD, GPIO_Pin_0);
        delay_us(30);        //??20~40us
}

//???????? ==>??????????????
int  DHT11_SlaveResp()
{
        int tmp = 0;
        //??PD0?????
        DATAPin_Mode_In();
        
        //1) ??PD0???DHT11??
        while(1)
        {
                delay_us(1);
               
                if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_0) == 0)        //?????,?????
                {
                        break;
                }
                tmp++;
                if(tmp > 99)        //??tmp>99,????
                {
                        return -1;        //????-1,????????
                }
        }
        tmp = 0;
        
        //2) ??PD0???????100us????????
        while(1)
        {
                delay_us(1);
               
                if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_0) == 1)        //?????,?????
                {
                        break;
                }
                tmp++;
                if(tmp > 99)        //??tmp>99,????
                {
                        return -1;        //????-1,????????
                }
        
        }
        tmp = 0;
        //3) ??PD0?????DHT11??
        while(1)
        {
                delay_us(1);
               
                if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_0) == 0)        //?????,?????
                {
                        break;
                }
                tmp++;
                if(tmp > 99)        //??tmp>99,????
                {
                        return -1;        //????-1,????????
                }
        }
        
        return 0;        //??0,??????????,??????,??-1.??????????
}


unsigned char tmp = 0;
//??????? 8bit
unsigned char DHT11_ReadByte()
{
        int i;
        unsigned char tmp = 0;//?????????  0000 0000

        for(i=0; i<8; i++)
        {
                //?????????
                while(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_0) == 0);
        
                //???????? 0, ??1
                delay_us(30);
               
                if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_0) == 1)//????????1
                {
                        tmp |= 0x01<<(7-i);
                        while(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_0) == 1);//????????????
                }
        }
               
        return tmp;        //??????????
        
}



unsigned char DHT11_Data[5];

void DHT11_ReadData()        
{
        DHT11_start();
        
        DHT11_SlaveResp();

        DHT11_Data[0] = DHT11_ReadByte();
        DHT11_Data[1] = DHT11_ReadByte();
        DHT11_Data[2] = DHT11_ReadByte();
        DHT11_Data[3] = DHT11_ReadByte();
        DHT11_Data[4] = DHT11_ReadByte();
        
        if(DHT11_Data[0] + DHT11_Data[1]+ DHT11_Data[2]+ DHT11_Data[3] != DHT11_Data[4])
        {
                while(1)
                {
                        GPIO_SetBits(GPIOA, GPIO_Pin_8);
                        delay_us(10);
                        GPIO_ResetBits(GPIOA, GPIO_Pin_8);
                }
        }
        
  if(DHT11_Data[0]> 60)
        {
                GPIO_ResetBits(GPIOD, GPIO_Pin_7);
        }else GPIO_SetBits(GPIOD, GPIO_Pin_7);
  if(DHT11_Data[2] > 30)
        {
                GPIO_ResetBits(GPIOD, GPIO_Pin_8);
        }else GPIO_SetBits(GPIOD, GPIO_Pin_8);
}

void SysTick_Init()
{
        SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);
}

void delay_us(unsigned int us)                 //?????
{
        unsigned int set_time = 84*us;
        unsigned int tmp;
        
        SysTick->LOAD = set_time;
        SysTick->VAL = 0;
        SysTick->CTRL |= 0x01;
        
        while(1)
        {
                tmp = SysTick->CTRL;
               
                if(tmp & 0x01<<16)
                {
                        break;
                }
        }
        
        SysTick->VAL = 0;
        SysTick->CTRL &= (~0x01);
}


void delay_ms(unsigned int ms)
{
        unsigned int set_time = 84000*ms;
        unsigned int tmp;
        
        SysTick->LOAD = set_time;
        SysTick->VAL = 0;
        SysTick->CTRL |= 0x01;
        
        while(1)
        {
                tmp = SysTick->CTRL;
               
                if(tmp & 0x01<<16)
                {
                        //GPIO_ToggleBits(GPIOB, GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3);
                        break;
                }
        }
        
        SysTick->VAL = 0;
        SysTick->CTRL &= (~0x01);
}

void delay_s(unsigned int s)
{
        while (s--)
        {
                delay_ms(100);
                delay_ms(100);
                delay_ms(100);
                delay_ms(100);
                delay_ms(100);
                delay_ms(100);
                delay_ms(100);
                delay_ms(100);
                delay_ms(100);
                delay_ms(100);
        }
}


//#include <stm32f4xx.h>                // Device header
//#include "stm32f4xx_exti.h"
//#include "stm32f4xx.h"                  // Device header
//#include "misc.h"
//#define EXTI_LINENONE    ((uint32_t)0x00000)  /* No interrupt selected */
//#define __STM32F4xx_SYSCFG_H
//#include "stm32f4xx_gpio.h"             //
//#include "stm32f4xx_rcc.h"              //
//int flag2=0;
//int Tem = 8;
//int Hum;
//int Read_Hum_Tem;
//int flag3=0;
//int flag4=0;
//int times =8;
//void init_key();
//void init_led1();
//void init_led2();
//void InitLED_DHT11();
//void DHT11_MasterStart();
//int  DHT11_SlaveResp();
//unsigned char DHT11_ReadByte();
//void DHT11_ReadData();
//void DATAPin_Mode_Out();
//void DATAPin_Mode_In();
//void SysTick_Init();
//void delay_ms();
//void delay_us();
//void delay_s();
//void delay_s1();
//void s_0();
//void s_1();
//void s_2();
//void s_3_down();
//void s_3_up();
//int i,a,b,c;
//int value;
//void Init_EXTIX_TI(void);
//void  EXTI3_IRQHandler(void);
//void EXTI2_IRQHandler(void) ;
//void EXTI4_IRQHandler(void);
//unsigned char table[]="Tem 00 Hum 00";

//void delay_s1(int n)                                                          //??
//{
//        int i;
//        for(i=0;i<n;i++)
//        {
//        int x=0x12345;
//                while(x--);
//        }
//}

//void Systick_Init()//????
//{
//        SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);
//}
////2,?????
//void delay_us(unsigned int us)
//{
//        unsigned int set_time = 84*us;
//        unsigned int tmp;
//        //1,?????
//        SysTick->LOAD = set_time;        //?????SysTick->LOAD? ?? 24bit
//        
//        SysTick->VAL = 0;        //???SysTick->VAL???,?????????????SysTick->LOAD??
//        
//        //2,???????
//        //SysTick->CTRL = SysTick->CTRL | 0x01;        //??????1 --?|  ?????
//        SysTick->CTRL |= 0x01;
//        
//        //3,??????
//        while(1)
//        {
//                tmp = SysTick->CTRL;        //???16????1?
//               
//                if(tmp & 0x01<<16)         //????????,????????16??1,??????,??????
//                {
//                        break;        
//                }
//               
//        }
//        //4,???????
//        SysTick->VAL = 0;
//        
//        SysTick->CTRL &= (~0x01);        //???????0

//}

////3,?????
//void delay_ms(unsigned int ms)        //ms????????199ms
//{
//        unsigned int set_time = 84000*ms;
//        unsigned int tmp;
//        //1,?????
//        SysTick->LOAD = set_time;        //?????SysTick->LOAD? ?? 24bit
//        
//        SysTick->VAL = 0;        //???SysTick->VAL???,?????????????SysTick->LOAD??
//        
//        //2,???????
//        //SysTick->CTRL = SysTick->CTRL | 0x01;        //??????1 --?|  ?????
//        SysTick->CTRL |= 0x01;
//        
//        //3,??????
//        while(1)
//        {
//                tmp = SysTick->CTRL;        //???16????1?
//               
//                if(tmp & 0x01<<16)         //????????,????????16??1,??????,??????
//                {
//                        break;        
//                }
//               
//        }
//        //4,???????
//        SysTick->VAL = 0;
//        
//        SysTick->CTRL &= (~0x01);        //???????0

//}

////4, ????
//void delay_s(unsigned int s)
//{
//        while(s--)
//        {
//                delay_ms(100);
//                delay_ms(100);
//                delay_ms(100);
//                delay_ms(100);
//                delay_ms(100);
//               
//                delay_ms(100);
//                delay_ms(100);
//                delay_ms(100);
//                delay_ms(100);
//                delay_ms(100);
//        }

//}



//void init_led1()
//{
//  GPIO_InitTypeDef GPIO_InitStructure;//led(pb0)?a?3???????3???????//????gpio???1??
//        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);//gpio3????
//        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;//???o???????|???a
//        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//????3????
//        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//????3?
//        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//?3????
//        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;//?T????
//        GPIO_Init(GPIOB, &GPIO_InitStructure);//
//}

//void init_led2()
//{
//  GPIO_InitTypeDef GPIO_InitStructure;//led(pb0)?a?3???????3???????//????gpio???1??
//        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);//gpio3????
//        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;//???o???????|???a
//        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//????3????
//        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//????3?
//        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//?3????
//        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;//?T????
//        GPIO_Init(GPIOD, &GPIO_InitStructure);//
//}



//void init_key()
//{
//  GPIO_InitTypeDef GPIO_InitStructure;
//        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//gpio3????
//        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;//???o???????|???a
//        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//????3????
//        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;//?T????
//        GPIO_Init(GPIOA, &GPIO_InitStructure);//        
//}

//void Init_EXTIX_TI(void)                //????
//{
//        EXTI_InitTypeDef EXTI_InitStructure;        
//        NVIC_InitTypeDef NVIC_InitStructure;
//        
//  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);

//        SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA,EXTI_PinSource2 | EXTI_PinSource3 | EXTI_PinSource4);
//         
//        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;        
//        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
//        EXTI_InitStructure.EXTI_Line = EXTI_Line2 | EXTI_Line3 | EXTI_Line4;
//        EXTI_InitStructure.EXTI_LineCmd = ENABLE;
//        EXTI_Init(&EXTI_InitStructure);
//        
//        NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;        
//        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
//        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;        
//        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
//        NVIC_Init(&NVIC_InitStructure);        
//        
//        NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;        
//        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
//        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 4;        
//        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
//        NVIC_Init(&NVIC_InitStructure);        
//        
//        NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn;        
//        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
//        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 5;        
//        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
//        NVIC_Init(&NVIC_InitStructure);        
//}

//void EXTI2_IRQHandler(void)
//{
//        if (EXTI_GetITStatus(EXTI_Line2)!= RESET)
//        {
//                flag2 = 1;
//        }

//        EXTI_ClearITPendingBit(EXTI_Line2);
//}        

//void EXTI3_IRQHandler(void)
//{
//        if (EXTI_GetITStatus(EXTI_Line3)!= RESET)
//        {

//                if (flag3 == 0)
//                {
//                flag3 = 1;
//                }
//                else
//                {
//                flag3 = 0;
//                }
//        }
//        EXTI_ClearITPendingBit(EXTI_Line3);
//}


//void EXTI4_IRQHandler(void)
//{
//                flag4=1;
//                flag3=0;
//                flag2=0;
//          EXTI_ClearITPendingBit(EXTI_Line4);
//}

//int main()
//{
//  Init_EXTIX_TI();
//        init_key();
//        init_led1();
//        init_led2();
//        //Systick_Init();
//        GPIO_SetBits(GPIOB, GPIO_Pin_All);
//        GPIO_SetBits(GPIOD, GPIO_Pin_All);
//        while(1)
//        {
//                times=4;
//                if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)==0)         
//                {
//                        s_0();
//                }

//          if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1)==0)
//                {
//                 s_1();
//                }
//               
//                if (flag2 == 1&&flag3 == 0)
//                {
//                   s_2();
//                }
//               
//                if (flag3 == 1)
//                 {
//                         s_3_down();
//                         flag2 =2;
//                        }
//    if (flag2 == 2&&flag3 == 0)
//                {
//                         s_3_up();
//                }
//                if(flag4==1)
//                {
//          DHT11_ReadData();
//                }
//        }
//        }



//void s_0()
//{
//  GPIO_ResetBits(GPIOB,GPIO_Pin_0);//???,pb0?
//}

//void s_1()
//{
//     GPIO_SetBits(GPIOB,GPIO_Pin_0);
//                 GPIO_SetBits(GPIOB,GPIO_Pin_1);
//                 GPIO_SetBits(GPIOB,GPIO_Pin_2);
//                 GPIO_SetBits(GPIOB,GPIO_Pin_3);
//}

//void s_2()
//{
//        GPIO_ResetBits(GPIOB,GPIO_Pin_0);                    //PA0???
//                                GPIO_SetBits(GPIOB,GPIO_Pin_1);  
//                                GPIO_SetBits(GPIOB,GPIO_Pin_2);  
//                                GPIO_SetBits(GPIOB,GPIO_Pin_3);  
//        delay_s1(10);
//                        
//        GPIO_SetBits(GPIOB,GPIO_Pin_0);                    //PA0???
//                                GPIO_ResetBits(GPIOB,GPIO_Pin_1);  
//                                GPIO_SetBits(GPIOB,GPIO_Pin_2);  
//                                GPIO_SetBits(GPIOB,GPIO_Pin_3);  
//          delay_s1(10);

//        GPIO_SetBits(GPIOB,GPIO_Pin_0);                    //PA0???
//                                GPIO_SetBits(GPIOB,GPIO_Pin_1);  
//                                GPIO_ResetBits(GPIOB,GPIO_Pin_2);  
//                                GPIO_SetBits(GPIOB,GPIO_Pin_3);  
//          delay_s1(10);                        
//                        
//        GPIO_SetBits(GPIOB,GPIO_Pin_0);                    //PA0???
//                                GPIO_SetBits(GPIOB,GPIO_Pin_1);  
//                                GPIO_SetBits(GPIOB,GPIO_Pin_2);  
//                                GPIO_ResetBits(GPIOB,GPIO_Pin_3);  
//          delay_s1(10);
//}

//void s_3_up()
//{
//        GPIO_ResetBits(GPIOB,GPIO_Pin_0);                    //PA0???
//                                GPIO_SetBits(GPIOB,GPIO_Pin_1);  
//                                GPIO_SetBits(GPIOB,GPIO_Pin_2);  
//                                GPIO_SetBits(GPIOB,GPIO_Pin_3);  
//        delay_s1(10);
//                        
//        GPIO_SetBits(GPIOB,GPIO_Pin_0);                    //PA0???
//                                GPIO_ResetBits(GPIOB,GPIO_Pin_1);  
//                                GPIO_SetBits(GPIOB,GPIO_Pin_2);  
//                                GPIO_SetBits(GPIOB,GPIO_Pin_3);  
//          delay_s1(10);

//        GPIO_SetBits(GPIOB,GPIO_Pin_0);                    //PA0???
//                                GPIO_SetBits(GPIOB,GPIO_Pin_1);  
//                                GPIO_ResetBits(GPIOB,GPIO_Pin_2);  
//                                GPIO_SetBits(GPIOB,GPIO_Pin_3);  
//          delay_s1(10);                        
//                        
//        GPIO_SetBits(GPIOB,GPIO_Pin_0);                    //PA0???
//                                GPIO_SetBits(GPIOB,GPIO_Pin_1);  
//                                GPIO_SetBits(GPIOB,GPIO_Pin_2);  
//                                GPIO_ResetBits(GPIOB,GPIO_Pin_3);  
//          delay_s1(10);
//                }

//void s_3_down()
//{
//    GPIO_ResetBits(GPIOB,GPIO_Pin_3);
//                GPIO_SetBits(GPIOB, GPIO_Pin_1);
//                GPIO_SetBits(GPIOB, GPIO_Pin_2);
//                GPIO_SetBits(GPIOB, GPIO_Pin_0);
//                 delay_s1(10);        
//               
//                GPIO_ResetBits(GPIOB,GPIO_Pin_2);
//                GPIO_SetBits(GPIOB, GPIO_Pin_0);
//                GPIO_SetBits(GPIOB, GPIO_Pin_1);
//                GPIO_SetBits(GPIOB, GPIO_Pin_3);
//                 delay_s1(10);        
//               
//                GPIO_ResetBits(GPIOB,GPIO_Pin_1);
//                GPIO_SetBits(GPIOB, GPIO_Pin_0);
//                GPIO_SetBits(GPIOB, GPIO_Pin_2);
//                GPIO_SetBits(GPIOB, GPIO_Pin_3);
//                 delay_s1(10);        
//        
//                GPIO_ResetBits(GPIOB,GPIO_Pin_0);
//                GPIO_SetBits(GPIOB, GPIO_Pin_1);
//                GPIO_SetBits(GPIOB, GPIO_Pin_2);
//                GPIO_SetBits(GPIOB, GPIO_Pin_3);
//                 delay_s1(10);        
//}               




//void DATAPin_Mode_Out()
//{
//        GPIO_InitTypeDef aaa;
//        
//        aaa.GPIO_Mode = GPIO_Mode_OUT;
//        aaa.GPIO_OType = GPIO_OType_PP;
//        aaa.GPIO_Pin = GPIO_Pin_0 ;
//        aaa.GPIO_Speed = GPIO_Speed_50MHz;
//        
//        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
//        
//        GPIO_Init(GPIOD , &aaa);
//        

//}

////2) ???PD0???????
//void DATAPin_Mode_In()
//{
//        GPIO_InitTypeDef aaa;
//        
//        aaa.GPIO_Mode = GPIO_Mode_IN;
//        //aaa.GPIO_OType = GPIO_OType_PP;
//        aaa.GPIO_Pin = GPIO_Pin_0 ;
//        aaa.GPIO_Speed = GPIO_Speed_50MHz;
//        aaa.GPIO_PuPd = GPIO_PuPd_UP;
//        
//        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
//        
//        GPIO_Init(GPIOD , &aaa);

//}

//void DHT11_Start()        //DHT11????
//{
//        //??PD0?????
//        DATAPin_Mode_Out();
//        
//        //????,????????
//        GPIO_SetBits(GPIOD, GPIO_Pin_0);
//        delay_ms(20);
//        

//        //??????,??????
//        GPIO_ResetBits(GPIOD, GPIO_Pin_0);
//        delay_ms(20);        //??18ms
//        
//        //????????DHT11??
//        GPIO_SetBits(GPIOD, GPIO_Pin_0);
//        delay_us(30);        //??20~40us
//}

////???????? ==>??????????????
//int  DHT11_SlaveResp()
//{
//        int tmp = 0;
//        //??PD0?????
//        DATAPin_Mode_In();
//        
//        //1) ??PD0???DHT11??
//        while(1)
//        {
//                delay_us(1);
//               
//                if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_0) == 0)        //?????,?????
//                {
//                        break;
//                }
//                tmp++;
//                if(tmp > 99)        //??tmp>99,??
//                {
//                        return -1;
//                }
//        }
//        tmp = 0;
//        
//        //2) ??PD0????100us???????
//        while(1)
//        {
//                delay_us(1);
//               
//                if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_0) == 1)        //??,?????
//                {
//                        break;
//                }
//                tmp++;
//                if(tmp > 99)        //??tmp>99,??
//                {
//                        return -1;        
//                }
//        
//        }
//        tmp = 0;
//        //3) ??PD0?????DHT11??
//        while(1)
//        {
//                delay_us(1);
//               
//                if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_12) == 0)        
//                {
//                        break;
//                }
//                tmp++;
//                if(tmp > 99)        
//                {
//                        return -1;        
//                }
//        }
//        
//        return 0;        //???????
//}
//unsigned char tmp = 0;
////?????? 8bit
//unsigned char DHT11_ReadByte()
//{
//        int i;
//        unsigned char tmp = 0;//  0000 0000

//        for(i=0; i<8; i++)
//        {
//                //?????????
//                while(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_0) == 0);
//        
//                //???0??1
//                delay_us(30);
//               
//                if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_0) == 1)//?1
//                {
//                        tmp |= 0x01<<(7-i);
//                        while(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_0) == 1);//?????????
//                }
//               
//        
//        }
//               
//        return tmp;        //??????????
//        
//}

//u8 d=0;
//unsigned char DHT11_Data[5];
//int i;
//void DHT11_ReadData()        //?????40bit???
//{
//        unsigned char DHT11_Data[5];
//        
//        DHT11_Start();//1,STM32??????
//        
//        DHT11_SlaveResp();//2,??DHT11????

//        
//        DHT11_Data[0] = DHT11_ReadByte();//3,??5??????
//        DHT11_Data[1] = DHT11_ReadByte();
//        DHT11_Data[2] = DHT11_ReadByte();
//        DHT11_Data[3] = DHT11_ReadByte();
//        DHT11_Data[4] = DHT11_ReadByte();
//        
//        if(DHT11_Data[0] + DHT11_Data[1]+ DHT11_Data[2]+ DHT11_Data[3] != DHT11_Data[4])//4,????? DHT11_Data[0] + DHT11_Data[1]+ DHT11_Data[2]+ DHT11_Data[3] = DHT11_Data[4]
//        {
//                while(1)
//                {
//                  
//                GPIO_SetBits(GPIOA, GPIO_Pin_8);
//                delay_s1(10);
//                GPIO_ResetBits(GPIOA, GPIO_Pin_8);
//                }
//        }

//        
//  if(DHT11_Data[0]> 60)//5????,????
//        {
//                GPIO_ResetBits(GPIOD, GPIO_Pin_2);
//                //GPIO_SetBits(GPIOB, GPIO_Pin_7);
//        }
//  if(DHT11_Data[2] > 30)
//        {
//                GPIO_ResetBits(GPIOD, GPIO_Pin_1);
////                GPIO_SetBits(GPIOB, GPIO_Pin_7);
//        }
//}

        




分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表