1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
小生于去年3月份开始利用业余时间自学单片机技术,5月份搞了一份全自动洗衣机控制板, 程序在protens上模拟运行正常,实际成品中每天使用至今半年多,总的来说还可以, 只 是偶尔有时出现了当跑到了脱水的时候排水阀打开了,水排干了,而电机却还处在正反转的洗衣状态。因此还洗烂过老婆大人的心爱的小灰灰,被罚做家务一星期。 小生技术有限,搞不明是何故, 恳请前辈们,师傅们帮忙分析一下,不怜赐教是什么原因引起的。电路与程序如下,由于偏幅问题,程序只上到了标准洗部份,后面的手洗,强洗等基本与标准洗差不多,只是增加与减少洗的时间。小生第一次发贴,请多多指教。
PCB_Project3.pdf
(341.87 KB, 下载次数: 112
)
#include #define on 0 #define off 1 #define uint unsigned int #define uchar unsigned char uchar code sm[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x89,0x86,0xab}; uchar a,c,i,ii,iii; uint b; ***it k=P3^7;//按键。 ***it zheng=P0^0;//主电机正转 ***it fan=P0^1;//主电机反转 ***it pai=P0^2;//排水阀 ***it jin=P0^3;//进水阀 ***it guan=P0^4;//总电源开关动作。 ***it jink=P0^5;//水位开关 ***it mk=P3^2;//门开关 ***it led1=P3^6;//洗指示 ***it led2=P3^5;//漂指示 ***it led3=P3^4;//脱水指示 ***it bb=P3^3;//蜂鸣器 void delay (uint t) { uint x,y; for(x=t;x>0;x--) for(y=119;y>0;y--); } void init (); void shi_yi(); void to_shui(); void key(); void cs_7(); void cs_6(); void cs_5(); void cs_4(); void cs_3(); void cs_2(); void cs_1(); void cs_0(); void main () { init(); while(1) { key(); P1=sm[a]; if(a==8) { TR0=0; led1=led2=led3=0; } if(a==7)//标准洗 cs_7(); if(a==6)//浸泡洗 cs_6(); if(a==5)//强力,手洗 cs_5(); if(a==4)//快洗 cs_4(); if(a==3)//单洗,留水 cs_3(); if(a==2)//洗衣,漂衣,留水 cs_2(); if(a==1)//过水脱 cs_1(); if(a==0)//不过水脱 cs_0(); } } void init () { TMOD=1; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; //EX0=1; IT0=0; a=8; b=0; c=0; led1=0; led2=0; led3=0; zheng=off; fan=off; pai=off; jin=off; guan=off; bb=0; P1=sm[a]; } void shi_yi()//洗衣 { zheng=on; delay(3000); zheng=off; delay(2000); fan=on; delay(3000); fan=off; delay(2000); } void to_shui()//脱水 { EX0=1; P1=sm[a]; pai=on; delay(30000); for(i=10;i>0;i--) { P1=sm[a]; pai=on; zheng=on; delay(8000); zheng=off; delay(2000); } for(i=8;i>0;i--) { P1=sm[a]; pai=on; zheng=on; delay(3000); zheng=off; delay(1000); } for(i=2;i>0;i--) { P1=sm[a]; pai=on; zheng=on; delay(8000); zheng=off; delay(2000); } pai=on; zheng=on; delay(60000); P1=sm[a]; zheng=off; for(i=3;i>0;i--) delay(40000); P1=sm[a]; pai=off; delay(20000); P1=sm[a]; EX0=0; } void key() { if(k!=1) { delay(10); //去抖延时 if(k!=1) { while(k!=1);//松手检测 delay(10);//松手去抖 a--; b=0; if(a==-1) a=8; } } } void e_time0() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; b++; if(b==200) c=1; if(b==30000)//防无水与不排水保护延时 c=3; if(c==3) { while(1) { P1=sm[9]; jin=1; pai=1; } } } void exter0()interrupt 0//外部中断 { zheng=off; pai=off; P1=sm[11]; } void cs_7() { TR0=0; TR0=1;//开启定时 if(c==1)//5秒后 { if(ii==0) { jin=on;//开进水阀 准备执行洗衣 TR0=1;//开保护计时 while(jink!=0) jin=on; if(jink==0)//如果水位动作 { TR0=0;//关保护计时 jin=off;//关进水阀 for(i=150;i>0;i--)//执行300次洗程序 shi_yi(); for(i=2;i>0;i--)//脱水前调整平衡 { zheng=on; delay(1000); zheng=off; delay(500); fan=on; delay(1000); fan=off; delay(500); } pai=on;//打开排水阀 TR0=1;//开启保护计时 while(jink!=1) pai=on; if(jink==1)//当水排完 { TR0=0;//关保护计时 delay(30000); to_shui();//执行脱水程序 ii++; } } } if(ii==1) { jin=on;//开进水阀 准备执行洗衣 TR0=1;//开保护计时 led1=1; while(jink!=0) jin=on; if(jink==0)//如果水位动作 { TR0=0;//关保护计时 jin=off;//关进水阀 for(i=50;i>0;i--)//执行五次洗程序 shi_yi(); for(i=2;i>0;i--)//脱水前调整平衡 { zheng=on; delay(1000); zheng=off; delay(500); fan=on; delay(1000); fan=off; delay(500); } pai=on;//打开排水阀 TR0=1;//开保护计时 while(jink!=1) pai=on; if(jink==1)//当水排完 { TR0=0;//关保护计时 delay(30000); to_shui();//执行脱水程序 ii++; } } } if(ii==2) { jin=on;//开进水阀 准备执行洗衣 TR0=1;//开保护计时 led2=1; while(jink!=0) jin=on; if(jink==0)//如果水位动作 { TR0=0;//关保护计时 jin=off;//关进水阀 for(i=20;i>0;i--) shi_yi(); for(i=2;i>0;i--)//脱水前调整平衡 { zheng=on; delay(1000); zheng=off; delay(500); fan=on; delay(1000); fan=off; delay(500); } pai=on;//打开排水阀 TR0=1;//开保护计时 while(jink!=1) pai=on; if(jink==1)//当水排完 { TR0=0;//关保护计时 delay(30000); to_shui();//执行脱水程序 a=10; led3=1; guan=on; delay(500); guan=off; } } } } } |
|
相关推荐
12个回答
|
|
|
|
|
|
没细看程序,感觉这类程序不要用外部中断。
|
|
|
|
|
|
|
|
很不错,自己写这么多啊?学习下
|
|
|
|
学习了
|
|
|
|
{:1:}
|
|
|
|
我现在也正在学习当中,目前还帮不了你,不过你家洗衣机的单片机都是自己开发的,还是不错的,值得学习。
|
|
|
|
程序没看出什么问题来。建议把洗衣完成后的电源开关动作(guan=on; delay(500); guan=off; )前加上或者换成初始化init()。
有一个问题就是洗涤和脱水应该有离合器的控制,以控制电机带动洗涤轴或脱水轴转动,这里没有看到在哪里实现。难道是P1控制的?但是P1在洗衣过程中一直没有变化。 |
|
|
|
刚下载电路图看了,P1是显示输出到数码管。。。
|
|
|
|
|
|
|
|
|
|
|
|
电源弹跳开关是控制电源开关的,没错,这种开关是的原理当有220V的电时会从开的状态跳到关的状态,也就切断电源了,另外离合器是受排水牵引器控制的,洗的时候没排水牵引器没工作当然也就锁住了外筒的转动,到脱水的时候排水牵引器是一直工作的,它拉开的离合器外筒也就自然咬住了转轴跟着一起转了,谢谢交流。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
《DNESP32S3使用指南-IDF版_V1.6》第三十五章 摄像头实验
846 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第三十章 DHT11数字温湿度传感器
820 浏览 0 评论
910 浏览 0 评论
【敏矽微ME32G070开发板免费体验】之原厂2812测试例程解析
1693 浏览 0 评论
1307 浏览 2 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12076 浏览 31 评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-30 21:42 , Processed in 1.099877 second(s), Total 95, Slave 76 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号