一、洗衣机控制系统设计
设计内容:
1、用直流电机的转速表征三种不同洗衣方式,弱洗、强洗、漂洗;
2、用三个独立按键设置待洗衣物的不同洗涤方式:
丝质衣服:漂洗定时3秒
棉质衣服:弱洗2秒;强洗5秒;漂洗3秒;
化纤衣服:强洗4秒;漂洗2秒;3,用按键自行调整洗涤方式,即自行调整弱洗,强洗,漂洗的定时时间4、定时时间到,光报警提示。(20分)
经过2个星期逼着自己学习c51单片机,就是我以前发的那个洗衣机的然后写了这个程序,无奈啊,想让大家帮帮忙改一改啥的,写的不好,就别喷了
然后我们学校实验室比较简陋,好像是电动机只能用什么AD还是DA吧,好像不让用P3口好像,然后我也不会写电动机这一块了,写的比较垃圾,洗衣时间算的也不咋明白,帮帮忙,救救孩子吧。undefined
这个就是我的程序了
- #include<reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- //****************************//
- sbit key_mianzhi=P1^4; // 棉质按键
- sbit key_on=P1^5; // 开始按键
- sbit key_off=P1^6; // 结束按键
- sbit key_sizhi=P1^7; // 丝质按键
- sbit key_huaxian=P1^1; // 化纤按键
- //***************************//
- sbit led_wring=P0^7; // 报警指示灯
- //******************************//
- uchar codenum[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
- //*****************************//
- char sec=0; // 时间秒
- char min=0; // 时间分
- uchar count=0; // 中断计数
- uchar flag0=0; // 洗衣机工作状态标志
- uchar flag1=0; // piaoxi标志
- uchar flag2=0; // qiangxi标志
- uchar flag3=0; // ruoxi标志
- uchar err=0; // 报警标志
- //**********************************//
- void delay(); // 延时函数
- void over(); // 结束子程序
- void piaoxi(); // 票子程序
- void ruoxi(); // 弱子程序
- void qiangxi(); // 强子程序
- void on(); // 工作on处理子程序
- void se(); // 显示菜单选择
- void SEG_display(); // 显示时间子程序
- void key_scan(); // 按键扫描子程序
- **************************************
- void delay(uint i)
- {
- uintx,y;
- for(x=i;x>0;x--)
- for(y=120;y>0;y--);
- }
- //*********工作on处理子程序**********//
- void on()
- {
- TMOD=0x01;
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- EA=1;
- ET0=1;
- TR0=1;
- P0 = 0xff;
- if(flag0==0)
- in();
- if(flag0==1)
- qiangxi();
- if(flag0==2)
- piaoxi();
- if(flag0==3)
- ruoxi();
- if(flag0==4)
- out();
-
- }
- //********结束子程序*********//
- void over()
- { other=0;
- anther=0;
- P0=0xff;
- mo_r=0;
- mo_l=0;
- led_over=0;
- EA=0;
- }
- //**********进水子程序**********//
- voidin()
- { anther=0;
- other=0;
- P0=0xff;
- led_in=0;
- flag1++;
- mo_r=0;
- mo_l=0;
- min=0;
- sec=8;
- }
- //**********漂洗子程序**********//
- void piaoxi()
- { anther=1;
- other=0;
- P0=0xff;
- mo_r=1;
- mo_l=1;
- min=0;
- sec=10;
- quan=0;
- }
- //
- //********强洗程序********//
- void piaoxi()
- {
- anther=1;
- other=0;
- P0=0xff;
- mo_r=1;
- mo_l=0;
- min=1;
- sec=10;
-
- }
- //*********弱洗子程序********//
- void ruoxi()
- {
- other=1;
- anther=0;
- P0=0xff;
- mo_r=1;
- mo_l=0;
- sec=5;
- }
- //*********漂洗子程序********//
- void piaoxi()
- {
- other=1;
- anther=0;
- P0=0xff;
- mo_r=1;
- sec=5;
- mo_l=1;
- sec=5;
- }
- //*********按键扫描子程序*********//
- void key_scan()
- {
- if(key_menu==0)
- {
- delay(5);
- if(key_menu==0)
- {
- while(!key_menu);
- menu();
- }
- }
- //********************************//
- if(key_on==0)
- {
- delay(5);
- if(key_on==0)
- {
- while(!key_on);
- on();
- }
- }
- //*********************************//
- if(key_off==0)
- {
- delay(5);
- if(key_off==0)
- {
- while(!key_off);
- over();
- }
- }
- }
- //*********显示子程序**********//
- void SEG_display()
- {
- P1=0x01;
- P2=num[min/10];
- delay(10);
- P1=0x02;
- P2=num[min%10];
- delay(10);
- P1=0x04;
- P2=num[sec/10];
- delay(10);
- P1=0x08;
- P2=num[sec%10];
- delay(10);
- }
- //*********主函数**********//
- void main()
- {
- led_in=0;
- anther=0;
- other=0;
- while(1)
- {
- SEG_display();
- key_scan();
- }
- }
- //*****定时器0中断处理程序*****//
- void timer0() interrupt 1
- {
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- count++;
- if(count==20)
- {
- count=0;
- sec--;
- if((flag0==1)||(flag0==2))
- {
- quan++;
- switch(quan)
- {
- case 1:mo_r=1;mo_l=0;break;
- case10:mo_r=0;mo_l=0;break;
- case15:mo_r=0;mo_l=1;break;
- case25:mo_r=0;mo_l=0;break;
- default:;
- }
- if(quan==30)
- {
- quan=0;
- }
- }
- //**********************************//
- if((sec==0)&&(min!= 0))
- {
- min--;
- sec=59;
- }
-
- //**********************************//
- if((sec<0)&&(min==0)&&(flag0==1)) //洗衣结束
- {
- flag0=4;
- out();
- }
- //**********************************//
- if((sec<0)&&(min==0)&&(flag0==2)) //泡衣结束
- {
- switch(flag3)
- {
- case1:flag0=4;out();break;
- case2:flag0=4;out();break;
- case3:flag0=4;out();break;
- default:err=1;led_wring = 0;
- }
- }
- //**********************************//
- if((sec<0)&&(min==0)&&(flag0==4)) //出水结束
- {
- switch(flag2)
- {
- case1:flag0=0;in();break;
- case2:flag0=0;in();break;
- case3:flag0=0;in();break;
- case4:flag0=3;xx();break;
- default:err=1;led_wring=0;
- }
- }
- //***********************************//
- if((sec<0)&&(min==0)&&(flag0==3))
- { sec=0;
- over();
- }
- }
- }
复制代码
程序问题挺多的,希望大家帮帮忙。谢谢大家了
|