标题:
基于单片机的热水器水温控制系统源程序与原理图
[打印本页]
作者:
flipzzd
时间:
2021-4-19 15:56
标题:
基于单片机的热水器水温控制系统源程序与原理图
附件里面有程序和电路图
基于弱电控制强电的原理设计并制作一个温度控制系统,控制对象为水温。本课题要求能够利用STC89C52单片机实现水温的控制,运用显示屏显示出水的实时温度,并在此基础上控制调节水温加热到我们通过按钮设定的温度(其方式是通过加热或者自然降温),当加热到设定的温度时,利用单片机控制继电器,使其断开,进而使加热装置断电。
根据温度测量系统框图,所需的硬件电路主要有STC89C52单片机、DS18B20、加热电路和按按键电路等。首先由DS18B20实现数据的场采集,由按键输入设定值,数据进入单片机后,由单片机控制加热电路,或自然冷却,1602显示器来显示实测温度值
电路原理图如下:
51hei截图_20210419155242.png
(73.34 KB, 下载次数: 62)
下载附件
电路图
2021-4-19 15:53 上传
单片机源程序如下:
#include<reg52.h>
#include"lcd.h"
#include"temp.h"
sbit key2 = P1^0; //对应+键,低电平有效
sbit key3 = P1^1; //对应-键,低电平有效
sbit key1 = P1^2; //对应开始键,低电平有效
sbit relay = P2^1;
//--定义全局变量--//
unsigned int wendu;
unsigned char mubiao=30;
unsigned char cishu;
unsigned char code kaiji1[14] = "Welcome to use";
unsigned char code kaiji2[12] = "this product";
unsigned char code dis1[71] = "shezhi:";
unsigned char code dis2[71] = "wendu :";
//--定义全局函数--//
void Delay10ms(unsigned int c); //延时10ms
void Key_Scan();
/*******************************************************************************
* 函数名 : main
* 函数功能 : 主函数
* 输入 : 无
* 输出 : 无
*******************************************************************************/
void main()
{
float tp;
unsigned char i;
unsigned char disbuff[4] ={ 0,0,0,0,};
unsigned char disbuffset[4] ={ 0,0,0,0,};
LcdInit(); //初始化LCD1602
LcdWriteCom(0x80); //写地址 80表示初始地址
for(i=0; i<14; i++)
{
LcdWriteData(kaiji1[i]);
}
LcdWriteCom(0xc0); //写地址 c0表示初始地址
for(i=0; i<12; i++)
{
LcdWriteData(kaiji2[i]);
}
Delay10ms(100);
LcdWriteCom(0x01); //清屏
LcdWriteCom(0x80); //写地址 80表示初始地址
for(i=0; i<7; i++)
{
LcdWriteData(dis1[i]);
}
LcdWriteCom(0xc0); //写地址 c0表示初始地址
for(i=0; i<7; i++)
{
LcdWriteData(dis2[i]);
}
LcdWriteCom(0x80+15); //写地址 80表示初始地址
LcdWriteData('C');
LcdWriteCom(0xc0+15); //写地址 80表示初始地址
LcdWriteData('C');
while(1)
{
Key_Scan();
disbuffset[0]=mubiao%1000/100;
disbuffset[1]=mubiao%100/10;
disbuffset[2]=mubiao%10;
LcdWriteCom(0x80+9); //写地址 80表示初始地址
LcdWriteData('0'+disbuffset[1]); //显示小数点
LcdWriteCom(0x80+10); //写地址 80表示初始地址
LcdWriteData('0'+disbuffset[2]); //显示小数点
tp=Ds18b20ReadTemp();//因为数据处理有小数点所以将温度赋给一个浮点型变量
//如果温度是正的那么,那么正数的原码就是补码它本身
wendu=tp*0.0625*100+0.5;
//留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点
//后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就
//算加上0.5,还是在小数点后面。
wendu=wendu/10;
disbuff[0]=wendu%1000/100;
disbuff[1]=wendu%100/10;
disbuff[2]=wendu %10;
LcdWriteCom(0xc0+9); //写地址 80表示初始地址
LcdWriteData('0'+disbuff[0]); //个位
LcdWriteCom(0xc0+10); //写地址 80表示初始地址
LcdWriteData('0'+disbuff[1]); //显示小数点
LcdWriteCom(0xc0+11); //写地址 80表示初始地址
LcdWriteData('.'); //显示 ‘.’
LcdWriteCom(0xc0+12); //写地址 80表示初始地址
LcdWriteData('0'+disbuff[2]); //显示小数点
if(cishu==1)
{
if(wendu < (mubiao*10) )
{
relay=0;
}
else
{
relay=1;
}
}
else
{
relay=1;
}
//delayms(10); //
}
}
/*******************************************************************************
* 函 数 名 : Key_Scan()
* 函数功能 : 扫描键盘
* 输 入 : 无
* 输 出 : 读取到的键值
*******************************************************************************/
void Key_Scan()
{
unsigned char i; //保存键值
//--检测按键1--//
if (key1==0) //检测按键K1是否按下
{
Delay10ms(1); //消除抖动
if (key1==0) //再次检测按键是否按下
{
cishu ++ ;
if(cishu > 1)
{
cishu = 0 ;
}
i = 0;
while ((i<50) && (key1==0)) //检测按键是否松开
{
Delay10ms(1);
i++;
}
}
}
if (key2==0) //检测按键K1是否按下
{
Delay10ms(1); //消除抖动
if (key2==0) //再次检测按键是否按下
{
mubiao++;
i = 0;
while ((i<50) && (key2==0)) //检测按键是否松开
{
Delay10ms(1);
i++;
}
}
}
if (key3==0) //检测按键K1是否按下
{
Delay10ms(1); //消除抖动
if (key3==0) //再次检测按键是否按下
{
mubiao--;
i = 0;
while ((i<50) && (key3==0)) //检测按键是否松开
{
Delay10ms(1);
i++;
}
}
}
}
/*******************************************************************************
* 函 数 名 : Delay10ms
* 函数功能 : 延时函数,延时10ms
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void Delay10ms(unsigned int c) //误差 0us
{
unsigned char a, b;
//--c已经在传递过来的时候已经赋值了,所以在for语句第一句就不用赋值了--//
for (;c>0;c--)
{
for (b=38;b>0;b--)
{
for (a=130;a>0;a--);
}
}
}
复制代码
所有程序51hei提供下载:
059水温控制系统.zip
(249.05 KB, 下载次数: 101)
2021-4-19 15:47 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
地方的纷纷扰扰
时间:
2021-6-3 22:31
怎么解决误差,
有好几°的误差
55555
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1