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