洗衣機洗滌部分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.pswp.cn/news/257376.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/257376.shtml
英文地址,請注明出處:http://en.pswp.cn/news/257376.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據存儲

一、NSCoding &#xff1a; 使用NSCoding需要遵守<NSCoding> 保存&#xff1a; /** * 將某個對象寫入文件時會調用 * 在這個方法中說清楚哪些屬性需要存儲 */ MJStudent.m - (void)encodeWithCoder:(NSCoder *)encoder { [encoder encodeObject:self.no forKey:"…

犯人釋放的C語言程序,C語言的自動關機程序和一個用來整人的小程序

可以用C語言中的system()函數來實現系統的自動關機程序&#xff0c;可以設置多長時間后將自動關機。當然馬上關機也是可以的&#xff0c;我們就可以惡搞別人計算機了(你事先得知道怎么解)&#xff0c;將寫好的自動關機程序復制到別人電腦&#xff0c;然后將可執行的文件設為開機…

[mysql] linux下使用yum安裝mysql

From: http://www.2cto.com/database/201207/141878.html linux下使用yum安裝mysql1、安裝查看有沒有安裝過&#xff1a;yum list installed mysql*rpm -qa | grep mysql*查看有沒有安裝包&#xff1a;yum list mysql*安裝mysql客戶端&#xff1a;yum install mysql安裝mysql 服…

圖解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;用…

c語言程序設計學生信息管理系統代碼,c語言程序設計學生成績管理系統源代碼.pdf...

c語言程序設計 學 生 成 績 管 理 系 統 源代碼#include#include#include#include#define MAX 80int a;typedef struct /*定義結構體數組*/{ char num[10];char name[20];int score;} Student;Student stu[MAX];int menu_select(){char c;do{system("cls");/*清屏*/p…

初探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…

UESTC_秋實大哥與花 2015 UESTC Training for Data StructuresProblem B

B - 秋實大哥與花 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit Status秋實大哥是一個儒雅之人&#xff0c;晝聽笙歌夜醉眠&#xff0c;若非月下即花前。 所以秋實大哥精心照料了很多花朵。現在所有的花朵排成了一行&#xff…

java的三大特性,封裝,繼承,多態

封裝 Java代碼 /** * 所謂封裝&#xff0c;就是將對象具有的成員變量和成員函數包裝和隱藏起來&#xff0c;讓外界無法直接使用&#xff0c; * 被封裝的成員只能通過某些特定的方式才能訪問。 * 實現封裝有兩個步驟&#xff1a; * 1、將不能暴露的成員隱藏起來&#x…

銀行家算法實驗報告c語言版,銀行家算法實驗報告C語言版.doc

《操作系統》課程綜合性實驗報告姓名&#xff1a; 學號&#xff1a; 2016 年 11 月 20 日實驗題目進程調度算法程序設計一、實驗目的通過對安全性算法和銀行家算法的模擬&#xff0c;進一步理解資源分配的基本概念&#xff0c;加深對資源申請&#xff0c;資源分配(銀行家算法)以…

GetModuleHandle(NULL)獲取當前DLL模塊基址?

做一項目想在DLL內部代碼實現獲取本DLL的模塊基址&#xff0c;而且不知道本DLL名稱 最簡單的方法是想到GetModuleHandle(NULL)&#xff0c;是否可以呢? 參看http://blog.csdn.net/guzhou_diaoke/article/details/8826558到的答案是否 自己嘗試了一下: DLL代碼(testDll): BOOL …

DataTable是否存在某個列的判斷

使用 DataTable.Columns.Contains方法可以判斷某個列名是否存在于某個DataTable中 //添加模擬數據 DataTable t new DataTable(); DataColumn col new DataColumn("aaa"); t.Columns.Add(col); col new DataColumn("bbb"); t.Columns.Add(col); col ne…

【評分】第三次作業-團隊展示

【評分】第三次作業-團隊展示 總結 【2017-10-10】更新&#xff1a; 分數映射至 [1,2] 分 【注意】&#xff1a; 為了保護大家隱私&#xff0c;以后發表博客&#xff1a; 涉及到學號時&#xff0c;僅提供后三位涉及到姓名時&#xff0c;僅提供名&#xff08;省略姓&#xff09;…

c語言變量為什么要定義,C語言為什么要規定對所用到的變量要“先定義,后使用”...

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓int a10;以上一句話對變量a進行了聲明&#xff0c;定義以及初始化extern int a;以上一句話僅僅對變量a進行了聲明&#xff0c;將a的鏈接屬性設置為externalint *p;以上定義了一個指針int a10;int *p;p&a;以上為指針變量進行了賦…

iOS 開發--github的demo

令人驚訝的是&#xff0c;YYText 雖然代碼量很大&#xff08;超過一萬行&#xff09;&#xff0c;但它只是 ibireme 的作品之一。ibireme 利用業余時間完成了 YYKit 工具庫&#xff0c;包括&#xff1a; YYModel — 高性能的 iOS JSON 模型框架。 YYCache — 高性能的 iOS 緩存…

RabbitMQ快速安裝配置指南

RabbitMQ快速安裝配置指南 官網的安裝教程由于需要解釋原理很多廢話&#xff0c;這里總結一下在CentOS7環境下的安裝配置過程。如需理解原理&#xff0c;請看官網原文的安裝指南或翻譯1. 安裝RabbitMQ server ## 安裝epel源 yum install -y epel-release## 安裝Erlang yum inst…

[轉]基于Starling移動項目開發準備工作

最近自己趁業余時間做的flash小游戲已經開發得差不多了&#xff0c;準備再完善下ui及數值后&#xff0c;投放到國外flash游戲站。期間也萌生想法&#xff0c;想把游戲拓展到手機平臺。這兩天嘗試了下&#xff0c;除去要接入ane接口的工作&#xff0c;小游戲本身不用做任何改動就…

c語言float輸出分數,c語言同一題目求解結果用float和int輸出值差1.

c語言同一題目求解結果用float和int輸出值差1.答案:3 信息版本&#xff1a;手機版解決時間 2018-12-08 22:35已解決2018-12-08 05:38c語言同一題目求解結果用float和int輸出值差1.最佳答案2018-12-08 06:01試試這樣就好了#include main(){long i;float j,j1,j2,j4,j6,j10;j110…

《構建之法》閱讀筆記02

今天我閱讀了《構建之法》4-6章。有許多的感悟。 以前編程序總喜歡亂命名變量&#xff0c;覺得自己看的懂就行了。但讀完構建之法第四章。我知道了程序是給別人看的&#xff0c;然后那只是程序比較簡單而已。如果一個程序過于龐大&#xff0c;而變量的命名有沒有實際的意義&…

2017-10-03 前端日報

2017-10-03 前端日報 精選 你需要知道的幾類npm依賴包管理看Zepto如何實現增刪改查DOM把cookie聊清楚6 Pro Tips from React DevelopersMulti-user experiences with A-Frameclintonwoo/hackernews-react-graphql: Hacker News clone rewritten with universal JavaScript, usi…