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