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