基于c51的微波炉控制系统

基于c51的微波炉控制系统_第1张图片   

本次完成了一个由c51主控的 简易的微波炉控制系统。

本次要求大致为:

        1.可以设置低温20°,中温30°和高温50°。

        2.可设置最长十分钟定时。

        3.用DS18B20感知温度,当温度达到设置温度值时,并持续设定时间长度时,蜂鸣器提示,LED灯闪烁,同时时间归零。

如图:

数码管前俩位,是DS18B20实时监测的温度(28℃),中间俩位是预定的温度(高温挡50℃),后俩位是定时的时间(5min)。

其中使用DS18B20最初始的代码,就不多说了。并没有太多改动,只是讲DS18B20输出的温度设了一个temp1输出到函数中。

void datapros(int temp) 	 
{
   	float tp;  
	if(temp< 0)				//当温度值为负数
  	{
//		DisplayData[0] = 0x40; 	  //   -
		//因为读取的温度是实际温度的补码,所以减1,再取反求出原码
		temp=temp-1;
		temp=~temp;
		tp=temp;
		temp=tp*0.0625*100+0.5;	
		//留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点
		//后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就
		//算加上0.5,还是在小数点后面。
 
  	}
 	else
  	{			
//		DisplayData[0] = 0x00;
		tp=temp;//因为数据处理有小数点所以将温度赋给一个浮点型变量
		//如果温度是正的那么,那么正数的原码就是补码它本身
		temp=tp*0.0625*100+0.5;	
		//留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点
		//后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就
		//算加上0.5,还是在小数点后面。
	}
	temp1=temp;
	DisplayData[1] = smgduan[temp / 10000];
	DisplayData[2] = smgduan[temp % 10000 / 1000];
	DisplayData[3] = smgduan[temp % 1000 / 100] | 0x80;
	DisplayData[4] = smgduan[temp % 100 / 10];
	DisplayData[5] = smgduan[temp % 10];
}

 下面是数码管显示的系统/

void display()    //扫描显示动态数码管
{
     LSA=0; LSB=0; LSC=0; P0=DisplayData[2];delay(70); P0=0x00;  
     LSA=1; LSB=0; LSC=0; P0=DisplayData[3];delay(70); P0=0x00; 
//	 LSA=0; LSB=1; LSC=0; P0=smgduan[];delay(5); P0=0x00; 
     LSA=1; LSB=1; LSC=0; P0=smgduan[ydz];delay(70); P0=0x00; 
	 LSA=0; LSB=0; LSC=1; P0=smgduan[0];delay(70); P0=0x00; 
//    LSA=1; LSB=0; LSC=1; P0=smgduan[10];delay(5); P0=0x00; 
	 LSA=0; LSB=1; LSC=1; P0=smgduan[F/10];delay(70); P0=0x00; 
	 LSA=1; LSB=1; LSC=1; P0=smgduan[F%10];delay(70); P0=0x00; 
}

然后就是对温度选择的控制,我的想法是15-25℃为低温挡 、25-45℃为中温挡 、45-55℃为高温挡 。有很多不足,但仅对于DS18B20而言,没有加热的装置,所以范围是最简的选择。附上其中中档的定时及到点后的提示与报警。

	if(25

 对定时时间的控制,我才用定时器0控制。但其中有很多来延误时间,所以只能给一个大致到一分钟的时间。

void Timer0() interrupt 1
{
	static u16 i;
	TH0=0XFC;	//给定时器赋初值,定时1ms
	TL0=0X18;
	i++;
	if(i==590000)  //60s  不准确
	{
			i=0;
			F--;
	}	
}

 

 然后就是对档位的控制,因为档位并没有太高要求,我只用了 2 3 5 三个数字代替。

if(k1==0)		  //调节低温 中温 高温
	{	
		delay(1000);   
		if(k1==0)	 
		{
			flat++;
			if(flat==1)ydz=3;
			else if(flat==2)ydz=5;
			else
			{
				flat=0;
				ydz=2;
			}
		}
		while(!k1);	 //检测按键是否松开
	}

最后就是主函数了

void main()
{
	Timer0Init();  //定时器1初始化
	
	beep=1;
	led=1;
	while(1)
	{
		datapros(Ds18b20ReadTemp());	 //数据处理函数  
		keypros();
		display();
		Time();
	}		
}

 总结:

        本次专业课程设计并不是太难,只花了一下午和一晚上的时间,但对我而言 足够勉强混过这个课程了。当然,其中有很多不足,我也有很多想法:比如 再加湿度传感器、重力传感器、微波炉门有没有开关、以及加热时,加一个小风扇来使微波炉里面的热更加均匀。(再加云端、加入互联网,远程控制,更加智能化。但这些还要考虑如何将东西放入微波炉,就太复杂了)。但课程紧张,我想就这样吧,到此为止。谢谢观看

你可能感兴趣的:(智能控制,DS18B20,小微波炉,p2p,linq,网络协议,c++)