基于51单片机的冰箱(冷藏,速冻,化霜)原理图、流程图、物料清单、仿真图、源代码

本文详细描述了一款基于51单片机的冰箱控制系统,包括冷藏、速冻、化霜模式以及自动化霜设计,涉及了电路原理、PCB布局、仿真技术和报警机制。还介绍了使用DHT11测温、DS1302计时以及LCD1602显示等功能。
摘要由CSDN通过智能技术生成

请添加图片描述

课程设计 基于51单片机的全自动冰箱控制系统设计(冷藏,速冻,化霜)原理图 PCB 仿真 源代码及proteus 软件

说明:
1、操作起来很复杂,有视频讲解
2、电路规模已经到了仿真极限,不要乱加器件,仿真会直接卡死。

①冷藏模式(正常模式)开关正常运行时
不除
霜时绿灯
温度在0到20度时,符合不除霜条件时,压缩机运行,冷风机运行,加热丝断电,热风机断电。
②速冷模式开关压缩机冷风机2倍速运行,除霜系统不工作此时不考虑湿度和门打开次数(按湿度,门打开次数调节按钮对此不影响)蓝灯③省电模式开关︰压缩机冷风机﹑低速运行亮黄灯除霜系统不工作三种可互相调节
④化霜模式开关可手动化霜黄灯
⑤自动化霜设计黄灯
根据表格
开门次数×
湿度Y/%RH
x<20
20<x<40
40<x
0<Y<30%RH
热风机正常速
热风机0.5倍速
不除霜
30%RH<Y<60%RH
热风机2倍速
热风机正常速
热风机0.5倍速
60%RH<Y<100%RH
热风机2倍速
热风机2倍速
热风机正常速
开始化霜(电热丝加热即化霜),压缩机停止运行,
冷风机停止,热风机开启,
⑥门报警灯红灯亮蜂鸣器响可手动关闭门打开时间超过10分钟
⑦电压报警灯红灯亮蜂鸣器响可手动关闭电动机电压超过28v
⑧温度报警灯红灯蜂鸣器响可手动关闭温度大于20度或者小于0度

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

#include "reg51.h"
#include "DHT11.h"
#include"ds1302.h"
#include"i2c.h"
#include "lcd1602.h"
#include "74hc595.h"
#include "PCF8591.h"
#include "74hc595_1.h"
#define uchar unsigned char
#define uint unsigned int
sbit k1=P1^5;//冷藏模式
sbit k2=P1^6;//速冻模式
sbit k3=P1^7;//省电模式
sbit k4=P3^0;//手动
sbit k5=P3^1;//停止报警
sbit k6=P3^2;//开门次数
sbit k7=P3^3;//开门时间
sbit k8=P2^2;//清零
sbit beep=P2^3;//蜂鸣器
sbit out2=P2^6;//加热丝

uchar time=0,mode=0;//系统变量
uchar num=0,fen=0;//开门次数+时间
uchar pwm1=0,pwm2=0;//电机速度,压缩机+热风机
uchar led_out=0xff;//led状态
uchar out1=0;//输出
bit beep_flag=0;//蜂鸣器开关
uchar disp1[]=" 00C 00%  00";//温度+湿度+开门次数
uchar disp2[]="00:00 00V 00";//时间+电压+开门时间
//主函数
void main()
{
	uchar k=0;
	Hc595SendByte1(0xff);
	init_1602();
	TMOD|=0X01;
	TH0=0X3C;
	TL0=0XB0;	
	ET0=1;//打开定时器0中断允许
	EA=1;//打开总中断
	TR0=1;//打开定时器
	while(1)
	{
		if(!k1 &&(k!=1))//冷藏模式
		{
			k=1;
			if(k4)
				mode=0;
			else
			{
				if(pwm2<4)
					pwm2++;
				out2=0;
			}
		} 
		if(!k2 &&(k!=2))//速冻模式
		{
			k=2;
			if(k4)
				mode=1;
			else
			{
				if(pwm2>2)
					pwm2--;
			}
		} 
		if(!k3 &&(k!=3))//省电模式
		{
			k=3;
			mode=2;
		}
		if(!k5)//停止报警
		{
			beep_flag=1;
		} 
		if(!k6 &&(k!=6))//开门次数
		{
			k=6;
			if(num<90)
				num+=5;
		} 
		if(!k7 &&(k!=7))//开门时间
		{
			k=7;
			if(fen<10)
				fen++;
			At24c02Write(0,fen);//存储
		} 
		if(!k8)//清零
		{
			fen=0;num=0;
		}
		if(k1 && k2 && k3 && k6 && k7)
		{
			k=0;
		}
	}
}
//定时器中断
void Timer0() interrupt 1
{
	uint i=0;
	if(time<10)//0.5s
		time++;
	else
	{
		time=0;
		//测量温湿度
		dht11_recive();
		//读取时间
		Ds1302ReadTime();
		//显示
		if(dht11_dat[2]>127)//负温度
		{
			disp1[0]='-';
			i=dht11_dat[2]-1;
			i=~i;
			disp1[1]=i/10+0x30;
			disp1[2]=i%10+0x30;
		}
		else   //正温度
		{
			disp1[0]=' ';
			i=dht11_dat[2];
			disp1[1]=i/10+0x30;
			disp1[2]=i%10+0x30;
		}
			disp1[5]=dht11_dat[0]/10+0x30;//湿度显示
			disp1[6]=dht11_dat[0]%10+0x30;
			disp1[10]=num/10+0x30;//开门次数
			disp1[11]=num%10+0x30;
		disp2[0]=ds1302_time[2]/10+0x30;//时间
		disp2[1]=ds1302_time[2]%10+0x30;
		disp2[3]=ds1302_time[1]/10+0x30;//时间
		disp2[4]=ds1302_time[1]%10+0x30;
		i=PCF8591_read(0);//测量电压
		i=i/3;
		disp2[6]=i/10+0x30;//显示电压
		disp2[7]=i%10+0x30;
		disp2[10]=fen/10+0x30;//开门时间
		disp2[11]=fen%10+0x30;
		write_string(1,0,disp1);
		write_string(2,0,disp2);
		//输出控制
		if(!k4)//手动模式
		{
			pwm1=0;
			out2=0;
			if(pwm2<2)
				pwm2=2;
		}
		else //自动模式
		{
			if(mode==0)//冷藏
			{
				if(dht11_dat[2]<20)//0-20
				{
					 if(dht11_dat[0]<30)//0-30%
					 {
					 	if(num<20)
						{
							pwm2=3;
							out2=0;
							pwm1=0;
						}
						else if(num<40)
						{
							pwm2=2;
							out2=0;
							pwm1=0;
						}
						else
						{
							pwm2=0;
							out2=1;
							pwm1=3;
						}
					 }
					 else if(dht11_dat[0]<60) //30-60%
					 {
					 	if(num<20)
						{
							pwm2=4;
							out2=0;
							pwm1=0;
						}
						else if(num<40)
						{
							pwm2=3;
							out2=0;
							pwm1=0;
						}
						else
						{
							pwm2=2;
							out2=0;
							pwm1=0;
						}
					 }
					 else //60-100%
					 {
					 	if(num<20)
						{
							pwm2=4;
							out2=0;
							pwm1=0;
						}
						else if(num<40)
						{
							pwm2=4;
							out2=0;
							pwm1=0;
						}
						else
						{
							pwm2=3;
							out2=0;
							pwm1=0;
						}
					 }
				}
				led_out &=0xfe;
			}
			else
				led_out |=0x01;
			if(mode==1)//速冻
			{
				pwm1=4;
				pwm2=0;
				out2=1;
				led_out &=0xfd;
			}
			else
				led_out |=0x02;
			if(mode==2)//省电
			{
				pwm1=2;
				pwm2=0;
				out2=1;
				led_out &=0xfb;
			}
			else
				led_out |=0x04;
		}
		//报警功能
		if(fen>9)//门报警
			led_out &=0xef;
		else
			led_out |=0x10;
		if(i>28)//电压报警
			led_out &=0xdf;
		else
			led_out |=0x20;
		if(dht11_dat[2]>20)//温度报警
			led_out &=0xbf;
		else
			led_out |=0x40;
		if((led_out & 0xf0)<0xf0)
		{
			if(!beep_flag)
				beep=0;
			else
				beep=1;
		}	
		else
		{
			beep=1;
			beep_flag=0;
		}
		Hc595SendByte(led_out);//点亮LED
		switch(pwm1)//电机速度控制
		{
			case 0:out1=0x0f;break;
			case 2:out1=0x0e;break;
			case 3:out1=0x0c;break;
			case 4:out1=0x08;
		}
		switch(pwm2)
		{
			case 0:out1+=0xf0;break;
			case 2:out1+=0xe0;break;
			case 3:out1+=0xc0;break;
			case 4:out1+=0x80;
		}
		Hc595SendByte1(out1);
	}
	TH0=0X3C;
	TL0=0XB0;
}
  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cqtianxingkeji

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值