基于单片机的热敏电阻测温设计
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
{
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");
}
|