智能电饭煲控制系统课程设计
广州学院
课程设计说明
智能电饭煲控制系统设计
院(系) 机械工程学院
专 业 机械工程及自动化
班 级
学生姓名
指导老师
2012 年1月1日
课 程 设 计 任 务 书
兹发给2009级机械工程及自动化 班学生 课程设计任务
书,内容如下:
1( 设计题目: 智能电饭煲控制系统设计
2( 应完成的项目:
(1) 智能电饭煲控制系统整体
设计
(2) 智能电饭煲控制系统硬件电路设计
(3) 智能电饭煲控制系统软件程序设计
(4) 完成电路原理图1张、软件程序清单1份
3( 参考资料以及说明:
[1]余永权.单片机与家用电器智能化技术[M].北京:电子工业出版社,1995.
[2]李士勇.模糊控制?神经控制和智能控制论[M].黑龙江:哈尔滨工业大学出版社,1998
[3]周鲜成.模糊电饭煲的控制原理[J].株洲工学院学报,2000, 14 (6) : 35-37.
[4]李宇成,卢俊峰.电饭煲的模糊控制器[J].北方工业大学学报,1998, 10 (3) :
85-90.
4( 本设计任务书于2012 年12月24日发出,应于2013年1月4日前完成,然
后进行答辩。
指导教师 签发 2012 年 12 月 24 日 2
课程设计评语:
课程设计总评成绩:
指导教师签字:
年 月 日1
目 录
摘要 ................................................................... 2 第一章 绪论 ............................................................ 1 1.1 背景及发展 ....................................................... 1 1.2 设计任务 ....................... 错误~未定义书签。错误!未定义书签。
第二章 智能电饭煲控制系统整体
错误~未定义书签。错误!未定义书签。
第三章 智能电饭煲控制系统硬件设计 ...................................... 3 3.1 单片机的选择 ..................................................... 3 3.2 传感器DS18B20的简介 ........... 错误~未定义书签。错误!未定义书签。
3.3 显示模块的设计 ................................................... 5 3.4 键盘模块的设计 ................................................... 6
3.5 火力控制模块 ..................................................... 7 3.6 电源模块设计 ..................................................... 8 3.7功率调节 .......................................................... 8 第四章 智能电饭煲控制系统软件设计 ..................................... 10 4.1主程序设计 ....................................................... 10 4.2子程序设计 ....................................................... 11
4.2.1定时功能控制
............................................. 11
4.2.2 加热功能控制流程 ............................................ 13 结束语 ................................................................ 14 参考文献 .............................................................. 15 附 录 .............................................................. 16 附录1:智能电饭煲控制系统电路原理图 ................................. 16
附录2:智能电饭煲控制系统软件源程序清单 ............................. 17
摘要
本次课程设计是以AT89C52单片机为核心器件,设计了智能电饭煲控制系统。
在当今科技发达的时代,智能科技成为了我们生活中必不可少的生活帮手,在家用电器中运用智能科技可以使我们的生活更加方便。智能电饭煲的设计原则就是“方便人们的生活”。本次的课程设计是先对电饭煲的发展状况进行了阐述,分析了电饭煲的发展趋势,以及智能电饭煲的发展优势。在此基础上,确定了本课题智能电饭煲控制系统整体设计方案。其次,从实用性、智能化、节约成本、环保节能等角度出发,对智能电饭煲控制系统的硬件、软件进行了详细设计。按照实现功能对硬件、软件进行了功能划分,并对各部分的原理、实现方法进行了详细说明。
关键词:智能控制,电饭煲,单片机,传感器
2
第一章 绪论
1.1 背景及发展
电饭煲,又称作电锅、电饭锅。是利用电能转变为内能的炊具,常见的电饭锅分为保温自动式、定时保温式以及新型的微电脑控制式三类。现在已经成为日常家用电器,电饭煲的发明缩减了很多家庭花费在煮饭上,在今天,电饭煲已经成了家庭必备的电器之一。电饭煲最初是机械式控制,这种控制方式具有结构简单、技术门槛低、价格便宜等优点,但同时也有功能单一、控制方式不灵活等不足之处。近年来,随着电子技术的发展,元器件的制造成本不断下降,电饭煲也迎来了智能化的春天。智能电饭煲修改过去功能简单的煮饭模式,将煮食这一事件细分为煮饭、煲汤、煮粥等多种任务模式,此外还具有预约定时,自动保温及功率选择等功能,提升了产品的人性化设计,使得煮食过程更加方便、快捷,满足了人们的需求。
1.2设计任务
试设计电饭煲控制器,要求可以有预约煮饭、定时做饭功能、煮饭、煮粥等功率选择
具体要求如下。
1.2.1 控制策略
控制系统支持对煮饭时间进行提前预约,定时时间到后自动进行煮饭,煮饭结束后自动转入保温模式。
1.2.2 定时
用户可以是电饭煲在预约时间(倒计时方式)开始工作。
1.2.3 功率选择
煮饭、煮粥时可选择不同的功率,相对于煮饭,煮粥的功率可选择较小。 1.2.4 显示器
本设计中选用LCD-1602作为显示器件,用于向用户传递更多的信息,包括定时时间显示、工作模式显示、故障提示等信息。
1
第二章 智能电饭煲控制系统整体设计方案
智能电饭煲控制系统硬件电路按照功能可划分为七个组成部分,即控制系统单片机最小系统工作电路、控制系统电源电路、按键输入电路、温度传感器电路、LED状态指示电路、LCD显示电路以及电饭锅加热电路。
按键操作输入电路LCD显示电路
顶盖温度传感器AT89C51
LED工作状态指示电路单片机
复位电路
时钟电路加热电路
220VAC-DC5V电源
图一 智能电饭煲控制系统组成图
2
第三章 系统硬件设计
3.1 单片机的选择
中央处理模块单片机芯片通过比较,选用了 AT89C521单片机来作为本系统的核心,图二所示的是单片机的最小系统电路。
图二 智能电饭煲控制系统单片机最小系统电路
3
3.2传感器DS18B20简介
DS18B20数字温度计是DALLAS公司生产的1,Wire,即单总线器件,具有线路简单,体积小的特点。因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。
DS18B20是一款功能独特的产品,其特点如下:
(1)、只要求一个端口即可实现通信。
(2)、在DS18B20中的每个器件上都有独一无二的序列号。
(3)、实际应用中不需要外部任何元器件即可实现测温。
(4)、测量温度范围在,55。C到,125。C之间。
(5)、数字温度计的分辨率用户可以从9位到12位选择。
(6)、内部有温度上、下限告警设置。
DS18B20有两种封装形式,即TO,92封装和8-pinSOIC封装。每种封装的样式及引脚排列见图三,其引脚功能描述见表3-2。
图三 DS18B20的引脚排列
表3-2 DS18B20详细引脚功能描述
序号 名称 引脚功能描述 1 GND 地信号
2
2 DQ 数据输入/输出引脚。开漏单
总线接口引脚。当被用着在寄
生电源下,也可以向器件提供
电源。
3 VDD 可选择的VDD引脚。当工作
于寄生电源时,此引脚必须接
地。
3.3显示模块设计
液晶显示器以其微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点,本设计中选用的字符型液晶模块是一种用5x7点阵图形来显示字符的液晶显示器,根据显示的容量可以分为1行16个字、2行16个字、2行20个字等等,本设计中选用常用的2行16个字的1602液晶模块。
LCD-1602共有引脚16个,各引脚的功能如下:
第1脚:VSS为地电源
第2脚:VDD接5V正电源
第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高。
第4脚:RS为寄存器选择,高电平选择数据寄存器、低电平时选择指令寄存器。
第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。
第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
第7,14脚:D0,D7为8位双向数据线。
第15,16脚:
BLA(BL1):LED背光正极。需要背光时,BLA串接一个限流电阻接VDD,BLK接地,实
,一般接一个几十欧姆的电阻。 测该模块的背光电流为50mA左右
BLK(BL2):LED背光地端。
如图四所示。
5
图四为显示模块电路
3.4键盘模块设计
该系统的键盘由5个独立键盘构成,包括一个中断键盘单元。来完成智能电饭煲的手动控制。键盘的一脚接在单片机的p1.0至p1.5脚上,另外一脚接在电源地上,当有键盘按下时对应的键盘就会有一低电平送进单片机内部。为消除触点式按键开关的机械抖动,单片机内部有程序进行消抖处理,然后确定那一个键盘被按下后来执行程序完成该系统的指定工作。
该控制系统键盘接入电路如图五所示。
2
图五 控制系统键盘输入电路
3.5火力控制模块设计
电饭煲采用加热盘作为加热部件,加热盘需要直接与220V交流电压相连接,而且功率一般在1500瓦以上,因此其工作电流也比较大。因此控制系统需要专门设计驱动加热盘的电路,如图五所示
本设计中采用继电器驱动加热盘与220V交流电源接通。
原因有二,一是继电器具有驱动电流大,控制简单,稳定可靠的优点,适合电饭煲中开关频率不高的应用场合。二是继电器的线圈与输出节点之间有天然的隔离作用,无需另外添加光耦等隔离器件。
本电路中加热盘驱动电路如图。单片机引脚通过驱动NPN三极管间接驱动继电器。当与之相连的单片机引脚电平为高时,三极管处于导通状态,继电器线圈中有电流流过,从而触电吸合。电路中将继电器触点通过插接器件引出,方便将加热盘与电源串接起来。
其中,R8为限流电阻,阻值定为3.3K。D1为二极管,在此电路中起到对继电器线圈续流作用,避免线圈感生高电压击穿三极管。
7
图六 控制系统热盘驱动电路
3.6 电源模块设计
本设计中,控制系统电源电路设计如图3-6所示。
220V交流电源由J1接入电路,后经变压器T1将220V降压为8.5V交流电压,该低交流电压经N1进行全波整流,变为脉动直流,最后,该脉动直流经过低压差稳压芯片78L05稳定为纹波系数较小的5V直流电源。
图七 整流流程图
3.7 功率调节设计
本电饭煲功率调节电路,可获得四挡火力,用以适应不同火候的要求。 电路工作原理 电路原理图如图九所示。调节波段开关SA的挡位,可以改变电容C1的充放电速率。利用C1两端交流电压通过双向触发二极管VD3去触发双向晶闸管VS导通、并改变了VS的导通角,使负载RL两端交流电压随之发生变化。 发光二极管VD2、VD5
2
作为信号指示,由于导通角不同,发光亮度各异。SA置于“1”挡,VD5显示;SA置于“4”挡,则VD2显示;R5是限流电阻,用来保护VS。电阻R7、电容C2为吸收回路,用来吸收SA在选挡时所产生的干扰脉冲,否则在SA选挡过程中将对电视机、音响及其他电声器件产生一定的干扰; 元器件选择 电容C1选用0.1uF/160V,C2选0.022uF/400V(涤纶电容器)。电阻R1为56kΩ、1/2W,R2为39kΩ、1/4W,R3为27kΩ、1/4W,R4为2kΩ、1/4W,R5为47Ω、1/2W,R6为100kΩ、1/2W(可变),R7为300Ω、1/4W,R8为43kΩ、1/2W。二极管VD1、VD4用1N4004。发光二极管VD2用BT104(黄色),VD5用BT103(绿色)。触发二极管VD3为DB3或VR60。双向晶闸管V5用TLC226B(3A/400V)或TLC336A(3A/600V)。波段开关SA用KZX-1-2D-11W。负载RL为交流220V/1500W(加热盘)。
图九 功率调节电路
9
第四章 智能电饭煲控制系统软件设计
4.1 主程序设计
系统的软件设计采用结构化和模块化设计的方法,便于程序的编写、调试和排除错误,同时也便于检验和维护。根据设计的要求和前面描述的控制器系统硬件设计的具体情况,单片机系统的软件程序主要由以下模块组成:初始化主程序、输入及显示、温度采集、火力控制。
主程序流程图如图11所示。
图11 主程序结构图
2
4.2子程序设计
4.2.1 定时功能控制流程
软件实现该功能的流程如图12所示。
系统运行后,若按下“SET”按键,系统即可进入预设定时时间状态,此时“时”位数值开始闪烁,表示“时”位数值处于可设定状态。此时按下“ADD”键,预定时间的小时数将累加1,若按下“DEC”键,预定时间的小时数减1。
本控制系统支持最大定时12小时,当小时数超出12后会溢出为0。即置“时”位数值时,若当前示数为12,且按下“ADD”键,则小时数由12变为0时0分。
小时数设定完成后,按下“OK”键,进入设定“分”状态,同时“分”位数值开始闪烁。此时按下“ADD”键,预定时间的分钟数加1,若按下“DEC”键,则预定时间的分钟数减1。
若当前的分钟数为59,且按下“ADD”键,则分钟数溢出为0,同时小时数加1;若当前分钟数为0,且按下“DEC”键,则分钟数溢出为59,同时小时数减少1。
分钟数设定完成后,再次按下“OK”键,系统则保存用户设定的定时时间并退出定时时间设定状态。
随后系统暂停所处的工作模式,进入倒计时程序。定时时间到,系统自动进入预定的工作模式,或煮饭或煲汤或保温。
11
开始
按下
SET/OK
按下ADD键
(DEC键)一次
进入预约时间设定状态。可设定“时”位数值增加1(减少1)“时”,且“时”位数字闪烁提示
按下
SET/OK
按下ADD键
(DEC键)一次
进入设定“分”状态,且“分”数字“分”位数值增加1(减少1)闪烁提示
按下
SET/OK
保存设定数值,并退出设定状态
倒计时程序
否
定时时间到,
是
图12 定时功能控制流程
进入预设工作模式
2
4.2.2 加热功能控制流程
智能电饭煲控制系统对电饭煲加热与否需要根据当前锅内温度以及所处的工作模式做出选择。其软件控制流程如图13所示。
控制器先通过置于盖顶的温度传感器获得当前锅内温度,根据所处的工作模式,得到需要到达的目标温度。若当前锅内温度小于目标温度,则控制器接通加热盘加热,否则断开加热盘,停止加热。
开始
读取当前温度
否当前温度<目标温度,
是
进行加热
否当前温度>=目标温度,
是
停止加热
结束
图13加热功能控制流程图
13
结束语
本次的电饭煲控制系统设计完全实现智能控制,包括预约煮饭、煮粥、定时做饭、
煮粥、做饭功率的选择等功能。预约和定时做饭时间可随意调节,预约结束后自动进行相应的预约动作。
这次课程设计是对我学习微机原理及单片机课程的检验及实际应用能力一次提高。在编写程序之前,我们查阅了大量的相关资料,力求做到规范清晰。编程的过程中,我们遇到了很多问题,但在同学和老师的帮助下都得到了解决。经过两个星期的课程设计,我得到了充分的锻炼,不仅对单片机的学习有深刻的理解,同时也增强了我们的毅力和处理突发问题的能力。课程设计是一次很好的实践动手机会,通过这次设计,我们学会了如何将所知识学以致用。为我们的毕业设计奠定了良好的基础。
2
参考文献
[1]余永权.单片机与家用电器智能化技术[M].北京:电子工业出版社,1995. [2]李士勇.模糊控制?神经控制和智能控制论[M].黑龙江:哈尔滨工业大学出版社,1998
[3]周鲜成.模糊电饭煲的控制原理[J].株洲工学院学报,2000, 14 (6) : 35-37. [4]李宇成,卢俊峰.电饭煲的模糊控制器[J].北方工业大学学报,1998, 10 (3) : 85-90.
15
LCD-1602
附 录
附录1:智能电饭煲控制系统电路原理图
D714VCCD613D512R9LED1D411D310RES29D28R10LED2D1HOTX201.77D0RES2E6J25R11LED3K1RW41972-1CRS1234RES232电源定时煲汤煮饭保温2R12LED4CON21VCCU5LCD1602RES25+V5X201.8D4D5D6D3R139LED5C4C5C6RES2R3R5R60.1μD1DD10K10K10KM7100μ/16V100μ/16VVCC
8N2178L05HOTJ13Vout221GND1R8VinCON2Q1RSRW3.3K9013E
VCC
CC
U2VCCK1140P1.0VccD0K2239P1.1P0.0D1K3338P1.2P0.1D2K4437P1.3P0.2D3K5536C1P1.4P0.3D4K663510uFP1.5P0.4D5734P1.6P0.5D6DQ833P1.7P0.6D7RSTRST932RSTP0.71031VCCP3.0(RXD)EA/VppN1LED11130P3.1(TXD)ALE/PROGLED21229R1P3.2(INT0)PSENLED3132810KP3.3(INT1)P2.7BBLED41427P3.4(T0)P2.6LED51526P3.5(T1)P2.5C108.5VC21625P3.6(WR)P2.40.1μ220V/380V30PDB1071724Y1P3.7(RD)P2.31823XTAL2P2.224M1922XTAL1P2.12021GNDP2.0C330PAT89C51
T1D2
ONK1VCC13AC+R7AAOFFK2U434K7VCC 24MODELK32DQAC-DQ1GNDADDK4DS18B202 DECK51234
T-5WSET/OKK6
附录2:智能电饭煲控制系统软件源程序清单
CPU:AT89C51
晶振:24M
版本:V1.0
日期:2012.03
//=========================================/ #include
#include
#include
//---------------------------------------------------------
#define PORT P2
#define NEGATIVE 10
#define POSITIVE 11
#define Y 0XFF
#define N 0x00
#define LOW 0X00
#define HI 0x01
//读端口数据-----------------------------------------------
#define POWERON ((P1&(1<<0))>>0) //p1.0 #define POWEROFF ((P1&(1<<1))>>1) //p1.1 #define MODEL ((P1&(1<<2))>>2) //p1.2 #define ADD ((P1&(1<<3))>>3) //P1.3 #define DEC ((P1&(1<<4))>>4) //P1.4 #define OK ((P1&(1<<5))>>5) //P1.5 //写端口数据------------------------------------------------
sbit HOT =P3^0;
sbit workingled =P3^1;
sbit timerled =P3^2;
sbit banwenled =P3^3;
sbit baotangled =P3^4;
sbit zhufanled =P3^5;
sbit RS =P0^0;
sbit RW =P0^1;
sbit EN =P0^2;
sbit DQ =P1^7;
//------------------------------------------------------
unsigned char code shuzidaima[]=
{0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x2d,0x2b};
unsigned char temp_lowbyte_unprocess; unsigned char temp_hibyte_unprocess; unsigned char temp_xiao;
17
unsigned char temp_ge;
unsigned char temp_shi;
unsigned char temp_bai;
unsigned char temp_fuhao;
------------------------------------------------------- //
unsigned char poweron=N;
unsigned char model=0;
unsigned char dest_temp=0;
unsigned char now_temp=255; signed int min_num=0;
unsigned char timersetting_state=0; unsigned char timing_state=N; unsigned int loop=0;
unsigned char loop1=0;
unsigned char loop2=0;
unsigned int loop3=0;
/*=======子程序=======*/
---------------------------------------------------------------- //
//函数名:delay()
//-----------------------------------------------------------------
void delay()
{
unsigned int i;
for(i=0;i<=800;i++)
{;}
}
//----------------------------------------------------------------
//----------------------------------------------------------------
//函数名:lcd_wcomd()
//-----------------------------------------------------------------
void lcd_wcomd(unsigned char command) {
RS=0;
RW=0;
PORT=command;
delay();
EN=1;
_nop_();
EN=0;
delay();
}
//----------------------------------------------------------------
//函数名:lcd_wdata()
//-----------------------------------------------------------------
2
void lcd_wdata(unsigned char dat)
{
RS=1;
RW=0;
PORT=dat;
delay();
EN=1;
_nop_();
EN=0;
delay();
}
//---------------------------------------------------------------- //函数名:lcd_ini()
//----------------------------------------------------------------- void lcd_init()
{
lcd_wcomd(0x01);
lcd_wcomd(0x06);
lcd_wcomd(0x0c);
lcd_wcomd(0x38);
}
//---------------------------------------------------------------- //函数名:printchar()
//----------------------------------------------------------------- void printchar(unsigned char zifu[])
{
unsigned char j,k;
k=strlen(zifu);
for(j=0;j<=k-1;j++)
{
lcd_wdata(zifu[j]);
}
}
//---------------------------------------------------------------- //函数名:display_num()
//----------------------------------------------------------------- void display_num(unsigned char shuzi_in)
{
lcd_wdata(shuzidaima[shuzi_in]);
}
//---------------------------------------------------------------- //函数名:display_1602()
//----------------------------------------------------------------- void display_1602()
19
{
lcd_wcomd(0x80+0x00);
printchar("Model:");
lcd_wcomd(0x80+0x07);
if(timersetting_state>=1)
{
printchar("TimerSet ");
}
else
{
if(model==0)
{
printchar("-- -- ");
}
if(model==1)
{
printchar("KeepWarm");
}
if(model==2)
{
printchar("PotSoup ");
}
if(model==3)
{
printchar("CookRice");
}
}
}
//----------------------------------------------------------------
//函数名:delay1()
//-----------------------------------------------------------------
void delay1(unsigned int n) {
for(n;n>0;n--)
{;}
}
//----------------------------------------------------------------
//函数名:rest_1820()
//-----------------------------------------------------------------
void rest_1820()
{
DQ=0;
DQ=1;
2
delay1(77);
}
//----------------------------------------------------------------
//函数名:write_18b20(unsigned char xiecan) //-----------------------------------------------------------------
void write_18b20(unsigned char xiecan) {
unsigned char xie_i;
for(xie_i=1;xie_i<=8;xie_i++)
{
DQ=0;
delay1(1);
_nop_();_nop_();
_nop_();_nop_();
_nop_();_nop_();
_nop_();
_nop_();//DQ=1;
DQ=0x01&xiecan;
delay1(6);
_nop_();_nop_();
_nop_();_nop_();
_nop_();_nop_();
DQ=1;
_nop_();_nop_();_nop_();
_nop_();_nop_();
xiecan=xiecan>>1;
}
}
//----------------------------------------------------------------
//函数名:read_18b20()
//-----------------------------------------------------------------
unsigned char read_18b20()
{
unsigned char du_i;
unsigned char outdata_1820=0x00;
unsigned char tmp_du=0x00;
for(du_i=1;du_i<=8;du_i++)
{
DQ=1;
DQ=0;
_nop_
_nop_();
21
DQ=1;
_nop_();
tmp_du=P1&0x80;
tmp_du=tmp_du<<0;
outdata_1820=outdata_1820|tmp_du;
delay1(8);
if(du_i==8)break;
outdata_1820=outdata_1820>>1;
}
return(outdata_1820);
}
//----------------------------------------------------------------
//函数名: readtemp_conver()
//-----------------------------------------------------------------
void readtemp_conver()
{
rest_1820();
write_18b20(0xcc);
write_18b20(0x44);
}
//----------------------------------------------------------------
//函数名: readtemp_readdata()
//-----------------------------------------------------------------
void readtemp_readdata()
{
rest_1820();
write_18b20(0xcc);
write_18b20(0xbe);
temp_lowbyte_unprocess=read_18b20();
temp_hibyte_unprocess=read_18b20();
}
//----------------------------------------------------------------
//函数名:hex_dec()
//-----------------------------------------------------------------
unsigned char chazhi(unsigned char h_data) {
if(h_data<=0x05)
{
if(h_data==0x00)return(0);
if(h_data==0x01)return(1);
if(h_data==0x02)return(2);
if(h_data==0x03)return(3);
if(h_data==0x04)return(4);
2
if(h_data==0x05)return(5);
}
else if(h_data<=0x0a)
{
if(h_data==0x06)return(6);
if(h_data==0x07)return(7);
if(h_data==0x08)return(8);
if(h_data==0x09)return(9);
if(h_data==0x0a)return(10);
}
else
{
if(h_data==0x0b)return(11);
if(h_data==0x0c)return(12);
if(h_data==0x0d)return(13);
if(h_data==0x0e)return(14);
if(h_data==0x0f)return(15);
else return(0);
}
}
unsigned int hex_dec(unsigned char hex_canshu)
{
unsigned int dec_jiegou;
unsigned char hex_gao,hex_di;
hex_di=hex_canshu&0x0f;
hex_gao=hex_canshu>>4;
hex_di=chazhi(hex_di);
hex_gao=chazhi(hex_gao);
dec_jieguo=hex_gao*16+hex_di;
return(dec_jieguo);
}
//----------------------------------------------------------------
//函数名:key()
//-----------------------------------------------------------------
void key()
{
if(POWERON==LOW)
{
poweron=Y;
workingled=0;
model=0;
}
23
if(POWEROFF==LOW)
{
poweron=N;
workingled=1;
model=0;
}
if(poweron==Y)
{
if(model>1&&now_temp>dest_temp)
{
model=1;
}
if(MODEL==LOW&&loop>3)
{
model++;
if(model==4)
{
model=1;
}
loop=0;
}
if(ADD==LOW&&timersetting_state>=1&&loop>3)
{
if(timersetting_state==1)
{
min_num=min_num+60;
if(min_num>720)
{
min_num=0;
}
}
if(timersetting_state==2)
{
min_num=min_num+1;
if(min_num>720)
{
min_num=0;
}
}
loop=0;
}
if(DEC==LOW&&timersetting_state>=1&&loop>3)
{
2
if(timersetting_state==1)
{
min_num=min_num-60;
if(min_num<=0)
{
min_num=0;
}
}
if(timersetting_state==2)
{
min_num=min_num-1;
if(min_num<=0)
{
min_num=0;
}
}
loop=0;
}
if(OK==LOW&&loop>3)
{
timersetting_state++;
if(timersetting_state>=3)
{
timersetting_state=0;
timing_state=Y;
}
loop=0;
}
}
}
//----------------------------------------------------------------
//函数名:model_process() //-----------------------------------------------------------------
void model_process() {
switch(model)
{
case 1:
timerled=1;
baowenled=0;
baotangled=1;
zhufanled=1;
dest_temp=65;
break;
25
case 2:
timerled=1;
baowenled=1;
baotangled=0;
zhufanled=1;
dest_temp=98;
break;
case 3:
timerled=1;
baowenled=1;
baotangled=1;
zhufanled=0;
dest_temp=110;
break;
default:
timerled=1;
baowenled=1;
baotangled=1;
zhufanled=1;
dest_temp=0;
}
}
//----------------------------------------------------------------
//函数名:hot_ctrl()
//-----------------------------------------------------------------
void hot_ctrl()
{
if((now_temp=dest_temp)||(timing_state==Y))
{
HOT=0;
}
}
/*===============MAIN()函数==============*/
void main()
{
HOT=0;
lcd_init();
while(1)
{
if(loop2==0){readtemp_conver();}
2
if(loop2==1){readtemp_readdata();}
if(loop2==2){temp_process();}
display_1602();
key();
model_process();
hot_ctrl();
------------------------ //
loop++;
if(loop>=20)
{
loop=20;
}
loop1++;
if(loop1>=6)
{
loop1=0;
}
loop2++;
if(loop2>=3)
{
loop2=0;
}
loop3++;
if(loop3>=100)
{
loop3=0;
if((timing_state==Y)&&(min_num>0))
{
min_num--;
if(min_num==0)
{
timing_state=N;
}
}
}
//------------------------------------------------
if(((timing_state==Y)||(timersetting_state>0))&&(poweron==Y))
{
timerled=0;
}
else
{
timerled=1;
27
}
}
}
2