温控器程序修改

该博客探讨了如何改进温控器程序,增加了温度限制值的快速切换功能。用户现在可以在非设置模式下,通过加值键在40、50、60之间切换上限值,用减值键在20、25、30之间切换下限值。此外,还支持使用红外遥控器进行参数设置,增强了系统的灵活性和用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

求大神指点修改程序,原功能:
2、采用LCD1602液晶显示温度信息,测温采用防水型DS18B20实现,还具有蜂鸣器提示功能;
3、定时功能:可以设置系统工作开启时间,在开启时间没有达到之前系统只进行测温不会进行控制,当开启时间到达后系统会进行测温并根据实测温度进行控制。实现更加智能节能的效果;
4、同时可以通过按键设置水温的上、下限值,并显示于液晶上。当实测温度低于下限值时继电器吸合开启加热,当实测温度高于上限值时继电器断开关闭加热同时蜂鸣器鸣叫提示加热完成(继电器工作具有指示灯)
5、整个系统参数可以通过红外遥控器无线或者按键进行设置;

设置”键:按下后进入设置模式,依次按可设置定时开广
限值,下限值;
“加值”键:在设置模式下,按下对应的设置参数加1;

“减值”键:在设置模式下,按下对应的设置参数减1;

确定”键:在设置时按下退出并保存以设置好的参数。

修改后:在原功能上添加功能“不在设置模式下,按下加值健切换上限值为40,50,60.按下减值健切换下限值为20,25,30.并可以通过红外切换”

#include<reg52.h>	   //头文件
#include<DS18B20.h>
#include<HW.h>
#include<LCD1602.h>
#include<INTERRUPT.h>
#include<EEPROM.h>

/***********************引脚定义*************************/
sbit key_set   = P1^0; //设置键定义
sbit key_jia   = P1^1; //加值键
sbit key_jian  = P1^2; //减值键
sbit key_ok    = P1^3; //退出键
sbit buzz      = P2^4; //蜂鸣器
sbit relay     = P3^6; //继电器

/*********************变量定义***************************/
uchar Temperature_up,Temperature_down;//存储温度上、下限值
uchar set_f=0;                        //设置选择标记,=0非设置,=1设置定时时间,=2设置温度上限,=3设置温度下限
uint num=99;						  //计数变量

/********************************************************
函数名称:void didi()
函数作用:蜂鸣器滴滴声
参数说明:
********************************************************/
void didi()
{
	buzz=0;		//开启蜂鸣器
	delayms(5); //延时
	buzz=1;		//关闭蜂鸣器
}
/********************************************************
函数名称:void display()
函数作用:正常显示
参数说明:
********************************************************/
void display()
{
	if(presence==0)						 //判断温度是否采集正确
	{
		lcd1602_write_character(0,1,temp_t);//显示温度数值
		LCD_disp_char(8,1,0);		        //显示自定义字符‘°’
		LCD_disp_char(9,1,'C');				//显示‘C’

		if(fen==0)					     //定时时间到,进入控制加热
		{
			if(wendu<Temperature_down)	 //实测温度低于下限值
			{
				relay=0;				 //开启继电器加热
				buzz=1;				     //关闭蜂鸣器提示
			}
			else
				if(wendu>=Temperature_up)//实测温度高于上限值
				{
					relay=1;			 //断开继电器关闭加热
					buzz=0;				 //蜂鸣器鸣叫提示
				}
				else					 //处于限值之间
					buzz=1;				 //关闭蜂鸣器鸣叫
		}
	}
	else								 //温度采集失败
	{
		buzz=1;	 						 //关闭蜂鸣器鸣叫
		relay=1;						 //断开继电器关闭加热
		lcd1602_write_character(0,1,"   NOT    "); 
	}
	lcd1602_write_character(11,1,"T:");	 //显示定时时间
	LCD_disp_char(13,1,ASCII[fen/100]);		
	LCD_disp_char(14,1,ASCII[fen%100/10]);
	LCD_disp_char(15,1,ASCII[fen%10]);

	lcd1602_write_character(0,2,"Up:");	 //显示温度上限值
	LCD_disp_char(3,2,ASCII[Temperature_up/100]);
	LCD_disp_char(4,2,ASCII[Temperature_up%100/10]);
	LCD_disp_char(5,2,ASCII[Temperature_up%10]);

	lcd1602_write_character(8,2,"Down:");//显示温度下限值
	LCD_disp_char(13,2,ASCII[Temperature_down/100]);
	LCD_disp_char(14,2,ASCII[Temperature_down%100/10]);
	LCD_disp_char(15,2,ASCII[Temperature_down%10]);
}
/********************************************************
函数名称:void display2()
函数作用:显示设置参数
参数说明:
********************************************************/
void display2()
{
	num++;

	EX0=0;								//关闭红外遥控检测
	DS18B20_Read_Temperature(); 	    //DS18B20读取温度数据
	DS18B20_Temperature();              //DS18B20温度转换
	EX0=1;								//开启红外遥控检测
	if(presence==0)
	{
		lcd1602_write_character(0,1,temp_t);//显示温度数值
		LCD_disp_char(8,1,0);		        //显示自定义字符‘°’
		LCD_disp_char(9,1,'C');				//显示’C‘
	}
	else
		lcd1602_write_character(0,1,"   NOT    "); 

	lcd1602_write_character(11,1,"T:");	//固定显示内容
	lcd1602_write_character(0,2,"Up:");
	lcd1602_write_character(8,2,"Down:");

	if(num%2==0)	//偶数次显示,奇数次不显示。这样就会有闪烁效果,可以清楚看到当前设置的是哪个值
	{		
		LCD_disp_char(13,1,ASCII[fen/100]);	               //显示定时时间-百位
		LCD_disp_char(14,1,ASCII[fen%100/10]);			   //显示定时时间-十位
		LCD_disp_char(15,1,ASCII[fen%10]);				   //显示定时时间-个位
	
		LCD_disp_char(3,2,ASCII[Temperature_up/100]);	   //显示温度上限值-百位
		LCD_disp_char(4,2,ASCII[Temperature_up%100/10]);   //显示温度上限值-十位
		LCD_disp_char(5,2,ASCII[Temperature_up%10]);	   //显示温度上限值-个位
	
		LCD_disp_char(13,2,ASCII[Temperature_down/100]);   //显示温度下限值-百位
		LCD_disp_char(14,2,ASCII[Temperature_down%100/10]);//显示温度下限值-十位
		LCD_disp_char(15,2,ASCII[Temperature_down%10]);	   //显示温度下限值-个位
	}
	else			 //奇数次不显示
	{
		switch(set_f)//根据当前设置的内容,对应位置闪烁
		{
			case 1: lcd1602_write_character(13,1,"   "); break;
			case 2: lcd1602_write_character(3,2,"   "); break;
			case 3: lcd1602_write_character(13,2,"   "); break;
			default: break;
		}
	}
}
/*****************************************************
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值