一、洗衣機控制系統設計
設計內容:
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();
- }
- }
- }
復制代碼
程序問題挺多的,希望大家幫幫忙。謝謝大家了
|