|
實(shí)現(xiàn)洗衣機(jī)常用功能,C源代碼+Proteus仿真,可以在此設(shè)計(jì)基礎(chǔ)上適當(dāng)增減功能,實(shí)現(xiàn)洗衣機(jī)的控制!
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
單片機(jī)源程序如下:
- #include<reg51.h>
- //按鍵引腳
- sbit key_1 = P1^4;
- sbit key_2 = P1^5;
- sbit key_3 = P1^6;
- sbit key_4 = P1^7;
- //電機(jī)引腳
- sbit b_1 = P1^0;
- sbit b_2 = P1^1;
- sbit b_3 = P1^2;
- sbit b_4 = P1^3;
- sbit BEEP = P2^0;
- sbit led_1 = P2^1;
- sbit led_2 = P2^2;
- sbit led_3 = P2^3;
- sbit led_4 = P2^4;
- sbit w_1 = P2^6;//位選引腳
- sbit w_2 = P2^7; //位選引腳
- sbit power_1 = P3^6; //加水
- sbit power_2 = P3^7; //脫水
- int count = 0;
- char flag=0; //當(dāng)前層
- char number=0;
- char bit_1 = 0;//位選
- char bit_2 = 0;//位選
- int time = 0;
- int time_1 = 1*60; //12分鐘 洗滌時(shí)間
- int time_2 = 1*60; //6分鐘 漂洗時(shí)間
- int time_3 = 20; //3分鐘 脫水時(shí)間
- char start = 0; //報(bào)警標(biāo)量
- //int time_4 = 12*60; //12分鐘 洗滌時(shí)間
- //數(shù)碼管a--f
- unsigned char dis[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf}; //數(shù)碼管引腳定義 0123456789 -
- void Delay10ms(unsigned char d) //誤差 0us
- {
- unsigned char a, b,c;
- //正傳按鍵按下
- if(key_1==0)
- {
- while(key_1==0); //等待正傳按鍵抬起
- flag = 1; //狀態(tài)標(biāo)量
- }
- if(key_2==0)
- {
- while(key_2==0);
- flag = 2;
- }
- if(key_3==0)
- {
- while(key_3==0);
- flag = 0;
- }
- //--c已經(jīng)在傳遞過來的時(shí)候已經(jīng)賦值了,所以在for語句第一句就不用賦值了--//
- for (c=d;c>0;c--)
- {
- for (b=38;b>0;b--)
- {
- for (a=130;a>0;a--);
- }
- }
- }
- //電機(jī)正轉(zhuǎn) A-B-C-D循環(huán)
- void dianji_z(unsigned char time)
- {
- b_1 = 1;
- b_2 = 0;
- b_3 = 0;
- b_4 = 0;
- Delay10ms(time);
- b_1 = 0;
- b_2 = 1;
- b_3 = 0;
- b_4 = 0;
- Delay10ms(time);
- b_1 = 0;
- b_2 = 0;
- b_3 = 1;
- b_4 = 0;
- Delay10ms(time);
- b_1 = 0;
- b_2 = 0;
- b_3 = 0;
- b_4 = 1;
- Delay10ms(time);
- }
- //電機(jī)反轉(zhuǎn) A-B-C-D循環(huán)
- void dianji_f(unsigned char time)
- {
- b_1 = 0;
- b_2 = 0;
- b_3 = 0;
- b_4 = 1;
- Delay10ms(time);
- b_1 = 0;
- b_2 = 0;
- b_3 = 1;
- b_4 = 0;
- Delay10ms(time);
- b_1 = 0;
- b_2 = 1;
- b_3 = 0;
- b_4 = 0;
- Delay10ms(time);
- b_1 = 1;
- b_2 = 0;
- b_3 = 0;
- b_4 = 0;
- Delay10ms(time);
- }
- //洗滌模式 漂洗模式
- void xidi()
- {
- int i; //用于for循環(huán)變量
- for(i=0;i<10;i++) //正轉(zhuǎn)10s
- dianji_z(25); //1S
- for(i=0;i<5;i++) //反轉(zhuǎn)5s
- Delay10ms(100); //1S
- for(i=0;i<10;i++) //反轉(zhuǎn)10s
- dianji_f(25); //1S
- for(i=0;i<5;i++) //反轉(zhuǎn)5s
- Delay10ms(100); //1S
- }
- void main(void)
- {
- int i; //用于for循環(huán)變量
- TMOD = 0X01; //設(shè)置定時(shí)器T0 16位
- EA = 1; //打開中斷
- ET0 = 1; //打開TO定時(shí)器
- TR0 = 1; //關(guān)閉中斷
- TH0 = (65536-5000)/256;
- TL0 = (65536-5000)%256;
-
- BEEP = 0;//蜂鳴器 不響
- led_1 = led_2 = led_3 = led_4 = 0; //指示燈 全滅
- while(1)
- {
- //開始檢測
- if(key_1==0)
- {
- while(key_1==0);
- power_2 = 1; //脫水關(guān)
- power_1 = 0; //加水
- start = 1;
- //檢測到水位
- if(key_4==0)
- {
- while(key_4==0); //水位加滿
- power_1 = 1; //停止加水
- }
- for(i=0;i<3;i++) //洗滌 漂洗 三次
- {
- //洗滌模式
- time = time_1;
- led_1 = 1;
- led_2 = led_3 = 0;
- for(;;)
- {
- xidi();
- if(time==0)
- break;
- }
- //漂洗模式
- time = time_2;
- led_2 = 1;
- led_1 = led_3 = 0;
- for(;;)
- {
- xidi();
- if(time==0)
- break;
- }
- }
- led_1 = led_2 = 0;
- led_3 = 1;
- power_2 = 0; //啟動脫水
- power_1 = 1; //不加水
- time = time_3;
- for(;;)
- {
- if(time==0)
- break;
- Delay10ms(10); //延時(shí)100ms
- }
- led_3 = 0;
- start = 0;
- }
- Delay10ms(10); //延時(shí)100ms
- }
- }
- //中斷函數(shù)
- void delay1s(void) interrupt 1
- {
- TH0 = (65536-5000)/256; //5ms產(chǎn)生一次中斷 用于數(shù)碼管動態(tài)掃描
- TL0 = (65536-5000)%256; //5ms產(chǎn)生一次中斷 用于數(shù)碼管動態(tài)掃描
- count++;
- if(count>=200) //1S時(shí)間變小
- {
- count = 0;
- if(time>0)
- time--;
- if(time>60) //顯示分鐘
- {
- bit_1 = (time/60)/10;
- bit_2 = (time/60)%10;
- }
- else if(time<60) //顯示秒
- {
- bit_1 = (time%60)/10;
- bit_2 = (time%60)%10;
- }
- }
- w_1 = w_2 = 0;
- switch(count % 2)
- {
- case 0: //數(shù)碼管1位
-
- w_1 = 1;
- w_2 = 0;
- P0 = dis[bit_1];
- break;
- case 1: //數(shù)碼管1位
- w_1 = 0;
- w_2 = 1;
- P0 = dis[bit_2];
- break;
- }
- //檢測蓋子打開 報(bào)警
- if((key_3==0)&&(start==1))
- {
- led_4 = 1; //報(bào)警指示燈
- BEEP = 1; //報(bào)警
- }
- else
- {
- led_4 = 0; //報(bào)警指示燈 不亮
- BEEP = 0; //不報(bào)警
- }
- }
復(fù)制代碼
所有資料51hei提供下載:
Exam1.rar
(189.32 KB, 下載次數(shù): 125)
2018-5-29 09:52 上傳
點(diǎn)擊文件名下載附件
|
|