文章目录

  • 一、功能简介
  • 二、软件设计
  • 三、实验现象
  • 联系作者

一、功能简介

本项目使用Proteus8仿真51单片机控制器,使用LED指示模块、数码管显示模块、DS18B20温度模块、电机驱动模块、水位传感器模块等。

主要功能:
系统运行后,数码管显示初始水位和时间,通过按键K1选择水位,按键K2选择工作模式且对应模式指示灯亮;当按下K3键设定烘干温度,K1和K2调节温度值。当选择好模式和水位,按下K4键开始工作;如果不是甩干和烘干模式下,开始会进水,等待水位到达指定高度后开始洗涤工作,然后按照指定时间洗涤漂洗和脱水。在脱水时,出水指示灯亮。结束后蜂鸣器报警提示。若水位高度超过报警值,则电机停止,蜂鸣器报警。当工作在烘干模式,当前温度低于设定温度值,开启加热,到达阈值后关闭加热。


二、软件设计

/*
作者:嗨小易(QQ:3443792007)
*///系统参数初始化
void sys_parm_init(void)
{sys_ctrl.mode=0;sys_ctrl.start=0;    sys_ctrl.lev_set=LEVEL_SW_MIN;sys_ctrl.time=0;sys_ctrl.time_flag=0;sys_ctrl.sec=0;sys_ctrl.run_sta=0;sys_ctrl.lev_flag=0;sys_ctrl.level=0;sys_ctrl.work_time[0]=sys_ctrl.time*2/5;//洗涤时间sys_ctrl.work_time[1]=sys_ctrl.time*1/5;//漂洗时间sys_ctrl.work_time[2]=sys_ctrl.time*2/5;//脱水时间sys_ctrl.set_temp=30;sys_ctrl.temp_flag=0;_led_mode_show(sys_ctrl.mode);WORK_XD_LED=1;WORK_PX_LED=1;WORK_TS_LED=1;JS_LED=1;CS_LED=1;JR_LED=1;motor_stop();
}//暂停阶段参数设置
void _pause_parm_init(void)
{JS_LED=1;CS_LED=1;JR_LED=1;motor_stop();
}//系统数据采集
void sys_data_get(void)
{static u8 i=0;while(1){//如果在洗涤和漂洗阶段进行水位检测if(sys_ctrl.run_sta<2){//获取水位sys_ctrl.level=pcf8591_read_adcvalue(0);sys_ctrl.level=cal_map(sys_ctrl.level,0,255,0,99); }if(sys_ctrl.start==1){i++;if(i%10==0){//温度检测sys_ctrl.temp=ds18b20_read_temperture();    }   }break;}
}//系统数据显示
void sys_data_show(void)
{u8 buf[4];while(1){//如果系统还未开始时,显示if(sys_ctrl.start==0){//还未设置温度显示if(sys_ctrl.temp_flag==0){buf[0]=0;buf[1]=gsmg_code[sys_ctrl.lev_set]|0X80;buf[2]=gsmg_code[sys_ctrl.time/10];buf[3]=gsmg_code[sys_ctrl.time%10];  }//设置温度时显示else{buf[0]=0;buf[1]=0;buf[2]=gsmg_code[sys_ctrl.set_temp/10];buf[3]=gsmg_code[sys_ctrl.set_temp%10]; }//模式指示灯显示_led_mode_show(sys_ctrl.mode);        }//如果系统已开启,只显示时间else{buf[0]=0;buf[1]=gsmg_code[0];buf[2]=gsmg_code[sys_ctrl.time/10];buf[3]=gsmg_code[sys_ctrl.time%10];}smg_display(buf,1);break;}
}//系统参数设置
void sys_data_set(void)
{u8 key=0;key=key_scan(0);//开始/暂停/停止if(key==KEY4_PRESS){sys_ctrl.start++;//开始if(sys_ctrl.start==1){sys_ctrl.work_time[0]=sys_ctrl.time*2/5;//洗涤时间sys_ctrl.work_time[1]=sys_ctrl.time*1/5;//漂洗时间sys_ctrl.work_time[2]=sys_ctrl.time*2/5;//脱水时间        }//暂停else if(sys_ctrl.start==2){TR1=0;//关闭定时器_pause_parm_init(); }//开始else if(sys_ctrl.start>2){sys_ctrl.start=1;    }   }//如果系统还未开始工作if(sys_ctrl.start==0){//温度设置if(key==KEY3_PRESS){sys_ctrl.temp_flag=!sys_ctrl.temp_flag;       }//如果未设置温度,K1和K2功能if(sys_ctrl.temp_flag==0){//选择洗衣模式if(key==KEY2_PRESS){sys_ctrl.mode++;if(sys_ctrl.mode>6)sys_ctrl.mode=1;//选择模式时指定时间_select_mode_time(sys_ctrl.mode);    }//选择水位else if(key==KEY1_PRESS){sys_ctrl.lev_set++;if(sys_ctrl.lev_set>LEVEL_SW_MAX)sys_ctrl.lev_set=LEVEL_SW_MIN;  }   }//如果是设置温度时,K1和K2功能else{//温度加if(key==KEY1_PRESS){sys_ctrl.set_temp++;if(sys_ctrl.set_temp>99)sys_ctrl.set_temp=0;    }//温度减else if(key==KEY2_PRESS){sys_ctrl.set_temp--;if(sys_ctrl.set_temp<0)sys_ctrl.set_temp=99;   }       }}
}//系统控制
void sys_ctrl_fun(void)
{u8 lev_set=sys_ctrl.lev_set*10;while(1){//如果系统开始工作if(sys_ctrl.start==1){//如果工作模式在标准、轻柔、大件、节能时if(sys_ctrl.mode<5){//如果水位还未到达,进水if(sys_ctrl.level<lev_set){JS_LED=0;//进水LED亮TR1=0;//关闭定时器      }//如果水位到达设定值,关闭进水,开始工作else{JS_LED=1;//进水LED灭TR1=1;//打开定时器//如果在洗涤时间状态if(sys_ctrl.run_sta==0){if(sys_ctrl.sec<sys_ctrl.work_time[0]){WORK_XD_LED=0;WORK_PX_LED=1;WORK_TS_LED=1;//洗涤LED亮motor_fr_run();//电机开启  }else {sys_ctrl.run_sta=1;//洗涤结束sys_ctrl.sec=0;motor_stop();//电机关闭}   }//如果在漂洗时间状态else if(sys_ctrl.run_sta==1){if(sys_ctrl.sec<sys_ctrl.work_time[1]){WORK_XD_LED=1;WORK_PX_LED=0;WORK_TS_LED=1;//漂洗LED亮motor_fr_run();//电机开启 }else {sys_ctrl.run_sta=2;//漂洗结束sys_ctrl.sec=0;motor_stop();//电机关闭}       }//如果在脱水时间状态else if(sys_ctrl.run_sta==2){if(sys_ctrl.sec<sys_ctrl.work_time[2]){WORK_XD_LED=1;WORK_PX_LED=1;WORK_TS_LED=0;//脱水LED亮CS_LED=0;//出水LED亮motor_fr_run();//电机开启   }else {sys_ctrl.run_sta=3;//脱水结束sys_ctrl.sec=0;CS_LED=1;//出水LED灭motor_stop();//电机关闭BEEP=0;//结束时蜂鸣器报警提示delay_ms(500);BEEP=1;sys_parm_init();//重新初始化参数}      }   }//如果水位高于最大值,报警指示if(sys_ctrl.level>LEVEL_ALARM_VALUE){motor_stop();//电机关闭beep_alarm(100,10);}         }//如果工作模式是甩干else if(sys_ctrl.mode==5){CS_LED=0;//出水LED亮motor_fr_run();//电机开启TR1=1;//开启定时器}//如果工作模式是烘干else if(sys_ctrl.mode==6){TR1=1;//开启定时器//如果温度低于设定温度,开启加热if(sys_ctrl.temp<sys_ctrl.set_temp)   JR_LED=0;//加热LED亮//如果温度高于设定温度,关闭加热elseJR_LED=1;//加热LED灭        }   }break;}
}//应用控制系统
void appdemo_show(void)
{sys_parm_init();//系统参数初始化  time1_init();while(1){sys_data_get();//系统数据采集sys_data_show();//系统数据显示sys_data_set();//系统参数设置sys_ctrl_fun();//系统控制   }
}

三、实验现象

B站演示视频:https://space.bilibili.com/444388619





联系作者

专注于51单片机、STM32、国产32、DSP、Proteus、ardunio、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。

【Proteus仿真】【51单片机】洗衣机控制系统设计相关推荐

  1. Proteus仿真51单片机生日快乐音乐播放器

    实验名称:基于51单片机音乐播放器 实验目的: 声音的音调不同是因为声音的频率不同造成的.那么,就可以通过单片机发送不同频率的脉冲信号给蜂鸣器,来达到让蜂鸣器发出不同音调声音的目的.不同频率的脉冲信号 ...

  2. 使用proteus仿真51单片机来实现十字路口红绿灯

    一.实验内容 1.需要仿真的元件:51单片机,一个动态显示的双数码管,六个LED灯. 2.实验要求:做一个十字路口红绿灯,每一向各一个,红绿灯要求能够按照通行的要求来亮灯.南北向红绿灯,红灯亮60秒, ...

  3. 基于51单片机无线门铃控制系统设计(毕设课设)

    硬件构成:单片机+最小系统+放音模块+无线模块+按键模块 本设计基于STC89C51/52单片机 1.采用三极管驱动放音喇叭: 2.采用315M无线模块实现无线的连接,实际应用中更易安装,是家居首选: ...

  4. Proteus仿真--51单片机最小系统

    1.单片机的最小系统是由组成单片机系统必需的一些元件构成的,除了单片机之外,还需要包括电源供电电路.时钟电路.复位电路. 下面着重介绍时钟 电路和复位电路. 1)时钟电路 单片机工作时,从取指令到译码 ...

  5. proteus仿真-51单片机定时器程序

    定时器0初始化和定时器中断函数 void Timer0Init() {TMOD|=0x01;//0000 0001,最后2位-工作方式的选择,这里选择16位定时器'01'TH0 = (65536-10 ...

  6. 【Proteus仿真】51单片机洗衣机模拟控制程序

    [Proteus仿真]51单片机洗衣机模拟控制程序 Proteus仿真 Proteus仿真说明 1. 启动洗衣仿真后,首先选择洗衣模式, 2. 调节液位传感器的可调电阻,模拟洗衣前的进水过程. 3. ...

  7. 51单片机+步进电机控制正反转8拍控制+Proteus仿真

    51单片机+步进电机控制正反转8拍控制+Proteus仿真 更新内容(2022年5月2日) 调整了Proteus仿真接线问题, 程序代码 急停放在了外部中断0里面实现. #include<reg ...

  8. 【Proteus仿真】51单片机+按键控制步进电机驱动+LCD1602显示

    [Proteus仿真]51单片机+按键控制步进电机驱动+LCD1602显示 Proteus仿真 在Proteus当中,步进电机选取的不同,接线的顺序不同,为了避免在接线出错,将里面的两种步进电机都选择 ...

  9. 51单片机控制的LOVE心形创意彩灯 PROTEUS 和51单片机教程(附仿真文件+源代码)

    51单片机控制的LOVE心形创意彩灯 PROTEUS 和51单片机教程附仿真文件截图 单片机控制的LOVE心形创意彩灯 参考源代码 ORG 0000H LJMP START ORG 0030H ;初始 ...

最新文章

  1. 全栈AI工程师指南,DIY一个识别手写数字的web应用
  2. 简单实用的php分页类(多种分页方式)
  3. 切换alwayson的时候失败
  4. 学习EF4的一些基础参考资料
  5. [BZOJ 1001] 狼抓兔子
  6. 证明kruskal算法求解图的最小生成树具有贪心选择性质_将并查集应用在图论中的最小生成树算法——Kruskal...
  7. 【阿里妈妈数据科学系列】第五篇:实验指标设定方法与指标体系构建
  8. SRM 698 div1 RepeatString
  9. CentOS下搭建DNS服务器
  10. python 多窗口编辑
  11. ACM-树重心的性质及动态维护
  12. 如何不用密钥破解tableau
  13. 基于Matlab系统的HVDC系统
  14. 中国日期转化标准日期(YYYY-MM-dd)
  15. 【DFS题型九/双向DFS】王子救公主
  16. 天助自助者----与君共勉
  17. 运行tomcat7w.exe,提示:指定的服务未安装unable to open the service tomcat7
  18. MoR03r's Blog
  19. 能够语义化的编写html文档,HTML语义化 - 写给未来的自己 - OSCHINA - 中文开源技术交流社区...
  20. 被称为“核弹级别”的OpenSSL漏洞

热门文章

  1. 亚马逊测评技术IP详解篇
  2. oracle不同表空间怎么切换,oracle undo表空间的切换
  3. 赛道爆发,玩家崛起,边缘计算CDN革了谁的命?
  4. ClickHouse 在爱奇艺实时数仓的应用
  5. Windows强制删除包含病毒或潜在垃圾软件的文件
  6. api接口签名验证(MD5)
  7. 图片增强器 ImageDataGenerator
  8. 智慧养殖物联网远程管控系统平台
  9. 张向东 (中国万网总裁)
  10. 【解决】农业银行如何取消短信通知