#include <reg52.h> #include <intrins.h> #include <absacc.h> #include <math.h> //包含头文件 #define uchar unsigned char #define uint unsigned int //宏定义 //定义四个输出端口 sbit Led_jiashi=P3^4; //加湿 sbit Led_qushi=P3^3; //去湿 sbit Led_jiangwen=P3^1; //降温 sbit Led_shengwen=P3^2; //升温 //定义三个设置按键 sbit Key_SET = P2^0; //设置按键 sbit Key_ADD = P2^1; //加按键 sbit Key_SUB = P2^2; //减按键 sbit Key_OK = P2^3; //确定按键 //定义24C02数据口 sbit SCL = P1^0; sbit SDA = P1^1; //定义DHT11数据口 sbit DATA = P1^7; sbit buzz=P3^5; //蜂鸣器接口 //定义LCD1602端口 sbit E=P1^3; //1602使能引脚 //sbit RW=P2^6; //1602读写引脚 我们只需要向液晶里写数据,不需要读取数据,所以就把读写引脚直接接地,程序里就不用单独控制了 sbit RS=P1^2; //1602数据/命令选择引脚 //定义全局变量 uchar U8FLAG,U8temp,U8comdata,U8RH_data_H_temp,U8RH_data_L_temp,U8T_data_H_temp,U8T_data_L_temp,U8checkdata_temp; //定义读取温湿度变量 ucharU8RH_data_H,U8RH_data_L,U8T_data_H,U8T_data_L,U8checkdata; uchar Mode,humidity,temperature; //设置模式、读取到的湿度温度数据存储变量 char TH,TL,HH,HL; //温湿度的上下限变量 bit bdataFlagStartRH,hot,cold,humid,dry,BJ; //开启转换温湿度标志位、热冷湿干和报警变量 //定时器0初始化 void Timer0_Init() { ET0= 1; //允许定时器0中断 TMOD= 0x11; //定时器工作方式选择 TL0= 0xb0; TH0= 0x3c; //定时器赋予初值50ms TR0= 1; //启动定时器T0 } //定时器0中断 void Timer0_ISR (void) interrupt 1 using 0 { ucharRHCounter; //定义计数变量 TL0= 0xb0; TH0= 0x3c; //定时器赋予初值 RHCounter++; //每进一次中断就是50ms,此变量加一 if(RHCounter%10==0&&BJ==1) //加到10的整数倍,并且报警标志位为1 buzz=!buzz; //开启报警,每500ms蜂鸣器引脚取反一次,就是蜂鸣器一秒响一次 elseif(BJ==0) //报警标志位为0时 buzz=1; //关闭报警 //每2秒钟启动一次温湿度转换 if (RHCounter >= 40) //计数到40次,就是2s,启动一次温湿度转换 { FlagStartRH = 1; //启动转换变量置1 RHCounter = 0; //计数变量清零 } } 余下完整程序见附件
|