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