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