资源描述
河南城建学院
微机原理与接口技术课程设计报告
模拟快热式家用电热水器的设计
姓 名:
学 号: 0924131
专业班级: 0924131
指导老师:
所在院系:电气与信息工程学院
2015年12月 30 日
一、评语(根据学生答辩情况及其报告质量综合评定)。
二、评分
指导教师签字:
年 月 日
目录
第一章 背景意义和功能介绍 5
1.1 背景意义 5
1.2 功能要求 5
第二章 方案论证 6
第三章 系统硬件设计 7
3.1 单片机的选择 7
3.2温度检测传感器的选择 8
3.21 DS18B20简介 8
3.22 DS18B20测温原理 9
3.3 电源电路的选择 9
3.4 键盘的选择 10
3.5 显示器的选择 10
3.51 概述 11
3.6 报警系统 12
3.7 加热系统 12
4.1 主程序 13
4.2 按键扫描处理子程序 15
4.3 加热控制程序 15
4.4 温度检测 16
第五章 源程序代码 17
第六章 课程设计体会 23
第七章 参考文献 24
附录一 快热式电热水器硬件原理图 25
附录二 快热式电热水器仿真图 26
附录三 快热式电热水器PCB图 27
摘 要
热水器已成为日常生活中不可缺少的家用电器,设计制造更实用、更方便、更安全、更节能的热水器是产品设计师和生产厂家不断追求的目标。快热式电热水器与普通电热水器最大的区别在于它取消了储水罐,热水随开随用,无须预热,减少了电能浪费。另外,它还具有体积小,使用安全,安装方便等优点。本文首先介绍了系统的总体组成,硬件中先描述了整体结构和各模块的相互关系。本软件采用模块化设计。在主程序模块下分成若干彼此独立的分模块,本系统可以实现对热水器水温的实时控制,程序的可移植性强,有很好的推广、应用价值。性能达到目前国内的同类设备水平,且价格低廉。
关键字: 51系列单片机控制 1602液晶显示 单片机 温度传感器
第一章 背景意义和功能介绍
1.1 背景意义
目前热水器已成为日常生活中不可缺少的家用电器,设计制造更实用、更方便、更安全、更节能的热水器是产品设计师和生产厂商不断追求的目标。快热式家用电热水器无需储水罐,热水即开即用,无需预热,减少了电能的浪费,应用价值极高。另外还具有体积小、使用安全、安装方便等优点。设计采用数码管显示水温,有功率档调节,出水温度自动控制。系统硬件电路设计包括加热控制、温度检测等电路的设计,系统程序设计包括主函数程序、显示扫描子函数程序、按键扫描处理子程序、加热控制函数程序与温度检测函数程序等的设计。
对于家用电热水器来说,硬件系统是它的最基本的框架,是系统的所有功能的丛础。热水器控制电路数控部分采用AT89C51单片机作为控制核心。硬件的选择和所选硬件的性能对系统的功能实现以及系统的精度都有直接的影响,系统的设计成功与否很大程度上取决于硬件系统的设汁。本系统硬件方案论证包括单片机、温度检测传感器、加热控制驱动电路、电源电路、及键盘和显示等电路的选择。
1.2 功能要求
当前,热水器已成为日常生活中﹑不可缺少的电器,设计制造更实用﹑更方便﹑更安全﹑更节能的热水器是产品设计师和生产厂家不断追求的目标。快热式电热水器与普通电热水器最大的区别在与它取消了储水罐,热水随开随用,无需预热,减少了电能浪费。另外,它还具有体积小,使用安全,安装方便等优点。
其设计要求如下:
l 温度检测显示范围为00~99℃,精确度为±1℃。
l 设置2个功率档位指示灯。
设置3个轻触按钮,分别为电源开关键、“一档”键和“二挡”键。加热功率分0-2档。
l 出水温度超过65℃时停止加热,并蜂鸣报警,温度降到45℃以下时恢复。
l 内胆温度超过105℃时停止加热,防止干烧。
第二章 方案论证
按快热式电热水器的功能要求,决定采用如图2.1所示的模块组成系统,主要包括电源电路、单片机控制器、温度检测电路、按键输入电路、LED数码管及指示灯电路、报警电路和加热控制电路。
温度检测
液晶显示
单
片
机
按键按钮
蜂鸣报警
电源
加热控制
图2.1 快热式电热水器系统组成框
第三章 系统硬件设计
快热式热水器控制系统电路是由7部分电路组成:单片机系统及外围电路、电源电路、按键输入电路、液晶显示电路及指示灯电路、报警电路、加热控制电路和温度检测电路。
控制器采用成本低廉且工作可靠的AT89C52单片机和12MHZ的晶振。AT89C52对电源要求不甚严格,电源电路采用四节干电池供电。按键采用轻触小按钮。显示电路采用1602液晶显示屏,由两个三极9012驱动。3个LED指示灯用于指示加热功率。报警电路采用5V的自鸣器。
3.1 单片机的选择
STC89C52RC单片机是宏晶科技推出的新一代高速/低功耗/超强抗干扰的单片机,指令代码完全兼容传统8051单片机,12时钟/机器周期和6时钟/机器周期可以任意选择。
具有以下标准功能: 8k字节Flash,512字节RAM, 32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,3个16 位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。另外 STC89C52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35MHz,6T/12T可选。
图3.1 STC89C52RC引脚图
3.2温度检测传感器的选择
温度检测的方法很多,有热点阻,热电偶,热敏电阻,还有专门的集成测温传感器等。
方案一:
热电式传感器是将温度变化转化为电量变化的装置,它利用敏感元件的电磁参数随温度变化而变化的特性来达到测量目的。通常把被测温度的变化转换为敏感元件的电阻变化、电势的变化,再经过相应的测量电路输出电压或电流,然后由这些参数的变化来检测对象的温度变化。热敏电阻具有灵敏度高、体积小、较稳定、制作简单、寿命长、易于维护、动态特性好等优点。
方案二:
集成测温传感器如:DS18B20,直接将温度转换为数字信号传送给单片机。这种方法比较先进,电路也比较简单,所以采用这种方案。
3.21 DS18B20简介
DS18B20的引脚分布(图2),由DALLAS半导体公司生产的DS18B20型单线智能温度传感器,属于新一代适配微处理器的智能温度传感器。与传统的热敏电阻相比,它能够直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。其可以分别在93.75ms和750ms内完成9位和12位的数字量,最大分辨率为0.0625℃,而且
从DS18B20读出或写入DS18B20的信息仅需要一根口线(单线接口)读写。
图3.2 1 DS18B20外部形状及管脚图
3.22 DS18B20测温原理
DS18B20的测温原理如图3所示,图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。计数器1和温度寄存器被预置在-55℃所对应的一个基数值。计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。
斜率累加器
预值
低温度系数振荡器
计数器1
预值
比较
=0
温度寄储器
高温度系数振荡器
计数器2
=0
停止
加1
置位/清除
图3.22 DS18B20测温原理
3.3 电源电路的选择
方案一:
市电整流成+5v电压,电路比较复杂,要求较高,而且成本比较高。
方案二:
采用干电池,使用方便,安全可靠,,且使用时间较短,所以采用第二种方案。
3.4 键盘的选择
方案一:
键盘选用行列式键盘,行列式键盘的接口方法,直接接口于单片机的I/O口上。键盘设置在行、列线的交点上,行、列线分别连接到按键开关的两端。行线通过上拉电阻接+5V,被拉在高电平状态。但线路较复杂,价格较昂贵。不适用。
方案二:
独立式按键是指直接用输入端口线构成的单个按键电路,常用于需要少量几个按键的计算机控制系统。每个独立式按键单独占用一根输入端口线,各键的工作状态不会相互影响。采用轻触式独立小按钮,即实用又方便,因为本电路对键盘的要求不高,所以采用这种方案。
图3.4 独立按键图
3.5 显示器的选择
方案一:
选择数码管,数码管成本低廉,但是只能显示数字,不能显示字母。
方案二:
LCD1602液晶显示屏,可以显示数字与字母,而且运用广泛。所以选择方案二。
3.51 概述
液晶(Liquid Crystal)是一种高分子材料,因其特殊的物理、化学、光学特性,广泛应用轻薄显示器上。
液晶显示器(Liquid Crystal Display,LCD)的主要原理是以电流刺激液晶分子产生点、线、面并配合背部灯管构成画面。
各种型号的液晶通常是按照显示字符的行数或液晶点阵的行、列数来命名。例如,1602表示每行显示16个字符,一共可以显示两行。这类液晶通常称为字符型液晶,只能显示ASCII码字符。
图3.51 1602液晶模块硬件原理图
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次。
开始
系统初始化
i=1
按下扫描若有
键按下,i=6
显示扫描
加热控制
温度检测
刷新显示温度
完成100次循环
--i=0?
图4.1 主程序流程图
4.2 按键扫描处理子程序
按键扫描子程序负责逐个扫描档位“+”键、档位“-”键和开关键是否被按下,若有键下,则作出相应处理。图4.3 所示为按键扫描子程序流程图。
发按键音、消抖
加热键位加1
返回值1
加热档位减1
返回值2
关机,停止输出
等待开关键
再次按下
开机,恢复工作
返回值0
开始
结束
+键按下?
开关键按下?
-键按下?
发按键音、消抖
发按键音、消抖
图4.3 按键扫描子程序流程图
4.3 加热控制程序
加热控制程序根据用户设定的加热档位和当前的状态,决定是否加热和控制加热功率并点亮相应的指示灯。若有超温标志,还应打开蜂鸣器报警。
4.4 温度检测
DS18B20数据采集子程序的设计
温度采集程序如图所示。编程时一定要遵守DS18B20时序,否则DS18B20将不会响应。
是
初始化
89S52送复位脉冲
DS18B20送存在脉冲
送CONVERT T命令
89S52送复位脉冲
DS18B20送存在脉冲
送SKIP ROM命令
送READ SCRTCHPAD命令
读两字节数据
89S52送复位脉冲
DS18B20送存在脉
DQ为高电平
送SKIP ROM命令
否
图4.4 温度采集程序流程
第五章 源程序代码
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit rs=P1^0; //LCD1602位定义
sbit rw=P1^1; //LCD1602位定义
sbit e=P1^2; //LCD1602位定义
sbit DW1=P2^6;
sbit DW2=P2^7;
sbit Heating=P2^1; //加热指示
uchar code table1[]="NOW Temper: C"; //液晶屏显示内容
uchar code table2[]="Temper's testing"; //液晶屏显示内容
sbit da=P1^4; //调节加
sbit db=P1^5; //调节减
sbit BEEP=P2^0; //蜂鸣器接口
sbit DQ=P1^3; //温度数据口
int temperature; //全局变量 温度
/*********************************LCD1602********************************/
void delay1(uint z) //显示屏延时函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com) //LCD1602写指令函数
{
rw=0;
delay1(5);
rs=0;
delay1(5);
e=1;
delay1(5);
P0=com;
delay1(5);
e=0;
delay1(5);
}
void write_date(uchar date) //LCD1602写数据函数
{
rw=0;
delay1(5);
rs=1;
delay1(5);
e=1;
delay1(5);
P0=date;
delay1(5);
e=0;
delay1(5);
}
void init() //LCD1602初始化函数
{
uchar num;
e=0; // 时序表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);
for(num=0;num<16;num++)
{
write_date(table2[num]); //显示数组table2的内容
delay1(1);
}
}
void temperature_dispaly(char add,char dat) //温度显示函数:第一个:参数的地址,第二个:参数的内容
{
uchar shi,ge;
shi=dat/10; //把温度的十位提取出来
ge=dat%10; //把温度的个位提取出来
write_com(0x80+add); //要写的地址
write_date(0x30+shi); //十位的内容 1602字符库
write_date(0x30+ge); //个位的内容 1602字符库
}
/****************************************************************************************************/
void delay(uint y) //DS18B20延时函数(仿真用)
{
while(y--);
}
void write_byte(uint dat) //写一个字节
{
uchar i;
for(i=0;i<8;i++) //循环八次 共有八位
{
DQ=0; //写零
DQ=dat&0x01; //向总线写位数据,从最低位写起
delay(4);
DQ=1; //写一
dat>>=1; //下次写作准备,移位数据
}
delay(4);
}
uchar read_byte(void) //读一个字节,返回值
{
uchar i;
uint value;
for(i=0;i<8;i++) //循环八次 共有八位
{
DQ=0;
value>>=1;
DQ=1; //释放总线
if(DQ)
value|=0x80; //DQ=1,value取1
delay(4);
}
return value;
}
void ds18b20_init() //初始化函数
{
uint n;
DQ=1;
delay(8);
DQ=0;
delay(80); //低电平480——960us
DQ=1; //总线释放
delay(8); //等待50——100us
n=DQ; //读取复位状态
delay(4);
}
int readtemperature() //读整数部分
{
int a,b; //高八位,低八位
ds18b20_init();
write_byte(0xcc); //跳过rom匹配,跳过读序列号的操作,可节省操作时间
write_byte(0x44); //启动温度检测
delay(300); //测温度
ds18b20_init(); //开始操作前需要复位
write_byte(0xcc); //跳过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; //取反码再加一
b=b*0.0625; //再运算
write_com(0x80+12); //在LCD1602对应的位置写一个负号
write_date(0x2d);
}
return b; //返回b,此时以表示温度
}
void KEY(void)
{
if(da==0) //按键按下
{
delay1(2); //延时消抖
if(da==0) //按键确实按下
{
while(!da); //等待按键释放
if((temperature>45)&&(temperature<65)) //如果实际温度值大于设置值
{ //启动蜂鸣器
DW1=0;
DW2=1;
}
}
}
if(db==0) //按键按下
{
delay1(2); //延时消抖
if(db==0) //按键确实按下
{
while(!db); //等待按键释放
if((temperature>45)&&(temperature<65)) //如果实际温度值大于设置值
{ //启动蜂鸣器
DW1=1;
DW2=0;
}
}
}
if((temperature>45)&&(temperature<65)) //如果实际温度值大于设置值
{
Heating=0; //启动蜂鸣器
}
else
{
Heating=1; //关闭蜂鸣器
}
if(temperature>65) //如果实际温度值大于设置值
{
BEEP=1;
DW1=1;
DW2=1; //启动蜂鸣器
}
else
{
BEEP=0; //关闭蜂鸣器
}
}
/************************************TC35***********************************************************/
void Sys_Init(void)
{
TMOD=0x21; //设置定时器1的工作方式为方式2
TH1=0xfd;
TL1=0xfd; //设置串行口波特率为9600
TR1=1; //开启定时器1
SCON=0x50; //设置串行口的工作方式为方式一,允许接收
PCON=0x00;
ES=1; //开串行口中断
EA=1; //开总中断
BEEP=0; //关闭蜂鸣器
}
//void Delay_0_5s(uint y) //延时1s
//{
// uint a;
// for(a=0;a<10*y;a++) //20为1s
// {
// TH0=(65536-50000)/256;
// TL0=(65536-50000)%256;
// TR0=1;
// while(!TF0);
// TF0=0;
// }
//}
void main()
{
Sys_Init(); //单片机系统初始化
init(); //液晶屏初始化
temperature=readtemperature(); //读取实时温度
temperature_dispaly(13,temperature); //显示温度到LCD1602
temperature=readtemperature(); //读取实时温度
temperature_dispaly(13,temperature); //显示温度到LCD1602
//外部中断初始化
while(1)
{
temperature=readtemperature(); //读取实时温度
temperature_dispaly(13,temperature); //显示温度到LCD1602
KEY(); //扫描按键程序
}
}
第六章 课程设计体会
在这段时间里,大家都在准备实践。这个实践既是对理论知识的检验,也是动手能力的表现。实践是为我们即将步入社会工作前的热身锻炼,让我们把书本上的知识和实践相结合。在老师的细心指导下,为期两个月的实践即将结束,在设计的过程中学了很多东西,进一步对本专业知识的加深和了解。
当老师把课题和要求下发后,我们就开始查阅相关的资料,并写开题报告,做好实践的前期准备工作,好的开端是成功的一半。也对后面的设计有帮助。我所做的课题是快热式电热水器的设计,老师给了我们比较多的参考资料,由于平时所学甚少,在此设计时我感到很吃力,还好现在互联网技术发达、以及信息比较广发,这才使得我这个设计顺利完成。其实,我的这个课题接近我们的生活,在我们身边随处可见,我们也经常会碰见,只是有时候很匆忙没有来得急去想其工作原理。
在做此实践时我得出一个结论:知识必须通过应用才能实现其价值。有些东西自以为学会了,但是用到它时才知道是两回事。所以我认为,能够熟练地运用所学的知识的时候才是真正意义上的学会了这方面的知识。
这次实践使我在处理实际问题上,有了很好的锻炼。在考虑问题方面,也有了一定的进步。因为一个实践是要综合各方面知识才能完成,在学习的时候,很多课程都是相对独立的,有的课程有联系,但是我们想不到从何处把它们联系到一起来。而在实践中,许多问题必须综合起来考虑,单独的哪一门课程是解决不了问题,这就提高了我们综合各方面知识运用的能力,将各方面问题与所学的专业知识联系起来,这样更容易解决所出现的问题。首先要从大局出发,每个工程都是由几个模块组成,所以我们要把这些模块确定好,每个模块的设计都不一样,模块设计完成后,就是要很好的把这些模块连接起来,组成整体。连接后,就要对其进行调试,这个调试是个很复杂的过程。就相当于把实践各个方面都要联系起来,一个一个问题的解决,使其达到最佳状态。实践可以检验出我们对所学的知识掌握能力,哪些地方已经掌握了,哪些地方还没掌握。通过实践就可以清楚的知道自己在大学三年里是否学到了,还是在学校玩了三年。在此,我非常感谢老师。
同时,在做本实践的过程中,一些其他的老师和同学还给了我建议与帮助。在此,同时感谢所有在实践中给我帮助的老师和同学们,谢谢!
第七章 参考文献
【1】 单片机原理及接口技术/李朝青-杭州:北京航空航天大学出版社,1998
【2】 单片机基础【M】/李广第—北京:北京航空航天大学出版社,1994
【3】 数字电子技术基础(第三版)/阎石一北京:高等教育出版社,1989
【4】 电子技术基础(第五版)/康华光—北京:高等教育出版社,2006
【5】 例说8051/张义禾,陈敌北—北京:人民邮电出版社,2006
【6】 8051单片机数据传输接口与扩展技术及应用实例/杨金岩,郑应强,张振仁—北京:人民邮电出版社,2005
【7】 单片机工程实训指导/楼兰苗,李光飞—北京:北京航空航天大学出版社,2007
【8】 电力电子技术/ 石新春,杨京燕,王毅—北京:中国电力出版社,2006
【9】 单片机原理及应用[M]/李建中—西安:西安电子科技大学出版社,2003
附录一 快热式电热水器硬件原理图
附录二 快热式电热水器仿真图
附录三 快热式电热水器PCB图
35
展开阅读全文