打开外部中断0 启动键盘 延时2S,以便正常 读取温、湿度值 图4-1 系统软件设计整体结构图
#include
uint T; //占空比 高电平时间 T={x|0<=x<=20000} /******************************引脚定义******************************/ //P0 = LCD_DATA //已定义
sbit JDQ = P1^1; //继电器输出 sbit LEDR = P1^3; //LED红灯输出 sbit LEDY = P1^4; //黄灯
//sbit lcdrs = P1^5;//read 已定义 //sbit lcdrw = P1^6;//write 已定义 //sbit lcden = P1^7;//enable 已定义 sbit UP = P2^0; // + sbit DOWN = P2^1; // -
sbit SPK = P2^2; //蜂鸣器输出 sbit PWM = P2^3; //PWM信号输出
sbit SET = P3^2; //由中断进入温湿度设定 SET键 //sbit P2_0 = P3^4; //DHT11 DATA端口
/*******************************************************************/
/*******************************************************************/
void timer_init() //定时器初始化 {
TMOD = 0x11; //T0 T1 工作于方式1 T=10000; //设定初始占空比为50%
36
TH0 = (65536-20000)/256; //定时器0装初值:20ms TL0 = (65536-20000)%6;
TH1 = (65536-T)/256; //定时器1装初值:10ms TL1 = (65536-T)%6;
EA = 1; //开启所有中断 TR0 = 0; //关闭定时器0 TR1 = 0; //关闭定时器1
ET0 = 1; //允许定时器0中断 ET1 = 1; //允许定时器1中断 EX0 = 1; //允许外部中断0 PWM = 0; }
void sanfeng() //打开电机散热 ,降低湿度 {
int t;
TR0 = 1; //运行定时器0,1 开始输出PWM信号 TR1 = 1;
if(xianzhi_t>SETT_H)
t= xianzhi_t-SETT_H;//显示值与设定值的差值决定 PWM 占空比=t/20
else if(xianzhi_h
// JDQ = 0; //控制继电器 打开电磁阀 }
void out_init()//输出初始化 {
PWM = 0; //关输出PWM信号 LEDR = 1; //灭红灯 LEDY = 1; //灭黄灯 SPK = 1; //关蜂鸣器
JDQ = 1; //关继电器 电磁阀 }
/*******************************************************************/
/*******************************************************************/
void main() //仿真 {
lcd_init(); //lcd初始化 lcd_geshi(); //设定初始显示内容
timer_init(); //定时器0,1外部中断0 初始化 都关
37
out_init(); //初始化各输出信号 RH(); //读取温湿度 Disp(); //显示温湿度 while(1) {
if(xianzhi_t>SETT_H) //温度大于设定上限 {
SPK = 0; //蜂鸣器鸣叫 LEDR = 0; //红色灯亮
JDQ = 0; //打开继电器 电磁阀 sanfeng(); //打开风扇 }
else if(xianzhi_t SPK = 0; LEDR = 0; } else { LEDR = 1; //关闭灯 SPK = 1; //关蜂鸣器 JDQ = 1; //关电磁阀 TR0 = 0; //关电机 TR1 = 0; //定时器0,1关闭 ;无PWM输出 } if(xianzhi_h>SETH_H)//湿度太高 { LEDY = 0; //黄色灯亮 SPK = 0; //蜂鸣器鸣叫 sanfeng(); //打开风扇 } else if(xianzhi_h LEDY = 0; //黄灯亮 SPK = 0; //蜂鸣器鸣叫 JDQ = 0; //打开继电器 开电磁阀 } else //if(xianzhi_h<=SET_H) { LEDY = 1; //关闭灯 SPK = 1; //关蜂鸣器 JDQ = 1; //关电磁阀 TR0 = 0; //关电机 TR1 = 0; //定时器0,1关闭 ;无PWM输出 38 } } } Delay(20000);//读取模块数据周期不易小于 2S EX0 = 1; //打开外部中断0 恢复按键设定功能 39 40