51基于模糊控制的水温控制系统-LCD1602-KEY-RELAY-固态继电器
本设计由STC89C52单片机电路+数字温度传感器DS18B20电路+按键电路+固态继电器控制电路+LCD1602液晶显示电路+电源电路组成。
1、LCD1602液晶实时显示当前温度值和设置的温度阈值,温度阈值可以通过按键设置。
2、如果温度超过阈值,则继电器断开,如果温度低于阈值,则继电器闭合。
3、采用模糊算法控制。
资料下载地址
https://pan.baidu.com/s/1QQ6nlevcB5y2f22c1XGLUQ?pwd=8888
部分代码
void Init_Timer0(void);//定时器初始化
void CheckKey(void);
unsigned int usMBMH16(unsigned char *pucFrame,unsigned int usLen);
void main (void)
{
unsigned char i;
Init_Timer0();
LCD_Init(); //初始化液晶
DelayMs(20); //延时有助于稳定
LCD_Clear(); //清屏
while (1) //主循环
{
CheckKey(); //检测按键
if(ReadTempFlag==1) //读取温度标志
{
ReadTempFlag=0;
temp1=ReadTemperature(); //读取温度
}
if(DisFlag==1)
{
DisFlag=0;
if((temperature>0)&&(temperature<150))
{
sprintf(dis0,"Temp:%4.1f",temperature);//打印温度值
LCD_Write_String(0,0,dis0);//显示第二行
}
sprintf(dis1,"set:%3d ",setData); //更新显示
LCD_Write_String(0,1,(unsigned char *)dis1);//打印显示
i++;
if(i<MH_LEN)
{
temperture[i]=(char)temperature;//累计存储温度值
}
else
{i=0;}
if(temperature<setData)
{
relay = 0;//打开继电器
pwmVal = usMBMH16(temperture,MH_LEN) ; //运算处理温度 定时器中应用pwm
}
}
}
}
void CheckKey(void)
{
static bit rekey=0; //防止重复按下
if((key1==0)||(key2==0)||(key3==0)) //检测到按键按下
{
DelayMs(10); //小抖动
if(rekey==0)
{
rekey=1;
if(key2==0)//设置值--
{
if(setData>1)
{
setData=setData-1;
}
}
else if(key3==0)//设置值++
{
if(setData<150)
{
setData=setData+1;
}
}
}
}
else
{
rekey=0; //防止重复检测到按键
}
}
资料下载地址
https://pan.baidu.com/s/1QQ6nlevcB5y2f22c1XGLUQ?pwd=8888