設(shè)計(jì)內(nèi)容:1、3個(gè)獨(dú)立按鍵分別控制“自然風(fēng)”、“睡眠風(fēng)”、“常風(fēng)”,(三者的區(qū)別是直流電機(jī)的停歇時(shí)間不同),并在數(shù)顯管上顯示出區(qū)別
2、每種類型風(fēng)可以根據(jù)按下獨(dú)立按鍵次數(shù)分為4個(gè)檔的風(fēng)力調(diào)節(jié)。
3、設(shè)計(jì)風(fēng)扇的過熱保護(hù),用繼電器實(shí)現(xiàn)。即當(dāng)風(fēng)扇運(yùn)行一段時(shí)間后,暫停10秒。
4、其他創(chuàng)新內(nèi)容(如報(bào)警提示
程序如下:#include<reg51.h> //頭文件
sbit K1=P1^0; //定義按鍵 開關(guān) sbit K2=P1^1; //正常風(fēng) sbit K3=P1^2; //自然風(fēng) sbit K4=P1^3; //睡眠風(fēng) sbit mada=P2^0; //馬達(dá)驅(qū)動(dòng) sbit jdq=P2^1; //繼電器驅(qū)動(dòng) int PWM=40; //PWM寄存器 int dang=1; //檔位寄存器 int i,j; //輸出PWM是的變量 int moshi=0; //模式標(biāo)志 int time; //睡眠和自然風(fēng)開關(guān)間隙時(shí)間,定時(shí)寄存器 int time1; //定時(shí)工作1分鐘休息10秒鐘,定時(shí)寄存器 int daima=0; //數(shù)碼管顯示位選選擇 sbit p1=P2^4; //數(shù)碼管位選 sbit p2=P2^5; sbit p3=P2^6; sbit p4=P2^7; char data_7seg[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff,0x86}; //數(shù)碼管段碼 void xianshi() //顯示子程序 { switch(daima) {case 0: p1=0;p2=0;p3=0;p4=0; //位選關(guān) P0=data_7seg[moshi]; //發(fā)送第一位數(shù)碼管顯示代碼 p1=1;p2=0;p3=0;p4=0; //第一個(gè)位選開 daima=1; //顯示延遲 break; case 1: p1=0;p2=0;p3=0;p4=0; //位選關(guān) P0=data_7seg[10]; //發(fā)送第二位數(shù)碼管顯示代碼 p1=0;p2=1;p3=0;p4=0; //第二個(gè)位選開 daima=2; //顯示延遲 break; case 2: p1=0;p2=0;p3=0;p4=0; //位選關(guān) P0=data_7seg[10]; //發(fā)送第三位數(shù)碼管顯示代碼 p1=0;p2=0;p3=1;p4=0; //第三個(gè)位選開 if(moshi==0) daima=0; //顯示延遲 else daima=3; break; case 3: p1=0;p2=0;p3=0;p4=0; //位選關(guān) P0=data_7seg[dang]; //發(fā)送第四位數(shù)碼管顯示代碼 p1=0;p2=0;p3=0;p4=1; //第四個(gè)位選開 daima=0; //顯示延遲 break; } } void key() //按鍵掃描 { if(K1==0) //檔位切換 { dang++; //循環(huán) if(dang>4) dang=1; switch(dang) //根據(jù)檔位控制PWM占空比 { case 1: PWM=40; break; case 2: PWM=60; break; case 3: PWM=80; break; case 4: PWM=100; break; } } while(K1==0); if(K2==0) //正常模式按鍵 { moshi=1; //正常模式 } while(K2==0); if(K3==0) //自然風(fēng)模式按鍵 { moshi=2; //自然風(fēng)模式 } while(K3==0); if(K4==0) //睡眠模式按鍵 { moshi=3; //睡眠模式 } while(K4==0); } void main() //主程序 { mada=0; //初始化端口 i=100; jdq=0; TMOD=0X12; //定義中斷和開啟中斷 TH0=256-100; TL0=256-100; ET0=1;TR0=1; EA=1; TH1 = 0x3C; TL1 = 0x0B0; ET1 = 1; TR1 = 1; while(1) //無限循環(huán) { key(); //按鍵掃描 if(moshi==0) //模式=0,待機(jī) {i=0;jdq=1;time1=0; } else if(moshi==1) //模式=1,正常 i=PWM; //正常輸出 else if(moshi==2) //模式=2,自然風(fēng) { if(time<200) //開10秒,關(guān)5秒 i=PWM; else i=0; } else if(moshi==3) //模式=3,睡眠風(fēng) { if(time<100) //開5秒,關(guān)10秒 i=PWM; else i=0; } } } void Timer0Interrupt(void) interrupt 0 //定時(shí)器中斷,輸出PWM,占空比 { if(j>100) j=0; if(j<i) { mada=1; } else { mada=0; } xianshi(); } void Timer1Interrupt(void) interrupt 3 //定時(shí)器中斷0,計(jì)時(shí) { TH1 = 0x3C; TL1 = 0x0B0; if(moshi>1) time++; else time=0; time1++; if(time1>=1400) time1=0; if(time1>=1200) jdq=1; else if(moshi>0) jdq=0; if(time>=300) time=0; } |