STC15单片机DHT11温湿度检测芯片解密
- 芯片解密#include<STC15.H>
- 芯片解密#include "intrins.h"//用于提供_nop_();函数
- 芯片解密#include "OLED_Contrul_Hygrothermograph.c"//OLED控制函数
- sbit YLED=P3^1;
- sbit RLED=P3^0;
- sbit DHT=P3^5;//DHT11模块
- unsigned int Temperature[3]={1,1,1};//前两位为整数部分,后一位为小数部分
- unsigned int Humidity[2]={1,1};//传回的湿度数据只有整数部分
- unsigned char Data_Receive[5];
- /*##############################################################################################
- 芯片解密
- 平台:STC15F104W
- 硬件部分
- 显示:采用OLED12864显示温度和湿度
- 测量,采用DHT11模块,模块信息如下:
- ASATR
- -----
- NA:DHT11
- OC:3.3-5.5V
- U1:5-95%RH
- U2:-20-60℃
- U3:±5%RH±2℃
- SN:A1712882A
- 为保证延时准确,晶振设置为12MHz
- 借用了http://www.51hei.com/bbs/dpj-38067-1.html上的部分程序,在此表示感谢
- ##############################################################################################*/
- void Delay30us()//@12.000MHz
- {
- unsigned char i;
- i=87;
- while(--i);
- }
- void Delay20ms()//@12.000MHz
- {
- unsigned char i,j,k;
- i=1;
- j=234;
- k=113;
- do
- {
- do
- {
- while(--k);
- }while(--j);
- }while(--i);
- }
- void Delay1s()//@12.000MHz
- {
- unsigned char i,j,k;
- i=46;
- j=153;
- k=245;
- do
- {
- do
- {
- while(--k);
- }while(--j);
- }while(--i);
- }
- void OLED_Display()//OLED显示驱动函数
- {
- OLED_DataDisplay_T(56,4,Temperature);//在指定位置显示温度
- OLED_DataDisplay_H(56,6,Humidity);//在指定位置显示湿度
- }
- void DHT_Collect()//温度采集函数
- {
- unsigned char i,j;//for循环变量
- unsigned char t;//超时判断
- unsigned char dat8=0;//一次读取的8位数据,需要读5次
- unsigned int CheckValue=0;//校验和
-
- DHT=0;//主机发起始信号
- Delay20ms();//主机拉低总线至少18ms
- DHT=1;//主机拉高总线20~40us
- Delay30us();
-
- t=80;//设置超时等待时间
- while(DHT&&t--);//等待DHT11拉低总线
- if(t==0)//超时
- {
- DHT=1;
- }
- t=250;//设置超时等待时间
- while(!DHT&&t--);//等待DHT11拉高总线
- if(t==0)//超时
- {
- DHT=1;
- }
- t=250;//设置超时等待时间
- while(DHT&&t--);//等待DHT11拉低总线
- if(t==0)//超时
- {
- DHT=1;
- }

芯片解密