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