基于单片机的微波炉控制系统精编.docx

上传人:b****5 文档编号:7851398 上传时间:2023-01-26 格式:DOCX 页数:36 大小:559.69KB
下载 相关 举报
基于单片机的微波炉控制系统精编.docx_第1页
第1页 / 共36页
基于单片机的微波炉控制系统精编.docx_第2页
第2页 / 共36页
基于单片机的微波炉控制系统精编.docx_第3页
第3页 / 共36页
基于单片机的微波炉控制系统精编.docx_第4页
第4页 / 共36页
基于单片机的微波炉控制系统精编.docx_第5页
第5页 / 共36页
点击查看更多>>
下载资源
资源描述

基于单片机的微波炉控制系统精编.docx

《基于单片机的微波炉控制系统精编.docx》由会员分享,可在线阅读,更多相关《基于单片机的微波炉控制系统精编.docx(36页珍藏版)》请在冰豆网上搜索。

基于单片机的微波炉控制系统精编.docx

基于单片机的微波炉控制系统精编

Documentnumber:

WTT-LKK-GBB-08921-EIGG-22986

 

基于单片机的微波炉控制系统精编

江西科技师范大学

大学生科研、创新性实验项目设计方案

第一稿

项目名称:

微波炉控制系统的设计与制作

项目负责人:

曾光辉

专业:

电子信息工程 

所在学院:

通信与电子学院

指导教师:

占华林

 

2012年5月20日

江西科技师范大学教务处

1.总体方案

本系统由核心元件AT89C51单片机、LCD1602、独立按键、蜂鸣器构成、电机,用来实现数字电子钟、做饭提醒、模拟定时加热功能。

主控部分是由单片机和独立按键两部分构成,显示部分是LCD1602显示模块构成,闹铃部分是外接蜂鸣器构成,模拟加热部分是直流电机构成。

实现了秒表和数字电子时钟的功能。

工作过程中有各种工作状,显示时分秒以及上午和下午的做饭时刻,这些参数都可以校正。

图1微波炉控制系统的整个电路

2.基于单片机的数字电子钟系统硬件设计

该数字钟工作原理是用一片AT89C51单片机通过编程去控制LCD1602实现的。

通过2个开关控制来进行时间的调节以及秒表功能,(key1)口控制按键,当系统处于正常时间显示并且按下此键时,可以进入秒表功能和时间功能的切换,此键还可以作为时间和日期以及闹铃的调整位选中键,当系统处于时间显示模式时,按此键可以选中相应的需要调整的位。

当系统处于时间显示模式时,(key2)口控制按键,按此键对相应的选中位进行加,当系统处于处于秒表工作模式时按此键可以控制秒表计时的启动和暂停。

其工作流程:

1.年月日时分秒显示。

通电后LCD自动显示C语言程序设置好的默认时间

2.闹钟显示和设定。

通电后,A的右边显示的是默认的闹钟时间,通过key1和key2可以设置闹铃时间。

3.秒表显示以及启动和暂停以及清零。

LCD处于正常显示时间模式下时按下key1释放后可以进入秒表模式,前3次按下key2的功能依次为启动停止清零,每按3次key2为一个轮回。

时钟电路模块

下图2-1所示为时钟电路原理图,在AT89C51芯片内部有一个高增益反相放大器,其输出端为引脚XTAL2,输入为芯片引脚XTAL1。

而在芯片外部,XTAL1和XTAL2之间跨接晶体振荡器和微调电容,构成一个稳定的自激振荡电路,电路产生的振荡脉冲经过触发器进行十二分频之后,便成为单片机的时钟信号。

图2-1时钟电路原理图

复位电路模块

下图2-2所示为复位电路原理图,在单片机的实际应用系统中,除单片机本身需复位以外,外部扩展的I/O接口电路等也需要一个复位,因此需要一个系统的同步复位信号,即单片机复位后,CPU开始工作,外部的电路一定要复位好,以保证CPU有效地对外部电路进行初始化编程。

单片机复位的条件是:

必须使RST/VPD或RST引脚加上持续两个机器周期(即24个振荡周期)的高电平。

电路为上电复位电路,它是利用电容充电来实现的。

在接电瞬间,RST端的电位与VCC相同,随着充电电流的减少,RST的电位逐渐降低。

只要保证RST为高电平时间大于两个机器周期,就能正常复位。

图2-2复位电路原理图

LCD1602显示电路模块

下图2-3所示为LCD1602显示模块电路原理图

图4-3显示模块电路原理图

按键电路模块

下图4-4所示为独立按键模块电路原理图,根据此电子时钟功能要求,需要设置以下两个功能键:

工作模式键(key1),模式辅助键(key2)。

按照键盘与CPU的连接方式可分为独立键盘和矩阵键盘。

独立式键盘是各个按键相互独立,每个按键占用一个I/O口,外加上拉电阻,每个I/O口上的按键不会影响到其他I/O口的按键工作状态。

独立式键盘电路配置灵活,软件结构简单,所以本设计采用独立式键盘。

图2-4独立按键模块电路原理图

闹铃模块

下图4-5所示为闹铃模块电路原理图,闹铃模式时,设定好闹铃时间,闹铃时间有时和分,当设定好的闹铃时间跟系统的当前时间的时和分相等时,系统给端口送低交替的高低电平,蜂鸣器发出一定频率报警声,一分钟后报警声停止,如果这一分钟内有按键按下则报警声也停止。

图2-5闹铃模块电路原理图

电机驱动模块

下图2-6所示为电机驱动电路原理图,当系统设定好加热的时长之后启动加热责电机转动,剩余的加热时间变为零之后电机停止转动。

图2-6电机驱动电路原理图

3软件模块设计

介绍AT89C51软件开发环境KeiluVision2,怎样新建一个工程以完成自己的设计和调试。

这里不是Keil开发环境的详细使用手册,关于Keil的详细说明文档请浏览Keil软件的帮助文档。

3.1建立一个新工程

点击Project菜单,选择GreateNewProject...如图11

图5建立一个新工程

弹出图12建立新工程对话框,文件名框中输入工程名字,保存类型选择.uv2,点击保存。

图6选择工程类型

点击保存之后便出现芯片的选择框。

图7选择芯片型号

点击确定之后出现下面的对话框。

图8汇编启动代码

本系统采用C语言编程,所以选择否,出现窗口中的工程。

图8工作区窗口中的工程

图9保存工作区

3.2添加文件或新建程序文件

选中SourceGroup1后出现下面选项。

图10添加源文件

点击AddFilestoGroup“SourceGroup1”。

图11向工程中添加源文件

新建一个微波炉控制文件夹,将文件名改为微波炉控制.c后保存到微波炉控制文件夹下。

按照前面添加文件的方法将微波炉控制.c添加到当前工程里。

完成的结果如下图

图12添加程序文件后的工程

4系统调试

硬件调试

用万用表检测电路板各线路是否导通,用示波器检测信号是否正常。

软件调试

进入软件调试

打开用画好的仿真图

图13画好仿真图

4.2.2加载HEX文件

在Protues中双击AT89C51出现下面的对话框,找到HEX文件路径选中文件之后点击OK键回到之前的界面。

图14加载HEX文件

点击左下方的按钮

则启动仿真

图15启动仿真

默认做饭提醒时间为上午11点整和下午6点整,默认时间为12点整

图16启动仿真后

按下工作模式键(key1)后显示要加热的时间长短,可以通过模式辅助键(key2)来调整,最长可以调整到60分钟

图17默认的加热时间

通过按模式辅助键(key2)后调整为1分钟加热时间

图18调整后的加热时间

再次按工作模式按键后显示当前剩余的加热时间,此时并未倒计时,也没有启动加热

图19显示启动加热前剩余的加热时间

按下模式辅助键之后启动加热,电机转动,开始到计时,若在加热过程中按下模式辅助键则可以停止加热。

图20启动加热后的当前剩余加热时间

系统联调

对整个系统联调时,将每一部分代码与相关实现的硬件联合到一起进行调试,对于哪一部分出了问题就修改哪一部分。

这样保证在综合调试的时候,顺利查找错误,找到问题点。

5.系统性能测试

一个工作的开发系统下图所示:

 

在此处添加实物调试图

 

附录:

源代码:

/**********************************************************

项目:

基于单片机微波炉控制系统

============================================

描述:

系统采用12MHz晶振,以STC89C52为核心外接lcd1602显示和两个独立按键

以及蜂鸣器响铃、电机驱动。

实现时钟功能以做饭提醒功能(系统时钟采用24小时制),

系统上电后显示默认的时分秒以及做饭时间设置(上午11点和下午6点,闹铃的响铃时间为1分钟),

通过key1和key2可以对万年历以及闹铃设置进行调整以及秒表的启动暂停以及清零,

在没有光标显示时间的模式下前6每次按下key2依次会选中(光标闪烁)pm_alarm_minute,pm_alarm_hour,

amm_alarm_minute,amm_alarm_hour,hour,minute,在光标闪烁的时候每次按下key2可以对相应选中位进行校正。

按下key1在设置微波炉加热时间的模式下,前60次按下key2加1,60次之微波炉加热时间清零

按下key1后系统显示当前定好的时间,再按下key2则启动加热

作者:

曾光辉

日期:

2012年5月7号

**********************************************************/

#include<>//系统头文件

#definedata_busP0//lcd数据总线

#defineWDATA1//rs=WDATA时写入数据

#defineWCMD0//rs=WCMD时写入命令

#defineKEYP2//按键端口

#definekey_shake_time2//键盘消抖时间

sbitrs=P2^5;//lcd数据指令选择端,高data低cmd

sbitrw=P2^6;//lcd读写选择端,高读低写

sbiten=P2^7;//lcd信号加载端,下降沿有效

sbitkey1=P2^0;//被拉低说明有键按下

sbitkey2=P2^1;//被拉低说明有键按下

sbitfm=P2^2;//蜂鸣器

sbitmotor=P2^3;//电机端口

unsignedcharshift_flag;//切换显示标志

unsignedcharmodel_flag;//模式转换标志

unsignedcharstart_flag;//做饭启停标志

unsignedchartime_change_flag;//时间调整标志位

unsignedcharkey_value;//键值

unsignedchart0,t1;//系统时间计时变量和键盘消痘时间计时变量

unsignedcharstart_t1;//做饭启动后倒计时计数变量

structTIM

{

unsignedcharhour;//时

unsignedcharminute;//分

unsignedcharsecond;//秒

unsignedcharam_alarm_hour;//上午做饭闹铃时

unsignedcharam_alarm_minute;//上午做饭闹铃分

unsignedcharpm_alarm_hour;//下午做饭闹铃时

unsignedcharpm_alarm_minute;//下午做饭闹铃分

unsignedcharsetup_cooking_time;//设定做饭实际那

unsignedcharcooking_time_minute;//微波炉定时时间分

unsignedcharcooking_time_second;//微波炉定时时间秒

}time=//初始化日期时间和闹钟以及秒表

{

12,

0,

0,

11,

0,

6,

0,

0,

0,

0,

};

/***********************************

us级延时程序

=================

说明:

延时2*i+1+2个机器周期

12MHz时,延时2*ius

***********************************/

voiddelay_us(unsignedchari)

{

while(--i);

}

/***********************************

读lcd函数

=================

说明:

读取lcd1602内的内容

主要是读忙标志位

***********************************/

unsignedcharread_lcd(void)

{

unsignedcharread_value=0x00;//置为输入

data_bus=0x00;

rs=1;//数据指令选择,rs只能为1,

rw=1;//读使能

en=1;

read_value=data_bus;//读取数据

delay_us(15);//延时1us左右

en=0;

return(read_value);//返回读到的数据

}

/************************************

写lcd数据/指令函数

=====================

说明:

向lcd1602中写入数据或者指令

************************************/

voidwrite_lcd(unsignedcharvalue,bitdata_cmd)//value表示要写入的内容,data/cmd表示数据指令选择

{

//data_bus=0xff;//置为输出

delay_us(100);

rs=data_cmd;//数据指令选择

rw=0;//写使能

en=1;

data_bus=value;

delay_us(100);

en=0;

delay_us(100);

}

/*****************************************************

键盘扫描函数

====================

说明:

MCU检测到有按键按下后TIMER1延时key_shake_time*10ms再次检测是否按键还是按下

还是按下则有效,读取键值,判断按键是否释放,若释放则对键值处理,返回的键值

是处理后的键值,否则不处理,返回0

*****************************************************/

unsignedcharkey_scan(void)

{

staticunsignedcharvalue;//键值

staticunsignedchardo_key;//执行相应命令标识

staticunsignedcharkey_scan_step;//键盘扫描步骤

if(key_scan_step==0)

{

key_value=0;

if(do_key==0)

{

if(KEY&0x03!

=0x03)

{

t1=0;

do_key=1;

}

}

if((t1>=key_shake_time)&&((KEY&0x03)!

=0x03))

{

value=KEY&0x03;

do_key=0;

key_scan_step=1;

}

}

if((key_scan_step==1)&&((KEY&0x03)==0x03))

{

key_scan_step=0;

switch(value)

{

case0x02:

value=1;break;

case0x01:

value=2;break;

case0x03:

value=0;break;

default:

value=0;break;

}

return(value);

}

else

return(0);

}

/*****************************************

按键处理函数

====================

说明:

根据系统的要求对返回的键值做处理

*****************************************/

voidkey_process(void)

{

if(key_value==1)

{

key_value=0;

if(time_change_flag!

=0)

{

if(time_change_flag==1)

{

++;

if>59)

{

=0;

}

write_lcd(0xCE,WCMD);

write_lcd10+'0',WDATA);

write_lcd(0xCF,WCMD);

write_lcd%10+'0',WDATA);

write_lcd(0xCF,WCMD);

write_lcd(0x0F,WCMD);

}

if(time_change_flag==2)

{

++;

if>23)

{

=0;

}

write_lcd(0xCB,WCMD);

write_lcd10+'0',WDATA);

write_lcd(0xCC,WCMD);

write_lcd%10+'0',WDATA);

write_lcd(0xCC,WCMD);

write_lcd(0x0F,WCMD);

}

if(time_change_flag==3)

{

++;

if>59)

{

=0;

}

write_lcd(0xC6,WCMD);

write_lcd10+'0',WDATA);

write_lcd(0xC7,WCMD);

write_lcd%10+'0',WDATA);

write_lcd(0xC7,WCMD);

write_lcd(0x0F,WCMD);

}

if(time_change_flag==4)

{

++;

if>23)

{

=0;

}

write_lcd(0xC3,WCMD);

write_lcd10+'0',WDATA);

write_lcd(0xC4,WCMD);

write_lcd%10+'0',WDATA);

write_lcd(0xC4,WCMD);

write_lcd(0x0F,WCMD);

}

if(time_change_flag==5)

{

++;

if>23)

{

=0;

}

write_lcd(0x85,WCMD);

write_lcd10+'0',WDATA);

write_lcd(0x86,WCMD);

write_lcd%10+'0',WDATA);

write_lcd(0x86,WCMD);

write_lcd(0x0F,WCMD);

}

if(time_change_flag==6)

{

++;

if>59)

{

=0;

}

write_lcd(0x88,WCMD);

write_lcd10+'0',WDATA);

write_lcd(0x89,WCMD);

write_lcd%10+'0',WDATA);

write_lcd(0x89,WCMD);

write_lcd(0x0F,WCMD);

}

}

if(time_change_flag==0)

{

++model_flag;

if(model_flag==2)

{

start_flag=0;

=;

=0;

}

if(model_flag>2)

{

=0;

shift_flag=0;

model_flag=0;

time_change_flag=0;

write_lcd(0x01,WCMD);//清屏

}

}

}

if(key_value==2)

{

key_value=0;

if(model_flag==0)

{

TR0=0;

++time_change_flag;

if(time_change_flag==1)

{

write_lcd(0xCF,WCMD);

write_lcd(0x0F,WCMD);

}

if(time_change_flag==2)

{

write_lcd(0xCC,WCMD);

write_lcd(0x0F,WCMD);

}

if(time_change_flag==3)

{

write_lcd(0xC7,WCMD);

write_lcd(0x0F,WCMD);

}

if(time_change_flag==4)

{

write_lcd(0xC4,WCMD);

write_lcd(0x0F,WCMD);

}

if(time_change_flag==5)

{

write_lcd(0x86,WCMD);

write_lcd(0x0F,WCMD);

}

if(time_change_flag==6)

{

write_lcd(0x89,WCMD);

write_lcd(0x0F,WCMD);

}

if(time_change_flag>6)

{

TR0=1;

write_lcd(0x0C,WCMD);

time_change_flag=0;

}

}

if(model_flag==1)

{

time_change_flag=0;

++;

if>60)

{

=0;

}

writ

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 从业资格考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1