【Proteus仿真】【51单片机】洗衣机控制系统设计
文章目录
- 一、功能简介
- 二、软件设计
- 三、实验现象
- 联系作者
一、功能简介
本项目使用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单片机】洗衣机控制系统设计相关推荐
- Proteus仿真51单片机生日快乐音乐播放器
实验名称:基于51单片机音乐播放器 实验目的: 声音的音调不同是因为声音的频率不同造成的.那么,就可以通过单片机发送不同频率的脉冲信号给蜂鸣器,来达到让蜂鸣器发出不同音调声音的目的.不同频率的脉冲信号 ...
- 使用proteus仿真51单片机来实现十字路口红绿灯
一.实验内容 1.需要仿真的元件:51单片机,一个动态显示的双数码管,六个LED灯. 2.实验要求:做一个十字路口红绿灯,每一向各一个,红绿灯要求能够按照通行的要求来亮灯.南北向红绿灯,红灯亮60秒, ...
- 基于51单片机无线门铃控制系统设计(毕设课设)
硬件构成:单片机+最小系统+放音模块+无线模块+按键模块 本设计基于STC89C51/52单片机 1.采用三极管驱动放音喇叭: 2.采用315M无线模块实现无线的连接,实际应用中更易安装,是家居首选: ...
- Proteus仿真--51单片机最小系统
1.单片机的最小系统是由组成单片机系统必需的一些元件构成的,除了单片机之外,还需要包括电源供电电路.时钟电路.复位电路. 下面着重介绍时钟 电路和复位电路. 1)时钟电路 单片机工作时,从取指令到译码 ...
- proteus仿真-51单片机定时器程序
定时器0初始化和定时器中断函数 void Timer0Init() {TMOD|=0x01;//0000 0001,最后2位-工作方式的选择,这里选择16位定时器'01'TH0 = (65536-10 ...
- 【Proteus仿真】51单片机洗衣机模拟控制程序
[Proteus仿真]51单片机洗衣机模拟控制程序 Proteus仿真 Proteus仿真说明 1. 启动洗衣仿真后,首先选择洗衣模式, 2. 调节液位传感器的可调电阻,模拟洗衣前的进水过程. 3. ...
- 51单片机+步进电机控制正反转8拍控制+Proteus仿真
51单片机+步进电机控制正反转8拍控制+Proteus仿真 更新内容(2022年5月2日) 调整了Proteus仿真接线问题, 程序代码 急停放在了外部中断0里面实现. #include<reg ...
- 【Proteus仿真】51单片机+按键控制步进电机驱动+LCD1602显示
[Proteus仿真]51单片机+按键控制步进电机驱动+LCD1602显示 Proteus仿真 在Proteus当中,步进电机选取的不同,接线的顺序不同,为了避免在接线出错,将里面的两种步进电机都选择 ...
- 51单片机控制的LOVE心形创意彩灯 PROTEUS 和51单片机教程(附仿真文件+源代码)
51单片机控制的LOVE心形创意彩灯 PROTEUS 和51单片机教程附仿真文件截图 单片机控制的LOVE心形创意彩灯 参考源代码 ORG 0000H LJMP START ORG 0030H ;初始 ...
最新文章
- 全栈AI工程师指南,DIY一个识别手写数字的web应用
- 简单实用的php分页类(多种分页方式)
- 切换alwayson的时候失败
- 学习EF4的一些基础参考资料
- [BZOJ 1001] 狼抓兔子
- 证明kruskal算法求解图的最小生成树具有贪心选择性质_将并查集应用在图论中的最小生成树算法——Kruskal...
- 【阿里妈妈数据科学系列】第五篇:实验指标设定方法与指标体系构建
- SRM 698 div1 RepeatString
- CentOS下搭建DNS服务器
- python 多窗口编辑
- ACM-树重心的性质及动态维护
- 如何不用密钥破解tableau
- 基于Matlab系统的HVDC系统
- 中国日期转化标准日期(YYYY-MM-dd)
- 【DFS题型九/双向DFS】王子救公主
- 天助自助者----与君共勉
- 运行tomcat7w.exe,提示:指定的服务未安装unable to open the service tomcat7
- MoR03r's Blog
- 能够语义化的编写html文档,HTML语义化 - 写给未来的自己 - OSCHINA - 中文开源技术交流社区...
- 被称为“核弹级别”的OpenSSL漏洞