洗衣机洗涤部分c语言程序,51单片机洗衣机控制板及C语言程序

51单片机洗衣机控制板及C语言程序,该控制板单片机采用AT89C51单片机,所设计全自动洗衣机功能有:标准洗衣、经济洗衣、单独洗衣以及排水四种洗衣等四种方式,有强洗、弱洗及运行/暂停、显示及报警功能,程序利用利用Protues仿真软件观察洗衣机的运行状态和过程。整个设计能达到预想的设计效果。

0bb368edd67e631deff6f1f1e91d3f2c.png

#include 'reg51.h'

#define uchar unsigned char

#define uint unsigned int

#define Enable(); EA=1;

#define Disable(); EA=0;

#define BIAOZHUN 0

#define JINGJI 1

#define DANDU 2

#define PAISHUI 3

#define QIANGXI 0

#define RUOXI 1

#define T_JinShui 240 //4min*60s

#define T_PaiShui 60 //1min*60s

#define T_XiDi 360 //6min*60s

#define T_PiaoXi_1 240 //4min*60s

#define T_PiaoXi_2 120 //2min*60s

#define T_TuoShui 120 //2min*60s

#define ZHENGZHUAN 0

#define STOP 1

#define FANZHUAN 2

#define ZhengZhuan(); PIN_Motor_A = 0; PIN_Motor_B = 1;

#define Stop(); PIN_Motor_A = 1; PIN_Motor_B = 1;

#define FanZhuan(); PIN_Motor_A = 1; PIN_Motor_B = 0;

#define ZanTing(); ET0 = 0; ET1 = 0; Stop();

#define JiXu(); ET0 = 1; ET1 = 1;

#define flag_Ok (flag_JinShui||flag_PaiShui||flag_XiDi||flag_PiaoXi||flag_TuoShui)

sbit LED_BiaoZhun = P1^0; //标准程序显示灯

sbit LED_JingJi = P1^1; //经济程序显示灯

sbit LED_DanDu = P1^2; //单独程序显示灯

sbit LED_PaiShui = P1^3; //排水程序显示灯

sbit LED_QiangXi = P1^4; //强洗状态灯

sbit LED_RuoXi = P1^5; //弱洗状态灯

sbit LED_XiDi = P1^6; //洗涤状态灯

sbit LED_PiaoXi = P1^7; //漂洗状态灯

sbit LED_TuoShui = P2^0; //脱水状态灯

sbit PIN_BaoJing = P2^1; //报警喇叭

sbit PIN_JinShui = P2^2; //进水控制

sbit PIN_PaiShui = P2^3; //排谁控制

sbit PIN_Motor_A = P2^4; //电机脚A

sbit PIN_Motor_B = P2^5; //电机脚B

sbit K_SEL_ChengXu = P3^0; //选择程序键

sbit K_SEL_QiangRuo = P3^1; //选择强弱键

sbit p32 = P3^2; //

sbit p33 = P3^3; //

sbit SW_ShuiWei = P3^6; //水位开关

sbit SW_AnQuan = P3^7; //安全开关

void Programme_PaiShui(void);

uchar flag_SEL_ChengXu; //默认为标准程序,

bit flag_SEl_QiangRuo; //默认为强洗,1为弱洗

bit flag_Run; //运行标志,1为运行

bit flag_JinShui; //进水标志,1为进水

bit flag_PaiShui; //排水标志,1为排水

bit flag_XiDi; //置洗涤标志

bit flag_PiaoXi; //置漂洗标志

bit flag_TuoShui; //脱水标志

bit flag_BaoJing; //报警标志

uchar _50ms; //每50ms加一次的变量

uint s; //秒

uint T_S; //定时总时间

uchar T_Motor; //电机控制时间

void Delay_10ms(uint T1)

{ uint t1,t2;

for(t1=0;t1

for(t2=0;t2<1250;t2++);//10ms

}

void Pin_Init(void)

{ LED_BiaoZhun = 0; //默认为标准程序,灯亮

LED_JingJi = 1; //经济程序显示灯,灭

LED_DanDu = 1; //单独程序显示灯,灭

LED_PaiShui = 1; //排水程序显示灯,灭

LED_QiangXi = 0; //默认为强洗状态,灯亮

LED_RuoXi = 1; //弱洗状态灯,灭

LED_XiDi = 1; //洗涤状态灯,运行后灯亮

LED_PiaoXi = 1; //漂洗状态灯,运行后灯亮

LED_TuoShui = 1; //脱水状态灯,运行后灯亮

PIN_BaoJing = 1; //报警喇叭,不叫

PIN_JinShui = 1; //进水控制,关

PIN_PaiShui = 1; //排谁控制,关

PIN_Motor_A = 1; //电机脚A,不走

PIN_Motor_B = 1; //电机脚B,不走

}

void ExInt_Init(void)

{ IT0 = 1;

EX0 = 1;

IT1 = 1;

EX1 = 1;

}

void Timer0_Init(void) //其中没ET0是为以后控制暂停用的

{ TMOD = TMOD | 0X01; //定时方式1

TH0 = 0X3C; //50ms

TL0 = 0XB0;

TR0 = 1;

_50ms = 0;

s = 0;

}

void Timer1_Init(void) //其中没ET1是为以后控制暂停用的

{ TMOD = TMOD | 0X10; //定时方式1

TH1 = 0X3C; //50ms

TL1 = 0XB0;

}

void T_Motor_Ctl(uchar t1,uchar t2,uchar t3)

{ if(!flag_SEl_QiangRuo)//强洗

T_Motor = t1;

if(flag_SEl_QiangRuo)//弱洗

T_Motor = t2;

if(flag_TuoShui) //脱水

T_Motor = t3;

}

void Motor_Init(void)

{ ZhengZhuan();

T_Motor_Ctl(4,3,5);

}

void No_BaoJing(void)

{ flag_BaoJing= 0; //置报警标志

PIN_BaoJing = 1; //报警喇叭

TR1 = 0;

//而进水、排水已没时间限制了

}

void int0(void) interrupt 0

{

if(!p32)

{ Delay_10ms(1); //延时10ms左右,去抖动

if(!p32)

{ if(!flag_Run)

flag_Run = 1; //置运行标志

else if(flag_BaoJing)

No_BaoJing(); //解除报警

else if(flag_Ok)

{ static bit flag_ZanTing;

flag_ZanTing = ~flag_ZanTing;

if(flag_ZanTing)

{ZanTing();}//必须加{}

else

{JiXu();} //必须加{}

}//end else

}//end if(!p32) 2

}//end if(!p32) 1

}

void BaoJing(void)

{ flag_BaoJing= 1; //置报警标志

TR0 = 0;

TR1 = 1;

}

void Ok_Timer(void)

{ s = 0;

if(flag_JinShui || flag_PaiShui) //进水中~、排水中~

{ BaoJing(); //报警程序

}//end if(flag_JinShui || flag_PaiShui)

else

{ flag_XiDi = 0; //清洗涤标志

flag_PiaoXi = 0; //清漂洗标志

flag_TuoShui= 0; //清脱水标志

Stop();

}//end else

}

void Motor(void)

{ static uchar s_Motor;

s_Motor++;

if(s_Motor==T_Motor)

{ static uchar Motors;

s_Motor = 0;

Motors++;

if(Motors==3)

Motors = 0;

switch(Motors)

{ case ZHENGZHUAN : ZhengZhuan();

T_Motor_Ctl(4,3,5);

break;

case STOP : Stop();

T_Motor_Ctl(1,2,2);

break;

case FANZHUAN : FanZhuan();

T_Motor_Ctl(4,3,5);

break;

default : break;

}//end switch

}//end if

}

void Timer0(void) interrupt 1

{

TR0 = 0; //停止计数

TH0 = 0X3C; //重装定时器值

TL0 = 0XB0;

TR0 = 1;

_50ms++;

if(_50ms == 20) //1s到

{ _50ms = 0;

s++;

if(s == T_S) //定时到

Ok_Timer();

if(flag_XiDi || flag_PiaoXi || flag_TuoShui)

Motor(); //电机控制程序

}//end if(_50ms == 20)

}//end Timer0()

void int1(void) interrupt 2

{ if(!p33)

{ Delay_10ms(1); //延时10ms左右,去抖动

if(!p33)

{

}//end if(!p33) 2

}//end if(!p33) 1

}

void Timer1(void) interrupt 3

{ static uchar _50ms; //每50ms加一次的变量

TR1 = 0; //停止计数

TH1 = 0X3C; //重装定时器值

TL1 = 0XB0;

TR1 = 1;

_50ms++;

if(_50ms == 14) //0.7s到

{ _50ms = 0;

if(flag_XiDi) //洗涤中~

LED_XiDi = ~LED_XiDi; //洗涤状态灯闪烁

if(flag_PiaoXi) //漂洗中~

LED_PiaoXi = ~LED_PiaoXi; //漂洗状态灯闪烁

if(flag_TuoShui) //脱水中~

LED_TuoShui = ~LED_TuoShui; //脱水状态灯闪烁

if(flag_BaoJing)

PIN_BaoJing = ~PIN_BaoJing; //报警

}//end if(_50ms == 14)

}

void SEL_ChengXU(void)

{ if(!K_SEL_ChengXu) //程序选择键

{ Delay_10ms(1); //延时10ms左右,去抖动

if(!K_SEL_ChengXu)

{ while(!K_SEL_ChengXu);

flag_SEL_ChengXu++;

if(flag_SEL_ChengXu==4)

flag_SEL_ChengXu = 0;

switch(flag_SEL_ChengXu)

{ case BIAOZHUN : LED_BiaoZhun= 0; //亮

LED_JingJi = 1; //灭

LED_DanDu = 1; //灭

LED_PaiShui = 1; //灭

break;

case JINGJI : LED_BiaoZhun= 1;

LED_JingJi = 0;

LED_DanDu = 1;

LED_PaiShui = 1;

break;

case DANDU : LED_BiaoZhun= 1;

LED_JingJi = 1;

LED_DanDu = 0;

LED_PaiShui = 1;

break;

case PAISHUI : LED_BiaoZhun= 1;

LED_JingJi = 1;

LED_DanDu = 1;

LED_PaiShui = 0;

break;

default : break;

}//end switch

}//end if(!K_Sel_ChengXu) 2

}//end if(!K_Sel_ChengXu) 1

}//END

void SEL_QiangRuo(void)

{ if(!K_SEL_QiangRuo) //强弱选择键

{ Delay_10ms(1); //延时10ms左右,去抖动

if(!K_SEL_QiangRuo)

{ while(!K_SEL_QiangRuo);

flag_SEl_QiangRuo = ~flag_SEl_QiangRuo;

if(!flag_SEl_QiangRuo)

{ LED_QiangXi = 0; //强洗状态,灯亮

LED_RuoXi = 1; //弱洗状态灯,灭

}//end if(!flag_SEl_QiangRuo)

else

{ LED_QiangXi = 1; //强洗状态,灯亮

LED_RuoXi = 0; //弱洗状态灯,灭

}//end else

}//end if(!K_SEL_QiangRuo) 2

}//end if(!K_SEL_QiangRuo) 1

}

void JinShui(void)

{ PIN_JinShui = 0;

flag_JinShui = 1;

TR1 = 0;

Timer0_Init();

T_S = T_JinShui;

while(SW_ShuiWei);

PIN_JinShui = 1;

flag_JinShui = 0;

TR0 = 0;

TF0 = 0;

}

void PaiShui(void)

{ PIN_PaiShui = 0;

flag_PaiShui = 1;

TR1 = 0;

Timer0_Init();

T_S = T_PaiShui;

while(!SW_ShuiWei);

TR0 = 0;

TF0 = 0;

Delay_10ms(500);//延时50s,经验值5000

PIN_PaiShui = 1;

flag_PaiShui = 0;

}

void XiDi(void)

{ flag_XiDi = 1;

TR1 = 1;

Timer0_Init();

T_S = T_XiDi;

Motor_Init();

while(flag_XiDi);

TR1 = 0;

LED_XiDi = 1;

}

void PiaoXi(uchar t)

{ flag_PiaoXi = 1;

TR1 = 1;

Timer0_Init();

T_S = t;

Motor_Init();

while(flag_PiaoXi);

}

void BaoHu_GaiKai(void)

{ if(SW_AnQuan) //盖开

{ ZanTing();

LED_TuoShui = 0;

}//end if

else

{ JiXu(); //电机不用管,最多5s不转

}//end else

}

void TuoShui(void)

{ flag_TuoShui = 1;

PIN_PaiShui = 0;

TR1 = 1;

Timer0_Init();

T_S = T_TuoShui;

Motor_Init();

while(flag_TuoShui)

{ BaoHu_GaiKai();

}//end while

TR1 = 0;

LED_TuoShui = 1; //而出水阀一直开着

}

void Programme_BiaoZhun(void)

{ LED_XiDi = 0; //洗涤状态灯

LED_PiaoXi = 0; //漂洗状态灯

LED_TuoShui = 0; //脱水状态灯

JinShui();

XiDi();

PaiShui();

JinShui();

PiaoXi(T_PiaoXi_1);//4min*60s//4*60

PaiShui();

JinShui();

PiaoXi(T_PiaoXi_2);//2min*60s//2*60

Programme_PaiShui();

}

void Programme_JingJi(void)

{ TR1 = 0;

LED_XiDi = 0; //洗涤状态灯

LED_PiaoXi = 0; //漂洗状态灯

LED_TuoShui = 0; //脱水状态灯

JinShui();

XiDi();

PaiShui();

JinShui();

PiaoXi(T_PiaoXi_1);//4min*60s

Programme_PaiShui();

}

void Programme_DanDu(void)

{ LED_XiDi = 0; //洗涤状态灯

LED_PiaoXi = 1; //漂洗状态灯

LED_TuoShui = 1; //脱水状态灯

JinShui();

XiDi();

}

void Programme_PaiShui(void)

{ LED_XiDi = 1; //洗涤状态灯

LED_PiaoXi = 1; //漂洗状态灯

LED_TuoShui = 0; //脱水状态灯

PaiShui();

TuoShui();

}

void main()

{

Pin_Init(); //管脚初始化

ExInt_Init(); //外中断初始化

Timer1_Init();

ET0 = 1;

ET1 = 1;

Enable(); //开总中断

while(1)

{ if(!flag_Run) //运行前按键才有效

{ SEL_ChengXU(); //程序选择程序

SEL_QiangRuo(); //强弱选择程序

}//end if(!flag_Run)

if(flag_Run)//用else不,按启动键后,有时没反映????//

{ PIN_PaiShui = 1; //关排水阀

switch(flag_SEL_ChengXu)

{ case BIAOZHUN : Programme_BiaoZhun(); //标准洗衣程序

break;

case JINGJI : Programme_JingJi(); //经济洗衣程序

break;

case DANDU : Programme_DanDu(); //单独洗衣程序

break;

case PAISHUI : Programme_PaiShui(); //排水洗衣程序

break;

default : break;

}//end switch

}//end esle

flag_Run = 0;

}//end while

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/257376.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

犯人释放的C语言程序,C语言的自动关机程序和一个用来整人的小程序

可以用C语言中的system()函数来实现系统的自动关机程序&#xff0c;可以设置多长时间后将自动关机。当然马上关机也是可以的&#xff0c;我们就可以恶搞别人计算机了(你事先得知道怎么解)&#xff0c;将写好的自动关机程序复制到别人电脑&#xff0c;然后将可执行的文件设为开机…

图解MapReduceMapReduce整体流程图

1.图解MapReduceMapReduce整体流程图 并行读取文本中的内容&#xff0c;然后进行MapReduce操作 Map过程&#xff1a;并行读取三行&#xff0c;对读取的单词进行map操作&#xff0c;每个词都以<key,value>形式生成 reduce操作是对map的结果进行排序&#xff0c;合并&#…

阿里云推出CloudDBA,解决数据库性能优化和问题诊断难题

问题诊断(trouble shooting) 和 性能优化(performance tunning) 一直都是数据库领域的专业问题&#xff0c;需要资深DBA的专业技能才能胜任解决&#xff0c;但这样的人才是稀缺的&#xff0c;无法及时满足大部分的企业紧急需求。如果有一款产品能够在大多数情况下&#xff0c;用…

初探ArrayList之删除

1.返回删除元素的删除方法 public E remove(int index) {rangeCheck(index);modCount;//记录修改次数的变量E oldValue elementData(index);//根据数组下标拿到指定元素int numMoved size - index - 1;//计算移动位数if (numMoved > 0)System.arraycopy(elementData, inde…

java的三大特性,封装,继承,多态

封装 Java代码 /** * 所谓封装&#xff0c;就是将对象具有的成员变量和成员函数包装和隐藏起来&#xff0c;让外界无法直接使用&#xff0c; * 被封装的成员只能通过某些特定的方式才能访问。 * 实现封装有两个步骤&#xff1a; * 1、将不能暴露的成员隐藏起来&#x…

GetModuleHandle(NULL)获取当前DLL模块基址?

做一项目想在DLL内部代码实现获取本DLL的模块基址&#xff0c;而且不知道本DLL名称 最简单的方法是想到GetModuleHandle(NULL)&#xff0c;是否可以呢? 参看http://blog.csdn.net/guzhou_diaoke/article/details/8826558到的答案是否 自己尝试了一下: DLL代码(testDll): BOOL …

【评分】第三次作业-团队展示

【评分】第三次作业-团队展示 总结 【2017-10-10】更新&#xff1a; 分数映射至 [1,2] 分 【注意】&#xff1a; 为了保护大家隐私&#xff0c;以后发表博客&#xff1a; 涉及到学号时&#xff0c;仅提供后三位涉及到姓名时&#xff0c;仅提供名&#xff08;省略姓&#xff09;…

【朴灵评注】JavaScript 运行机制详解:再谈Event Loop

PS: 我先旁观下大师们的讨论&#xff0c;得多看书了~别人说的&#xff1a;“看了一下不觉得评注对到哪里去&#xff0c;只有吹毛求疵之感。 比如同步异步介绍&#xff0c;本来就无大错&#xff1b;比如node图里面的OS operation&#xff0c;推敲一下就可以猜到那是指同步操作&a…

Python版——博客网站四 编写日志创建页

2019独角兽企业重金招聘Python工程师标准>>> 开源地址&#xff1a;https://github.com/leebingbin/Python3.WebAPP.Blog 单从编码来说&#xff0c;WebApp开发真正困难的地方在于编写前端页面。前端页面需要混合HTML、CSS和JavaScript&#xff0c;如果对这三者没有深…

2017—2018 实验报告:实验一

实验一&#xff1a;实验报告 课程&#xff1a;程序设计与数据结构 班级&#xff1a; 1623 姓名&#xff1a; 张旭升 学号&#xff1a;20162329 指导教师&#xff1a;娄嘉鹏 王志强 实验日期&#xff1a;9月25日 实验密级&#xff1a; 非密级 预习程度&#xff1a; 已预习 必修/…

iOS开发 - Swift实现清除缓存功能

前言: 开发移动应用时&#xff0c;请求网络资源是再常见不过的功能。如果每次都去请求&#xff0c;不但浪费时间&#xff0c;用户体验也会变差&#xff0c;所以移动应用都会做离线缓存处理&#xff0c;其中已图片缓存最为常见。 但是时间长了&#xff0c;离线缓存会占用大量的…

如何开启IIS7以上的“IIS6管理兼容性”

护卫神PHP套件的安装&#xff0c;需要开启“IIS6管理兼容性”&#xff0c; 那么&#xff0c;如何开启IIS7、IIS7.5、IIS8.0的IIS6兼容模式呢&#xff1f; 设置的时候&#xff0c;请参照如下截图&#xff1a; 本文转自黄聪博客园博客&#xff0c;原文链接&#xff1a;http://www…

ssh服务端口转发详解

端口转发的概念和应用什么是端口转发呢&#xff0c;我们知道&#xff0c;SSH 会自动加密和解密所有 SSH 客户端与服务端之间的网络数据。但是&#xff0c;SSH 还同时提供了一个非常有用的功能&#xff0c;这就是端口转发。它能够将其他 TCP 端口的网络数据通过 SSH 链接来转发&…

布局管理器android,Android课程---布局管理器之相对布局(一)

下面示例的是在父容器里如何设置按钮的位置&#xff0c;难度&#xff1a;***&#xff0c;重点是找到一个主按钮&#xff0c;设置它的id&#xff0c;然后根据它来设置其他按钮在父容器的位置。代码示例&#xff1a;android:layout_width"match_parent"android:layout_…

【Cocos2d-Js基础教学 入门目录】

本教程视地址频在&#xff1a;九秒课堂 完全免费从接触Cocos2dx-Js以来&#xff0c;它的绽放的绚丽让我无法不对它喜欢。我觉得Js在不断带给我们惊喜&#xff1b;在开发过程中&#xff0c;会大大提升我们对原型开发的利用率&#xff0c;使用Js语言做游戏开发&#xff0c;使游戏…

Hammer.js移动端触屏框架的使用

hammer.js是一个多点触摸手势库&#xff0c;能够为网页加入Tap、Double Tap、Swipe、Hold、Pinch、Drag等多点触摸事件&#xff0c;免去自己监听底层touchstart、touchmove、touchend事件并且写一大堆判断逻辑的痛苦。hammer.js不但支持触摸屏设备的浏览器&#xff0c;在桌面浏…

Android实现笔记本修改功能,安卓12第二个开发者预览版推出:UI、功能有所改进...

最近谷歌正式推出了Android 12的第二个开发者预览版&#xff0c;带来了很多UI和功能上的改进。首先最明显的变化应该是锁屏界面和下拉通知栏的音乐播放器。此前这部分UI的配色一直采用的是音乐专辑的主色调&#xff0c;但在Android 12上&#xff0c;这个配色变成了系统的强调色…

C语言中Union类型的使用方法

转自&#xff1a;http://blog.csdn.net/feimor/article/details/6858103 使用C语言时&#xff0c;常常使用struct&#xff0c;对于union类型却几乎没有用过&#xff0c;只知道它是联合类型&#xff0c;各字段共享一块内存&#xff0c;实际应用中却不知道它的具体用途。 今天读《…

阿里启动NASA计划创造新经济核心科技

本文讲的是阿里启动"NASA"计划创造新经济核心科技【IT168 资讯】2017年3月9日&#xff0c;阿里巴巴集团在杭州召开首届技术大会&#xff0c;动员全球两万多名科学家和工程师投身“新技术战略”。会议透露&#xff0c;阿里巴巴正在启动一项代号“NASA”的计划&#xf…

android one x3怎么样,618旗舰手机怎么选,看完这篇文章,你就会知道

转眼间&#xff0c;2021年即将过半&#xff0c;一年一度的年中购物狂欢节618就要到来了。我已经迫不及待了。毕竟在618年中大促的时候&#xff0c;各家厂商都有力度非常大的活动。而且也有很多小伙伴一直在观望&#xff0c;想要在618的时候给自己换一款手机。说实话&#xff0c…