当前位置: 首页 > article >正文

16【Protues51单片机仿真】智能洗衣机倒计时系统

目录

一、主要功能

二、硬件资源

三、程序编程

四、实现现象


一、主要功能

用直流电机转动模拟洗衣机。要求

  

有弱洗、普通洗、强洗三种模式,可通过按键选择。可以设置洗衣时长,通关按键选择15、30、45、60、90分钟。时间到蜂鸣器报警提示。LCD 显示相关信息。

仿真图:

编辑

二、硬件资源

基于KEIL5编写C++代码,PROTEUS8.15进行仿真,全部资源在页尾,提供安装包。

本系统由51单片机最小系统、LCD1602显示模块、按键模块、L298N驱动直流电机模块、蜂鸣器模块组成。

三、程序编程

#include <REGX52.H>
#include<intrins.h>
#include<stdio.h>
#include "Delay.h"
#include "lcd1602.h"
#define uchar unsigned char
#define uint unsigned  int
typedef unsigned char u8;
typedef unsigned int  u16;
typedef unsigned char uint8;
typedef unsigned int uint16;
typedef unsigned long uint32;


uchar count = 0,flag = 0;	//定时中断次数
uchar time=0,mode=0,sec=0;//系统变量
uchar fen=0,miao=0,set=0;//时间
uchar miao1=0;//倒计时
uchar disp1\[\]="00:00";
uchar disp2\[\]="00s";

sbit Motor1_IN1 = P1^1;
sbit Motor1_IN2 = P1^2;
sbit key1 = P3^0; //按键引脚
sbit key2 = P3^1;
sbit key3 = P3^2;
sbit key4 = P3^3;
sbit key5 = P3^4;
sbit key6 = P3^5;
sbit key7 = P3^6;
sbit key8 = P3^7;
sbit beep = P1^0; //蜂鸣器引脚

void keypd();

void main()					  //主函数
{	
	init_1602();       //显示屏初始化
	TMOD|=0X01;
	TH0=0X3C;
	TL0=0XB0;	
	ET0=1;//打开定时器0中断允许
	EA=1;//关闭总中断
	TR0=1;//打开定时器
	Motor1_IN1 = 0;
	Motor1_IN2 = 0;
	beep = 0; //关掉蜂鸣器
	while(1)
	{
		 keypd(); //按键判断
		if(mode==0) //停止模式
		{
			if(!key4) // 15
			{
				 set=15;
				while(!key4);
			}
			
			if(!key5) // 30
			{
				 set=30;
				while(!key5);
			}
			
			if(!key6) // 45
			{
				 set=45;
				while(!key6);
			}

			if(!key7) // 60
			{
				 set=60;
				while(!key7);
			}
			
			if(!key8) // 90
			{
				 set=90;
				while(!key8);
			}
		}
			switch(mode) //模式控制
			{
				case 0: //停止
					Motor1_IN1 = 0;
					Motor1_IN2 = 0;
				break;
				case 1: //正转
					Motor1_IN1 = 0;
					Motor1_IN2 = 1;
				break;
				case 2: //停止
					Motor1_IN1 = 0;
					Motor1_IN2 = 0;
				break;
				case 3: //反转
					Motor1_IN1 = 1;
					Motor1_IN2 = 0;
				break;
				case 4: //停止
					Motor1_IN1 = 0;
					Motor1_IN2 = 0;
				
			}
		}
}

void keypd()
{
	if(key1 == 0)
	{
		Delay(20);
		if(key1 == 0)
		{
			if(mode==0)
			{
		  write_string(2,0,"RX ");
				flag = 1;
			mode =1;
			fen=set;
			miao=0;
			miao1=25;
				
			}
		}
	}
	if(key2 == 0)
	{
		Delay(20);
		if(key2 == 0)
		{
		  if(mode==0)
			{
			write_string(2,0,"PTX");
				flag = 2;
			mode =1;
			fen=set;
			miao=0;
			miao1=15;
			}
		}
	}
	
	if(key3 == 0)
	{
		Delay(20);
		if(key3 == 0)
		{
		if(mode==0)
			{
			write_string(2,0,"QX ");
				flag = 3;
			mode =1;
			fen=set;
			miao=0;
			miao1=5;
			}
		}
	}
}
void Timer0() interrupt 1
{
	if(time<10)//0.5s
		time++;
	else
	{
		time=0;
		//显示
		if(mode==0) //停止运行
		{
			write_string(1,0,"set:            ");
			disp1\[0\]=set/10+0x30;
			disp1\[1\]=set%10+0x30;
			disp1\[3\]='0';
			disp1\[4\]='0';
			write_string(2,5,disp1);
		}
		else//运行倒计时
		{
			write_string(1,0,"run:");
			disp1\[0\]=fen/10+0x30;
			disp1\[1\]=fen%10+0x30;
			disp1\[3\]=miao/10+0x30;
			disp1\[4\]=miao%10+0x30;
			write_string(2,5,disp1);
			disp2\[0\]=miao1/10+0x30;
			disp2\[1\]=miao1%10+0x30;
			write_string(1,6,disp2);
		}
	}
		
	if(mode>0) //开始运行
	{
	if(sec<19)//1s
		sec++;
	else
	{
		sec=0;
		if(miao>0)//秒计时
			miao--;
		else
		{
			if(fen>0)
			{
				miao=59;//分计时
				fen--;
			}
			else
			{
				beep=1;	//结束 蜂鸣器响
				mode=0;
			}
		}
		if(mode==1)//正转
		{
			if(miao1>0)
			 	miao1--;
			else
			{
				miao1=5;
				mode=2;
			}
		}
		else if(mode==2)//暂停
		{
			if(miao1>0)
			 	miao1--;
			else
			{
				if(flag==1)
				{
				miao1=25;
				}
				if(flag==2)
				{
				miao1=15;
				}
				if(flag==3)
				{
				miao1=5;
				}
				mode=3;
			}
		}
		else if(mode==3)//反转
		{
			if(miao1>0)
			 	miao1--;
			else
			{
				miao1=5;
				mode=4;
			}
		}
		else if(mode==4)//暂停
		{
			if(miao1>0)
			 	miao1--;
			else
			{
					if(flag==1)
				{
				miao1=25;
				}
				if(flag==2)
				{
				miao1=15;
				}
				if(flag==3)
				{
				miao1=5;
				}
				mode=1;
			}
		}	
		else
		{
			miao1=0;
		}			
	}
	}	
	TH0=0X3C;
	TL0=0XB0;
}

四、实现现象

具体动态效果看B站演示视频:

基于51单片机的洗衣机仿真_哔哩哔哩_bilibili

全部资料(源程序、仿真文件、安装包、演示视频):

链接:https://pan.baidu.com/s/13_dZAdQ4VTWunsk25mU-Rg 
提取码:k0us 
–来自百度网盘超级会员V4的分享


http://www.kler.cn/news/314569.html

相关文章:

  • 【如何在 Windows 10 主机上通过 VMware 安装 Windows 11 虚拟机,并共享主机网络】
  • ftp服务的管理及安全优化
  • Google 扩展 Chrome 安全和隐私功能
  • C/C++通过CLion2024进行Linux远程开发保姆级教学
  • io多路复用:epoll水平触发(LT)和边沿触发(ET)的区别和优缺点
  • Linux 自旋锁
  • Spring Mybatis 动态语句 总结
  • 简单生活的快乐
  • (k8s)kubernetes集群基于Containerd部署
  • Flask-SQLAlchemy一对多 一对一 多对多关联
  • GDPU Andriod移动应用 Activity
  • 【数据结构与算法】LeetCode:哈希表
  • Alinx MPSoC驱动开发第17章I2C实验修改设备树后petalinux编译报错
  • 分布式Id生成策略-美团Leaf
  • 使用python对图像批量水平变换和垂直变换
  • 深度学习参数管理
  • MySQL-DDL/DML(数据定义/操作语言)
  • GIS开发之如何使用OpenLayers,Leaflet,Mapbox,Cesium,ArcGIS, Turf.js 与 D3.js
  • 【Webpack--00802】配置Babel语法兼容
  • 【图像检索】基于Gabor特征的图像检索,matlab实现
  • Python面试宝典第50题:分割等和子集
  • Vscode、插件历史版本下载
  • [数据结构与算法·C++] 笔记 1.4 算法复杂性分析
  • [附源码]SpringBoot+VUE+Java实现人脸识别系统
  • 实战指南:深度剖析Servlet+JSP+JDBC技术栈下的用户CRUD操作
  • 探秘 Web Bluetooth API:连接蓝牙设备的新利器
  • 828华为云征文|Flexus X实例GitLab部署构建流水线-私人一体化代码仓库~
  • AWS账号可以共用吗?
  • vue 中互相不关联的两个组件怎么进行通信(数据传输)
  • MFC获取网页的html文本