|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
单片机全自动洗衣机控制系统proteus仿真及源程序
. P# ^1 O5 g3 B) s, D0 J& S0 T. {- C; w1 w: `
7 L' \6 n: R+ u" U; ]6 p
给大家分享一个51单片机做的全自动洗衣机的proteus仿真,下面是仿真原理图,可看出功能十分强大,按键很多。全部的源码可以下载本帖附件:# }4 l/ t2 a( Y
1 F; H* b% Q" `; e$ F1 T6 M5 h4 \
9 r) V& k: c& y: X( A- g! `8 ^2 b* n- f4 T4 x# K
仿真工程文件及全部源码下载:
! w0 l: s/ x. s3 f$ N
6 O2 L n3 V- M; C! @6 X* R3 g3 K8 h
, Y7 F! }: y8 n" ]' _4 G6 E
单片机源程序:, c' B3 b1 {6 [* g
/***************************头文件***********************/* l8 c+ ^5 _; F: m
#include 3 J3 @6 E& \! ~! t. D+ E; I" N
/************************数据类型宏定义******************/
! O2 ~1 |& [# w& D( Z h% Y#define uchar unsigned char s4 _; i+ ]$ M+ @& ^1 \
#define uint unsigned int
* M$ |) [- Q# H6 i1 X* ^% W/***********************使能、禁止宏定义*****************/! K& _( ]3 j6 H# S7 x3 f( F+ q, |
#define Enable(); EA=1;
1 s7 g X7 B% z" G#define Disable(); EA=0;+ N* P5 o9 {' @9 J
/********************程序选择功能标志宏定义**************/
5 g: a; `5 |; v, t, c0 V6 @#define BIAOZHUN 0
$ t" g/ s" ^* ^/ M#define JINGJI 11 d6 A8 `! V8 I9 q. A. u3 t
#define DANDU 2
8 p3 ^* E/ s: h, b7 ?, A2 g& g9 m1 H#define PAISHUI 3
. U$ i! _3 Z" x: |/ U: B1 m1 w0 U( _/********************强弱选择功能标志宏定义**************/7 L1 C6 y; b! l! r9 M$ P/ B
#define QIANGXI 0
, N4 H6 H3 U1 {% i#define RUOXI 1 : G. g% A: i6 I( M) K2 S8 W
/*******************进水、排水时间限制宏定义*************/
: @1 e+ {. j$ V# n* L) g5 e+ Q#define T_JinShui 10 //4min*60s: ` |& H& K& z& @! i
#define T_PaiShui 10 //1min*60s
& _1 C" g# W/ T) _#define T_XiDi 10 //6min*60s0 {& @2 F/ ^# S% X
#define T_PiaoXi_1 10 //4min*60s
7 L% m, I& ]. j5 s#define T_PiaoXi_2 10 //2min*60s
% L( N1 s( M2 i* ^2 g) _% r& o#define T_TuoShui 10 //2min*60s4 r7 I5 v/ v6 h* t+ W& _
/**********************电机控制宏定义********************/
& m, R9 U% K& n8 C/ i( n#define ZHENGZHUAN 0
O1 {" [0 q7 X& X+ g9 O#define STOP 1
+ F1 f6 y' i. I8 N1 T9 j. K#define FANZHUAN 2* f$ Y- n2 o/ }' V! q n+ }
#define ZhengZhuan(); PIN_Motor_A = 0; PIN_Motor_B = 1;
Y( t1 J5 [) z4 i* ] z#define Stop(); PIN_Motor_A = 1; PIN_Motor_B = 1;
! y5 X: I n, }5 G+ E#define FanZhuan(); PIN_Motor_A = 1; PIN_Motor_B = 0;
' m! s" p" P( g! X3 Z q- D; t/*******************暂停、继续控制宏定义*****************/
2 k: I1 H- K: q4 [+ h1 ]#define ZanTing(); ET0 = 0; ET1 = 0; Stop();0 w3 F1 j2 A1 ^& `3 Q! W" }$ R" `4 d
#define JiXu(); ET0 = 1; ET1 = 1;
( c/ h& K& G, U; l- H/*************************管脚定义***********************/
9 X9 G$ n0 e+ F s* T8 x//都是低有效,因LED是灌电流,而PNP也是低电平时导通) n1 O+ E3 I4 _& n
sbit LED_BiaoZhun = P1^0; //标准程序显示灯
6 j# d' f3 v3 ]! E) Csbit LED_JingJi = P1^1; //经济程序显示灯6 i6 _; \9 s/ m# h& s
sbit LED_DanDu = P1^2; //单独程序显示灯' q2 x7 K8 }1 [/ E$ j' E
sbit LED_PaiShui = P1^3; //排水程序显示灯
. `: Z; Y$ _9 } Asbit LED_QiangXi = P1^4; //强洗状态灯
" [9 P$ S/ t4 s0 J& ssbit LED_RuoXi = P1^5; //弱洗状态灯3 H! o2 z9 U+ v0 B! X
sbit LED_XiDi = P1^6; //洗涤状态灯 ?* X/ K4 c5 j8 S9 M% z
sbit LED_PiaoXi = P1^7; //漂洗状态灯
. O: a% @( P$ I. w0 Dsbit LED_TuoShui = P2^0; //脱水状态灯3 n0 N/ U' K$ Y; G% O3 Y2 z
sbit PIN_BaoJing = P2^1; //报警喇叭4 Q. E" ]- ?$ k T: |
sbit PIN_JinShui = P2^2; //进水控制
' a# X0 C7 l3 j, k# d$ lsbit PIN_PaiShui = P2^3; //排谁控制+ w/ }3 ^: y5 L' ~* Z
sbit PIN_Motor_A = P2^4; //电机脚A
! h8 \, `, \6 ^; Bsbit PIN_Motor_B = P2^5; //电机脚B
& w3 O- V9 e( b# _9 v Hsbit K_SEL_ChengXu = P3^0; //选择程序键
3 n! r6 c) O; S& u% X9 b" ssbit K_SEL_QiangRuo = P3^1; //选择强弱键
# b, L9 {- a( v5 h0 a# k; I+ Csbit p32 = P3^2; //
+ t- `3 x9 P+ Ysbit p33 = P3^3; //9 ^0 }) d- Y- \( w3 x* q- ~
sbit SW_ShuiWei = P3^6; //水位开关7 N; E3 V; M! {
sbit SW_AnQuan = P3^7; //安全开关
% x9 X+ U6 ]7 D8 Q/************************函数申明***********************/
+ H6 `' d q& f/ J" u* P/ ~; G6 avoid Programme_PaiShui(void);5 r) z) [( Q! c% t
/*************************数据定义***********************/5 E/ ]' \& L5 l
uchar flag_SEL_ChengXu; //默认为标准程序, + q& U- t7 Y |. B; ]+ v9 c
bit flag_SEl_QiangRuo; //默认为强洗,1为弱洗+ l) }# v( Z9 j% M2 S! A
bit flag_Run; //运行标志,1为运行 U; ~ `( s T. [; L1 w, {8 T
//bit flag_ZanTing; //暂停标志,1为暂停( K' K3 ?. e$ s% U+ D
bit flag_JinShui; //进水标志,1为进水
' t+ w" X8 K$ v! Z: ebit flag_PaiShui; //排水标志,1为排水
/ s' t) i) T, `+ n5 r" U( \' \bit flag_XiDi; //置洗涤标志3 F5 g. ~9 r, m0 O
bit flag_PiaoXi; //置漂洗标志
3 z! g0 ~8 b' h6 S6 c* X6 rbit flag_TuoShui; //脱水标志: Q! L) [. i1 r7 N
bit flag_BaoJing; //报警标志1 z* c5 |$ Z% ~" |; \! |
uchar _50ms; //每50ms加一次的变量
9 V0 v% l0 B' F2 j0 D2 ^uint s; //秒6 i- J' T" w( H: R
uint T_S; //定时总时间
2 t- x# I5 q5 ^. I/ x' A6 @2 Juchar T_Motor; //电机控制时间+ ?/ @7 w0 v8 L& p8 X4 P
/*************************延时程序*********************/% V' `9 H. Q* z6 F
void Delay_10ms(uint T1) 5 E+ @! G" S5 Y) f8 E
{ uint t1,t2;& z! y2 S* m% P) H; T+ W
for(t1=0;t1<t1;t1++)8 O2 [! h9 p% o1 L) V( ~7 ]
for(t2=0;t2<1250;t2++);//10ms
+ y; O2 n1 h. I$ E R# }}
( i% E0 b% ~9 y: y% Q4 H& T/**********************管脚初始化程序******************/# G5 |) H( \7 [
void Pin_Init(void) % @" b0 ~8 v# e& ]8 [% G, K, A
{ LED_BiaoZhun = 0; //默认为标准程序,灯亮+ Y" U4 q8 ?0 d. N+ z: x, U7 Z
LED_JingJi = 1; //经济程序显示灯,灭! x; f, m4 L: [# z8 O. `4 K4 F3 o3 `
LED_DanDu = 1; //单独程序显示灯,灭
' a/ H* g3 d7 {( @( O* q LED_PaiShui = 1; //排水程序显示灯,灭
a5 |+ z" [; Y) A+ ^& { LED_QiangXi = 0; //默认为强洗状态,灯亮+ N# I% { ]" t7 j* i
LED_RuoXi = 1; //弱洗状态灯,灭" c* U4 Y' c" J
LED_XiDi = 1; //洗涤状态灯,运行后灯亮
! w4 L4 r8 I2 M) B. f* L$ }2 D& n LED_PiaoXi = 1; //漂洗状态灯,运行后灯亮+ b( j0 T8 t' C. ?* O. |
LED_TuoShui = 1; //脱水状态灯,运行后灯亮5 W1 g. t- w; F8 h( c4 c7 @
PIN_BaoJing = 1; //报警喇叭,不叫2 k2 P% M5 Z, \
PIN_JinShui = 1; //进水控制,关3 e4 h. K, m3 s; \8 Q" D
PIN_PaiShui = 1; //排谁控制,关 F5 t( K! r& c3 R: H: j! I
PIN_Motor_A = 1; //电机脚A,不走
- X4 i3 V/ @; @5 K- F, f9 g9 ` PIN_Motor_B = 1; //电机脚B,不走
! d0 T4 l+ o; F/ I: K}
9 ~9 G/ Y, O1 D/********************中断初始化程序********************/7 ^% P' x* |. I% G5 g
void ExInt_Init(void)
0 S% f' a6 i( s{ IT0 = 1;$ ^9 J$ E2 `, y( D: x
EX0 = 1;
+ U2 H# m9 f: x& q) }( {: R IT1 = 1;+ l( B9 r$ X5 N3 D' a
EX1 = 1;, W/ f, C2 w+ ]$ \# Q, [
}
/ A, t8 x l% M8 m2 @5 X" [- I; l/*******************定时器0初始化程序******************/
# J, S6 Z+ G; `6 ]6 F) K9 n, @void Timer0_Init(void) //其中没ET0是为以后控制暂停用的
/ t0 n( l; j& Q/ f{ TMOD = TMOD | 0X01; //定时方式11 `5 I: q9 A7 X
TH0 = 0X3C; //50ms
2 E: i3 f% P d TL0 = 0XB0; - X- b# E2 Z' o( L1 ?, Y
TR0 = 1;- Q- C% G1 V1 v( X9 x5 o1 C8 }8 A
_50ms = 0;3 T/ M1 p: ?: d; u" O4 `4 L
s = 0;$ v: v) r4 T) Y# m; ?
}
; T. `+ h' U$ e/ w( j' ^/ z/*******************定时器1初始化程序******************/! F `! `9 L) ], r% i
void Timer1_Init(void) //其中没ET1是为以后控制暂停用的
' ?- V+ x b2 d! v: M8 f{ TMOD = TMOD | 0X10; //定时方式1
: [6 F: C5 v1 l4 \+ R, Y: \% T4 ?# J TH1 = 0X3C; //50ms
1 \# H3 ]5 {. E2 |% h9 Z- h3 \ TL1 = 0XB0;
# [; G4 X" o. e4 Z5 @) ?5 g- [3 z}
2 w1 n- H' H# }/********************电机初始化程序********************/; y: ^) x. K3 L+ Q0 \, S
void T_Motor_Ctl(uchar t1,uchar t2,uchar t3)
9 V' c' K& }+ F; W* ^' m{ if(!flag_SEl_QiangRuo)//强洗
, ~4 j* e$ N' U0 a, x9 i. @% c T_Motor = t1;
$ f9 M! B$ U. a: Z( \3 c" W if(flag_SEl_QiangRuo)//弱洗" Z4 e& J8 M+ ?
T_Motor = t2;
/ Q/ a9 f# L) J7 l0 W if(flag_TuoShui)//脱水' O/ p/ d8 L$ \9 x4 x6 b
T_Motor = t3;
, m K1 M+ l$ n}
' L$ r9 U- F E9 P0 ?/********************电机初始化程序********************/3 ? H# V; g* Q% y" V$ M
void Motor_Init(void)" F. N4 Z* X6 J7 n
{ ZhengZhuan();' w9 e7 w" V' P7 C+ _
T_Motor_Ctl(4,3,5);
: K9 P1 d+ D; e' n" t8 w6 }, u T1 e% j}* ^& I: h' t9 r U( z
/**********************解除报警************************/5 M$ Z* P# O8 c0 Z4 `3 ?% V4 `
void No_BaoJing(void)/ J# ^" p: T- E) }
{ flag_BaoJing= 0; //置报警标志$ y5 T& w- A* u$ p7 H& d
PIN_BaoJing = 1; //报警喇叭$ |+ H) M4 D; W) ]/ Q; ~$ R
//进水、排水已没时间限制了
( E3 L0 b! r- q! ?}% w. s/ N' F5 ^# R, k0 _# P
/**************外部中断0程序为运行或者暂停*************/
$ `' B) d2 M o9 B- Hvoid int0(void) interrupt 0 7 M4 D: L. @. w. U, `& m
{
0 n. ^5 _* k& Q" a if(!p32); ? t" Y+ P, z& S; E |/ P
{ Delay_10ms(1); //延时10ms左右,去抖动4 c0 ^0 ], J# n9 p8 \% ]3 f3 d
if(!p32)
/ u; p5 b' L7 d+ E { if(!flag_Run)) z2 d+ r& }1 V& L" I9 H
flag_Run = 1; //置运行标志
7 N; T: F, ~( ^0 ^1 L else if(flag_BaoJing) e1 b& n3 H( e2 h; _+ |
No_BaoJing();
! F0 b" t7 r: Y' M! ^ else
. \1 }, I7 P! Y/ v" C { static bit flag_ZanTing;2 {$ ^, I1 ]- o6 v7 t
flag_ZanTing = ~flag_ZanTing;
0 V" ^" u. w- @7 _5 A9 P# E if(flag_ZanTing)( C2 P3 B" O% ?# ~
ZanTing();1 L& y4 i: A \ y5 |6 _/ P
if(!flag_ZanTing) // 这里用else,编译出错。???? 6 a0 j5 w+ E3 x( w
JiXu();7 B0 Y( [* t' P; P+ N3 o. E0 {. C: J
}//end else, x( y1 o; Q# u$ e
}//end if(!p32) 2* _+ t0 S9 x9 m# x4 Y! y3 _4 \
}//end if(!p32) 17 O" e$ `* s8 N/ ^9 A. _
}
" p4 J$ c0 F1 a! q3 a% s' P) i2 Z/**********************报警程序************************/% @- i3 Y2 a7 p0 r
void BaoJing(void). g: T' M& n" b. K7 Q. G' B+ e& @
{ flag_BaoJing= 1; //置报警标志
1 x5 k% t' b) B, u& E" } PIN_BaoJing = 0; //报警喇叭/ M/ K, x9 c F
TR0 = 0;
+ [$ [" q; v. s+ n}
& V+ A4 b/ ?, T2 g0 K+ g Q7 F. k/*******************时间到处理程序*********************/
' k0 H( ~* L; `3 x1 j7 nvoid Ok_Timer(void)& a, L4 r5 ^1 V$ Y, S# ]! A
{ s = 0;8 V1 Q' r4 ?) z W6 Y
if(flag_JinShui || flag_PaiShui) //进水中~、排水中~3 b& P, v* |+ h3 B
{ BaoJing(); //报警程序* b+ }2 e0 p1 J/ L! s) s! q
}//end if(flag_JinShui || flag_PaiShui)
" `1 ]7 G/ Z; {7 T& G" P else" e2 A( Z" U: C3 J
{ flag_XiDi = 0; //清洗涤标志8 C4 H! I5 w+ z- P5 p- p
flag_PiaoXi = 0; //清漂洗标志% o9 _/ z! Z+ Z$ ?8 q
flag_TuoShui= 0; //清脱水标志$ S5 l) n2 G' ?' K* u
Stop();' C# r4 F) q& N! }; \! |1 j( M
}//end else
) q: {+ o; ?6 H5 p/ @}
) K3 r& I8 f1 E% I) p/********************电机控制程序**********************/
7 j; _, F; h mvoid Motor(void)
6 r( |" m9 S3 S5 Z{ static uchar s_Motor;) f. F* }4 t- T1 v$ d( v$ ^: L) |
s_Motor++;
* L% O) g% `& S+ | if(s_Motor==T_Motor)0 Y% b; _4 z* k5 S8 q' d
{ static uchar Motors;' H/ R _* s {# s
s_Motor = 0;
/ k7 c9 @! G0 \+ d0 G P Motors++;
( ]7 s& }1 ?! q2 q+ Q* W. t if(Motors==3)
! n& z( h) \/ g2 q" J. U: g t( i+ P Motors = 0;
4 f) h& M# o- Q1 _" d switch(Motors)5 P4 B+ p( w; i% V* |' n
{ case ZHENGZHUAN : ZhengZhuan();
9 [0 i$ y. O3 |- E- b) { T_Motor_Ctl(4,3,5);
* [3 W% u: E* j) ^2 ` break;; S- y; W& g# W: ]: X; B
case STOP : Stop();( u6 E7 U/ Y& C8 y2 n0 |
T_Motor_Ctl(1,2,2);
6 p' m7 U# C8 O0 w! h8 ^ break;
8 @( _1 U7 y5 e' J case FANZHUAN : FanZhuan();
. Z# ]- t4 _5 l/ A& I. D T_Motor_Ctl(4,3,5);+ ~; ^) _% }& e# O' Q9 X
break;
) D$ V2 x7 f) X9 ^: q: Y default : break;+ t1 e, d" L8 u* }3 a
}//end switch
* E% q/ K$ J- p }//end if
4 V) t! c3 y4 s1 W}- T. ]7 O l" o* x, c n2 r' o
/*******************定时器0中断程序********************/( h& w- z. t; O
void Timer0(void) interrupt 1
9 v; g1 D' i. u9 \" k& J7 z{
" D' E) Z. ]6 T+ Q! _! u7 @" I TR0 = 0; //停止计数8 m+ s! o1 X" P
TH0 = 0X3C; //重装定时器值 K, M& q; w" O. k* I4 V
TL0 = 0XB0;
3 ]& u4 R7 q N' T1 k: a! A& X TR0 = 1;, M1 \8 |5 ]' R9 ]9 `1 { ]
_50ms++; ; u$ r# `7 t9 @
if(_50ms == 20) //1s到
9 v" g' Q6 \* l { _50ms = 0;( ?( U, N% F7 F B1 M- P
s++;
2 B+ g& P* ~" }) l if(s == T_S) //定时到5 a4 L& p* V1 z" K
Ok_Timer();1 C2 H; |# f$ f/ {7 @
if(flag_XiDi || flag_PiaoXi || flag_TuoShui)
. b2 C. U+ Y6 g( z" s6 B; X. j+ B Motor(); //电机控制程序 1 _8 ^4 F. m3 Y: M9 g5 V7 O7 [' R
}//end if(_50ms == 20) " {, [5 w# Q9 f+ U4 U6 F( R: K( k
}//end Timer0()
" g+ Q: q* x [0 G, b: U- u+ j y/**********外部中断1程序为水位到或者盖开处理***********/
2 F i5 R& \( zvoid int1(void) interrupt 2
' V- o- `9 `/ W: {$ b: [- _' E{ if(!p33)) z' j1 _$ n0 B% ^/ P4 C3 q0 A' P
{ Delay_10ms(1); //延时10ms左右,去抖动1 V% M, J( K8 D3 ?: ]* F
if(!p33)0 ^' w$ I, h% P0 i6 C! f ~! p
{
& d0 E9 N/ m& V; [' X8 v. K9 [ }//end if(!p33) 21 A! z2 a+ p' U- N
}//end if(!p33) 1
A8 i% {$ c. [0 G9 u$ o9 I* w}/ {; r, g g9 u* M4 N
/***************定时器1中断程序作为闪烁****************/
r6 `# y* M. K9 _% vvoid Timer1(void) interrupt 3
4 @7 O# C( I( \) b{ static uchar _50ms; //每50ms加一次的变量
+ L0 C& t8 B) R2 j3 `5 ? TR1 = 0; //停止计数
) W0 \8 B6 u1 G TH1 = 0X3C; //重装定时器值0 u" y) S% J: M" V' I2 r
TL1 = 0XB0;
+ o: h/ V }: S. V/ |4 i TR1 = 1;' B1 ~! }3 N5 `+ j
_50ms++;
1 T( Y0 j4 Q) f# q& m) J/ y. C if(_50ms == 14) //0.7s到' e3 g7 C) l! Y/ K- f5 Y! |& f' S
{ _50ms = 0;4 M) f/ H3 J% H6 q4 J0 Y2 f$ Y5 ?
if(flag_XiDi) //洗涤中~
* b9 k& L5 \( I LED_XiDi = ~LED_XiDi; //洗涤状态灯闪烁( f: ]* [; l' K( k k+ ~
if(flag_PiaoXi) //漂洗中~; D2 L( |8 `# h# x& Y( W9 M& [
LED_PiaoXi = ~LED_PiaoXi; //漂洗状态灯闪烁8 a% R* r+ `& @3 S$ R
if(flag_TuoShui) //脱水中~, b& ^/ @' m2 N2 O
LED_TuoShui = ~LED_TuoShui; //脱水状态灯闪烁, @& N3 i/ I3 u9 e% ?
}//end if(_50ms == 14)
( \. ?, ], w. L7 v5 ~9 ?}
( B+ h' ^3 V1 A/**********************程序选择程序********************/! R4 ~* _& L/ s; o8 C* B6 q, }
void SEL_ChengXU(void) 6 _: a$ ?6 ~- w- `
{ if(!K_SEL_ChengXu) //程序选择键- H" g* W4 {3 D) _
{ Delay_10ms(1); //延时10ms左右,去抖动
! Q0 l a: Z @0 R3 Z if(!K_SEL_ChengXu)
, i, E: P N! J% X4 B; s { while(!K_SEL_ChengXu);
+ |! u$ q, U5 u& p) R flag_SEL_ChengXu++;7 B( M1 t3 M, l6 w+ |
if(flag_SEL_ChengXu==4)& H: R% [6 R8 n" F$ |
flag_SEL_ChengXu = 0;7 f V! a4 \1 D7 Z& W5 r
switch(flag_SEL_ChengXu)8 h6 a' f( ] R' L, F- W/ \; r
{ case BIAOZHUN : LED_BiaoZhun= 0; //亮
9 ^' D! }, G8 ], A% A% } LED_JingJi = 1; //灭; z. w3 X) M7 U/ E. Y7 h G
LED_DanDu = 1; //灭
, W, F0 ]- G8 H2 `' k, e LED_PaiShui = 1; //灭
+ E5 `' E( d& f& o' w' f+ [+ [" e break;% [0 c' ` O* W5 |5 l
case JINGJI : LED_BiaoZhun= 1;
- w1 [% O; u7 {# V; z% F. m+ F LED_JingJi = 0; 0 V! I2 z/ D! S! B! i, D
LED_DanDu = 1;1 i# H3 X$ ^" k7 L& V ^
LED_PaiShui = 1;
2 n' X) N& k& T1 u break;- ?& n( e& j+ ?" c- b
case DANDU : LED_BiaoZhun= 1;$ `& C8 @0 x$ r- o6 ?
LED_JingJi = 1; 0 p; {( @: c+ B; o; G0 w( e
LED_DanDu = 0;" n9 c7 b A2 x) x& {
LED_PaiShui = 1;
0 E: F: f7 z8 ^+ h+ ] break;/ _( G. v) Z( Y3 `+ B8 o/ G
case PAISHUI : LED_BiaoZhun= 1;% f. x' v0 ]8 ?" O
LED_JingJi = 1; , c3 o5 ~5 c' ~5 u
LED_DanDu = 1;4 ^8 ^& D L l' b9 l' c8 d4 [
LED_PaiShui = 0;% F, @* Z7 ]% Q0 e! r
break;/ }- a [5 O3 y) B$ \
default : break;0 E# Y& @& }' D8 m2 T7 B4 o
}//end switch
1 `, i) `) [& N: F }//end if(!K_Sel_ChengXu) 2
) E. F" h$ I* r- u }//end if(!K_Sel_ChengXu) 1
+ }2 N6 W- W0 j w6 l}//END7 v) r$ @. b$ _
/********************强弱选择程序**********************/
0 l2 C6 v8 u8 U2 uvoid SEL_QiangRuo(void)
2 p6 G6 P9 `# d% @{ if(!K_SEL_QiangRuo) //强弱选择键
& M9 K; Q* w7 E- F. |/ H { Delay_10ms(1); //延时10ms左右,去抖动$ S: C( z: F2 ?+ t
if(!K_SEL_QiangRuo); P6 E) W) P' {# l, P& F
{ while(!K_SEL_QiangRuo);' S, @0 N0 R" X4 S
flag_SEl_QiangRuo = ~flag_SEl_QiangRuo;
9 G0 E& v% f% H1 P) J7 n& f9 X if(!flag_SEl_QiangRuo)
6 C S6 l5 C: ^3 e% |9 l { LED_QiangXi = 0; //强洗状态,灯亮
2 i2 Z6 i8 s1 _( i/ K5 x) ? LED_RuoXi = 1; //弱洗状态灯,灭8 b4 J. N3 h' {- F1 A
}//end if(!flag_SEl_QiangRuo)
( @1 j0 d/ P! v$ ^$ s2 r' v6 d' i else' a1 B* I+ }% w; k
{ LED_QiangXi = 1; //强洗状态,灯亮
/ p& a5 x1 [6 B! Z8 y; F6 u" }$ q LED_RuoXi = 0; //弱洗状态灯,灭
* `8 I7 F0 ~1 K8 P1 m* F$ b+ Z& D }//end else
4 k. Y0 O, _( R5 P i1 K8 s }//end if(!K_SEL_QiangRuo) 2
3 A. g# `2 M; U0 E! _! b }//end if(!K_SEL_QiangRuo) 1) ]1 ^! v' u4 k; t2 r6 h
}
. w, X! ?- n+ k) s/**********************进水程序***********************/ A6 [; W( {0 q9 y. c# c
void JinShui(void)) Z; a8 m9 W( W7 n, N
{ PIN_JinShui = 0;
' ~. R* W0 z* {" K8 @$ v) }( `8 [ flag_JinShui = 1;) a% F2 }& M: ?2 y) r
TR1 = 0;+ k; o: e* @/ Y6 u4 @
Timer0_Init();
- ^2 O" u3 c6 ^9 r; k, } T_S = T_JinShui; x! i0 B! k( [# U1 `" J
while(SW_ShuiWei);
, k# P1 S2 r" `, J4 L0 F PIN_JinShui = 1;! M9 t7 `6 l8 W- r; F& P
flag_JinShui = 0;
& |! W* N7 t0 F% Q0 v TR0 = 0;
/ l3 u; j: j: p" X" a TF0 = 0; ; c* y; ?2 m6 r) \; k
}7 N% C1 y5 u p* j
/**********************排水程序***********************/
! Y1 C2 s0 L5 y5 x2 \void PaiShui(void)3 ^) J2 T4 g4 V9 R0 ?
{ PIN_PaiShui = 0; S% x' c5 h+ I; J
flag_PaiShui = 1;8 o( V& A! H4 X7 }& @" c& O, L
TR1 = 0;7 E) U+ @2 a( F' |( ?1 ]' `
Timer0_Init();6 Q( E2 p8 n% T8 i' M
T_S = T_PaiShui;6 ~8 |' t/ m: @5 s1 ]* A
while(!SW_ShuiWei);
, T, i" y4 T, q TR0 = 0;
' K1 w% n' Z ^/ Z9 Z3 l4 ^4 X5 }/ Y TF0 = 0;5 A+ D% z6 b& `, z8 c
Delay_10ms(500);//延时50s,经验值5000
8 S: X5 }9 E* m8 J: W PIN_PaiShui = 1;
9 {9 P d' T! W* t flag_PaiShui = 0;
2 F& u* e0 k) a$ _0 @/ H7 _}% I) v' e) \* D
/**********************洗涤程序***********************/
. ]7 t, D3 Q0 n6 B5 E qvoid XiDi(void)0 W9 e; O: ?+ e$ D* l
{ flag_XiDi = 1;
3 u4 [8 U. V, N7 C, c( I: X TR1 = 1;
5 K; M2 X9 M1 [* Y Timer0_Init();
: ~1 C: f6 C# M; }$ u; x T_S = T_XiDi;- L3 G/ L( ^# O5 C: P4 N
Motor_Init();6 _& h; I% M0 U W4 |3 `
while(flag_XiDi);
2 P* W+ T$ k* \2 o1 o/ h4 q8 K TR1 = 0;, J1 v: z% P0 i; d
LED_XiDi = 1;
: M( Y; H- Y- L! ~}( D7 ]" G7 g, ^0 M3 p1 F
/**********************漂洗程序***********************/% P# n" p! e% s k7 K
void PiaoXi(uchar t)
% w4 e2 |/ _( }5 U{ flag_PiaoXi = 1;
9 T& P8 F) e t* ~. q% t( } TR1 = 1;
7 z. H1 u/ C' K. ?- F4 k Timer0_Init();
' n# h# _8 c8 O* V T_S = t;& D% P+ L; B4 g# o
Motor_Init();
5 v5 L9 E# ?' x% `& o: K7 Z* \ while(flag_PiaoXi);
) f7 b) J) D; `1 X1 X$ x}" ]1 E+ }/ w8 b8 n
/*********************盖开保护程序********************/4 u# G$ o0 W& L a- B
void BaoHu_GaiKai(void)
& N, _+ p' t- @( x+ T{ if(SW_AnQuan) //盖开' j/ ]$ a. _4 {1 C& G) a
{ ZanTing();5 a8 h8 f( r+ n, R
LED_TuoShui = 0; / W* a- `: |: Y( H3 Y9 z( m
}//end if# ?/ A2 w l* ^, p
else
7 ~* }8 r8 z( e, ~ { JiXu(); //电机不用管,最多5s不转
+ {, L# f8 v8 B) ^) I$ Z9 X }//end else
3 w$ ?* M# H, Y. g, ` H! E; Q}
; ]/ Q* `5 u& A/***********************脱水程序**********************/
$ m, G0 L! G5 K) V, Ovoid TuoShui(void)
0 W6 C2 Q9 i' T" B5 l! _' h{ flag_TuoShui = 1;) b# o! \% S6 t: y* J: B
PIN_PaiShui = 0;
, d5 z9 k. P. y: m TR1 = 1;; L, C+ k, o5 T' g' e9 x6 p A
Timer0_Init();
/ c! h7 {5 v3 Q5 e T_S = T_TuoShui;
" c \. z5 p% X$ B: d Motor_Init();5 \; |- n4 F, P4 j1 {& o; s
while(flag_TuoShui)( d& Z$ s8 X% i: Q. G8 t7 E$ Y
{ BaoHu_GaiKai();
" A; H+ V2 U8 l; f$ y }//end while
9 R+ f4 A- Z' k8 P$ `2 v TR1 = 0;
& z9 E3 H/ W6 l LED_TuoShui = 1; //而出水阀一直开着
# e. Z' e9 M) |! u0 X5 w}
+ w7 h7 |7 z) h8 H/********************标准洗衣程序*********************/: s, v/ } L1 X% M1 d: z
void Programme_BiaoZhun(void)- \3 b. S/ I5 y# @7 r
{ LED_XiDi = 0; //洗涤状态灯/ c3 ?( E4 _7 J" N* C# P$ E4 m
LED_PiaoXi = 0; //漂洗状态灯9 ?3 B1 L6 D$ N2 I# q# \
LED_TuoShui = 0; //脱水状态灯
+ \( h3 Z1 P/ G Y/ u0 l! L" @ JinShui();5 o" T! w: Z; `( b
XiDi();
. n& W( i4 t G2 Z PaiShui(); 0 P. V+ {- {- n/ P
JinShui();
$ i, E7 g9 L0 T PiaoXi(T_PiaoXi_1);//4min*60s//4*60
w/ V% y: l; l2 s# Z& ~" a1 J PaiShui();
8 z6 D& X. l. |3 ^) E JinShui();# b8 Z h/ T! x0 [5 O4 X$ `- E9 N) A* j
PiaoXi(T_PiaoXi_2);//2min*60s//2*60! Q3 x3 W7 p' n/ [
Programme_PaiShui();
- k9 c9 O' B% L. w9 Q1 E) t- A2 C}
; J" U% P( i$ q5 e! H/********************经济洗衣程序*********************/9 M# m& j0 h' H, x4 C
void Programme_JingJi(void)
; L6 p0 ?+ I, o5 B+ A2 h{ TR1 = 0;. c- n& E% O1 p4 i; z, S B
LED_XiDi = 0; //洗涤状态灯
* C d6 ^$ R" y: Y# H" H LED_PiaoXi = 0; //漂洗状态灯, T" B i1 _% O) n- p( j
LED_TuoShui = 0; //脱水状态灯1 j6 ~; L' \5 W# f0 ^8 }2 m
JinShui();! j4 e& x- U' I; V
XiDi();
% U+ D3 o/ o7 K0 S2 V) R5 p" | PaiShui();
; ]. \. d, x4 s& J7 ~; T. v5 B JinShui();7 w! K2 N7 `8 F: f
PiaoXi(T_PiaoXi_1);//4min*60s& _* d0 J3 W8 d& ]5 A+ H' ]; D
Programme_PaiShui();
- V3 _/ e! D# O8 C* X}
8 M s% C. O' F/********************单独洗衣程序*********************/
, H. c$ Z# F0 v" o" pvoid Programme_DanDu(void)
3 s& A# Q/ X: f! Z) {% E: f2 }{ LED_XiDi = 0; //洗涤状态灯
+ w7 V2 X/ w9 L3 l LED_PiaoXi = 1; //漂洗状态灯
, C! t4 Y' P7 J: } LED_TuoShui = 1; //脱水状态灯" S' b6 l" j, s) o# W
JinShui();
) s1 z0 a/ f6 ~+ g+ @; b& w XiDi();
( S% K( r# g0 r1 G# q$ p8 ?0 a" J}
" d ?" @ l3 i, n6 |, X/********************排水洗衣程序*********************/
5 M9 e! h( [% W# ^- K! _void Programme_PaiShui(void)
/ Z4 z( Z3 ^' @$ b9 f8 \{ LED_XiDi = 1; //洗涤状态灯
- x$ r& e7 F! A% u( J# T0 M LED_PiaoXi = 1; //漂洗状态灯& v+ ?; C$ d t9 E0 [6 ~
LED_TuoShui = 0; //脱水状态灯
. k# i8 G$ }( ~: ?1 h$ [ PaiShui();+ h4 c2 x0 l: F: }- z! g
TuoShui();
4 b, N& }& l0 m! P7 i}
! B+ N' Y" m4 x7 T/************************主程序************************/: G0 C$ U! K0 G/ O
void main()
/ R/ n7 x7 [9 w7 X{
' L8 p# Y; H' k; B C Pin_Init(); //管脚初始化
( [) `8 ` B: E1 a% E7 R ExInt_Init(); //外中断初始化2 j. A: h# G# ]3 y/ I
Timer1_Init();
7 S3 k' d W2 i/ Z5 z& m ET0 = 1; 2 {/ n# i5 Y6 t- c7 b f
ET1 = 1;
1 R) Q$ q& _4 w. ]1 [' h( S Enable(); //开总中断9 z$ f6 ~' _3 x+ W7 G. S! m
while(1): `7 V" k, N3 q# Y Y0 `
{ if(!flag_Run) //运行前按键才有效
" L7 K o5 E! L2 n' X4 t7 ~$ E { SEL_ChengXU(); //程序选择程序
6 z2 s. ]2 @9 G- F/ _$ C) p SEL_QiangRuo(); //强弱选择程序 / q3 n, b, \! k1 E' t
}//end if(!flag_Run)' S/ m: Y) w! x
if(flag_Run)//用else不,按启动键后,有时没反映????//
/ u5 K& f3 ]) }6 K+ l' p- M { PIN_PaiShui = 1; //关排水阀
9 ]' s$ q, }3 o switch(flag_SEL_ChengXu): l7 a' c2 \! h9 y( K( M I; m
{ case BIAOZHUN : Programme_BiaoZhun(); //标准洗衣程序
+ d8 J7 T5 K3 k r/ d break;
" }3 q" f5 Y7 r0 } case JINGJI : Programme_JingJi(); //经济洗衣程序
& R( {) T# P' @/ r* j9 S6 T& J break;4 B- s% E5 y6 M: F
case DANDU : Programme_DanDu(); //单独洗衣程序
4 P u. n* c8 c- x5 d break;& ^) v Y- {2 S
case PAISHUI : Programme_PaiShui(); //排水洗衣程序 # j: x4 P0 m8 V0 Q0 T
break;
$ W# Y9 u2 T3 v9 t6 @5 w default : break;
7 l+ s% z8 O! k }//end switch
5 U6 g$ F& I$ N! Z }//end esle
5 P' o3 v u6 M7 d flag_Run = 0;
' Y _, V4 g# l* @: {/ C9 d& j, t }//end while
! q8 R2 N3 z I% R' A}//end main
' i) u1 e4 X5 l- T1 w
$ D l. o# r) P% m0 F9 L
6 l1 H2 K8 g4 n. t# o' T |
|