找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机豆浆机仿真电路+程序源码

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

豆浆机仿真电路图+程序源码


void main()         

{
  u8 jiyi=0;

  beep=1;
  Motor=0;//关电机
  M_LED=1;//关电机指示灯
  LED=0;

  LCD_Initial();  

  LCD_Print(2,0, "soybean milk");
  LCD_Print(4,1, "machine");
  delayms(300);

  LCD_Write(0x00, 0x01);//清屏

  LCD_Print(0,0, "Please Add Water");
  LCD_Print(0,1, "Percentage:000  ");

  TIME_INIT_0();//开定时器

  while(1)
  {
    KEY();

/***********************************************浆液溢出***********************************************/
        if(yichu_flag==1)
        {
          LCD_Write(0x00, 0x01);//清屏
          LCD_Print(0,0,"Foam Over");
          LCD_Print(0,1,"Time:  S");

          Motor=0;//关电机
          M_LED=1;//关电机指示灯

          jiyi=Star_Flag;//记录系统运行状态
          Star_Flag=0;

          Timeyichu_Set=10;//设置10秒消泡沫
          yichu_flag=2;        
        }
        if(yichu_flag==2)
        {
          Timeyichu=yichu_fen*60+yichu_miao;//计算时间
      dis[1]=Timeyichu/10+'0';
      dis[2]=Timeyichu%10+'0';

      LCD_Print(5,1,&dis[1]);
      LCD_Print(6,1,&dis[2]);

          if(Timeyichu>=Timeyichu_Set)//达到预设
          {
            Timeyichu_Set=0;
            yichu_haomiao=0;
            yichu_miao=0;
            yichu_fen=0;
                  yichu_flag=0;
                if(jiyi%2==0)
                  Star_Flag=jiyi-1;//恢复系统运行状态
                else
                    Star_Flag=jiyi;//恢复系统运行状态
          }        
        }
/***************************************1600W加热到80℃*******************************************/                        
        if(Star_Flag==1)//正常启动
        {
          LCD_Print(0,0,"Power:1600W");     
          LCD_Print(0,1,"Tempe:  ");
          LCD_Print(10,1,WD);                                      
          Star_Flag=2;//将进入1600W加热到80度
        }
        if(Star_Flag==2)//1600W加热到80度
        {                  
      while(1)
          {
                if(temp>0&&temp<=1600)
                {
                    chuli(temp,Temp_Dis);          //数据处理
              LCD_PutChar(6,1,&Temp_Dis[0]);
                    LCD_PutChar(7,1,&Temp_Dis[1]);
                  LCD_Print(8,1,".");
          LCD_PutChar(9,1,&Temp_Dis[2]);
                  if(temp>800)
                    break;
                }
          }
      haomiao=0;
          miao=0;
          fen=0;
          Star_Flag=3;//将进入启动电机打浆,加热功率1600W
        }

/****************************************打浆120S不加热*****************************************/
        if(Star_Flag==3)//启动电机打浆120s
        {
          Motor=1;//启动电机打浆
          M_LED=0;//开电机指示灯

          LCD_Write(0x00, 0x01);//清屏
          LCD_Print(0,0,"No Heating");
          LCD_Print(0,1,"Motor Star:   S");

          Time_Set=120;//设定电机打浆120秒
          Star_Flag=4;//将进入等待打浆时间到        
        }
        if(Star_Flag==4)//等待打浆时间到
        {
          Time=fen*60+miao;//计算时间
          dis[0]=Time/100+'0';
      dis[1]=Time%100/10+'0';
      dis[2]=Time%100%10+'0';

          LCD_Print(11,1,&dis[0]);
      LCD_Print(12,1,&dis[1]);
      LCD_Print(13,1,&dis[2]);

          if(Time>=Time_Set)
          {
                  Time_Set=0;
            haomiao=0;
            miao=0;
            fen=0;
                  Star_Flag=5;//将进入800W加热,打浆同时进行,60s
          }
        }

/*****************************************800W煮浆同时打浆*****************************************/
        if(Star_Flag==5)//800W加热,打浆同时进行,60s
        {
          Motor=1;//启动电机打浆
          M_LED=0;//开电机指示灯

          LCD_Write(0x00, 0x01);//清屏
          LCD_Print(0,0,"Power:800W");
          LCD_Print(0,1,"Motor Star:   S");

          Time_Set=60;//设定800W加热同时电机打浆60秒
          Star_Flag=6;//将进入等待煮浆打浆时间到
        }
        if(Star_Flag==6)//等待煮浆打浆时间到
        {
          Time=fen*60+miao;//计算时间
      dis[1]=Time/10+'0';
      dis[2]=Time%10+'0';

      LCD_Print(12,1,&dis[1]);
      LCD_Print(13,1,&dis[2]);

          if(Time>=Time_Set)
          {
                  Time_Set=0;
            haomiao=0;
            miao=0;
            fen=0;
                Motor=0;//关闭电机打浆
                M_LED=1;//关电机指示灯
                  Star_Flag=7;//将进入煮浆
          }
        }

/*******************************************450W煮浆60s,350W煮浆120s*****************************************/
        if(Star_Flag==7)//煮浆
        {
          LCD_Write(0x00, 0x01);//清屏

          Time_Set=180;//设定180s煮浆
          Star_Flag=8;//将进入等待煮浆打浆时间到               
        }
        if(Star_Flag==8)//煮浆
        {
          Time=fen*60+miao;//计算时间
          if(Time<=60)//400W煮浆
          {
             LCD_Print(0,0,"Power:400W");
               LCD_Print(0,1,"Time:   S");


        dis[1]=(Time)/10+'0';
        dis[2]=(Time)%10+'0';

        LCD_Print(6,1,&dis[1]);
        LCD_Print(7,1,&dis[2]);
          }
          if(Time>60&&Time<=180)//350W煮浆
          {
                   LCD_Print(0,0,"Power:350W");
               LCD_Print(0,1,"Time:   S");


                dis[0]=(Time-60)/100+'0';
        dis[1]=(Time-60)%100/10+'0';
        dis[2]=(Time-60)%100%10+'0';

        LCD_Print(5,1,&dis[0]);
        LCD_Print(6,1,&dis[1]);
        LCD_Print(7,1,&dis[2]);
          }

          if(Time>=Time_Set)
          {
                  Time_Set=0;
            haomiao=0;
            miao=0;
            fen=0;
                  Star_Flag=9;//将进结束
          }
        }

/********************************************结束10s**************************************/
        if(Star_Flag==9)//结束
        {
          LCD_Write(0x00, 0x01);//清屏
          LCD_Print(0,0,"End of Run");
          LCD_Print(0,1,"Time:   S");

          Time_Set=10;//设定10s
          Star_Flag=10;
        }
        if(Star_Flag==10)//结束
        {
          Time=fen*60+miao;//计算时间
      dis[1]=Time/10+'0';
      dis[2]=Time%10+'0';

      LCD_Print(6,1,&dis[1]);
      LCD_Print(7,1,&dis[2]);

          if(Time>=Time_Set)
          {
                  Time_Set=0;
            haomiao=0;
            miao=0;
            fen=0;
                  Star_Flag=11;//将进入蜂鸣器
          }
        }

/********************************************10后报警*******************************************/
        if(Star_Flag==11)//蜂鸣器
        {
          Time_Set=2;//设定10s
          Star_Flag=12;        
        }
        if(Star_Flag==12)//蜂鸣器
        {
             Time=fen*60+miao;//计算时间
          if(Time>0&&Time<=1)
          {
                  beep=0;
          }
          if(Time>1&&Time<=2)
          {
                  beep=1;
          }        

          if(Time>=Time_Set)
          {
            haomiao=0;
            miao=0;
            fen=0;
          }
    }
  }            
}



Proteus7.5版本的仿真工程dsn文件和代码下载: 豆浆机.zip (233.21 KB, 下载次数: 125)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:130230 发表于 2021-8-24 17:14 | 只看该作者
建议模块化编程,魔鬼数字用宏替代增加代码可读性。真正工作后就能体会到,好的程序员不是能实现多么牛叉的功能,而是把简单的功能实现的清晰明了。程序可维护性,健壮性都是靠层次和规范来保证的。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:1024528 发表于 2022-5-7 15:19 | 只看该作者
这个程序前面定义的部分能发一下吗
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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