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