欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

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

    • 资源ID:32472482       资源大小:637.54KB        全文页数:38页
    • 资源格式: DOC        下载积分:9金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要9金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    江西科技师范大学大学生科研、创新性实验项目设计方案第一稿 项目 名称: 微波炉控制系统的设计与制作 项目负责人: 曾光芒 专 业: 电子信息工程 所在 学院: 通信与电子学院 指导 教师: 占华林 2012年 5 月 20 日江西科技师范大学教务处1 总体方案本系统由核心元件AT89C51单片机、LCD1602、独立按键、蜂鸣器构成、电机,用来实现数字电子钟、做饭提醒、模拟定时加热功能。主控部分是由单片机和独立按键两部分构成,显示部分是LCD1602显示模块构成,闹铃部分是外接蜂鸣器构成,模拟加热部分是直流电机构成。实现了秒表和数字电子时钟的功能。工作过程中有各种工作状,显示 时 分 秒以及上午和下午的做饭时刻,这些参数都可以校正。 图 1微波炉控制系统的整个电路该数字钟工作原理是用一片AT89C51单片机通过编程去控制LCD1602实现的。通过2个开关控制来进行时间的调节以及秒表功能,P2.0key1口控制按键,当系统处于正常时间显示并且按下此键时,可以进入秒表功能和时间功能的切换,此键还可以作为时间和日期以及闹铃的调整位选中键,当系统处于时间显示模式时,按此键可以选中相应的需要调整的位。当系统处于时间显示模式时,P2.1key2口控制按键,按此键对相应的选中位进行加,当系统处于处于秒表工作模式时按此键可以控制秒表计时的启动和暂停。其工作流程:1.年月日时分秒显示。通电后LCD自动显示C语言程序设置好的默认时间2.闹钟显示和设定。通电后,A的右边显示的是默认的闹钟时间,通过key1和key2可以设置闹铃时间。3.秒表显示以及启动和暂停以及清零。处于正常显示时间模式下时按下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.3 LCD1602显示电路模块下列图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软件开发环境Keil uVision2,怎样新建一个工程以完成自己的设计和调试。这里不是 Keil开发环境的详细使用手册,关于 Keil 的详细说明文档请浏览 Keil 软件的帮助文档。3.1 建立一个新工程点击 Project 菜单,选择 Greate New Project . 如图 11图5 建立一个新工程弹出图12建立新工程对话框,文件名框中输入工程名字,保存类型选择.uv2,点击保存。图6 选择工程类型点击保存之后便出现芯片的选择框。图7 选择芯片型号点击确定之后出现下面的对话框。图8 汇编启动代码本系统采用C语言编程,所以选择否,出现窗口中的工程。图8 工作区窗口中的工程图9 保存工作区3.2 添加文件或新建程序文件选中Source Group1后出现下面选项。图10 添加源文件点击Add Files to Group “Source Group 1”。图11 向工程中添加源文件新建一个 微波炉控制 文件夹,将文件名改为 微波炉控制.c 后保存到 微波炉控制 文件夹下。按照前面添加文件的方法将 微波炉控制.c 添加到当前工程里。完成的结果如下列图图12 添加程序文件后的工程4 系统调试4.1 硬件调试用万用表检测电路板各线路是否导通,用示波器检测信号是否正常。4.2 软件调试进入软件调试打开用画好的仿真图图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<reg52.h>/系统头文件#define data_busP0/lcd数据总线#define WDATA 1 /rs=WDATA时写入数据#define WCMD 0 /rs=WCMD时写入命令#define KEYP2/按键端口#define key_shake_time 2/键盘消抖时间sbit rs=P25; /lcd数据指令选择端,高data低cmdsbit rw=P26; /lcd读写选择端,高读低写sbit en=P27; /lcd信号加载端,下降沿有效sbit key1=P20; /被拉低说明有键按下sbit key2=P21; /被拉低说明有键按下sbit fm=P22; /蜂鸣器sbit motor= P23;/电机端口unsigned char shift_flag;/切换显示标志unsigned char model_flag; /模式转换标志unsigned char start_flag;/做饭启停标志unsigned char time_change_flag; /时间调整标志位unsigned char key_value;/键值unsigned char t0,t1;/系统时间计时变量和键盘消痘时间计时变量unsigned char start_t1;/做饭启动后倒计时计数变量struct TIMunsigned char hour;/时unsigned char minute;/分unsigned char second;/秒unsigned char am_alarm_hour;/上午做饭闹铃时unsigned char am_alarm_minute;/上午做饭闹铃分unsigned char pm_alarm_hour;/下午做饭闹铃时unsigned char pm_alarm_minute;/下午做饭闹铃分unsigned char setup_cooking_time;/设定做饭实际那unsigned char cooking_time_minute;/微波炉定时时间分unsigned char cooking_time_second;/微波炉定时时间秒time=/初始化日期时间和闹钟以及秒表12,0,0,11,0,6,0,0,0,0,;/*us级延时程序 =说明:延时 2*i+1+2 个机器周期 12MHz时,延时 2*i us*/void delay_us(unsigned char i) while(-i);/*读lcd函数=说明:读取lcd1602内的内容 主要是读忙标志位*/unsigned char read_lcd(void) unsigned char read_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(unsigned char value,bit data_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 char key_scan(void)static unsigned char value;/键值static unsigned char do_key;/执行相应命令标识static unsigned char key_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)case 0x02 :value = 1;break;case 0x01 :value = 2;break;case 0x03 :value = 0;break;default :value = 0;break;return(value);elsereturn(0);/*按键处理函数=说明:根据系统的要求对返回的键值做处理*/void key_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_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;+time.setup_cooking_time;if(time.setup_cooking_time > 60)time.setup_cooking_time = 0;write_lcd(0xC7,WCMD);write_lcd(time.setup_cooking_time%100/10+'0',WDATA);write_lcd(0xC8,WCMD);write_lcd(time.setup_cooking_time%10+'0',WDATA);if(model_flag = 2)/time_change_flag = 0;+start_flag ;if(start_flag = 1&&time.cooking_time_minute!=0)motor = 0;/启动加热if(start_flag >1)motor = 1;start_flag = 0;time.setup_cooking_time = 0;time.cooking_time_minute = 0;time.cooking_time_second = 0;if(start_flag = 0)motor = 1;/关闭加热/*更新日期和时间函数=说明:对TIMER0得到的系统时钟进行处理 从而得到时分秒年月日*/void update_time(void)if(t0>=20)t0=0;time.second+;if(time.second>59)time.second=0;time.minute+;if(time.minute>59)time.minute=0;time.hour+;if(time.hour>23)time.hour=0;if(model_flag = 0)write_lcd(0x85,WCMD);write_lcd(time.hour/10+'0',WDATA);write_lcd(0x86,WCMD);write_lcd(time.hour%10+'0',WDATA);if(model_flag = 0)write_lcd(0x88,WCMD);write_lcd(time.minute/10+'0',WDATA);write_lcd(0x89,WCMD);write_lcd(time.minute%10+'0',WDATA);if(model_flag = 0)write_lcd(0x8B,WCMD);write_lcd(time.second/10+'0',WDATA);write_lcd(0x8C,WCMD);write_lcd(time.second%10+'0',WDATA);/*秒表更新时间函数=说明:对TIMER1得到的秒表计数进行处理 从而得到时分秒和毫秒*/void update_stop_watch(void)/*if(model_flag = 1)write_lcd(0xC7,WCMD);write_lcd(time.setup_cooking_time%100/10+'0',WDATA);write_lcd(0xC8,WCMD);write_lcd(time.setup_cooking_time%10+'0',WDATA);*/if(start_t1 >= 100 && start_flag = 1&&model_flag = 2&&time.setup_cooking_time!=0)motor = 0;start_t1=0;-time.cooking_time_second;if(time.cooking_time_second=255)time.cooking_time_second=59;-time.cooking_time_minute;if(model_flag = 2)write_lcd(0xC6,WCMD);write_lcd(time.cooking_time_minute%100/10+'0',WDATA);write_lcd(0xC7,WCMD);write_lcd(time.cooking_time_minute%10+'0',WDATA);if(time.cooking_time_minute = 0&&time.cooking_time_second=0)time.setup_cooking_time = 0;motor = 1;start_flag = 0;if(model_flag = 2)write_lcd(0xC9,WCMD);write_lcd(time.cooking_time_second/10+'0',WDATA);write_lcd(0xCA,WCMD);write_lcd(time.cooking_time_second%10+'0',WDATA);/*切换显示函数=说明:在时间显示和秒表显示之间进行切换*/void shift_display(void)if(model_flag = 0 && time_change_flag = 0 && shift_flag =0)shift_flag = 1;dowrite_lcd(0x01,WCMD);/清屏write_lcd(0x8B,WCMD);write_lcd(time.second/10+'0',WDATA);write_lcd(0x8B,WCMD);write_lcd(time.second/10+'0',WDATA);write_lcd(0x8C,WCMD);write_lcd(time.second%10+'0',WDATA);write_lcd(0x8A,WCMD);write_lcd(':',WDATA);write_lcd(0x88,WCMD);write_lcd(time.minute/10+'0',WDATA);write_lcd(0x89,WCMD);write_lcd(time.minute%10+'0',WDATA);write_lcd(0x87,WCMD);write_lcd(':',WDATA);write_lcd(0x85,WCMD);write_lcd(time.hour/10+'0',WDATA);write_lcd(0x86,WCMD);write_lcd(time.hour%10+'0',WDATA);write_lcd(0xCF,WCMD);write_lcd(time.pm_alarm_minute%10+'0',WDATA);write_lcd(0xCE,WCMD);write_lcd(time.pm_alarm_minute/10+'0',WDATA);write_lcd(0xCD,WCMD);write_lcd(':',WDATA);write_lcd(0xCC,WCMD);write_lcd(time.pm_alarm_hour%10+'0',WDATA);write_lcd(0xCB,WCMD);write_lcd(time.pm_alarm_hour/10+'0',WDATA);write_lcd(0xC9,WCMD);write_lcd('&',WDATA

    注意事项

    本文(基于单片机的微波炉控制系统.doc)为本站会员(可****阿)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开