资讯详情

基于单片机的热敏电阻测温设计

基于单片机热敏电阻测温设计

1.基本功能 1)具有声光报警功能; 2)使用液晶显示; 3)设置上下报警值;上下报警; 4)手动设定温度上下限;

总体方案设计

温度控制系统主要由温度传感器(热敏电阻)组成,A/D转换器,单片机(STC12C5A60S2)按钮设置和液晶显示组成。 

主函数

void main() { 
          float Rad;  LCD1602_cls();  TMOD=0x01;  TH0=0x4c;  TL0=0x00;  ET0=1;  TR0=1;  EA=1;  temp_h=byte_read(0x2000);  temp_l=byte_read(0x2200);  if(temp_h>99||temp_l>99||temp_l>=temp_h)  { 
           temp_h=30;   temp_l=10;  }  while(1)  { 
           zhi=(float)read2543(0)/819.0;   Rad=zhi/((5.0-zhi)/10000.0);   temp=(int)(temp * 0.5)   (TempCalculate(Rad,3950.0,0,10000.0) * 0.5);
		show();		 //显示函数
		key();		 //按键处理程序
		proc();		 //超限处理程序
	}
}

按键检测

void key()
{ 
        

	if(!key_1)
	{ 
        
		delay(888);
		if(!key_1)
		{ 
        
			state=(state+1)%3;
			while(!key_1);
		}
	}
	if(state!=0)
	{ 
        
		if(!key_2)
		{ 
        
			delay(888);
			if(!key_2)
			{ 
        
				while(!key_2) show();
				switch(state)
				{ 
        
					case 1:
					if(temp_h<99)temp_h++;
					SectorErase(0x2000);	 //保存上限值
					byte_write(0x2000,temp_h);
					break;
					case 2:
					if(temp_h>temp_l+1)temp_l++;	
					SectorErase(0x2200);	 //保存上限值
					byte_write(0x2200,temp_l);
					break;
				}
			}
		}
		if(!key_3)
		{ 
        
			delay(888);
			if(!key_3)
			{ 
        
				while(!key_3) show();
				switch(state)
				{ 
        
					case 1:
					if(temp_h>temp_l+1)temp_h--;
					SectorErase(0x2000);	 //保存上限值
					byte_write(0x2000,temp_h);
					break;
					case 2:
					if(temp_l>-40)temp_l--;
					SectorErase(0x2200);	 //保存上限值
					byte_write(0x2200,temp_l);
					break;

				}
			}
		}
	}
}

数据显示

void show()			//显示数据
{ 
        

		LCD1602_write(0,0x80);
		LCD1602_writebyte("Temp:");
		if(temp>=0)
		{ 
        
		   	if(temp>99)LCD1602_write(1,0x30+temp/100%10);
			else LCD1602_writebyte(" ");
			if(temp>9)LCD1602_write(1,0x30+temp/10%10);
			else LCD1602_writebyte(" ");
			LCD1602_write(1,0x30+temp%10);
		}else
		{ 
        
			LCD1602_writebyte("-");
			if(temp*-1>9)LCD1602_write(1,0x30+(temp*-1)/10%10);
			else LCD1602_writebyte(" ");
			LCD1602_write(1,0x30+(temp*-1)%10);	
		}
		LCD1602_write(1,0xdf);
		LCD1602_writebyte("C ");



	 	LCD1602_write(0,0xC0);
		LCD1602_writebyte("H:");
		if(state==1&&s1==1)
		{ 
        
			LCD1602_writebyte(" ");
		}else
		{ 
        


			if(temp_h>=0)
			{ 
        
			   	if(temp_h>99)LCD1602_write(1,0x30+temp_h/100%10);
				else LCD1602_writebyte(" ");
				if(temp_h>9)LCD1602_write(1,0x30+temp_h/10%10);
				else LCD1602_writebyte(" ");
				LCD1602_write(1,0x30+temp_h%10);
			}else
			{ 
        
				LCD1602_writebyte("-");
				if(temp_h*-1>9)LCD1602_write(1,0x30+(temp_h*-1)/10%10);
				else LCD1602_writebyte(" ");
				LCD1602_write(1,0x30+(temp_h*-1)%10);	
			}
		}
		LCD1602_write(1,0xdf);
		LCD1602_writebyte("C L:");
		if(state==2&&s1==1)
		{ 
        
			LCD1602_writebyte(" ");
		}else
		{ 
        
// LCD1602_write(1,0x30+temp_l/10%10);
// LCD1602_write(1,0x30+temp_l%10);

			if(temp_l>=0)
			{ 
        
			   	if(temp_l>99)LCD1602_write(1,0x30+temp_l/100%10);
				else LCD1602_writebyte(" ");
				if(temp_l>9)LCD1602_write(1,0x30+temp_l/10%10);
				else LCD1602_writebyte(" ");
				LCD1602_write(1,0x30+temp_l%10);
			}else
			{ 
        
				LCD1602_writebyte("-");
				if(temp_l*-1>9)LCD1602_write(1,0x30+(temp_l*-1)/10%10);
				else LCD1602_writebyte(" ");
				LCD1602_write(1,0x30+(temp_l*-1)%10);	
			}
		}
		LCD1602_write(1,0xdf);
		LCD1602_writebyte("C");
	
}

标签: te511温度lcd显示传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台