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

目录

一、主要功能

二、硬件资源

三、程序编程

四、实现现象


一、主要功能

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

cpp 复制代码
  

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

仿真图:

编辑

二、硬件资源

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

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

三、程序编程

cpp 复制代码
#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的分享

相关推荐
hn小菜鸡3 小时前
LeetCode 377.组合总和IV
数据结构·算法·leetcode
xuanzdhc3 小时前
Linux 基础IO
linux·运维·服务器
愚润求学3 小时前
【Linux】网络基础
linux·运维·网络
Deepoch3 小时前
Deepoc 大模型:无人机行业的智能变革引擎
人工智能·科技·算法·ai·动态规划·无人机
bantinghy3 小时前
Linux进程单例模式运行
linux·服务器·单例模式
小和尚同志4 小时前
29.4k!使用 1Panel 来管理你的服务器吧
linux·运维
帽儿山的枪手4 小时前
为什么Linux需要3种NAT地址转换?一探究竟
linux·网络协议·安全
shadon1789 天前
回答 如何通过inode client的SSLVPN登录之后,访问需要通过域名才能打开的服务
linux
小米里的大麦9 天前
014 Linux 2.6内核进程调度队列(了解)
linux·运维·驱动开发
heimeiyingwang9 天前
【深度学习加速探秘】Winograd 卷积算法:让计算效率 “飞” 起来
人工智能·深度学习·算法