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

news2024/11/14 20:18:56

目录

一、主要功能

二、硬件资源

三、程序编程

四、实现现象


一、主要功能

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

  

有弱洗、普通洗、强洗三种模式,可通过按键选择。可以设置洗衣时长,通关按键选择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.coloradmin.cn/o/2156811.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL:事务的ACID特性隔离级别脏读/不可重复读/幻读/Next-Key锁——场景复现

目录 1、什么是事务 2、 事务的ACID特性 2.1 事务的隔离性 3、为什么要使用事务&#xff1f; 4、查看支持事务的存储引擎 5、使用事务 5.1 控制事务 5.1.1 开启事务 5.1.2 关闭事务 5.2 开始一个事务&#xff0c;执行修改后回滚 5.3 开始一个事务&#xff0c;执行修…

set-ExecutionPolicy RemoteSigned 提示不是内部或外部命令,也不是可运行的程序或批处理文件

这个错误一般发生在使用命令提示符或者PowerShell窗口中找不到set-ExecutionPolicy RemoteSigned。如果你想在命令提示符或者PowerShell窗口运行set-ExecutionPolicy RemoteSigned&#xff0c;你需要搜索打开Window PowerShell ISE&#xff0c;并以管理员身份打开&#xff0c;输…

图结构感知的Transformer:一种新的图表示学习方法

人工智能咨询培训老师叶梓 转载标明出处 尽管图神经网络&#xff08;GNNs&#xff09;在处理图数据方面取得了显著成就&#xff0c;但它们在表达能力和捕获长距离依赖方面存在局限性。为了突破这些局限&#xff0c;研究者们开始探索将Transformer架构应用于图表示学习。在此基…

使用Electron打包一个Vue3项目全步骤

1.创建一个Vue3项目 2.使用 WebStorm打开项目&#xff0c;并安装依赖项 npm install 等待完成后&#xff0c; 安装electron npm install --save-dev electron 等待完成后&#xff0c; 安装electron 打包依赖项(打包成可执行文件) npm install electron-packager --save-dev 3…

从零开始一个git操作实例,图文并茂

徒弟不懂git怎么用&#xff0c; 于是写了篇文章&#xff0c; 把本地git操作从头写了一遍&#xff0c; 自己去看吧&#xff01; 0、基本概念 •Git是一个免费、开源的、分布式版本控制系统 •它使用一个特殊的叫做仓库的数据库来记录文件的变化 •仓库中的每个文件都有一个…

ccfcsp-202406(1、2、3、4、5)

矩阵重塑&#xff08;其一&#xff09; #include <bits/stdc.h> using namespace std; int main() {int n,m,p,q;cin >> n >> m >> p >> q;vector<int> vec(n * m);vector<vector<int>> res(p, vector(q,0));int k 0;for(in…

力扣反转链表系列【25. K 个一组翻转链表】——由易到难,一次刷通!!!

力扣《反转链表》系列文章目录 刷题次序&#xff0c;由易到难&#xff0c;一次刷通&#xff01;&#xff01;&#xff01; 题目题解206. 反转链表反转链表的全部 题解192. 反转链表 II反转链表的指定段 题解224. 两两交换链表中的节点两个一组反转链表 题解325. K 个一组翻转…

HarmonyOS---权限和http/Axios网络请求

网络请求(http,axios) 目录 一、应用权限管理1.1权限的等级1.2授权方式1.3声明权限的配置1.4如何向用户进行申请 二、内置http请求使用三、Axios请求使用&#xff08;建议&#xff09;3.1 使用方式一3.2 使用方式二&#xff08;建议&#xff09; 一、应用权限管理 应用权限保护…

git仓库服务器端损坏如何用本地code重新部署

文章目录 1. **在新服务器上创建一个新的 Git 仓库**2. **将本地仓库推送到新服务器**2.1. 添加新服务器为远程仓库2.2. 推送代码和历史记录2.3. 推送 tags&#xff08;如果有 tags&#xff09; 3. **在新服务器上拉取代码并部署**4. **确保修改记录和历史完整**5. **可选&…

Flink Task 日志文件隔离

Flink Task 日志文件隔离 任务在启动时会先通过 MdcUtils 启动一个 slf4j 的 MDC 环境&#xff0c;然后将 jobId 添加到 slf4j 的 MDC 容器中&#xff0c;随后任务输出的日志都将附带 joid。 MDC 介绍如下&#xff1a; MDC ( Mapped Diagnostic Contexts )&#xff0c;它是一个…

Linux 线程互斥

文章目录 3. Linux 线程互斥3.1 相关概念3.2 互斥量mutex3.3 互斥量的接口3.4 改进3.2中的代码3.5 互斥量&#xff08;锁&#xff09;的原理3.6 封装一下原生锁的接口&#xff0c;RAII风格的锁3.7 可重入 和 线程安全 3. Linux 线程互斥 3.1 相关概念 临界资源&#xff1a;多…

web自动化学习笔记

目录 一、web自动化测试环境搭建二、web自动化测试第一个脚本三、selenium 8种定位方式3.1、通过id定位3.2、通过name定位3.3、通过tag_name&#xff08;标签名&#xff09;定位3.4、通过class值进行定位3.5、通过链接文本定位3.6、通过部分链接文本定位3.7、通过xpath定位3.8、…

MySQL:SQL语句执行过程

本篇文章会分析下一个 SQL 语句在 MySQL 中的执行流程&#xff0c;包括 SQL 的查询在 MySQL 内部会怎么流转&#xff0c;SQL 语句的更新是怎么完成的。 在分析之前我会先带着你看看 MySQL 的基础架构&#xff0c;知道了 MySQL 由那些组件组成以及这些组件的作用是什么&#xf…

Spring_AMQP

文章目录 一、SpringAMQP二、SpringAMQP应用2.1、消息发送2.2、消息接收 一、SpringAMQP SpringAMQP是基于RabbitMQ封装的一套模板&#xff0c;并且还利用SpringBoot对其实现了自动装配&#xff0c;使用起来非常方便。 SpringAmqp的官方地址。 SpringAMQP提供了三个功能&am…

python27 安装pywinauto-0.6.8

文章目录 环境所需依赖依赖查找所需依赖链接1. comtypes2. six3. pyWin324. (optional) Pillow (to make screenshoots)5. pywinauto 安装结果 环境 windows 11 Python 2.7 setuptools 18.0.1 pip 18.1 所需依赖 依赖查找 按照官方文档&#xff08;https://pywinauto.readt…

MMROTATE 1.X特征图可视化(绘制Heat Map)

本文参考MMYOLO官方的特征图可视化教程&#xff0c;对MMROTATE相关算法进行特征图可视化 1. 新建featmap_vis_demo.py文件 在mmrotate项目文件夹下新建 featmap_vis_demo.py &#xff1a; # Copyright (c) OpenMMLab. All rights reserved. import argparse import os from t…

java intellij idea开发步骤,使用指南,工程创建与背景色字体配置,快捷键

intellij idea2021 配置背景色&#xff0c;字体大小&#xff0c;主题 快捷键

STM32系统时钟

时钟为单片机提供了稳定的机器周期&#xff0c;从而使我们的系统能够正常的运行 时钟就像我们人的心脏&#xff0c;一旦有问题就整个都会崩溃 stm32有很多外设&#xff0c;但不是所有的外设都使用同一种时钟频率工作&#xff0c;比如我们的内部看门狗和RTC 只要30几k的频率就…

计算机毕业设计推荐-基于python的白酒销售数据可视化分析

精彩专栏推荐订阅&#xff1a;在下方主页&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f496;&#x1f525;作者主页&#xff1a;计算机毕设木哥&#x1f525; &#x1f496; 文章目录 一、白酒销售数据…

react:React Hook函数

使用规则 只能在组件中或者其他自定义的Hook函数中调用 只能在组件的顶层调用&#xff0c;不能嵌套在if、for、 其他函数中 基础Hook 函数 useState useState是一个hook函数&#xff0c;它允许我们向组件中添加一个状态变量&#xff0c;从而控制影响组件的渲染结果 示例1…