仿真原理图如下(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, 下载次数: 127)
|