自动洗鞋机控制
大电机转动(正反转)带动中心柱转,从而带动鞋子转动,同时小电机转动带动中心柱上齿轮转动,带动支撑件上下移动,洗刷结束后,控制电磁阀打开排水,排完之后中心柱再转起来,给鞋子脱水,脱水结束后控制风扇的小电机转动,PTC陶瓷发热片接电发热(一定时间),最后有个蜂鸣器报警。洗刷-排数-脱水-烘干
bit smg1=P2^0;//数码管
sbit smg2=P2^1;
sbit smg3=P2^2;
sbit smg4=P2^3;
sbit out1=P2^4;//电机
sbit out2=P2^5;
sbit out3=P2^6;
sbit out4=P2^7;
sbit beep=P1^7;//蜂鸣器
sbit out5=P3^0;//输出控制
sbit out6=P3^1;
sbit out7=P3^2;
sbit k1=P1^0;//按钮
sbit k2=P1^1;
sbit k3=P1^2;
sbit led1=P3^4;//LED
sbit led2=P3^5;
sbit led3=P3^6;
sbit led4=P3^7;
sbit led5=P3^3;
//数码管编码
uchar code smgduan0[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//显示0~9,无小数点
uchar code smgduan1[10]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};//显示0~9,有小数点
uchar time=0,mode=0;//系统变量
uchar fen=0,miao=0;//计时
uchar fen_set=0,miao_set=50;//总时间
uchar motor1_time=0,flag=0;//大电机计时
uchar beep_time=0;
uint sec=0;
uchar bei=0;
//延时
void delay(uint i)
{
while(i--);
}
//主函数
void main()
{
uchar i=0,k=0;
sec=fen_set*60+miao_set;
sec=sec/10;//时间拆分成10份
miao=miao_set;
fen=fen_set;
TMOD|=0X01;//初始化定时器
TH0=0X3C;
TL0=0XB0;
ET0=1;//打开定时器0中断允许
EA=1;//打开总中断
TR0=1;//打开定时器
while(1)
{
//启动
if(!k1)
{
if(mode==0)
mode=1;
if(mode==5)
mode=bei;
led5=1;
}
//停止
if(!k2)
{
mode=0;led5=1;
}
//暂停
if(!k3 &&(k!=3))
{
k=3;
if((mode>0)&&(mode<5))
{
bei=mode;
mode=5;
led5=0;
led1=1;
led2=1;
led3=1;
led4=1;
out1=1;
out2=1;
out3=1;
out4=1;
out5=1;
out6=1;
out7=1;
}
else if(mode==5)
{
mode=bei;
led5=1;
}
}
if(k3)
k=0;
//电机调速
if(i<10)
i++;
else
{
i=0;
}
if(mode==1)
{
if(flag==0)//洗刷
{
out2=1;
if(i<4)
out1=0;
else
out1=1;
}
else
{
out1=1;
if(i<4)
out2=0;
else
out2=1;
}
}
if(mode==3)//脱水
{
out1=0;
out2=1;
}
//显示
P0=smgduan0[fen/10];
smg1=0;
delay(30);
smg1=1;
P0=smgduan1[fen%10];
smg2=0;
delay(30);
smg2=1;
P0=smgduan0[miao/10];
smg3=0;
delay(30);
smg3=1;
P0=smgduan0[miao%10];
smg4=0;
delay(30);
smg4=1;
}
}
//定时器中断
void Timer0() interrupt 1
{
uint i;
if(time<20)//1s
资料借鉴于此 纷传