AT89C51单片机实现全自动洗衣机功能的设计方案

发布时间:2023-03-21  

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

AT89C51单片机实现全自动洗衣机功能的设计方案

#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

}


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    电流表等;   消费类电子产品:洗衣机、电冰箱、空调机、手机等;   凡是与控制或简单计算有关的电子设备都可以用单片机来实现,再根据具体实际情况选择不同性能的单片机,如:atmel,stc,pic,avr,凌阳......
    介绍 51单片机简51单片是一种低功耗、高性能CMOS-8位微控制器,拥有灵巧的8位CPU和可编程Flash,使得51单片机为众多嵌入式控制应用系统提供灵活、高效的解决方案。 本设......
    在工业生产中和生活中得到广泛的应用。就以洗衣机为例,半自动洗衣机之所以能进化成全自动洗衣机就是得益于单片机的发展。STC89C52单片机51系列中的一款(因为51是一款标杆性产品,后面出现了很多按照51......
    基于51单片机按键控制喇叭发出多种声音;具体实现功能: 51单片机按键控制喇叭发出多种声音。 设计介绍 51单片机简51单片是一种低功耗、高性能CMOS-8位微控制器,具有8K可编......
    开发板与封装样式 单片机开发板与封装样式 二、单片机能做什么? 单片机主要用于嵌入式应用,大量用于自动控制的电子设备,如手机,照相机,微波炉,洗衣机等。同时单片机也可用于任何需要决策或系统监控的应用程序。有许多单片机......
    是什么? 单片机简单来说就是一个可以用来做智能电子产品的芯片,具体看下图。 大家每天有90%的几率能接触到基于单片机这种芯片开发的产品。 比如说家里的电饭煲、电磁炉、微波炉、空调、洗衣机内部其实都是使用单片机......
    按要求变为高或低电平。即然我们要控制1脚,就得给它起个名字,总不能就叫它一脚吧?叫它什么名字呢?设计51芯片的INTEL公司已经起好了,就叫它P1.0,这是规定,不能由我们来更改。 图1 单片机简易......
    者可以灵活地控制这些功能模块,实现各种应用需求。   51单片机的应用非常广泛,包括但不限于以下领域:   家电控制:使用51单片机可以控制家电设备,如空调、电视、洗衣机、冰箱等,实现功能的智能化和集成化。   工业控制:使用51......
    AT89C51单片机实现全自动洗衣机功能的设计方案;51单片机洗衣机控制板及C语言程序,该控制板单片机采用AT89C51单片机,所设计全自动洗衣机功能有:标准洗衣、经济洗衣、单独洗衣以及排水四种洗衣......
    51单片机和52单片机区别是什么?51仿真器有必要买吗?;我们在开发单片机程序的时候,经常会碰到编译没有错误,程序代码反复的检查,但就是找不到问题所在,不知道问题到底出现在哪里了? 这个......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>