提示:记录2022年4月做的毕设
前言
基于51单片机的智能洗衣机,主控使用STC89C52。
一、任务书
1.1设计(研究)目标:
以STM32单片机为核心器件,设计一个精加车间环境检测系统,通过战舰板平台利用温度湿度,振动,PM2.5等传感器和空调,通风,空气净化等设备设计一个恒温,恒湿,抗振,高度净化的精加车间环境检测系统。利用平台的远程通信功能,实现集中检测的基本功能并保证一定的检测范围及对检测对象的合理布置,还能远程传到合适的终端。形成实时数据。 设计(研究)内容及具体要求:
1.2设计(研究)内容:
- 待机情况下液晶屏显示日期和时间,并能通过按键来设置洗衣的开始时间和结束时间,开始时间到,洗衣模式自动启动,结束时间到,自动停止洗涤;
- 1min后停止,蜂鸣器鸣叫三声,LED闪烁三次,洗涤倒计时时间显示在液晶显示器1602的第二行,可以通过若干个按键进行设置;
- 四种模式:深度洗衣、标准洗衣、快速洗衣、脱水,当洗涤正在进行时,步进电机转动,四种模式电机速度分别是洗涤正转,脱水反转,其中速度从快到慢的顺序依次为深度、标准、快速、脱水则以最快速度反转,同时液晶屏第一行显示洗涤模式(英文),第二行显示倒计时时间;
- 整个洗衣过程结束后,蜂鸣器发出三声报警,LED闪烁三次,同时液晶显示器第一行显示结束(英文END)
二、设计思路
控制系统主要由电源电路、按键设置模式电路、DS1302时钟芯片电路、1602液晶显示电路、工作状态显示电路、驱动步进电机电路、AT24C02存储芯片电路和声光报警电路构成。接通电源,单片机控制各模块相互协调,有条不紊的实现电机驱动、进水、排水、脱水等功能。
三、硬件
- STC89C51
- 步进电机
- 独立按键
- 蜂鸣器
- LCD1602
- 独立LED
- 继电器
四、代码以及框图等资料
#include "reg52.h"
#include "intrins.h"
#include "lcd.h"
#include "stdio.h"
sbit K1=P1^0;
sbit K2=P1^1;
sbit K3=P1^2;
sbit K4=P1^3;
sbit BEEP=P1^5;
sbit Relay_in =P3^6;
sbit Relay_out=P3^7;
sbit GPIO_KEY1=P3^1;
sbit GPIO_KEY2=P3^0;
sbit GPIO_KEY3=P3^2;
sbit GPIO_KEY4=P3^3;
unsigned char code FFW[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9};
unsigned char KeyValue=0;
unsigned char flag=0;
unsigned char *p=&flag;
unsigned char Disp1[32]="-----------------------------";
unsigned char cnt=0;
unsigned int beep_flag=0;
unsigned long int time=0;
unsigned int second=0;
unsigned int State=0;
unsigned int MotorTurn=1;
unsigned int MotorFlag=1;
int i=0;
unsigned int dir=0;
unsigned int Wash=0;
unsigned int Level=1;
unsigned int Cover=1;
unsigned int Water_In=1;
unsigned int Water_Out=1;
unsigned int Mode=1;
void Delay1ms()
{
unsigned char i, j;
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
void Delayms(unsigned int n)
{
while(n--)Delay1ms();
}
void RelayInit(void)
{
Relay_in = 1;
Relay_out = 1;
}
void Motor()
{
switch(i)
{
case 0 : { K1=0;K2=0;K3=0;K4=1; break;}
case 1 : { K1=0;K2=0;K3=1;K4=1; break;}
case 2 : { K1=0;K2=0;K3=1;K4=0; break;}
case 3 : { K1=0;K2=1;K3=1;K4=0; break;}
case 4 : { K1=0;K2=1;K3=0;K4=0; break;}
case 5 : { K1=1;K2=1;K3=0;K4=0; break;}
case 6 : { K1=1;K2=0;K3=0;K4=0; break;}
case 7 : { K1=1;K2=0;K3=0;K4=1; break;}
}
if(MotorTurn)
{
i++;
if(i>7)i=0;
}
else
{
i--;
if(i<0)i=7;
}
}
void KeyDown(unsigned char *flag)
{
GPIO_KEY1=1;GPIO_KEY2=1;GPIO_KEY3=1;GPIO_KEY4=1;
Delayms(1);
if(GPIO_KEY1==0||GPIO_KEY2==0||GPIO_KEY3==0||GPIO_KEY4==0)
{
Delayms(5);
if(GPIO_KEY1==0) {*flag=1;KeyValue=1;}
else if(GPIO_KEY2==0){*flag=1;KeyValue=2;}
else if(GPIO_KEY3==0){*flag=1;KeyValue=3;}
else if(GPIO_KEY4==0){*flag=1;KeyValue=4;}
}
}
void TimerInit(void)
{
TMOD=0x01;
TH0=0xf8;
TL0=0x30;
EA=1;
ET0=1;
TR0=1;
}
void paishui(void)
{
Wash=2;
MotorFlag=0;
Relay_out=0;
Relay_in=1;
}
void jinshui(void)
{
Wash=1;
MotorFlag=0;
Relay_out=1;
Relay_in=0;
}
void xidi(void)
{
Wash=4;
MotorFlag=1;
Relay_out=1;
Relay_in=1;
}
void piaoxi(void)
{
Wash=5;
MotorFlag=1;
Relay_out=1;
Relay_in=1;
}
void tuoshui(void)
{
Wash=4;
MotorFlag=1;
Relay_out=0;
Relay_in=1;
}
void Mode1(void)
{
if(second<120)jinshui();
else if(second>=120&&second<240)
{
if(Level==1)
{
beep_flag=0;
xidi();
}
else if(Level==0) beep_flag=1;
}
else if(second>=240&&second<360)paishui();
else if(second>=360&&second<480)jinshui();
else if(second>=480&&second<600)
{
if(Level==1)
{
beep_flag=0;
piaoxi();
}
else if(Level==0)
{
beep_flag=1;
}
}
else if(second>=600&&second<720)paishui();
else if(second>=720&&second<840)jinshui();
else if(second>=840&&second<960)
{
if(Level==1)
{
beep_flag=0;
piaoxi();
}
else if(Level==0)
{
beep_flag=1;
}
}
else if(second>=960&&second<1080)paishui();
else if(second>=1080&&second<1200)jinshui();
else if(second>=1200&&second<1320)
{
if(Level==1)
{
beep_flag=0;
piaoxi();
}
else if(Level==0)
{
beep_flag=1;
}
}
else if(second>=1320&&second<1440)paishui();
else if(second>=1440&&second<1560)tuoshui();
else
{
MotorFlag=0;
time=0;
State=0;
}
}
void Mode2(void)
{
if(second<60)jinshui();
else if(second>=60&&second<120)
{
if(Level==1)
{
beep_flag=0;
xidi();
}
else if(Level==0) beep_flag=1;
}
else if(second>=120&&second<180)paishui();
else if(second>=180&&second<240)jinshui();
else if(second>=240&&second<300)
{
if(Level==1)
{
beep_flag=0;
piaoxi();
}
else if(Level==0) beep_flag=1;
}
else if(second>=300&&second<360)paishui();
else if(second>=360&&second<420)jinshui();
else if(second>=420&&second<480)
{
if(Level==1)
{
beep_flag=0;
piaoxi();
}
else if(Level==0) beep_flag=1;
}
else if(second>=480&&second<540)paishui();
else if(second>=540&&second<600)tuoshui();
else
{
MotorFlag=0;
time=0;
State=0;
}
}
void Mode3(void)
{
if(second<60)jinshui();
else if(second>=60&&second<120)
{
if(Level==1)
{
beep_flag=0;
xidi();
}
else if(Level==0) beep_flag=1;
}
else
{
MotorFlag=0;
time=0;
State=0;
}
}
void Mode4(void)
{
if(second<60)paishui();
else if(second>=60&&second<120)
{
if(Cover==1)
{
tuoshui();
}
else
{
MotorFlag=0;
Water_In=1;
Water_Out=1;
time=0;
State=0;
Mode=0;
}
}
else
{
MotorFlag=0;
State=0;
time=0;
}
}
void main(void)
{
LcdInit();
TimerInit();
RelayInit();
while(1)
{
KeyDown(p);
if(flag==1)
{
flag=0;
switch(KeyValue)
{
case(1):{ State=!State; break;}
case(2):{ Mode++; break;}
case(3):{ Level=!Level; break;}
case(4):{ Cover=!Cover; break;}
}
}
if(Mode>4)Mode=1;
if(Mode==1&&State==1)
{
Mode1();
}
else if(Mode==2&&State==1)
{
Mode2();
}
else if(Mode==3&&State==1)
{
Mode3();
}
else if(Mode==4&&State==1)
{
Mode4();
}
sprintf(Disp1, "T:%d M:%d L:%d C:%d ", second, Mode, Level, Cover);
for(cnt=0;cnt<16;cnt++)
{
LcdWriteData(Disp1[cnt]);
}
}
}
五、联系我们
承接stm32单片机、STC系列单片机设计、嵌入式。问题咨询联系QQ:2424644692
喜欢请点赞哦!
|