资源描述
资料内容仅供您学习参考,如有不当之处,请联系改正或者删除。
目 录
引言 2
1 电饭锅的原理与结构 3
2 MCS─51单片机在电饭锅上的应用 6
3 程序设计 12
6 结束语 20
参考文献 20
附录Ⅰ: 电路原理接线图 21
引言
电饭锅是一种能够进行蒸、 煮、 炖、 煨、 焖等多种加工的现代化炊具。它不但能够把食物做熟, 而且能够保温, 使用起来清洁卫生, 没有污染, 省时省力, 是家务劳动现代化不可缺少的用具之一。
随着科技、 经济的发展, 人们生活水平的不断提高, 工作生活节奏亦加快, 延时预制食品也成了人们日常工作生活中的需要。当前, 己有的智能电子电饭锅在做饭/粥时, 是将米和水同时放入锅中, 接通电饭锅的电源后, 电饭锅即自动进入做饭/粥程序, 当做饭/粥完成后, 电饭锅即进入保温状态。这就需要我们用智能程序控制电饭锅的煮饭保温时间, 本设计主要介绍MSC-51系列单片机在电饭锅的应用及程序。本次设计过程中借鉴的一些智能家电书和设计手册, 吸收书中自己本没掌握的知识, 并得到徐祖华、 肖金凤老师的悉心帮助。对此深表谢忱。
1、 电饭锅的原理及结构
1.1电饭锅的原理
电饭锅是利用发热板, 在铝质锅的底部煮饭。发热板内藏电热线, 这电热线是由自动开关控制, 发热板的中央有一圆孔, 孔内有一感温软磁, 它借着弹簧向上顶贴着锅底。这是一种纯铁氧体。它在100℃或以下时, 能够被永久磁铁吸引。但当升至103℃时, 则失去磁性, 不再受永久磁铁吸引。
当按下开关按键, 开关横杆把磁铁向上顶贴着感温软磁; 这时, 发热线接通, 开始加热。当锅内的饭沸腾后, 锅内的水就渐渐减少, 当水开始蒸干, 锅内的温度就由100℃上升。当升至103℃时, 感温软磁就不受磁铁吸引, 开关的杠杆因弹簧的弹力及本身的重力而下降, 压使接触点分开, 发热线就断电, 同时, 接通另一保温电路, 保持饭的温度在70℃左右。
智能电饭煲主要由电源部分和控制电路组成, 主控电路与热敏电阻形成反馈回路, 主控电路实现两种功能, 一是采集热敏电阻反馈回来的温度值, 二是依据用户选用的工作方式, 对继电器的工作方式的改变来对电热盘加热的控制。控制方法大至为: 当电热盘温度达到当前的要求后, 继电器的开关打开, 以切断电热盘的电源, 当下降到一定的温度范围后通电加热, 闭合继电器, 以使电热盘始终保持在适合的温度之内。
电饭锅的主要由顶盖温度传感器、 底盘温度传感器、 驱动电路、 加热盘、 继电器和数码管等组成。经过控制温度传感器来控制煮饭时间, 利用这些资源完成的电饭煲具有以下功能: 1、 精煮, 2、 超快煮, 3、 冷饭加热, 4、 小米量, 5、 45分稀饭, 6、 2小时粥, 7、 1小时汤, 8、 2小时汤。而且具有人性化的操作界面, 使用者很容易掌握。电饭煲的功能不再只是简简单单的煮饭了, 它能够完成许许多多的功能, 它是人们日常生活中不可缺少的家庭好帮手, 正是由于智能的控制, 人们的生活才变得越来越简单。
1.2电饭煲煮饭过程介绍
要想煮出高质量的米饭, 就要掌握各种大米的吸水量, 加温时间, 控温过程, 维持沸腾时间, 停止升温过程, 焖饭过程等规律。煮饭的过程实质上就是使大米由难以为人体所消化吸收的β淀粉转化成为人体较易吸收的α淀粉的过程, 经过大量的实践和探索, 一次理想的煮饭过程能够抽象成以下几个过程:
吸水过程
在适合的温度下, 让大米尽可能的吸收水分, 这样煮出来的米饭的更加的饱满, 口感更好。让大米的含水量达到25%左右, 温度越高, 吸水越快。可是温度一旦超过60度, 大米中含有的β淀粉就会转化成α淀粉, 会变成糊状, 因此控制温度在60度以下是非常有必要的, 一般控制在35度左右为最佳温度。
升温过程
这一个过程必须使锅内的热量充分对流, 以至于不会造成夹生饭。一般说来, 加热值沸腾的时间最佳是10分钟。
维持沸腾
为了使β淀粉充分转化成为α淀粉, 需要在沸腾的状态下, 温度大约控制在98度左右, 维持20分钟左右, 能够经过控制继电器的开与闭来实现温度的控制。
补炊过程
断电之后, 温度会慢慢下降, 当温度降到100度左右的时候, 在通电一段时间, 将锅内的多余的水分蒸发掉, 补炊的时间根据个人而定。
焖饭过程
在补炊过程结束后, 锅内基本上没有太多的水分, 应停止加热, 利用余热来进行焖饭, 促进大米α淀粉的生成。一般的焖饭时间大约控制在12分钟左右。
保温过程
整个煮饭过程结束后, 自动进入保温模式, 温度低于65度左右, 加热盘就会对锅体进行加热。使用者在此种状态下就能够享用美食了。
3功能介绍
利用凌阳8位单片机开发的智能电饭煲具有以下的两大功能:
3.1 煲煮功能
1) 精煮
选择精煮功能, 按下开始键, 电饭煲开始加热, 大约45分钟后电饭煲进入焖饭状态, 此时数码显示"n", 10分钟后, 电饭煲进入保温状态, 数码显示"b" , 这表明饭已经煮好。
2) 超快煮
选择超快煮功能, 按下开始键, 电饭煲开始加热, 大约30分钟后电饭煲进入焖饭状态, 此时数码显示"n", 8分钟后饭煮好, 电饭煲进入保温状态, 数码显示"b", 这表明饭已经煮好。
3) 冷饭加热
选择冷饭加热功能, 按下开始键, 电饭煲开始加热, 大约15分钟后电饭煲进入保温状态, 数码显示"b" , 这表示冷饭加热完成。
4) 小米量煮
选择小米量煮功能, 按下开始键, 电饭煲开始加热, 大约40分钟后电饭煲进入焖饭状态, 此时数码显示"n", 10分钟后饭煮好, 电饭煲进入保温状态, 这表明小米量的饭已经煮好。
5) 45分钟稀饭
选择45分钟稀饭功能, 按下开始键, 电饭煲开始加热, 此时数码显示"-", 45分钟后粥已煮好。
6) 2小时粥
选择2小时粥功能, 按下开始键, 电饭煲开始加热, 此时数码显示"2", 2小时后粥已经煮好。
7) 1小时汤
选择1小时汤功能, 按下开始键, 电饭煲开始加热, 此时数码显示"1", 1小时后汤已经熬好。
8) 2小时汤
选择2小时汤功能, 按下开始键, 电饭煲开始加热, 此时数码显示"2", 2小时后汤已经熬好。
注: 以上4种功能模式中, 每一种功能结束之后都自动进入保温模式, 数码显示"b"。
1.3 定时功能
选择相应功能后设置相应的定时时间, 按下开始键, 定时开始, 每过1小时显示时间数减1。在定时时间内, 根据定时的时间和所需过程的时间差电饭锅就能自动启动, 自动加热, 自动保温, 完成选择的功能, 例如如果45分钟稀饭定时2小时的话, 电饭煲会在1小时15分钟的时候开时启动加热工作, 并进入45分钟稀饭功能模式。
2、 MSC-51单片机在电饭锅上的应用
美国INTEL公司生产的MCS一51系列单片机具有很强的功能, 它被广泛的应用于各种自动化的控制系统上。我们应用其中8051单片机微机电脑控制器控制的电饭锅。
用微电脑控制电饭锅可根据煮制各种不同食品的需要, 编制各种不同的程序, 实现不同的控制, 提高煮制食品的质量, 使其更可口, 味道更美。另外还能够实现各种状态的显示和定时等功能, 使用者可直观地看到煮制食品的进展情况, 在操作上也能有一种轻松, 新奇的感觉。相当于分立元件电路来讲, 用电脑控制的电路简单, 可靠性高, 成本低。因此。利用微电脑实现各种家电产品控制的自动化, 智能化是一个发展方向。
2.1 控制要求
我们参照了国外几种不同的先进产品, 并结合中国的实际情况, 制定了如下控制要求:
一、 煮制食品的控制曲线
我们制定了六种煮制食品的控制曲线.它们分别如图l所示:
这六种控制曲线被定义为六种菜单, 使用者可根据煮制食品的需要任意选择。
二、 显示
采用4位LFD数码管显示时间, 显示精度为l分钟。用LED发光管指示定时、 预煮、 煮炯、 保温五种工作状态和白米饭、 糯米饭、 什锦饭、 糙米饭、 粥五种菜单
程序。
三、 鸣响提示
当触动按键和饭煮熟时都由蜂鸣器发出鸣响提示。
四、 定时
最大定时时间为12小时50分钟, 所设定的定时时间为饭煮熟时的时间, 采用倒计时的计时方式, 设定精度为10分钟, 直接用轻触按键输入, 时间设定可递
增和递减, 也可进行单步和快速设定。
五、 自动保护
具有内锅不在锅体内时不能加电的自动保护功能, 具有软件和硬件的超保护功能。
2.2 硬件设计
硬件电路原理图如图2所示, 采用内部带R(>M的8051单片机做微处理器, 它具有丰富的指令系统和很强的功能, 可使控制电路结构简单体积小, 可靠性高。8051芯片有四个八位输入/输出口PO,P1,P2,P3.选P1,P2口为时间、 状态和菜单的显示输出口, 采用动态扫描的显示方式, P1口的输出经过三极管送到数码管的段和显示状态、 菜单的发光二极管, P2口的输出经过三极管分时选通数码管的位和对应的状态、 菜单发光二极管o PO口为操作按键输入口, 低电平有效。P3. 0和P3. 1分别经过反向器G1:B,G1:F和三极管T17,T18驱动主加热盘和副加热元件的可控硅TM1,TM2, 接入反向器G1:B.G1:F可防止单片机复位时可控硅瞬间导通现象.P3. 2口经三极管T16驱动蜂鸣器BEo
由干被控温度是一个连续变化的模拟量信号, 而单片机只能处理数字量信号, 这就需要模/数转换电路, 现采用具有负温度系数的测温型热敏电阻RT为温度传感器, 它和电位器W1、 电容C2,施密特触发器G1:A组成多谐振荡器, RT的阻值随被测温度的变化而变化, 因而振荡器的输出频率也随RT阻值的变化而变化, 这样就实现了把模拟量信号转变成频率变化的方波信号, 单片机记录在单位时间内的周期数就可得到被测的温度值。这一信号经过反向器G1:B输入到P3. S口, 单片机利用该信号进行多点闭环温度控制。电位器W1起温度微调作用。温度传感器RT装在锅体底部, 间接反映锅内的温度。
T FUSE是热保险管, 起超温保护作用。
SW为机电连锁微动开关, 当内锅在锅体内时, 开关sw受压闭合, 电路接通, 控制器正常工作, 否则不能工作, 这样可避免发热盘空载加热的现象。
H C()()K为主发热盘。
H一WARM为副发热元件, 装在锅体侧面和顶部, 主要起保温作用。
电路可分别安装在两块电路板上, 一块为显示操作板, 装在温度较低的锅体顶部或侧面。另一块为可控硅和电源板, 可装在锅体底部。
3、 程序设计
主程序框图如下图3所示
主程序判断确有按键输入时, 开启蜂鸣器, 鸣响0.25后由计时中断服务程序来关闭蜂鸣器。由按键输入执行保温程序时, 必须是没有菜单和定时输入的情况下, 且先执行慢速加热至73C的程序后才进入保温程序。保温时间限制为10小时。
温度采样子程序在保温和加热时调用, 进行温度控制。CTI为采
样计数器, 其流程图见图4。为提高测量的准确性, 应用多次间隔时间采样取其平均值的方法来减小测量误差, 在间隔采样过程中如连续出现20次超出正常范围的温度值, 则判断为测温电路故障, 停止执行正常程序, 并做出相应的显示和蜂鸣报警。
CTO设置为计时器, 每隔。.15发出一次中断申请, 入口地址为。ooBH, 中断服务程序做相应的各种计时操作处理, 中断服务流程图见图4。选用定时程序的判断, 如果没有进行过时间的设定, 74H位为零, 就判断为没有设置定时, 否则74H位由1, 执行定时煮制程序。
3.2 操作说明
接通电源后时间显示器闪烁显示”o:00”为正常。
程序选择键:按该键可循环选择五种设定的程序, 分别由发光二极管进行显示。
保温键:如果没有按过其它键, 按该键可直接进入保温状态, 保温指示灯亮, 否则无效。
时间设定键:可设定定时煮制的时间, 最大定时时间为12小时50分钟。
启动键:
1) 按动该键就确认了所选择的程序和定时时间, 并开始执行程序, 相应的工作状态指示灯亮;2)如按动该键前没有选择程序和设定时间, 按动该键后直接执行白米饭程序;3)按动该键并保持约2秒钟则跳过预煮直接进入煮制过程;4)当选择煮粥程序时, 第一次按动该键后, 时间显示器闪烁显示煮制的时间, 该时间可在1:30一4:00时间范围内设定, 第二次按动该键后, 就确认了所设定的输入并开始执行程序;5)执行定时程序过程中, 按该键则暂停正常的时间显示, 所显示的是选择程序的煮制时间, 释放该键后恢复正常的时间显示。
3.3 程序
include hardware.inc
.include S480.inc
.include Resource.inc
define voice_start 00 //开始//
define voice_cool 01 //煮饭//
define voice_fcool 02 //快煮//
define voice_bw 06 //保温//
define voice_down 07 //定时减//
define voice_up 08 //定时加//
define voice_off 09 //返回//
define voice_alarm 10 //请放入内锅//
.define voice_ok 11 //请享用//
.define voice_set 12 //请设定//
.define voice_high 13 //注意温度过高//
//*******************************************//
// 系统初始化子程序 //
//*******************************************//
.public _System_Initial
_System_Initial:.proc
r1=0x0002
[P_SystemClock]=r1 //初始化系统时钟//
r1=0xFF80
[P_IOA_Dir]=r1
r1=0xFFE0
[P_IOA_Attrib]=r1
r1=0xFFE0
[P_IOA_Data]=r1 //初始化A口//
r1=0xFFFB
[P_IOB_Dir]=r1
r1=0xFFFF
[P_IOB_Attrib]=r1
r1=0x0004
[P_IOB_Data]=r1 //初始化B口//
r1=0x0004 //时基选择//
[P_TimeBase_Setup]=r1
int off //关中断//
r1=0x0105
[P_INT_Ctrl]=r1 //初始化中断//
int fiq,irq //开中断//
retf
.endp
//*********************************************//
// 段显子程序 //
//*********************************************//
.DATA
Show_tabble: .dw 0x003F,0x0006,0x005B,0x004F,0x0066
.dw 0x006D,0x007D,0x0007,0x007F,0x006F
.code
.public _Show
_Show:.proc
BP=Show_tabble
r1+=BP //求显示码的地址//
r1=[r1] //求出显示码//
r1=r1 lsl 4
r1=r1 lsl 4 //移至高8位//
r2=[P_IOA_Buffer]
r2&=0x8000
r1|=r2
[P_IOA_Data]=r1 //输出显示//
retf
.endp
//******************************************//
// 计时子程序 //
//******************************************//
.iram
.public _end_120
.var _end_120=0
.code
.public _Time_Count
_Time_Count: .proc
r1=[_STATUS]
cmp r1,0
je Count_end
r1=[T1_1] //取第一个数据//
r1+=[T1_2] //第一个数据和第二个数据相加//
r1+=[T1_3] //前三个数据相加//
r1+=[T1_4] //前四个数据相加//
cmp r1,0 //和与0相比较//
je Time2_Count //等于0转到定时2的计数//
r1=[_end_120]
cmp r1,120 //是否到了120次//
jne ADD_1 //不到转向ADD_1继续相加//
r1=0x00
[_end_120]=r1 //到了清0为下次中断作准备//
call _Time_count_down1 //调用预置减子程序//
jmp Time_Count_Over
ADD_1: r1=r1+1
[_end_120]=r1
Time_Count_Over:
r1=[P_IOA_Buffer] //一次中断计时后秒点反相//
r2=0x8000
r1^=r2
[P_IOA_Data]=r1
jmp Count_end
Time2_Count:r1=[T2_1] //取第一个数据//
r1+=[T2_2] //第一个数据和第二个数据相加//
r1+=[T2_3] //前三个数据相加//
r1+=[T2_4] //前四个数据相加//
cmp r1,0
je Count_end
r1=[_end_120]
cmp r1,120
jne ADD_2
r1=0x00
[_end_120]=r1
call _Time_count_down2
jmp Count_end
ADD_2: r1+=1
[_end_120]=r1
Count_end: retf
.endp
// 过温检测子程序 //
//**********************************************//
.public _Over_Temp
_Over_Temp:.proc
r1=[_STATUS]
cmp r1,1
jne t_exit
r1=[_Tempreature_value]
cmp r1,36
jnb t_exit //与36即150度比较,温度超过150度时报警并跳到程序的开始//
r1=voice_high
[_Announce_Buff]=r1
call _PlayRespond
r1=0
[_STATUS]=r1
pc=0x0000
t_exit: retf
.endp
// 温度采集子程序 //
//*********************************************//
.ram
.public _Tempreature_value
.var _Tempreature_value
.code
.public _ReadAD
_ReadAD:.proc
r3=900
[_Tempreature_value]=r3
retf
.endp
// 计时加预置子程序 //
//***************************************************//
.public _Time_up
_Time_up:.proc
r1=[_WHICH_TIME]
cmp r1,0x01
je timeup2
call _Time_up1_sub
jmp time_exit_up
timeup2: call _Time_up2_sub
time_exit_up:
r1=voice_up
[_Announce_Buff]=r1
call _PlayRespond
retf
.endp
// 计时减预置子程序 //
//***************************************************//
.public _Time_down
_Time_down:.proc
r1=[_WHICH_TIME]
cmp r1,0x01
je timedown2
call _Time_down1_sub
jmp time_exit_down
timedown2:
call _Time_down2_sub
time_exit_down:
r1=voice_down
[_Announce_Buff]=r1
call _PlayRespond
retf
.endp
// 预置1设定减子程序 //
//*******************************************************//
.public _Time_down1_sub
_Time_down1_sub: .proc
r1=[T1_1] //取第一个数据//
r1+=[T1_2] //第一个数据和第二个数据相加//
r1+=[T1_3] //前三个数据相加//
cmp r1,0
je sub1_exit_down
r1=[T1_3] //取第三个数据//
cmp r1,0 //判断是否到了0//
jne sub1_exit_05 //不到0跳转//
r2=5 //到5后写0//
[T1_3]=r2
r1=[T1_2] //取第二个数据//
cmp r1,0 //比较是否到了0//
jne sub1_exit_09 //不到0跳转减1//
r2=9 //到0后写9//
[T1_2]=r2
r2=[T1_1]
r2-=1
[T1_1]=r2
jmp sub1_exit_down
sub1_exit_09: r2=[T1_2]
r2-=1
[T1_2]=r2 //减1操作//
jmp sub1_exit_down
sub1_exit_05: r2=[T1_3]
r2-=1
[T1_3]=r2 //减1操作//
sub1_exit_down: retf
.endp
// 煮饭子程序 //
//********************************************//
.public _COOL
_COOL:.proc
r1=1
[cool_status]=r1
cool_test1:
r1=[_Tempreature_value]
cmp r1,537 //是否到了50度//
ja cool_test1 //大于537即小于50度时循环//
r1=0
[cool_status]=r1
cool_test2:
r1=[_Tempreature_value]
cmp r1,687 //是否到了40度//
jbe cool_test2 //小于等于687即大于40度时循环//
cool_test5:
r1=1
[cool_status]=r1
cool_test3:
r1=[_Tempreature_value]
cmp r1,140
jae cool_test3 //大于140即小于98度时循环等待//
r1=0
[cool_status]=r1
cool_test4:
r1=[_Tempreature_value]
cmp r1,68 //小于68即大于等于125度时跳出//
jbe cool_exit
cmp r1,144 //大于97度时停止加热等待, 小于时循环加热//
jb cool_test4
jmp cool_test5
cool_exit:
r1=[_Tempreature_value]
cmp r1,132 //大于100度时停止加热等待, 否则继续加热//
jbe cool_exit
r1=1
[cool_status]=r1
cool_test6:
r1=[_Tempreature_value]
cmp r1,77 //大于120度时加热结束//
ja cool_test6
r1=0
[cool_status]=r1
r1=voice_ok
[_Announce_Buff]=r1
call _PlayRespond
r1=0x0105
[P_INT_Ctrl]=r1 //初始化中断//
int fiq,irq //开中断//
retf
.endp
// 快煮子程序 //
//********************************************//
.public _FCOOL
_FCOOL:.proc
fcool_test3:
r1=1
[cool_status]=r1
fcool_test1:
r1=[_Tempreature_value]
cmp r1,140
ja fcool_test1
r1=0
[cool_status]=r1
fcool_test2:
r1=[_Tempreature_value]
cmp r1,68
jbe fcool_exit
jmp fcool_test3
fcool_exit:
r1=0
[cool_status]=r1
r1=voice_ok
[_Announce_Buff]=r1
call _PlayRespond
r1=0x0105
[P_INT_Ctrl]=r1 //初始化中断//
int fiq,irq //开中断//
retf
.endp
// 保温子程序 //
//********************************************//
.public _BW
_BW:.PROC
r1=[P_IOB_Buffer]
r1&=0xF083
r1|=0x0080
[P_IOB_Data]=r1 //保温功能指示灯常亮//
bw_test1:
r1=[_Tempreature_value]
cmp r1,370
jbe bw_test1
r1=1
[cool_status]=r1
bw_test2:
r1=[_Tempreature_value]
cmp r1,340
jae bw_test2
r1=0
[cool_status]=r1
jmp bw_test1
retf
.endp
// 主程序 //
//***********************************************//
.code
.public _main
_main:
call _System_Initial
loop: r1=0x0105
[P_INT_Ctrl]=r1 //初始化中断//
int fiq,irq //开中断//
call _KeyScan
cmp r1,0x0011
je exit1
cmp r1,0x0012
je exit2
cmp r1,0x0014
je exit3
cmp r1,0x0018
je exit4
test r1,0x0010
jz exit5
jmp exit
exit1:call _Set
jmp exit
exit2:call _Time_up
jmp exit
exit3:call _Time_down
jmp exit
exit4:call _Start_cancle
jmp exit
exit5:call _Empty
exit: jmp loop
End
结束语
课程设计过程是知识与实践相结合的过程, 是学习深化和提高的重要过程, 是运用学过的知识进行一次全面总结和综合训练, 是素质与工程实践能力培养的全面检验。
经过这次设计, 使我对单片机知识有了更进一步的了解。在这次设计中我翻阅了大量的资料, 了解许多关于单片机设计的知识, 进一步的提高了我对单片机设计的思维方式。同时我也体会到要想设计好一个单片机必须要有求实的态度和丰富的专业知识。
这次设计能够顺利完成, 与指导老师徐祖华、 肖金凤的大力帮助是分不开的,
展开阅读全文