功能描述:
通过按键设定洗衣机的工作时间并用数码管显示工作时间,然后控制2个继电器循环工作状态,模拟洗衣机间歇正反转,一般正转3s,停止2s,然后反转3s,停止2s,循环上述动作。
完整版 电路图和程序代码 下载地址
https://pan.baidu.com/s/1MOzGqoG2fjgmNMRIK_OoDw?pwd=8888
部分代码展示
#include<reg51.h>
//****************************//
#define uchar unsigned char
#define uint unsigned int
//***************************//
sbit mo_r = P3^2; //电机右控制线
sbit mo_l = P3^3; //电机左控制线
//****************************//
sbit key_menu = P3^4; // 菜单按键
sbit key_on = P3^5; // 开始按键
sbit key_off = P3^6; // 结束按键
sbit key_se = P3^7; // 菜单选择按键
//***************************//
sbit led_in = P0^0; // 进水指示灯
sbit led_xi = P0^1; // 洗衣指示灯
sbit led_pao = P0^2; // 泡洗指示灯
sbit led_xx = P0^3; // 脱水指示灯
sbit led_out = P0^4; // 出水指示灯
sbit led_over = P0^5; // 洗衣结束指示灯
sbit led_work = P0^6; // 电机工作指示灯
sbit led_wring = P0^7; // 报警指示灯
sbit other = P3^1; // 脱水盖子保护开关
sbit anther = P3^0; // 洗衣电源控制开关
//******************************//
uchar code num[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//
//*****************************//
char sec = 0; // 时间秒
char min = 0; // 时间分
uchar count=0; // 中断计数
uchar flag0=0; // 洗衣机工作状态标志
uchar flaga=0; // 洗衣机工作状态标志
uchar flagb=0; // 洗衣机工作状态标志
uchar flag1=0; // 进水次数标志
uchar flag2=0; // 出水次数标志
uchar flag3=0; // 泡洗次数标志
uchar err =0; // 报警标志
uchar quan = 0;//正反转计数
//**********************************//
// 函数声明
//*************************************//
void delay();// 延时函数
void in(); // 进水子程序
void out(); // 出水子程序
void over(); // 结束子程序
void xi(); // 洗衣子程序
void pao(); // 泡衣子程序
void xx(); // 脱水子程序
void on(); // 工作on处理子程序
void se(); // 显示菜单选择
void SEG_display(); //显示时间子程序
void key_scan(); // 按键扫描子程序
//*****************************//
// 延时函数
//****************************//
void delay(uint i)
{
uint x,y;
for(x=i;x>0;x--)
for(y=50;y>0;y--);
}
//******************************//
// 工作on处理子程序
//********************************//
void on()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
P0 = 0xff;
if(flag0 == 0)
in();
flag0=flagb;
if(flag0 == 1)
xi();
flag0=flagb;
if(flag0 == 2)
pao();
flag0=flagb;
if(flag0 == 3)
xx();
flag0=flagb;
if(flag0 == 4)
out();
flag0=flagb;
}
//*******************************//
// 结束子程序
//*********************************//
void over()
{ other=0;
anther=0;
P0 = 0xff;
mo_r=0;
mo_l=0;
led_over = 0;
led_wring=0;
EA=0;
}
//*********************************//
// 进水子程序
//*********************************//
void in()
{ anther=0;
other=1;
P0 = 0xff;
led_in = 0;
flag1++;
mo_r = 0;
mo_l = 0 ;
min = 0;
sec = 5;
}
//*********************************//
// 洗衣子程序
//*********************************//
void xi()
{ anther=1;
other=1;
P0 = 0xff;
led_work = 0;
led_xi = 0;
mo_r = 1;
mo_l = 0;
min = 0;
sec = 30;
quan = 0;
}
//*********************************//
// 泡衣(漂洗)子程序
//*********************************//
void pao()
{
anther=1;
other=1;
P0 = 0xff;
led_pao = 0;
led_work = 0;
flag3++;
mo_r = 1;
mo_l = 0;
min = 0;
sec = 20;
quan = 0;
}
//*********************************//
// 脱水子程序
//*********************************//
void xx()
{
//other=0;
// anther=0;
// P0 = 0xff;
// led_xx = 0;
// led_out=0;
// mo_r = 0;
// mo_l = 1;
// min = 0;
// sec = 30;
anther=1;
other=1;
P0 = 0xff;
led_xx = 0;
led_out=0;
mo_r = 1;
mo_l = 0;
min = 0;
sec = 30;
quan = 0;
}
//*********************************//
// 出水子程序
//*********************************//
void out()
{ anther=0;
other=0;
P0 = 0xff;
led_out = 0;
flag2++;
mo_r = 0;
mo_l = 0;
min = 0;
sec = 5;
}
//*********************************//
// 显示菜单选择
//*********************************//