基于单片机的模拟快热式家用电热水器的设计Word文件下载.docx
- 文档编号:19423836
- 上传时间:2023-01-06
- 格式:DOCX
- 页数:25
- 大小:322.09KB
基于单片机的模拟快热式家用电热水器的设计Word文件下载.docx
《基于单片机的模拟快热式家用电热水器的设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《基于单片机的模拟快热式家用电热水器的设计Word文件下载.docx(25页珍藏版)》请在冰豆网上搜索。
4.2按键扫描处理子程序15
4.3加热控制程序15
4.4温度检测16
第五章源程序代码17
第六章课程设计体会23
第七章参考文献24
附录一快热式电热水器硬件原理图25
附录二快热式电热水器仿真图26
附录三快热式电热水器PCB图27
摘要
热水器已成为日常生活中不可缺少的家用电器,设计制造更实用、更方便、更安全、更节能的热水器是产品设计师和生产厂家不断追求的目标。
快热式电热水器与普通电热水器最大的区别在于它取消了储水罐,热水随开随用,无须预热,减少了电能浪费。
另外,它还具有体积小,使用安全,安装方便等优点。
本文首先介绍了系统的总体组成,硬件中先描述了整体结构和各模块的相互关系。
本软件采用模块化设计。
在主程序模块下分成若干彼此独立的分模块,本系统可以实现对热水器水温的实时控制,程序的可移植性强,有很好的推广、应用价值。
性能达到目前国内的同类设备水平,且价格低廉。
关键字:
51系列单片机控制1602液晶显示单片机温度传感器
第一章背景意义和功能介绍
1.1背景意义
目前热水器已成为日常生活中不可缺少的家用电器,设计制造更实用、更方便、更安全、更节能的热水器是产品设计师和生产厂商不断追求的目标。
快热式家用电热水器无需储水罐,热水即开即用,无需预热,减少了电能的浪费,应用价值极高。
另外还具有体积小、使用安全、安装方便等优点。
设计采用数码管显示水温,有功率档调节,出水温度自动控制。
系统硬件电路设计包括加热控制、温度检测等电路的设计,系统程序设计包括主函数程序、显示扫描子函数程序、按键扫描处理子程序、加热控制函数程序与温度检测函数程序等的设计。
对于家用电热水器来说,硬件系统是它的最基本的框架,是系统的所有功能的丛础。
热水器控制电路数控部分采用AT89C51单片机作为控制核心。
硬件的选择和所选硬件的性能对系统的功能实现以及系统的精度都有直接的影响,系统的设计成功与否很大程度上取决于硬件系统的设汁。
本系统硬件方案论证包括单片机、温度检测传感器、加热控制驱动电路、电源电路、及键盘和显示等电路的选择。
1.2功能要求
当前,热水器已成为日常生活中﹑不可缺少的电器,设计制造更实用﹑更方便﹑更安全﹑更节能的热水器是产品设计师和生产厂家不断追求的目标。
快热式电热水器与普通电热水器最大的区别在与它取消了储水罐,热水随开随用,无需预热,减少了电能浪费。
其设计要求如下:
●温度检测显示范围为00~99℃,精确度为±
1℃。
●设置2个功率档位指示灯。
设置3个轻触按钮,分别为电源开关键、“一档”键和“二挡”键。
加热功率分0-2档。
●出水温度超过65℃时停止加热,并蜂鸣报警,温度降到45℃以下时恢复。
●内胆温度超过105℃时停止加热,防止干烧。
第二章方案论证
按快热式电热水器的功能要求,决定采用如图2.1所示的模块组成系统,主要包括电源电路、单片机控制器、温度检测电路、按键输入电路、LED数码管及指示灯电路、报警电路和加热控制电路。
图2.1快热式电热水器系统组成框
第三章系统硬件设计
快热式热水器控制系统电路是由7部分电路组成:
单片机系统及外围电路、电源电路、按键输入电路、液晶显示电路及指示灯电路、报警电路、加热控制电路和温度检测电路。
控制器采用成本低廉且工作可靠的AT89C52单片机和12MHZ的晶振。
AT89C52对电源要求不甚严格,电源电路采用四节干电池供电。
按键采用轻触小按钮。
显示电路采用1602液晶显示屏,由两个三极9012驱动。
3个LED指示灯用于指示加热功率。
报警电路采用5V的自鸣器。
STC89C52RC单片机是宏晶科技推出的新一代高速/低功耗/超强抗干扰的单片机,指令代码完全兼容传统8051单片机,12时钟/机器周期和6时钟/机器周期可以任意选择。
具有以下标准功能:
8k字节Flash,512字节RAM,32位I/O口线,看门狗定时器,内置4KBEEPROM,MAX810复位电路,3个16位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。
另外STC89C52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
最高运作频率35MHz,6T/12T可选。
图3.1STC89C52RC引脚图
温度检测的方法很多,有热点阻,热电偶,热敏电阻,还有专门的集成测温传感器等。
方案一:
热电式传感器是将温度变化转化为电量变化的装置,它利用敏感元件的电磁参数随温度变化而变化的特性来达到测量目的。
通常把被测温度的变化转换为敏感元件的电阻变化、电势的变化,再经过相应的测量电路输出电压或电流,然后由这些参数的变化来检测对象的温度变化。
热敏电阻具有灵敏度高、体积小、较稳定、制作简单、寿命长、易于维护、动态特性好等优点。
方案二:
集成测温传感器如:
DS18B20,直接将温度转换为数字信号传送给单片机。
这种方法比较先进,电路也比较简单,所以采用这种方案。
3.21DS18B20简介
DS18B20的引脚分布(图2),由DALLAS半导体公司生产的DS18B20型单线智能温度传感器,属于新一代适配微处理器的智能温度传感器。
与传统的热敏电阻相比,它能够直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。
其可以分别在93.75ms和750ms内完成9位和12位的数字量,最大分辨率为0.0625℃,而且
从DS18B20读出或写入DS18B20的信息仅需要一根口线(单线接口)读写。
图3.21DS18B20外部形状及管脚图
3.22DS18B20测温原理
DS18B20的测温原理如图3所示,图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。
高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。
计数器1和温度寄存器被预置在-55℃所对应的一个基数值。
计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。
斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。
图3.22DS18B20测温原理
市电整流成+5v电压,电路比较复杂,要求较高,而且成本比较高。
采用干电池,使用方便,安全可靠,,且使用时间较短,所以采用第二种方案。
键盘选用行列式键盘,行列式键盘的接口方法,直接接口于单片机的I/O口上。
键盘设置在行、列线的交点上,行、列线分别连接到按键开关的两端。
行线通过上拉电阻接+5V,被拉在高电平状态。
但线路较复杂,价格较昂贵。
不适用。
方案二:
独立式按键是指直接用输入端口线构成的单个按键电路,常用于需要少量几个按键的计算机控制系统。
每个独立式按键单独占用一根输入端口线,各键的工作状态不会相互影响。
采用轻触式独立小按钮,即实用又方便,因为本电路对键盘的要求不高,所以采用这种方案。
图3.4独立按键图
显示器的选择
选择数码管,数码管成本低廉,但是只能显示数字,不能显示字母。
LCD1602液晶显示屏,可以显示数字与字母,而且运用广泛。
所以选择方案二。
液晶(Liquid
Crystal)是一种高分子材料,因其特殊的物理、化学、光学特性,广泛应用轻薄显示器上。
液晶显示器(Liquid
Crystal
Display,LCD)的主要原理是以电流刺激液晶分子产生点、线、面并配合背部灯管构成画面。
各种型号的液晶通常是按照显示字符的行数或液晶点阵的行、列数来命名。
例如,1602表示每行显示16个字符,一共可以显示两行。
这类液晶通常称为字符型液晶,只能显示ASCII码字符。
图3.511602液晶模块硬件原理图
3.6报警系统
采用蜂鸣器加LED二极管的声光报警电路,操作简单,价格低廉
图3.61声光报警电路电路图
3.7加热系统
由于此电路电源为干电池,电压比较低,无法负载大型加热器件,而且此为模拟热水器,所以加热系统只是一种理想状态,在此电路中只用一个LED发光二极管作为加热标志。
在实际情况中可作为继电器的开关信号,开启加热系统。
图3.71加热系统简化图
第四章系统软件的设计
按快热式热水器的功能,系统程序必须实现显示扫描、按键扫描处理、加热控制和温度检测(包括超温报警)4项任务。
51系列单片机实现多任务运行的方法就是分时复用,在程序设计时更要相应地分配好各任务的CPU占用时间。
对于以上几个任务稍加分析可以看出,显示扫描、按键扫描和加热控制任务相对而言有实时要求,而温度检测任务则可用定时(0.5~1S)实现。
4.1主程序
系统在上电复位后,先对温度寄存器、档位寄存器赋默认值,并进行清除超温标志,设置定时器及中断系统的工作方式等初始化工作,图4.1所示为主程序流程图。
由于51系列单片机没有停机指令,所以可以利用主程序设置死循环反复运行各个任务。
把有实时要求的子程序(显示扫描、按键扫描、加热控制)放在最内层的循环中,计算其运行一次占用的CPU时间,然后根据温度检测定时的间隔时间,计算出该循环的循环次数。
本例中每运行一次有实时要求的子程序(即显示扫描、按键扫描、加热控制)约占用5msCPU时间,运行测温程序的时间间隔为0.5s,那么循环次数应为100次。
图4.1主程序流程图
4.2按键扫描处理子程序
按键扫描子程序负责逐个扫描档位“+”键、档位“-”键和开关键是否被按下,若有键下,则作出相应处理。
图4.3所示为按键扫描子程序流程图。
图4.3按键扫描子程序流程图
4.3加热控制程序
加热控制程序根据用户设定的加热档位和当前的状态,决定是否加热和控制加热功率并点亮相应的指示灯。
若有超温标志,还应打开蜂鸣器报警。
4.4温度检测
DS18B20数据采集子程序的设计
温度采集程序如图所示。
编程时一定要遵守DS18B20时序,否则DS18B20将不会响应。
是
图4.4温度采集程序流程
第五章源程序代码
#include<
reg52.h>
#defineuintunsignedint
#defineucharunsignedchar
sbitrs=P1^0;
//LCD1602位定义
sbitrw=P1^1;
sbite=P1^2;
sbitDW1=P2^6;
sbitDW2=P2^7;
sbitHeating=P2^1;
//加热指示
ucharcodetable1[]="
NOWTemper:
C"
;
//液晶屏显示内容
ucharcodetable2[]="
Temper'
stesting"
sbitda=P1^4;
//调节加
sbitdb=P1^5;
//调节减
sbitBEEP=P2^0;
//蜂鸣器接口
sbitDQ=P1^3;
//温度数据口
inttemperature;
//全局变量温度
/*********************************LCD1602********************************/
voiddelay1(uintz)//显示屏延时函数
{
uintx,y;
for(x=z;
x>
0;
x--)
for(y=110;
y>
y--);
}
voidwrite_com(ucharcom)//LCD1602写指令函数
rw=0;
delay1(5);
rs=0;
e=1;
P0=com;
e=0;
voidwrite_date(uchardate)//LCD1602写数据函数
{
rs=1;
P0=date;
voidinit()//LCD1602初始化函数
{
ucharnum;
//时序表e初始为0
write_com(0x38);
//设置16*2显示,5*7点阵,8位数据接口
write_com(0x0c);
//设置光标
write_com(0x06);
//光标自动加1,光标输入方式
write_com(0x01);
//清屏
write_com(0x80);
//设置初始显示位置
for(num=0;
num<
16;
num++)
{
write_date(table1[num]);
//显示数组table1的内容
delay1
(1);
}
write_com(0x80+0x40);
{
write_date(table2[num]);
//显示数组table2的内容
}
}
voidtemperature_dispaly(charadd,chardat)//温度显示函数:
第一个:
参数的地址,第二个:
参数的内容
ucharshi,ge;
shi=dat/10;
//把温度的十位提取出来
ge=dat%10;
//把温度的个位提取出来
write_com(0x80+add);
//要写的地址
write_date(0x30+shi);
//十位的内容1602字符库
write_date(0x30+ge);
//个位的内容1602字符库
/****************************************************************************************************/
voiddelay(uinty)//DS18B20延时函数(仿真用)
while(y--);
voidwrite_byte(uintdat)//写一个字节
uchari;
for(i=0;
i<
8;
i++)//循环八次共有八位
DQ=0;
//写零
DQ=dat&
0x01;
//向总线写位数据,从最低位写起
delay(4);
DQ=1;
//写一
dat>
>
=1;
//下次写作准备,移位数据
delay(4);
}
ucharread_byte(void)//读一个字节,返回值
uintvalue;
value>
//释放总线
if(DQ)
value|=0x80;
//DQ=1,value取1
returnvalue;
voidds18b20_init()//初始化函数
uintn;
DQ=1;
delay(8);
DQ=0;
delay(80);
//低电平480——960us
//总线释放
//等待50——100us
n=DQ;
//读取复位状态
intreadtemperature()//读整数部分
inta,b;
//高八位,低八位
ds18b20_init();
write_byte(0xcc);
//跳过rom匹配,跳过读序列号的操作,可节省操作时间
write_byte(0x44);
//启动温度检测
delay(300);
//测温度
//开始操作前需要复位
//跳过rom匹配
write_byte(0xbe);
//写读寄存器中温度值的命令
a=read_byte();
//low低位开始读取
b=read_byte();
//high高位开始读取
b<
<
=8;
//把高位左移八位
b=b|a;
//高八位与第八位进行或运算,得到总和
if(b>
=0)//如果温度大于等于0
b=b*0.0625;
//直接乘以0.0625
write_com(0x80+12);
//在LCD1602对应的位置不写内容
write_date(0x20);
else//温度小于0
{
b=~b+1;
//取反码再加一
//再运算
//在LCD1602对应的位置写一个负号
write_date(0x2d);
returnb;
//返回b,此时以表示温度
voidKEY(void)
if(da==0)//按键按下
delay1
(2);
//延时消抖
if(da==0)//按键确实按下
{
while(!
da);
//等待按键释放
if((temperature>
45)&
&
(temperature<
65))//如果实际温度值大于设置值
{//启动蜂鸣器
DW1=0;
DW2=1;
}
}
if(db==0)//按键按下
if(db==0)//按键确实按下
db);
//等待按键释放
DW1=1;
DW2=0;
}
if((temperature>
Heating=0;
//启动蜂鸣器
else
Heating=1;
//关闭蜂鸣器
if(temperature>
65)//如果实际温度值大于设置值
BEEP=1;
DW1=1;
DW2=1;
//启动蜂鸣器
BEEP=0;
//关闭蜂鸣器
/************************************TC35***********************************************************/
voidSys_Init(void)
TMOD=0x21;
//设置定时器1的工作方式为方式2
TH1=0xfd;
TL1=0xfd;
//设置串行口波特率为9600
TR1=1;
//开启定时器1
SCON=0x50;
//设置串行口的工作方式为方式一,允许接收
PCON=0x00;
ES=1;
//开串行口中断
EA=1;
//开总中断
BEEP=0;
//关闭蜂鸣器
//voidDelay_0_5s(uinty)//延时1s
//{
//uinta;
//for(a=0;
a<
10*y;
a++)//20为1s
//{
//TH0=(65536-50000)/256;
//TL0=(65536-50000)%256;
//TR0=1;
//while(!
TF0);
//TF0=0;
//}
//}
voidmain()
Sys_Init();
//单片机系统初始化
init();
//液晶屏初始化
temperature=readtemperature();
//读取实时温度
temperature_dispaly(13,temperature);
//显示温度到LCD1602
temperature=readtemperatur
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 模拟 快热式 家用 电热水器 设计