|
基于單片機(jī)的洗衣機(jī)控制器
采用兩位數(shù)碼管顯示洗衣時(shí)間,采用驅(qū)動(dòng)芯片控制電機(jī)轉(zhuǎn)動(dòng)
全自動(dòng)洗衣機(jī)課程設(shè)計(jì)
基于51單片機(jī),C語(yǔ)言實(shí)現(xiàn)。
基本要求
模擬全自動(dòng)洗衣機(jī)工作過(guò)程。以電機(jī)替代洗衣機(jī)電機(jī)。顯示洗衣機(jī)工作的狀態(tài)(進(jìn)水、浸泡、洗衣、脫水、結(jié)束)。顯示工作剩余時(shí)間(洗衣程序可自定義,時(shí)間精度:秒)。
洗衣時(shí)交替正、反轉(zhuǎn)。
擴(kuò)展要求
洗衣和脫水時(shí)電機(jī)轉(zhuǎn)速不同。增加水位傳感器輸入。故障報(bào)警。增加聲音提示。其它自定義功能。
設(shè)計(jì)用Preteus仿真:
0.png (203.38 KB, 下載次數(shù): 80)
下載附件
2018-6-25 06:57 上傳
0.png (214.83 KB, 下載次數(shù): 40)
下載附件
2018-6-25 06:57 上傳
0.png (225.66 KB, 下載次數(shù): 49)
下載附件
2018-6-25 06:58 上傳
仿真圖如下:
- #include<reg51.h>
- //****************************//
- #define uchar unsigned char
- #define uint unsigned int
- //*******************************//
- //***************************//
- sbit mo_r = P3^2; //電機(jī)右控制線
- sbit mo_l = P3^3; //電機(jī)左控制線
- //****************************//
- sbit key_menu = P3^4; // 菜單按鍵
- sbit key_on = P3^5; // 開(kāi)始按鍵
- sbit key_off = P3^6; // 結(jié)束按鍵
- sbit key_se = P3^7; // 菜單選擇按鍵
- //***************************//
- sbit led_in = P0^0; // 進(jìn)水指示燈
- sbit led_xi = P0^1; // 洗衣指示燈
- sbit led_pao = P0^2; // 泡洗指示燈
- sbit led_xx = P0^3; // 脫水指示燈
- sbit led_out = P0^4; // 出水指示燈
- sbit led_over = P0^5; // 洗衣結(jié)束指示燈
- sbit led_work = P0^6; // 電機(jī)工作指示燈
- sbit led_wring = P0^7; // 報(bào)警指示燈
- sbit other = P3^1; // 脫水電源控制開(kāi)關(guān)
- sbit anther = P3^0; // 洗衣電源控制開(kāi)關(guān)
- //******************************//
- uchar code num[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
- //
- //*****************************//
- char sec = 0; // 時(shí)間秒
- char min = 0; // 時(shí)間分
- uchar count=0; // 中斷計(jì)數(shù)
- uchar flag0=0; // 洗衣機(jī)工作狀態(tài)標(biāo)志
- uchar flag1=0; // 進(jìn)水次數(shù)標(biāo)志
- uchar flag2=0; // 出水次數(shù)標(biāo)志
- uchar flag3=0; // 泡洗次數(shù)標(biāo)志
- uchar err =0; // 報(bào)警標(biāo)志
- uchar quan = 0;//正反轉(zhuǎn)計(jì)數(shù)
- //**********************************//
- // 函數(shù)聲明
- //*************************************//
- void delay();// 延時(shí)函數(shù)
- void in(); // 進(jìn)水子程序
- void out(); // 出水子程序
- void over(); // 結(jié)束子程序
- void xi(); // 洗衣子程序
- void pao(); // 泡衣子程序
- void xx(); // 脫水子程序
- void on(); // 工作on處理子程序
- void se(); // 顯示菜單選擇
- void SEG_display(); //顯示時(shí)間子程序
- void key_scan(); // 按鍵掃描子程序
- //*****************************//
- // 延時(shí)函數(shù)
- //****************************//
- void delay(uint i)
- {
- uint x,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)
- xi();
- if(flag0 == 2)
- pao();
- if(flag0 == 3)
- xx();
- if(flag0 == 4)
- out();
-
- }
- //*******************************//
- // 結(jié)束子程序
- //*********************************//
- void over()
- { other=0;
- anther=0;
- P0 = 0xff;
- mo_r=0;
- mo_l=0;
- led_over = 0;
- EA=0;
- }
- //*********************************//
- // 進(jìn)水子程序
- //*********************************//
- void in()
- { anther=0;
- other=0;
- P0 = 0xff;
- led_in = 0;
- flag1++;
- mo_r = 0;
- mo_l = 0;
- min = 0;
- sec = 8;
- }
- //*********************************//
- // 洗衣子程序
- //*********************************//
- void xi()
- { anther=1;
- other=0;
- P0 = 0xff;
- led_work = 0;
- led_xi = 0;
- mo_r = 1;
- mo_l = 0;
- min = 1;
- sec = 36;
- quan = 0;
- }
- //*********************************//
- // 泡衣子程序
- //*********************************//
- void pao()
- {
- anther=1;
- other=0;
- P0 = 0xff;
- led_pao = 0;
- led_work = 0;
- flag3++;
- mo_r = 1;
- mo_l = 0;
- min = 1;
- sec = 35;
- quan = 0;
- }
- //*********************************//
- // 脫水子程序
- //*********************************//
- void xx()
- { other=1;
- anther=0;
- P0 = 0xff;
- led_xx = 0;
- mo_r = 0;
- mo_l = 1;
- min = 0;
- sec = 50;
- }
- //*********************************//
- // 出水子程序
- //*********************************//
- void out()
- { anther=0;
- other=0;
- P0 = 0xff;
- led_out = 0;
- flag2++;
- mo_r = 0;
- mo_l = 0;
- min = 0;
- sec = 5;
- }
- //*********************************//
- // 顯示菜單選擇
- //*********************************//
- void se()
- {
- P0 = 0xff;
- if(flag0 >= 5)
- flag0 = 0;
- if(flag0 == 0)
- {
- led_in = 0;
- }
- if(flag0 == 1)
- {
- led_xi=0;
- }
- if(flag0 == 2)
- {
- led_pao=0;
- }
- if(flag0 == 3)
- {
- led_xx=0;
- }
- if(flag0 == 4)
- {
- led_out=0;
- }
- }
- //********************************//
- // 菜單處理子程序
- //**********************************//
- void menu()
- {
- min = 0;
- sec = 0;
- mo_r=0;
- mo_l=0;
- SEG_display();
- while(1)
- {
- if(key_on == 0)
- {
- delay(5);
- if(key_on == 0)
- {
- while(!key_on);
- on();
- break;
- }
- }
- //**************************//
- if(key_off == 0)
- {
- delay(5);
- if(key_off == 0)
- {
- while(!key_off);
- over();
- break;
- }
- }
- //****************************//
- if(key_se == 0)
- {
- delay(5);
- if(key_se == 0)
- {
- while(!key_se);
- flag0++;
- se();
- }
- }
- }
- }
- //*********************************//
- // 按鍵掃描子程序
- //*********************************//
- 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);
- }
- //*********************************//
- // 主函數(shù)
- //*********************************//
- void main()
- {
- led_in=0;
- anther=0;
- other=0;
- while(1)
- {
-
- SEG_display();
- key_scan();
- }
- }
- //**********************************//
- // 定時(shí)器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;
- case 10:mo_r=0;mo_l=0;break;
- case 15:mo_r=0;mo_l=1;break;
- case 25: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==0)) //進(jìn)水結(jié)束
- {
- switch(flag1)
- {
- case 1:flag0=1;xi();break;
- case 2:flag0=2;pao();break;
- case 3:flag0=2;pao();break;
- case 4:flag0=2;pao();break;
- default: err=1;led_wring = 0;
- }
- }
- //**********************************//
- if((sec<0)&&(min==0)&&(flag0==1)) //洗衣結(jié)束
- {
- flag0 = 4;
- out();
- }
- //**********************************//
- if((sec<0)&&(min==0)&&(flag0==2)) //泡衣結(jié)束
- {
- switch(flag3)
- {
- case 1:flag0=4;out();break;
- case 2:flag0=4;out();break;
- case 3:flag0=4;out();break;
- default: err=1;led_wring = 0;
- }
- }
- //**********************************//
- if((sec<0)&&(min==0)&&(flag0==4)) //出水結(jié)束
- {
- switch(flag2)
- {
- case 1:flag0=0;in();break;
- case 2:flag0=0;in();break;
- case 3:flag0=0;in();break;
- case 4:flag0=3;xx();break;
- default: err= 1;led_wring = 0;
- }
- }
- //***********************************//
- if((sec<0)&&(min==0)&&(flag0==3))
- { sec = 0;
- over();
- }
- }
- }
復(fù)制代碼 介于篇幅所限,詳細(xì)內(nèi)容見(jiàn)附件
|
-
-
洗衣機(jī)控制器.zip
2018-6-24 23:27 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
77.99 KB, 下載次數(shù): 288, 下載積分: 黑幣 -5
詳細(xì)內(nèi)容
|