电饭煲设计报告.docx
《电饭煲设计报告.docx》由会员分享,可在线阅读,更多相关《电饭煲设计报告.docx(20页珍藏版)》请在冰豆网上搜索。
电饭煲设计报告
本文由星空海洋1216贡献
pdf文档可能在WAP端浏览体验不佳。
建议您优先选择TXT,或下载源文件到本机查看。
机电信息工程学院
单片机系统课程设计报告
系:
专班业:
级:
自动化系自动化081班电饭煲控制器王发均杜仁欢
设计题目:
学生姓名:
指导教师:
刘岩川张艳
2011完成日期:
2011年3月16日
目
录
……一、设计任务……2……2
1.控制策略……22.定时……23.控制面板……2
……二、设计方案……2……2……三、系统硬件设计……3……3
3.1中央处理模块单片机芯片……33.2显示模块设计……43.4报警及温度采集模块设计……53.5火力控制模块设计……53.6电源模块设计……6
……四、系统软件设计……7……7
4.1主程序设计……74.2温度采集程序设计……84.3显示及输入程序设计……84.4火力控制程序设计……8
……五、心得体会……8……8……参考文献……9……9……附录1系统电路原理图……9……9……附录2程序清单……9……9
大连民族学院2008级自动化专业单片机系统课程设计报告
一、设计任务
试设计电饭煲控制器,要求有预约功能,可以烹饪大米饭、粥、保温、冷饭加热等功能,具体要求如下。
1.控制策略大米饭:
当达到105°时,停止加热,并在15分钟后通过蜂鸣器提示用户。
粥:
开始加热后,通过测温元件监视锅底温度,使锅底温度保持在99°~100.5°之间(100°时停止加热、99°时开始加热),此种状态持续20分钟,之后通过蜂鸣器提示用户过程结束。
保温:
使锅底温度维持在50°~60°之间。
冷饭加热:
锅底加热至100°,使锅底温度保持在99°~100.5°之间(100°时停止加热、99°时开始加热),此种状态持续5分钟,之后通过蜂鸣器提示用户过程结束。
2.定时用户可以是电饭煲在预约时间(倒计时方式)开始工作,最长预约时长为12小时。
3.控制面板四个发光管分别与大米饭、粥、保温、冷饭加热相对应,另一发光管用于区分工作与预约,两位数码管用于预约时间及倒计时。
按键有:
开始键、功能键、加键、减键。
二、设计方案
由设计要求可知,系统除单片机外,应包含温度检测、键盘、显示以及蜂鸣器。
温度检测可选择应用较为方便的串行式温度传感器,键盘个数较少,所以可以用简单式键盘。
由于预约时长为12小时,并且精度要求不是很高,所以用两位数码管显示器即可(本设计选用了四个数码管以便随时查看温度值)。
电饭锅预约的精度要求不是很高,所以没有必要另加时间(日历)芯片,用单片机定时中断通过软件扩展实现预约定时即可。
单片机对功率元件的控制可用固态继电器
2
大连民族学院2008级自动化专业单片机系统课程设计报告
来完成(本设计选用的是电磁式继电器),最好用光电隔离式以减少主回路对控制回路的干扰。
本控制器系统由中央处理部分、温度采集、显示、报警及键盘输入等6大部分组成。
系统总体框图如图一所示。
温度采集
报警
中央处理系统
显示系统
火力控制
键盘
图一、系统框图
中央处理模块对温度采集模块、键盘输入模块的数据进行分析和逻辑判断,并按照预定的程序进行处理和保存。
然后把结果通过显示模块或者火力控制进行相应的处理。
定时模块采用的是单片机内部的定时器进行定时在显示模块进行相应的显示计数,用户可以通过键盘模块来进行预约定时及调整所需的功能。
系统在上电后有一个默认的定时参数,用户也可以可以通过按键修改相应的定时参数。
温度采集模块实时的采集电饭煲的当前温度,并将数据传给中央处理模块进行相应的控制。
显现模块实时显示当前的温度、定时、及当前系统的状态。
火力控制模块主要起到了弱电控制强电的功能,由中央处理模块进行处理后做出相应的判断并直接控制火力控制模块。
三、系统硬件设计
3.1中央处理模块单片机芯片通过比较,选用了AT89C52单片机来作为本系统的核心,图二所示的是中央处理模块的电路部分,即单片机的电路连接。
3
大连民族学院2008级自动化专业单片机系统课程设计报告
图二、中央处理模块3.2显示模块设计本设计采用的是供阳数码管作为显示部分,如图三所示。
图三、显示模块电路VCC接5V电源,电流通过三极管通向数码管实现供阳接法,三极管的基极通过接上4.7k的电阻再接到中央处理单元实现位选的控制。
2.3键盘模块设计由于键盘个数较少,所以采用简单式键盘,其如图四所示。
4
大连民族学院2008级自动化专业单片机系统课程设计报告
图四、键盘模块电路键盘模块共有5个按键,开始键、功能键、加键、减键及温度显示键,分别对应接到中央处理器P3口的0、1、2、4、5引脚上。
3.4报警及温度采集模块设计
本设计报警模块采用的是蜂鸣器,其管脚通过与PNP三极管连接,然后在三极管的基极串上4.7k的电阻再接到单片机的P1.5引脚上,从而实现报警模块设计。
温度检测模块采用是较为方便的串行式温度传感器DS18B20,DS18B20本身就是“一线总线”接口的数字温度传感器所以在电路连接上是相当的简单,也是其他芯片所无法比拟的,仅仅需要VCC连接+5V电源,GND管脚连接地线,DQ作为数据输入及输出管脚与P1.7连接即可。
报警及温度采集模块如图五所示。
图五、报警及温度采集电路3.5火力控制模块设计
图六为火力控制模块的电路连接图,PNP三极管的基极与单片机的P1.6引脚直接相连,图中的D1二极管起到保护作用,防止继电器中线圈的电流形成回流击穿三极管。
继电器的物理开关接加热器的两端,当单片机给PNP三极管输入低电压时,Q1eb极的电压为0.7V,同样Q1ec也为0.7V,电路不能导通,而当单片机给三极管输入高电压时,Q1ec可以导通,继电器便有了电流通过,电磁铁产生吸引力把开关闭合,一旦电流消失,磁力也消失,开关便会断开。
5
大连民族学院2008级自动化专业单片机系统课程设计报告
图六、火力控制电路3.6电源模块设计
电源电路采用LM7805集成稳压器作为稳压器件,用典型接法,220V电源整流滤波后送入LM7805稳压,在输出端接一个220uf和0.1uf电容进一步滤除纹波,得到5V稳压电源。
电源电路工作原理如图七所示。
图七、整流流程图
系统电源电路如图八所示。
图八、电源电路
6
大连民族学院2008级自动化专业单片机系统课程设计报告
四、系统软件设计
4.1主程序设计系统的软件设计采用结构化和模块化设计的方法,便于程序的编写、调试和排除错误,同时也便于检验和维护。
根据设计的要求和前面描述的控制器系统硬件设计的具体情况,单片机系统的软件程序主要由以下模块组成:
初始化主程序、输入及显示、温度采集、火力控制。
主程序流程图如图九所示。
初始化定时器
中断处理
初始化DS18B20
读取DS18B20的数据
显示温度预约函数调用
预约按键处理函数调用直接执行功能函数
按键开始执行函数
结束
7
大连民族学院2008级自动化专业单片机系统课程设计报告
图九、主程序流程图
4.2
温度采集程序设计
电饭煲控制器的工作状态煮饭、保温、焖饭、煮粥等最关键的控制因数就是温度。
所以温度采集是实时的。
首先进行温度采集芯片DS18B20的初始化操作。
然后循环读取和写入信息,最后通过转换为数码管显示的数据。
4.3显示及输入程序设计显示子程序采用动态显示的方式,实时显示定时的数值变化,虽然是动态扫描的但是选着适合的时间段利用人眼的视觉暂留就可以表现为静态变化。
输入程序的设计是针对独立按键设计的,有给单片机引脚以低电平的方式,也有给单片机中断的方式,Key1是开始键,Key2是功能选择键,Key3是上加键,Key4是下减键,Key5是中断显示温度键。
4.4火力控制程序设计火力控制程序主要就是由单片机控制继电器的操作来完成,单片机根据定
时的时间及温度的变化来对继电器做出相应的控制。
五、心得体会
本文所设计的电饭煲控制器通过仿真和实物调试完全实现智能化控制。
包括预约、定时、加热、保温、中断温度显示以及由定时和温度双条件控制功能。
预约及定时时间可随意调整(上电后有默认值),预约最小时间为一小时,预约结束后自动进行相应的预约动作,当预约动作结束后会通过蜂鸣器给用户提示,之后便进入保温环节。
这次课程设计是对我们学习微机原理及单片机课程的检验及实际应用能力的一次提高。
在编写程序之前,我们查阅了大量的相关资料,力求做到规范清晰。
在编程的过程中,我们遇到了很多问题,但在同学和老师的帮助下都得到了解决。
经过三个星期的课程设计,我们得到了充分的锻炼,不仅对单片机的学习有了深刻的理解,同时也增强了我们的毅力和处理突发问题的能力。
课程设计是一次很好的实践动手机会,通过这次设计,我们学会了如何将所学知识学以致用,为我们的毕业设计奠定了良好的基础。
8
大连民族学院2008级自动化专业单片机系统课程设计报告
参考文献
[1]肖健华,经顺林.模糊控制在家电产品中的应用与展望.五邑大学学报(自然科学版),2001[2]AT89C51技术资料参考手册.[3]谭浩强,C语言程序设计.[4]用PNP管驱动继电器电路分析与验证.
附录1系统电路原理图
附录2程序清单
#include"at89x52.h"#defineucharunsignedchar#defineuintunsignedint
floatf_temp;9
大连民族学院2008级自动化专业单片机系统课程设计报告
uinttemp;
uintjishi=0;uintjishi1=15;uintjishi2=20;uintjishi3=5;uintjishi4=0;uintjs=0;uintjs1=15;uintjs2=20;uintjs3=5;
ucharcount,count1,miao,fen,shi,num1,n,flag,flag1,flag2,flag3,flag4,i;
sbitDQ=P1^7;
//温度计//继电器//蜂鸣器//开始工作按钮//功能选择按钮//执行加按钮//执行减按钮//工作或预约显示灯//大米指示灯//粥指示灯//冷饭指示灯
sbitRelay=P1^6;
sbitbuzzer=P1^5;
sbitks=P3^0;sbitgn=P3^1;sbitjia=P3^4;sbitjian=P3^5;
sbitWY=P1^0;sbitDM=P1^1;sbitZ=P1^2;sbitLF=P1^3;
sbitBW=P1^4;//保温指示灯
unsignedcharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//不带小数的段码值0……9unsignedcharcodetable1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//带小数的段码值0……9voiddelay(unsignedinti)//延迟程序{while(i--);}//12MHz下跳转到延迟函数需2微妙,while循环一次4.5微秒。
voiddelayms(unsignedcharn)
//毫秒延时函数
10
大连民族学院2008级自动化专业单片机系统课程设计报告
{
unsignedchari;
for(;n!
=0;n--){for(i=248u;i!
=0;i--);for(i=248u;i!
=0;i--);}}voidreset(void){unsignedcharr=0;DQ=1;delay(8);DQ=0;delay(90);DQ=1;delay(14);r=DQ;delay(20);//return(r);}voidwrite(unsignedchardate)//写字节程序{unsignedchari=0;for(i=8;i>0;i--){DQ=0;DQ=date&0x01;delay(7);DQ=1;date>>=1;}}//读字节程序//t为暂存变量//总线拉低//发送最低位字节到DS18B20//将总线拉高//写入数据右移一位//延迟30微秒左右,等DS18B20采样//总线下拉,开始复位//复位延迟//总线拉高,复位过程结束//延迟一段时间,等待回应//若回应为低电平,则复位成功,为高电平则失败//延迟一段时间结束可以根据需要返回复位结果//致高电平,为下面复位时总线下拉准备//复位程序
signedintread(void){
unsignedchari=0,t=0,pn=0;for(i=8;i>0;i--){DQ=0;
//总线为低电平准备读操作,然后在1微秒内释放总线,以便让DS18B20将数据反馈
11
大连民族学院2008级自动化专业单片机系统课程设计报告
t>>=1;DQ=1;if(DQ==1){t|=0x80;}delay(4);}return(t);}voiddisplay(unsignedchart)//显示程序,t为温度值{unsignedchari;//显示百位//反馈读取的字节//则将变量最高位置1//如果反馈为0,则变量最高位为0//延迟一顿时间,然后开始下次循环//将变量右移一位,刚好可以抵消读所需的延迟时间//总线拉为高电平后,执行下面代码//如果总线反馈为高电平
P2=0xfe;i=t/1000;P0=table[i];delay(500);P2=0xfd;i=t%1000/100;P0=table[i];delay(500);P2=0xfb;i=t%100/10;P0=table1[i];delay(500);P2=0xf7;i=t%10;P0=table[i];
//显示十位
//显示个位
//显示小数位
}voiddisplay1(unsignedcharnum)//显示程序{unsignedchari;P2=0xfe;//符号位显示//显示负号
P0=~0x40;delay(500);P2=0xfd;
//显示百位
i=num%100/10;P0=table[i];delay(500);P2=0xfb;//显示十位
12
大连民族学院2008级自动化专业单片机系统课程设计报告
i=num%10;P0=table[i];delay(500);P2=0xf7;//显示个位
P0=~0x40;delay(50);}
voiddisplay2()//保温数码管显示程序{//符号位显示//显示负号
P2=0xfe;
P0=~0x40;delay(500);P2=0xfd;P0=~0x40;delay(500);P2=0xfb;P0=~0x40;delay(500);P2=0xf7;P0=~0x40;delay(50);}
//显示百位
//显示十位
//显示个位
uintget_temp(){unsignedchara=0,b=0,c=0;unsignedintt,pn=0;reset();write(0xcc);write(0x44);reset();write(0xcc);write(0xbe);a=read();b=read();pn=b&0x80;//if(pn==0)//复位//跳过ROM搜索命令//启动一次转换//复位//跳过ROM搜索命令//发送读命令//读低字节8位//读高字节8位//判断温度正负//如果温度为正
13
大连民族学院2008级自动化专业单片机系统课程设计报告
//{t=(((b*256)+a)*10)/16;//直接转化为十进制数,将温度值扩大10倍
//////////
}if(pn==0x80){a=~a;b=~b;//c=a+1;//低位加1//当低位为255时,加1后为0,这时需进位//将数据取反//如果温度为负
//////////{
if(c==0x00)
b++;}
//向高位进1//再进行转换十进制,将温度值扩大10倍
t=(((b*256)+c))*10/16;
//}returnt;//t是整形
}//初始化外部中断0及定时器函数//定时器0,1工作模式1,16位定时方式
voidinit(){
TMOD=0X11;
TH0=(65536-50000)/256;TL0=(65536-50000)%256;TH1=(65536-50000)/256;TL1=(65536-50000)%256;//开总中断
EA=1;
ET0=1;ET1=1;EX0=1;IT0=0;}//开外部中断0//低电平触发
uintkeyscan(){
//功能键处理
if(gn==0){
14
大连民族学院2008级自动化专业单片机系统课程设计报告
delay(100);if(gn==0){num1++;while(!
gn);
if(num1==1){WY=0;//预约指示灯亮
}if(num1==2){
DM=0;
//预约煮大米指示灯亮
}if(num1==3){
DM=1;Z=0;//预约煮粥指示灯亮
}if(num1==4){
Z=1;LF=0;//预约热冷饭指示灯亮
}
if(num1==5){
LF=1;BW=0;Relay=1;}if(num1==6){//保温指示灯亮
15
大连民族学院2008级自动化专业单片机系统课程设计报告
BW=1;
}
if(num1==7){
WY=1;DM=0;//直接煮大米指示灯亮
}if(num1==8){
DM=1;Z=0;//直接煮粥指示灯亮
}if(num1==9){
Z=1;LF=0;//直接热冷饭指示灯亮
}
if(num1==10){
LF=1;BW=0;//保温指示灯亮
}if(num1==11){
BW=1;num1=0;
}}}returnnum1;
16
大连民族学院2008级自动化专业单片机系统课程设计报告
}
void{
Keyjiajian()
//按键加减调整
if(jia==0){delay(100);if(jia==0){
jishi++;while(!
jia);
}
}
else
if(jian==0);{delay(100);if(jian==0){jishi--;while(!
jian);}}
display1(jishi);}
voidyuyue(uintnum)//预约函数处理{switch(num){case2:
{Keyjiajian();
}
17
大连民族学院2008级自动化专业单片机系统课程设计报告
break;case3:
{Keyjiajian();
}break;case4:
{
Keyjiajian();
}break;case5:
{WY=0;BW=0;display2();//保温的时候数码管的显示
if(get_temp()>=60){Relay=1;
}elseif((get_temp()>500)&&(get_temp()<600)){Relay=1;}elseRelay=0;//使温度保持在50-60之间
}break;default:
break;
}}voidkeyscan2(uintnum)//加减键及温度处理
{
switch(num){
18
大连民族学院2008级自动化专业单片机系统课程设计报告
case6:
break;case7:
{
if(jia==0){
delay(100);if(jia==0){
jishi1++;while(!
jia);
}}
else
if(jian==0);{delay(100);if(jian==0){
jishi1--;while(!
jian);}}
display1(jishi1);if(n==1)//假如开始计时键按下,则往下执行{if(get_temp()>=1050)//加入温度到达105度就停止加热{Relay=1;}elseRelay=0;
}}break;
19
大连民族学院2008级自动化专业单片机系统课程设计报告
case8:
{
if(jia==0){delay(100);if(jia==0){
jishi2++;while(!
jia);
}}
else
if(jian==0);{
delay(100);if(jian==0){jishi2--;while(!
jian);}}
display1(jishi2);if(n==1)//假如开始计时键按下,则往下执行{if(get_temp()>1005){Relay=1;//当温度超过100.5度时停止加热
}else{Relay=1;}elseRelay=0;//当温度小于99时开始加热if((get_temp()>990)&&(get_temp()<=1005))//当温度在99~100之间时停止加热
20
大连民族学院2008级自动化专业单片机系统课程设计报告
}
}break;case9:
{
if(jia==0){delay(100);