|
|
文件名称:dht11-arch.c
文件路径:contiki-3.0\platform\sm14z2538\dev
源码分析:
1.头文件引用
- #include "dev/gpio.h"
- #include "clock.h"
复制代码 2.硬件接口定义
- #define DHT11_DATA_PORT GPIO_B_BASE
- #define DHT11_DATA_BIT (1 << 1)
- #define DHT11_DATA DHT11_DATA_PORT, DHT11_DATA_BIT
复制代码 3.声明延时函数
- void Delay_us(void);
- void Delay_ms(unsigned int Time);
复制代码 4.声明温湿度采集函数
5.声明温湿度传感器初始化函数
6.变量定义
- unsigned char DHT11_FLAG,DHT11_temp;
- unsigned char Hum_dec,Hum_uni,Tem_dec,Tem_uni=4;
- unsigned char Tem_data_H,Tem_data_L,RH_data_H,RH_data_L,DHT11_checkdata;
- unsigned char Tem_data_H_temp,Tem_data_L_temp,RH_data_H_temp,RH_data_L_temp,DHT11_checkdata_temp;
- unsigned char DHT11_comdata;
复制代码 7.设置io输出高电平
- static void
- gpio_set(int port, int bit)
- {
- REG((port | GPIO_DATA) + (bit << 2)) = bit;
- }
复制代码 8.设置io输出低电平
- static void
- gpio_reset(int port, int bit)
- {
- REG((port | GPIO_DATA) + (bit << 2)) = 0;
- }
复制代码 9.读取io状态
- static int
- gpio_get(int port, int bit)
- {
- return REG((port | GPIO_DATA) + (bit << 2));
- }
复制代码 10.微秒延时函数
- static void
- Delay_us_dht11(unsigned char DELAY)
- {
- clock_delay_usec(DELAY);
- }
复制代码 11.毫秒延时函数
- void Delay_ms_dht11(unsigned int Time)//n msÑÓʱ
- {
- unsigned char i;
- while(Time--)
- {
- for(i=0;i<100;i++)
- Delay_us_dht11(10);
- }
- }
复制代码 12.开始采集温度和湿度
- void Start_DHT11(void)
- {
- unsigned char i;
- for(i=0;i<8;i++)
- {
- DHT11_FLAG=2;
- while((!gpio_get(DHT11_DATA))&&DHT11_FLAG++);
- Delay_us_dht11(30);
- // Delay_us_dht11(10);
- // Delay_us_dht11(10);
- DHT11_temp=0;
- if(gpio_get(DHT11_DATA))DHT11_temp=1;
- DHT11_FLAG=2;
- while((gpio_get(DHT11_DATA))&&DHT11_FLAG++);
- if(DHT11_FLAG==1)break;
- DHT11_comdata<<=1;
- DHT11_comdata|=DHT11_temp;
- }
- }
复制代码 13.温度传感器初始化
- void DHT11_Inint(void)
- {
- gpio_reset(DHT11_DATA);
- Delay_ms_dht11(30); //>18MS
- gpio_set(DHT11_DATA);
- GPIO_SET_INPUT(DHT11_DATA_PORT,DHT11_DATA_BIT);//INPUT
- Delay_us_dht11(35);
- if(!gpio_get(DHT11_DATA))
- {
- DHT11_FLAG=2;
- while((!gpio_get(DHT11_DATA))&&DHT11_FLAG++);
- DHT11_FLAG=2;
- while((gpio_get(DHT11_DATA))&&DHT11_FLAG++);
- Start_DHT11();
- Delay_us_dht11(10);
- RH_data_H_temp=DHT11_comdata;
- Start_DHT11();
- Delay_us_dht11(10);
- RH_data_L_temp=DHT11_comdata;
- Start_DHT11();
- Delay_us_dht11(10);
- Tem_data_H_temp=DHT11_comdata;
- Start_DHT11();
- Delay_us_dht11(10);
- Tem_data_L_temp=DHT11_comdata;
- Start_DHT11();
- Delay_us_dht11(10);
- DHT11_checkdata_temp=DHT11_comdata;
- gpio_set(DHT11_DATA);
- Delay_us_dht11(30);
- DHT11_temp=(Tem_data_H_temp+Tem_data_L_temp+RH_data_H_temp+RH_data_L_temp);
- if(DHT11_temp==DHT11_checkdata_temp)
- {
- RH_data_H=RH_data_H_temp;
- RH_data_L=RH_data_L_temp;
- Tem_data_H=Tem_data_H_temp;
- Tem_data_L=Tem_data_L_temp;
- DHT11_checkdata=DHT11_checkdata_temp;
- }
- Tem_dec=Tem_data_H/10;
- Tem_uni=Tem_data_H%10;
-
- Hum_dec=RH_data_H/10;
- Hum_uni=RH_data_H%10;
- }
- else //
- {
- Tem_dec=0;
- Tem_uni=0;
-
- Hum_dec=0;
- Hum_uni=0;
- }
-
- GPIO_SET_OUTPUT(DHT11_DATA_PORT,DHT11_DATA_BIT); //OUTPUT
- Delay_us_dht11(30);
- }
复制代码
|
|