找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4033|回复: 2
打印 上一主题 下一主题
收起左侧

单片机微波炉控制系统仿真与源程序

[复制链接]
跳转到指定楼层
楼主
微波炉控制仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. /***********************************************

  2. ***********************************************/
  3. #include "reg52.h"
  4. #include "intrins.h"
  5. #include "seg.h"

  6. bit flag_timer ;

  7. sbit Door=P1^0;                //门限位开关
  8. sbit Led=P1^1;                //照明灯
  9. sbit Beep=P2^4;                //扬声器
  10. sbit JD=P2^5;                //继电器 加热装置控制接口

  11. sbit key_open=P1^4;        //开启按钮

  12. sbit key_set=P1^5;        //设置按钮
  13. sbit key_add=P1^6;        //时间加按钮
  14. sbit key_dec=P1^7;        //时间减按钮
  15. void delay_10us(unsigned int nus)
  16. {
  17.         while(nus--);
  18. }

  19. void delay_ms(unsigned int nms)               
  20. {
  21.         unsigned int i ,j;
  22.         for(i=nms;i>0;i--)              //nms即延时约n毫秒
  23.         {        for(j=110;j>0;j--);        }
  24. }
  25. /************************************************************************
  26. * 函数: void Beep_Play(unsigned int t)
  27. * 描述: 无源蜂鸣器驱动函数
  28. * 参数: t :  起振频率
  29. * 返回: none.
  30. * 备注: t越大频率越小
  31. ************************************************************************/
  32. void Beep_Play(unsigned int t)
  33. {
  34.         unsigned char i;
  35.         for(i=0;i<100;i++)
  36.         {
  37.                  Beep = ~Beep;
  38.                 delay_10us(t);
  39.         }
  40.         Beep = 0;
  41. }
  42. void Timer1Init(void)        //50毫秒@11.0592MHz
  43. {
  44.         TMOD &= 0x0F;                //设置定时器模式
  45.         TMOD |= 0x10;                //设置定时器模式
  46.         TL1 = 0x00;                        //设置定时初值
  47.         TH1 = 0x4C;                        //设置定时初值
  48.         TF1 = 0;                        //清除TF1标志
  49.         TR1 = 0;                        //定时器1停止计时
  50.         ET1 = 1;                        //中断使能
  51. }

  52. int cnt=0;
  53. bit ok_flag=0;                //1  为按下按键正常工作
  54. bit hotover_flag=0;        //1  加热完成标志

  55. void main(void)
  56. {
  57.         unsigned char pp=0;
  58.         smg_display(0);                //显示数值
  59.         Timer0Init();                //定时器0初始化,2毫秒@11.0592MHz
  60.         Timer1Init();                //定时器1初始化,50毫秒@11.0592MHz
  61.         while(1)
  62.         {
  63.                 if(flag_timer==1)                //赋一次值
  64.                 {
  65.                         flag_timer = 0;                //清除标志  等待下一次400ms
  66.                         smg_display(cnt);        //显示数值
  67.                 }
  68.                 if(hotover_flag == 1)        //加热完成
  69.                 {
  70.                         Beep_Play(50);
  71.                         Beep_Play(50);
  72.                         Beep_Play(50);
  73.                         pp++;
  74.                         if(pp>10)
  75.                         {
  76.                                 pp = 0;
  77.                                 hotover_flag = 0;
  78.                         }
  79.                                
  80.                 }
  81.                 if(ok_flag == 1)                //确认键按下了已经
  82.                 {
  83.                         if(Door==0&&cnt>0)        //门被关上
  84.                         {
  85. //                                TR1 = 1;                //定时器1开始计时  如果是关门自动加热则不注释
  86.                                 JD = 0;                        //加热
  87.                                 Beep = 1;                //报警关闭
  88.                                 Led = 1;                //照明灯灭
  89.                         }
  90.                         else                                //门未关
  91.                         {
  92.                                 Beep_Play(50);
  93. //                                Beep = 0;                //报警
  94.                                 TR1 = 0;                //定时器1停止计时
  95.                                 JD = 1;                        //停止加热
  96.                                 Led = 0;                //照明灯亮
  97.                         }
  98.                                
  99.                 }
  100.                 if(Door==0)                                //门被关上
  101.                 {
  102.                         Led = 1;                        //照明灯灭
  103.                        
  104.                 }
  105.                 else                                        //门未关
  106.                 {       
  107.                         Led = 0;                        //照明灯亮
  108.                 }
  109.                 if(key_add==0)                        //设置加按钮按下
  110.                 {       
  111.                         delay_ms(200);                //消除抖动
  112.                         if(key_add==0)                //设置加按钮按下
  113.                         {
  114.                                 cnt++;
  115.                                 if(cnt>999)
  116.                                         cnt=0;       
  117.                         }
  118.                        
  119.                 }
  120.                 if(key_dec==0)                                //设置减按钮按下
  121.                 {       
  122.                         delay_ms(200);                        //消除抖动
  123.                         if(key_dec==0)                        //设置减按钮按下
  124.                         {
  125.                                 cnt--;
  126.                                 if(cnt<0)
  127.                                         cnt=999;       
  128.                         }       
  129.                 }
  130.                 if(key_set==0)                                //确认键按下
  131.                 {
  132.                         while(key_set==0);                //等待释放       
  133.                         if(cnt>0)                                //如果定时的值大于0
  134.                         {
  135.                                 ok_flag = 1;
  136.                                 TR1 = 1;                        //定时器1开始计时
  137.                         }
  138.                 }
  139.         }
  140. }

  141. void tm0_isr() interrupt 1 using 1
  142. {
  143.         static unsigned char num=0;
  144.         TF0 = 0;
  145.         TL0 = 0xCD;                         //设置定时初值
  146.         TH0 = 0xF8;                        //设置定时初值
  147.         display();                        //数码管显示函数
  148.         if(num++ >= 100)    //2ms*100 =200ms
  149.         {
  150.                 num = 0;
  151.                 flag_timer = 1;
  152.         }
  153. }
  154. void tm1_isr() interrupt 3 using 1                //定时50毫秒
  155. {
  156.         static unsigned int num1=0;
  157.         TL1 = 0x00;                                //设置定时初值
  158.         TH1 = 0x4C;                                //设置定时初值
  159.         if(num1++>=20&&cnt>0)        //1s到
  160.         {
  161.                 num1 = 0;
  162.                 cnt--;
  163.                
  164.         }
  165.         if(cnt==0)
  166. ……………………

  167. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
微波炉.rar (73.04 KB, 下载次数: 112)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏5 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:367110 发表于 2018-7-8 14:01 | 只看该作者
下不了啊 还扣我黑币QAQ
请问可以发我QQ吗
回复

使用道具 举报

板凳
ID:337139 发表于 2021-9-10 10:35 | 只看该作者
仿真与实际的工作还是有一些差别的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表