基于51单片机的洗衣机【数码管,预置时间】(仿真)

设计一个全自动洗衣机控制器

洗涤时间为10-30分,可预置,并显示时间一分

洗涤时按进水-洗涤-放水-脱水顺序工作,洗涤三次后结束,并声音提示

洗涤时间分配:第一次为总预置时间的1/2,第二次为总时间的1/3,第三次为总时间1/6

洗涤时分正反转交替工作

 

 

it k3=P1^3;
sbit k4=P1^4;
sbit k5=P1^5;
sbit smg1=P2^0;//数码管
sbit smg2=P2^1;
sbit smg3=P2^2;
sbit smg4=P2^3;
sbit smg5=P2^4;
sbit smg6=P2^5;
sbit beep=P1^0;//蜂鸣器
sbit out1=P1^6;
sbit out2=P1^7;
uchar code smgduan0[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//显示0~9,无小数点
uchar code smgduan1[10]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};//显示0~9,有小数点
uchar time=0,mode=0;//系统变量
uchar fen=10,miao=0,set=10;//计时
uchar flag=0,sec=0;//方向控制
uchar beep_time=0;
uchar cishu=0,biaozhi=0;//计数
//加水20s,放水20s,甩干30s
//延时函数
void delay(uint i)
{
	while(i--);
}
//主函数
void main()
{
	uchar k=0;
	P3=0xfb;
	TMOD|=0X01;
	TH0=(65536-50000)/256;
	TL0=(65536-50000)%256;	
	ET0=1;//打开定时器0中断允许
	EA=1;//打开总中断
	TR0=1;//打开定时器
	while(1)
	{
		//显示
		if(mode==0)//设置模式
		{
			P0=smgduan0[set/10];smg3=0;delay(50);smg3=1;
			P0=smgduan0[set%10];smg4=0;delay(50);smg4=1;
		}		   
		else//洗衣模式
		{
			P0=smgduan0[cishu];smg1=0;delay(50);smg1=1;
			P0=smgduan0[fen/10];smg3=0;delay(50);smg3=1;
			P0=smgduan1[fen%10];smg4=0;delay(50);smg4=1;
			P0=smgduan0[miao/10];smg5=0;delay(50);smg5=1;
			P0=smgduan0[miao%10];smg6=0;delay(50);smg6=1;
		}
		//按键检测
		if(mode==0)
		{
			if(!k1 &&(k!=1))//加
			{
				k=1;
				if(set<30)
					set++;
			}
			if(!k2 &&(k!=2))//减
			{
				k=2;
				if(set>10)
					set--;
			}
		}
		if(!k3 &&(k!=3))//开始
		{
			k=3;
			mode=1;
			TR0=1;
			fen=set;
			miao=0;
		}
		if(!k4 &&(k!=4))//暂停
		{
			k=4;
			TR0=!TR0;
			P3=0xfd;
		}
		if(!k5 &&(k!=5))//停止
		{
			k=5;
			TR0=0;
			mode=0;
			P3=0xfb;
			cishu=0;
			beep_time=0;
		}
		if(k1 && k2 && k3 && k4 && k5)
		{
			k=0;
		}
	}
}
//定时器0中断
void Timer0() interrupt 1
{
	uint i,j;
	if(mode==1)
	{
	if(time<19)//1s
		time++;
	else
	{
		time=0;
		if(miao>0)//秒计时
			miao--;
		else
		{
			if(fen>0)//计时
			{
				miao=59;
				fen--;
			}
			else
			{
				mode=3;//结束
			}
		}
		i=fen*60+miao;
		j=set*60;
		//加水
		if((i>j-20)||((i<j/2)&&(i>j/2-20))||((i<j/6)&&(i>j/6-20)))
		{
			P3=0xf7;
			out1=1;
			out2=1;
			if(biaozhi==0)
			{
				biaozhi=1;
				cishu++;
			}
		}

 资料借鉴于此纷传

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白茶丫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值