单片机测温测湿+调用风扇降湿降温+设置温湿上下限芯片解密
- 芯片解密#include<reg52.h>
- 芯片解密#include "intrins.h"
- typedef unsigned char uint8;
- typedef unsigned int uint16;
- sbit rs=P2^6; // 数据命令选择
- sbit rw=P2^5; //读写选择
- sbit e=P2^7; //使能
- sbit k1=P3^1; //模式
- sbit k2=P3^0; //加
- sbit k3=P3^2; //减
- sbit DHT11_DQ_OUT=P2^0;//湿度
- sbit bee=P1^5;//蜂鸣器
- sbit IRIN=P3^2;
- sbit dq=P3^7;//温度
- sbit dj=P1^0;//电机
- uint8 mode=0,xian;
- char temph=50,templ=20;//自己可以改
- char humih=80,humil=20;
- uint8 temp,humi;
- uint8 flag; //设定报警标志
- uint8 a,c,tempvalue;
- uint8 code num[10]="0123456789";
- uint8 code str1[]="Temp:"; //温度
- uint8 code str2[]="Humi:"; //湿度
- uint8 code str3[]="Error";
- uint8 code str4[]="Success ";
- uint8 code str5[]="%RH";
- uint8 code str6[]="TempH:"; //设定温度上限显示
- uint8 code str7[]="TempL:"; //设定温度下限显示
- uint8 code str8[]="HumiH:"; //设定湿度上限显示
- uint8 code str9[]="HumiL:"; //设定湿度下限显示
- void delay(uint16 i)
- {
- while(i--);
- }
- void delay_ms(uint16 i)
- {
- while(i--)
- delay(90);
- }
- void wrc(uint8 c) //写命令
- {
- delay(1000);
- rs=0;
- rw=0;
- e=0;
- P0=c;
- e=1;
- delay(10);
- e=0;
- }
- void wrd(uint8 dat) //写数据
- {
- delay(1000);
- rs=1;
- rw=0;
- e=0;
- P0=dat;
- e=1;
- delay(10);
- e=0;
- rs=0;
- }
- void lcd_init() // LCD1602初始化
- {
- delay(1000);
- wrc(0x38);
- wrc(0x38); //功能设置命令,选择8位总线,双行显示 5*7点阵字符
- wrc(0x38);
- wrc(0x06); //光标和显示模式设置 光标右移 整屏不移动
- wrc(0x0c); //显示开关控制 开显示 无光标 光标不闪烁
- wrc(0x01); //清零指令 固定的
- }
- //复位DHT11
- void DHT11_Rst()
- {
- DHT11_DQ_OUT=0; //拉低DQ
- delay_ms(20); //拉低至少18ms
- DHT11_DQ_OUT=1; //DQ=1
- delay(3); //主机拉高20~40us
- }
- //等待DHT11的回应
- //返回1:未检测到DHT11的存在
- //返回0:存在
- uint8 DHT11_Check()
- {
- uint8 retry=0;
- while (DHT11_DQ_OUT&&retry<100)//DHT11会拉低40~50us
- {
- retry++;
- _nop_();
- };
- if(retry>=100)return 1;
- else retry=0;
- while (!DHT11_DQ_OUT&&retry<100)//DHT11拉低后会再次拉高40~50us
- {
- retry++;
- _nop_();
- };
- if(retry>=100)return 1;
- return 0;
- }

芯片解密