IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 【毕业设计7】基于51单片机的智能洗衣机 -> 正文阅读

[嵌入式]【毕业设计7】基于51单片机的智能洗衣机

提示:记录2022年4月做的毕设

前言

基于51单片机的智能洗衣机,主控使用STC89C52。


一、任务书

1.1设计(研究)目标:

以STM32单片机为核心器件,设计一个精加车间环境检测系统,通过战舰板平台利用温度湿度,振动,PM2.5等传感器和空调,通风,空气净化等设备设计一个恒温,恒湿,抗振,高度净化的精加车间环境检测系统。利用平台的远程通信功能,实现集中检测的基本功能并保证一定的检测范围及对检测对象的合理布置,还能远程传到合适的终端。形成实时数据。
设计(研究)内容及具体要求:

1.2设计(研究)内容:

  • 待机情况下液晶屏显示日期和时间,并能通过按键来设置洗衣的开始时间和结束时间,开始时间到,洗衣模式自动启动,结束时间到,自动停止洗涤;
  • 1min后停止,蜂鸣器鸣叫三声,LED闪烁三次,洗涤倒计时时间显示在液晶显示器1602的第二行,可以通过若干个按键进行设置;
  • 四种模式:深度洗衣、标准洗衣、快速洗衣、脱水,当洗涤正在进行时,步进电机转动,四种模式电机速度分别是洗涤正转,脱水反转,其中速度从快到慢的顺序依次为深度、标准、快速、脱水则以最快速度反转,同时液晶屏第一行显示洗涤模式(英文),第二行显示倒计时时间;
  • 整个洗衣过程结束后,蜂鸣器发出三声报警,LED闪烁三次,同时液晶显示器第一行显示结束(英文END)

二、设计思路

控制系统主要由电源电路、按键设置模式电路、DS1302时钟芯片电路、1602液晶显示电路、工作状态显示电路、驱动步进电机电路、AT24C02存储芯片电路和声光报警电路构成。接通电源,单片机控制各模块相互协调,有条不紊的实现电机驱动、进水、排水、脱水等功能。

三、硬件

  • STC89C51
  • 步进电机
  • 独立按键
  • 蜂鸣器
  • LCD1602
  • 独立LED
  • 继电器
    在这里插入图片描述

四、代码以及框图等资料

/*******************************************************************************
* 使用的IO   : 电机: P1.0/P1.1/P1.2/P1.3
							 LCD:  P0.0-P0.7,P0.5、P0.6、P0.7
							 按键: P3.0、P3.1、P3.2、P3.3
							 继电器 P3.6、P3.7
*	注意			 :由于P3.2口跟红外线共用,为了不让红外线影响,最好把红外线先取下来。

* Mode1-4分别是标准、经济、单洗、单脱
* 盖子显示0表示盖子没有盖上
* 水位显示0表示水位没达到

*******************************************************************************/ 

#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;
//在lcd1602上显示的字符
unsigned char Disp1[32]="-----------------------------";
unsigned char cnt=0;
//蜂鸣器标志位
unsigned int beep_flag=0;
//定时器计时
unsigned long int time=0;
unsigned int second=0;
//unsigned int minute=0;
//电机状态,0表示停机
unsigned int State=0;
unsigned int MotorTurn=1;
unsigned int MotorFlag=1;
int i=0;
unsigned int dir=0;

//洗衣状态,1进水 2洗涤 3漂洗 4脱水 5排水
unsigned int Wash=0;
//水位显示,0表示没水
unsigned int Level=1;
//机盖,0表示没盖上
unsigned int Cover=1;
//进水出水状态
unsigned int Water_In=1;
unsigned int Water_Out=1;
//工作状态:标准1、经济2、单洗3、排水4
unsigned int Mode=1;


/*******************************************************************************
* 函 数 名         : delay
* 函数功能		     : 延时函数
*******************************************************************************/

void Delay1ms()		//@12.000MHz
{
	unsigned char i, j;

	i = 2;
	j = 239;
	do
	{
		while (--j);
	} while (--i);
}
void Delayms(unsigned int n)		//@12.000MHz
{
	while(n--)Delay1ms();
}


/*******************************************************************************
* 函数名         : RelayInit()
* 函数功能		   : 继电器初始化
*******************************************************************************/
void RelayInit(void)
{
	Relay_in  = 1;
	Relay_out = 1;
}



/*******************************************************************************
* 函数名         : Motor1
* 函数功能		   : 电机旋转函数,洗涤
*******************************************************************************/
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;
	}
 
	
}



/****************************************************************
* 函 数 名 : KeyDown
* 函数功能 : 行列扫描,检测有按键按下并读取键值
* 返 回 值   :无
* 传入参数 :*flag检测按键按下标志位
/*
27-22    key3  GPIO_KEY3
27-23    key4  GPIO_KEY4
26-22    key7  GPIO_KEY7
26-23    key8  GPIO_KEY8
*/
//****************************************************************/
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;}
	}
}
	
	
/****************************************************************
* 函 数 名 : TimerInit()
* 函数功能 : 定时器初始化
//****************************************************************/
void TimerInit(void)
{
	TMOD=0x01;//定时器0工作方式1
	TH0=0xf8;//(65536-10)/256;//赋初值定时
	TL0=0x30;//(65536-10)%256;//0.01ms
	EA=1;//开总中断
	ET0=1;//开定时器0中断
	TR0=1;//启动定时器0	
}




/****************************************************************
* 函 数 名 : paishui()、jinshui()、 xidi()、 piaoxi()、tuoshui()
* 函数功能 : 排水
//****************************************************************/
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;    //进水关
}


/****************************************************************
* 函 数 名 : 
* 函数功能 : 洗衣模式
*            Mode1()标准模式
*            Mode2()经济模式
*            Mode3()单洗模式
*            Mode4()排水模式
//****************************************************************/
/*
  0-60

	60-120
  120
*/
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;
	}
}
/*******************************************************************************
* 函 数 名         : main
* 函数功能		     : 主函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
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();
		}
		//************************************************************//
		//*********************这里是lcd1602显示*********************//
		//************************************************************//
		// 类似print,将Tem,speed打印到Disp中
		// 电机运行状态
		/*
		  洗衣模式(标准、经济、单洗、单脱)
		  水位
		  盖子
		  洗衣状态(进水、洗涤、漂洗、排水)
		*/
		//sprintf(Disp1, "S:%d M:%d L%d C%d W%d", State, Mode, Water_Level, Cover, Wash);
		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

喜欢请点赞哦!

在这里插入图片描述

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-10-08 20:58:04  更:2022-10-08 20:58:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 20:51:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码