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