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