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

上传人:b****7 文档编号:16049030 上传时间:2023-07-10 格式:DOCX 页数:43 大小:569.65KB
下载 相关 举报
基于单片机的微波炉控制系统.docx_第1页
第1页 / 共43页
基于单片机的微波炉控制系统.docx_第2页
第2页 / 共43页
基于单片机的微波炉控制系统.docx_第3页
第3页 / 共43页
基于单片机的微波炉控制系统.docx_第4页
第4页 / 共43页
基于单片机的微波炉控制系统.docx_第5页
第5页 / 共43页
基于单片机的微波炉控制系统.docx_第6页
第6页 / 共43页
基于单片机的微波炉控制系统.docx_第7页
第7页 / 共43页
基于单片机的微波炉控制系统.docx_第8页
第8页 / 共43页
基于单片机的微波炉控制系统.docx_第9页
第9页 / 共43页
基于单片机的微波炉控制系统.docx_第10页
第10页 / 共43页
基于单片机的微波炉控制系统.docx_第11页
第11页 / 共43页
基于单片机的微波炉控制系统.docx_第12页
第12页 / 共43页
基于单片机的微波炉控制系统.docx_第13页
第13页 / 共43页
基于单片机的微波炉控制系统.docx_第14页
第14页 / 共43页
基于单片机的微波炉控制系统.docx_第15页
第15页 / 共43页
基于单片机的微波炉控制系统.docx_第16页
第16页 / 共43页
基于单片机的微波炉控制系统.docx_第17页
第17页 / 共43页
基于单片机的微波炉控制系统.docx_第18页
第18页 / 共43页
基于单片机的微波炉控制系统.docx_第19页
第19页 / 共43页
基于单片机的微波炉控制系统.docx_第20页
第20页 / 共43页
亲,该文档总共43页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

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

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

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

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

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

 

 

————————————————————————————————作者:

————————————————————————————————日期:

 

江西科技师范大学

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

第一稿

 

  

项目名称:

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

项目负责人:

     曾光辉    

专业:

      电子信息工程   

所在学院:

   通信与电子学院  

指导教师:

      占华林    

 

2012年 5 月20日

江西科技师范大学教务处

1.总体方案

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

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

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

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

 

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

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

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

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

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

其工作流程:

1.年月日时分秒显示。

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

2.闹钟显示和设定。

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

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

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

2.1时钟电路模块

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

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

图2-1ﻩ时钟电路原理图

2.2复位电路模块

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

单片机复位的条件是:

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

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

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

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

图2-2复位电路原理图

2.3LCD1602显示电路模块

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

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

2.4按键电路模块

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

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

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

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

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

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

2.5闹铃模块

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

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

2.6电机驱动模块

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

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

3软件模块设计

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

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

3.1建立一个新工程

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

图5建立一个新工程

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

图6选择工程类型

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

图7选择芯片型号

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

图8汇编启动代码

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

图8工作区窗口中的工程

图9 保存工作区

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

选中Source Group1后出现下面选项。

图10添加源文件

点击AddFilestoGroup“SourceGroup1”。

图11向工程中添加源文件

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

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

完成的结果如下图

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

4系统调试

4.1 硬件调试

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

4.2软件调试

4.2.1进入软件调试

打开用Protues7.8画好的仿真图

图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 启动加热后的当前剩余加热时间

4.2系统联调

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

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

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_busﻩP0ﻩ//lcd数据总线

#defineWDATA 1ﻩﻩ ﻩ//rs=WDATA时写入数据

#defineWCMD 0ﻩﻩ//rs=WCMD时写入命令

#defineKEYﻩP2ﻩ//按键端口

#define key_shake_time2//键盘消抖时间

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

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

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

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

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

sbit fm=P2^2;ﻩﻩﻩ//蜂鸣器

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

unsignedcharshift_flag;ﻩﻩ//切换显示标志

unsignedcharmodel_flag;ﻩ//模式转换标志

unsignedcharstart_flag;//做饭启停标志

unsignedchartime_change_flag;ﻩﻩ//时间调整标志位

unsignedchar key_value;ﻩﻩ//键值

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

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

structTIMﻩ

{

unsignedchar hour;ﻩﻩﻩ//时

ﻩunsigned char minute;//分

ﻩunsignedcharsecond;ﻩﻩﻩﻩ//秒

ﻩunsignedcharam_alarm_hour;ﻩ//上午做饭闹铃时

unsignedcharam_alarm_minute;ﻩ//上午做饭闹铃分

unsignedchar pm_alarm_hour;//下午做饭闹铃时

unsignedchar pm_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内的内容

ﻩﻩ主要是读忙标志位

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

unsigned charread_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中写入数据或者指令

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

void write_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   

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

unsigned charkey_scan(void)

{

ﻩstaticunsignedcharvalue;ﻩ//键值

ﻩstatic unsignedchar do_key;ﻩﻩﻩ//执行相应命令标识

ﻩstaticunsigned charkey_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;

ﻩﻩcase 0x03:

ﻩ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)

ﻩ{

ﻩ++time.pm_alarm_minute;

ﻩif(time.pm_alarm_minute>59)

ﻩﻩ{

ﻩtime.pm_alarm_minute=0;

ﻩﻩﻩ}

ﻩﻩﻩwrite_lcd(0xCE,WCMD);

ﻩﻩwrite_lcd(time.pm_alarm_minute/10+'0',WDATA);

write_lcd(0xCF,WCMD);

ﻩwrite_lcd(time.pm_alarm_minute%10+'0',WDATA);

ﻩﻩwrite_lcd(0xCF,WCMD);

ﻩﻩﻩwrite_lcd(0x0F,WCMD);ﻩ

ﻩ}

ﻩif(time_change_flag==2)

ﻩﻩ{

ﻩﻩ++time.pm_alarm_hour;

ﻩif(time.pm_alarm_hour>23)

ﻩﻩﻩﻩ{

ﻩﻩﻩﻩtime.pm_alarm_hour= 0;

ﻩﻩﻩﻩ}

ﻩwrite_lcd(0xCB,WCMD);

ﻩﻩwrite_lcd(time.pm_alarm_hour/10+'0',WDATA);

ﻩﻩﻩﻩwrite_lcd(0xCC,WCMD);

ﻩwrite_lcd(time.pm_alarm_hour%10+'0',WDATA);

ﻩﻩwrite_lcd(0xCC,WCMD);

ﻩﻩﻩwrite_lcd(0x0F,WCMD);

ﻩ}

ﻩif(time_change_flag==3)

ﻩﻩ{

ﻩ++time.am_alarm_minute;

ﻩﻩif(time.am_alarm_minute>59)

ﻩﻩ{

time.am_alarm_minute=0;

ﻩﻩﻩ}

ﻩwrite_lcd(0xC6,WCMD);

ﻩﻩﻩwrite_lcd(time.am_alarm_minute/10+'0',WDATA);

write_lcd(0xC7,WCMD);

ﻩﻩwrite_lcd(time.am_alarm_minute%10+'0',WDATA);

ﻩﻩﻩwrite_lcd(0xC7,WCMD);

ﻩwrite_lcd(0x0F,WCMD);ﻩﻩ

ﻩﻩ}

ﻩﻩﻩif(time_change_flag==4)

ﻩ{

ﻩﻩﻩﻩ++time.am_alarm_hour;

ﻩif(time.am_alarm_hour>23)

ﻩ{

ﻩﻩtime.am_alarm_hour= 0;

ﻩﻩﻩ}

ﻩﻩwrite_lcd(0xC3,WCMD);

ﻩﻩﻩwrite_lcd(time.am_alarm_hour/10+'0',WDATA);

write_lcd(0xC4,WCMD);

ﻩﻩwrite_lcd(time.am_alarm_hour%10+'0',WDATA);

ﻩﻩﻩwrite_lcd(0xC4,WCMD);

ﻩﻩwrite_lcd(0x0F,WCMD);ﻩﻩ

ﻩﻩ}

ﻩﻩﻩif(time_change_flag==5)

ﻩﻩ{

ﻩﻩﻩ++time.hour;

ﻩif(time.hour>23)

{

ﻩﻩﻩtime.hour=0;

ﻩ}

ﻩﻩﻩwrite_lcd(0x85,WCMD);

ﻩﻩﻩwrite_lcd(time.hour/10+'0',WDATA);

ﻩﻩwrite_lcd(0x86,WCMD);

ﻩﻩﻩwrite_lcd(time.hour%10+'0',WDATA);

ﻩwrite_lcd(0x86,WCMD);

ﻩﻩwrite_lcd(0x0F,WCMD);ﻩ

ﻩ}

ﻩif(time_change_flag==6)

ﻩ{

ﻩﻩ++time.minute;

ﻩﻩﻩif(time.minute>59)

ﻩ{

ﻩtime.minute=0;

ﻩﻩ}

ﻩﻩwrite_lcd(0x88,WCMD);

ﻩﻩwrite_lcd(time.minute/10+'0',WDATA);

ﻩﻩwrite_lcd(0x89,WCMD);

ﻩﻩwrite_lcd(time.minute%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;

ﻩﻩﻩtime.cooking_time_minute=time.setup_cooking_time;

ﻩtime.cooking_time_second=0;

ﻩ}

ﻩif(model_flag>2)

ﻩﻩﻩ{

ﻩtime.setup_cooking_time=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_f

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

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2