基于物聯(lián)網(wǎng)技術(shù)的智能繼電器設(shè)計(jì)與應(yīng)用研究_第1頁
基于物聯(lián)網(wǎng)技術(shù)的智能繼電器設(shè)計(jì)與應(yīng)用研究_第2頁
基于物聯(lián)網(wǎng)技術(shù)的智能繼電器設(shè)計(jì)與應(yīng)用研究_第3頁
基于物聯(lián)網(wǎng)技術(shù)的智能繼電器設(shè)計(jì)與應(yīng)用研究_第4頁
基于物聯(lián)網(wǎng)技術(shù)的智能繼電器設(shè)計(jì)與應(yīng)用研究_第5頁
已閱讀5頁,還剩51頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

REF_Ref374089180\h圖35圖STYLEREF1\s3SEQ圖\*ARABIC\s15穩(wěn)壓電源電路第4章系統(tǒng)軟件的設(shè)計(jì)與實(shí)現(xiàn)4.1系統(tǒng)軟件功能設(shè)計(jì)(一)按下“M”鍵,會(huì)依次出現(xiàn)以下菜單設(shè)置值:P1、P2、P3,不過不會(huì)顯示P0。1.P1S:延遲范圍從0.01秒到99.99秒;2.P1R:延遲范圍從1秒到99分99秒;3.P1H:延遲范圍從1分鐘到99小時(shí)99分鐘;4.P2U:正計(jì)時(shí);5.P2D:倒計(jì)時(shí);6.P3E:顯示值開機(jī)自動(dòng)復(fù)位;7.P3F:顯示值停電保持記憶。(二)按下“?”鍵1.在時(shí)間參數(shù)設(shè)置過程中,按下此鍵可選擇需要調(diào)整設(shè)置的參數(shù)功能。2.在計(jì)時(shí)過程中,按下此鍵可暫停計(jì)時(shí),再次按下則繼續(xù)計(jì)時(shí)。(三)按下“▲”鍵按下此鍵可增加選中項(xiàng)目的數(shù)值,實(shí)現(xiàn)遞增變化。(四)按下“R”鍵i.復(fù)位功能:按下此鍵可將計(jì)時(shí)顯示的數(shù)字及計(jì)時(shí)輸出狀態(tài)復(fù)位,恢復(fù)到初始狀態(tài)。ii.確認(rèn)功能:完成時(shí)間參數(shù)設(shè)置后,必須按下此鍵進(jìn)行確認(rèn)。4.2預(yù)處理在程序開始前,需要對程序進(jìn)行預(yù)處理,預(yù)處理內(nèi)容包括數(shù)碼管段代碼的編寫,位驅(qū)動(dòng)代碼的編寫,全局變量定義,數(shù)據(jù)緩沖區(qū)定義,IAP初始地址定義等,程序預(yù)處理如下所示。#include<stc15F2K60S2.h>#include<intrins.h>//數(shù)據(jù)數(shù)碼管段代碼表unsignedcharcodeSeg8_dr[]={0x60,0xfC,0x32,0x38,0xAC,0x29,0x21,0x7c,0x20,0x28,0xff};//功能數(shù)碼管段代碼表unsignedcharcodeSeg8_dr1[]={0x26,0xfc,0xbf,0x29,0x24,0xa4};//{0x8c,0xf9,0xbf,0x92,0x88,0x89};//P1功能鍵代碼unsignedcharcodeSeg8_dr2[]={0x26,0x32,0xBF,0xE0,0xB0};//P2功能鍵代碼unsignedcharcodeSeg8_dr3[]={0x26,0x38,0xbf,0x23,0x27};//P3功能鍵代碼//數(shù)碼管位代碼表unsignedcharcodeWei4_dr[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//顯示緩沖區(qū) unsignedcharDisp_Buf[]={0,0,0,0,0,0,0,0,0,0,0,0,10};unsignedcharDisp_Buf1[]={0,0,0,0,0,1,2,0};unsignedcharDisp_Buf2[]={0,0,0,0,0,1,2,0};unsignedcharDisp_Buf3[]={0,0,0,0,0,1,2,0};unsignedcharDisp_Buf4[]={0,0,0,0,0,0,0,0,0};unsignedcharDisp_Buf5[]={0,0,0,0,0,0,0,0,0,0,0,0,0};#define IAP_ADRESS0x2e00 unsignedcharmode=0; //功能切換 unsignedcharsele=1; //設(shè)定值的切換unsignedcharnum=1; //P1功能unsignedcharfla=1; //P2功能unsignedcharclk=1; //P3功能unsignedcharqian=0; //設(shè)置值unsignedcharbai=0;unsignedcharshi=0;unsignedcharge=0;unsignedcharx=1; //記憶標(biāo)志intuqian=0; //正計(jì)時(shí)顯示值intubai=0;intushi=0;intuge=0;intdqian=0; //倒計(jì)時(shí)顯示值intdbai=0;intdshi=0;intdge=0;bitdataLED_flash=0; //LED閃爍標(biāo)志,0熄滅,1點(diǎn)亮bitdatas=0; //開始運(yùn)行標(biāo)志位//bitdatae=0; //結(jié)束運(yùn)行標(biāo)志位unsignedcharc=0; //暫停標(biāo)志位unsignedintcount1s=00; //秒計(jì)數(shù)器unsignedintcount05s=00; //半秒計(jì)數(shù)器sbitstart=P3^1; //啟動(dòng)鍵sbitled=P3^2; //繼電器動(dòng)作4.3主函數(shù):在主函數(shù)里,主要負(fù)責(zé)處理頂層模塊。首先,我們需要設(shè)定定時(shí)器0、定時(shí)器1以及外部中斷int1。然后,我們進(jìn)行iap記憶讀取,最終完成數(shù)據(jù)模塊和顯示模塊的循環(huán)顯示。具體程序如下所示。main(){ unsignedchart; P1M0=0x00;P1M1=0x00;P2M1=0x00;P2M0=0x00;P3M1=0x00;P3M0=0x00; TMOD=0x11; //設(shè)置T0為定時(shí)器工作方式1 TH0=(65536-50000)/256; //設(shè)置計(jì)數(shù)初值高8位 TL0=(65536-50000)%256; //設(shè)置計(jì)數(shù)初值低8位 TH1=(65536-1000)/256; //重置計(jì)數(shù)初值 TL1=(65536-1000)%256; EA=1; //CPU開中斷 ET0=1; //定時(shí)器T0開中斷 ET1=1; //定時(shí)器T0開中斷 TR0=1; //定時(shí)器T0起動(dòng)運(yùn)行 IT1=1; //外部中斷INT1允許 EX1=1; //外部中斷INT1開中斷// TR1=1; for(t=0;t<13;t++) //記憶讀取 { Disp_Buf5[t]=IAPREAD(IAP_ADRESS+t); } if(Disp_Buf5[0]!=0xff) //判斷記憶讀取的數(shù)據(jù)是否為0xFF,若是,則不進(jìn)行數(shù)據(jù)賦值,若否,則進(jìn)行記憶讀取 { qian=Disp_Buf5[0]; bai=Disp_Buf5[1]; shi=Disp_Buf5[2]; ge=Disp_Buf5[3]; mode=Disp_Buf5[4]; sele=Disp_Buf5[5]; num=Disp_Buf5[6]; fla=Disp_Buf5[7]; clk=Disp_Buf5[8]; if(fla==2) { dqian=Disp_Buf5[9]; dbai=Disp_Buf5[10]; dshi=Disp_Buf5[11]; dge=Disp_Buf5[12]; } if(fla==1) { uqian=Disp_Buf5[9]; ubai=Disp_Buf5[10]; ushi=Disp_Buf5[11]; uge=Disp_Buf5[12]; }// TR1=1;// led=0;// s=1; } do { shuju(); //調(diào)用鍵處理 Disp4(); //調(diào)用顯示 if(start==0) //當(dāng)接通時(shí)進(jìn)行計(jì)數(shù) { if(fla==1) { if((uqian==qian)&&(ubai==bai)&&(ushi==shi)&&(uge==ge))//正計(jì)數(shù)中繼電器動(dòng)作條件 { TR1=0; led=1; s=0; } else { led=0; TR1=1; s=1; } } if(fla==2) { if((dqian==0)&&(dbai==0)&&(dshi==0)&&(dge==0)) //倒計(jì)時(shí)中繼電器動(dòng)作條件 { TR1=0; led=1; s=0; } else { led=0; TR1=1; s=1; } } } if(start==1) //若不接通,計(jì)數(shù)停止 { TR1=0; s=0; } if(s==0) { Key(); } else { zanting(); } } while(1);}4.4顯示函數(shù)顯示函數(shù)中主要處理數(shù)碼管的動(dòng)態(tài)顯示,各位數(shù)碼管的閃爍問題Disp4() //數(shù)碼管顯示{ unsignedcharj; if(mode==1) //各個(gè)位的閃爍,當(dāng)某位進(jìn)行操作時(shí),該位會(huì)閃爍 { if((sele==1)&&(LED_flash==0)) { Disp_Buf[10]=Disp_Buf[4]; Disp_Buf[4]=Disp_Buf[12]; } if((sele==1)&&(LED_flash==1)) { Disp_Buf[4]=Disp_Buf[10]; } if((sele==2)&&(LED_flash==0)) { Disp_Buf[10]=Disp_Buf[5]; Disp_Buf[5]=Disp_Buf[12]; } if((sele==2)&&(LED_flash==1)) { Disp_Buf[5]=Disp_Buf[10]; } if((sele==3)&&(LED_flash==0)) { Disp_Buf[10]=Disp_Buf[6]; Disp_Buf[6]=Disp_Buf[12]; } if((sele==3)&&(LED_flash==1)) { Disp_Buf[6]=Disp_Buf[10]; } if((sele==4)&&(LED_flash==0)) { Disp_Buf[10]=Disp_Buf[7]; Disp_Buf[7]=Disp_Buf[12]; } if((sele==4)&&(LED_flash==1)) { Disp_Buf[7]=Disp_Buf[10]; } } for(j=0;j<4;j++) //設(shè)定值顯示 { if(j!=0)P2=Seg8_dr[Disp_Buf[j]]; elseif(LED_flash==0)P2=Seg8_dr[Disp_Buf[j]]; elseP2=Seg8_dr[Disp_Buf[j]]&0xdf; P1=Wei4_dr[j]; Delay1ms(); //點(diǎn)亮1ms P1=0xff; //關(guān)顯示 } if((mode==0)||(mode==1)) //顯示值顯示 { for(j=4;j<8;j++) { if(j!=4)P2=Seg8_dr[Disp_Buf[j]]; elseif(LED_flash==0)P2=Seg8_dr[Disp_Buf[j]]; elseP2=Seg8_dr[Disp_Buf[j]]&0xdf; P1=Wei4_dr[j]; Delay1ms(); //點(diǎn)亮1ms P1=0xff; } //關(guān)顯示 } if(mode==2) //P1功能顯示 { for(j=4;j<8;j++) { if(j!=4)P2=Seg8_dr1[Disp_Buf1[j]]; elseif(LED_flash==0)P2=Seg8_dr1[Disp_Buf1[j]]; elseP2=Seg8_dr1[Disp_Buf1[j]]&0xdf; P1=Wei4_dr[j]; Delay1ms(); //點(diǎn)亮1ms P1=0xff; //關(guān)顯示 } } if(mode==3) //P2功能顯示 { for(j=4;j<8;j++) { if(j!=5)P2=Seg8_dr2[Disp_Buf2[j]]; elseif(LED_flash==0)P2=Seg8_dr2[Disp_Buf2[j]]; elseP2=Seg8_dr2[Disp_Buf2[j]]&0xdf; P1=Wei4_dr[j]; Delay1ms(); //點(diǎn)亮1ms P1=0xff; //關(guān)顯示 } } if(mode==4) //P3功能顯示 { for(j=4;j<8;j++) { if(j!=4)P2=Seg8_dr3[Disp_Buf3[j]]; elseif(LED_flash==0)P2=Seg8_dr3[Disp_Buf3[j]]; elseP2=Seg8_dr3[Disp_Buf3[j]]&0xdf; P1=Wei4_dr[j]; Delay1ms(); //點(diǎn)亮1ms P1=0xff; //關(guān)顯示 } }}4.5鍵處理函數(shù)在鍵處理函數(shù)里,主要負(fù)責(zé)處理mode,sele,inc以及rst這四個(gè)按鍵的功能。程序中運(yùn)用switch和case語句來定義每一個(gè)鍵的特性。Key()//鍵操作{ unsignedchar key_v; switch(key_v=(P3&0xf0)) { case208:mode++;if(mode==5)mode=0;break;//當(dāng)P3.5有動(dòng)作,mode加一,功能切換 case176:switch(mode) { case1:sele++;if(sele==5)sele=1;break;//設(shè)定值切換 case2:num++;if(num==4)num=1;break; //P1功能切換 case3:fla++;if(fla==3)fla=1;break; //P2功能切換 case4:clk++;if(clk==3)clk=1;break; //P3功能切換 };break; case112:if(mode==1)//P1功能,當(dāng)P3.7有動(dòng)作,相應(yīng)的位加一 { switch(sele) { case1:qian++;if(qian>9)qian=0;break; case2:bai++;if(bai>9)bai=0;break; case3:shi++;if(shi>9)shi=0;break; case4:ge++;if(ge>9)ge=0;break; } };break; case224:if(mode==0)//當(dāng)復(fù)位鍵動(dòng)作,如果此時(shí)功能鍵沒動(dòng)作,則進(jìn)行數(shù)據(jù)復(fù)位,若有動(dòng)作,則進(jìn)行功能復(fù)位 { if(fla==1) { uqian=0; ubai=0; ushi=0; uge=0; } if(fla==2) { dqian=qian; dbai=bai; dshi=shi; dge=ge; } led=0; } else { mode=0; } } shuju(); //數(shù)據(jù)賦值 while((P3&0xf0)!=0xf0) //判斷按鍵有無釋放,保證按一次,數(shù)據(jù)只加一 { Disp4(); //調(diào)用顯示 } }4.6數(shù)據(jù)處理函數(shù)數(shù)據(jù)處理函數(shù)中主要處理數(shù)據(jù)的賦值,將各個(gè)變量的數(shù)值存放于數(shù)據(jù)緩沖區(qū)中,以便顯示函數(shù)方便調(diào)用。shuju() //數(shù)據(jù)賦值給顯示緩沖區(qū){ Disp_Buf[4]=qian; //設(shè)定值賦值 Disp_Buf[5]=bai; Disp_Buf[6]=shi; Disp_Buf[7]=ge; if(fla==2) //倒計(jì)時(shí)顯示值賦值 { Disp_Buf[0]=dqian; Disp_Buf[1]=dbai; Disp_Buf[2]=dshi; Disp_Buf[3]=dge; } if(fla==1) //正計(jì)時(shí)顯示值賦值 { Disp_Buf[0]=uqian; Disp_Buf[1]=ubai; Disp_Buf[2]=ushi; Disp_Buf[3]=uge; } Disp_Buf1[7]=num+2; //功能值賦值 Disp_Buf2[7]=fla+2; Disp_Buf3[7]=clk+2; if(clk==1) //判斷,如果記憶功能為1且記憶標(biāo)志位為1,則進(jìn)行扇區(qū)擦除,程序不進(jìn)行記憶功能 { if(x==1) { IAPwipe(IAP_ADRESS); } x=0; } if(clk==2) //判斷,如果記憶功能為2,則將所有數(shù)據(jù)記入于數(shù)組4中,每當(dāng)數(shù)據(jù)發(fā)生一次改變,數(shù)據(jù)重新記入一次,并擦除一次扇區(qū),當(dāng)斷電標(biāo)志產(chǎn)生,程序執(zhí)行記憶功能,對EEPROM進(jìn)行操作 { x=1; if((Disp_Buf4[0]!=qian)||(Disp_Buf4[1]!=bai)||(Disp_Buf4[2]!=shi)||(Disp_Buf4[3]!=ge)||(Disp_Buf4[4]!=mode)||(Disp_Buf4[5]!=sele)||(Disp_Buf4[6]!=num)||(Disp_Buf4[7]!=fla)||(Disp_Buf4[8]!=clk)) { Disp_Buf4[0]=qian; Disp_Buf4[1]=bai; Disp_Buf4[2]=shi; Disp_Buf4[3]=ge; Disp_Buf4[4]=mode; Disp_Buf4[5]=sele; Disp_Buf4[6]=num; Disp_Buf4[7]=fla; Disp_Buf4[8]=clk; IAPwipe(IAP_ADRESS); } } }4.7暫停函數(shù)暫停函數(shù)是在繼電器參數(shù)設(shè)置完畢后進(jìn)行運(yùn)行期間,按下SELE鍵可執(zhí)行暫停功能,主要通過TR1來控制定時(shí)器1的運(yùn)行與否來達(dá)到暫停與運(yùn)行功能。程序如下所示REF_Ref24574\r\h[17],zanting() //暫停函數(shù),運(yùn)行過程中按下會(huì)暫停計(jì)數(shù){ if((P3&0xf0)==176) { c++; if(c==2) { c=0; } while((P3&0xf0)!=0xf0) { Disp4(); //調(diào)用顯示 } } if(s==1) { if(c==0) { TR1=1; } } }4.8定時(shí)器0函數(shù):定時(shí)器0函數(shù)定時(shí)為50ms執(zhí)行一次中斷,當(dāng)執(zhí)行次數(shù)達(dá)到10次,代表半秒時(shí)間到達(dá)時(shí),閃爍標(biāo)志位狀態(tài)翻轉(zhuǎn)一次,達(dá)到每半秒閃爍一次的目的REF_Ref24538\r\h[16]。voidtime_intt0(void)interrupt1using1 //定時(shí)器0中斷,每個(gè)半秒執(zhí)行一次{ TH0=(65536-50000)/256; //重置計(jì)數(shù)初值 TL0=(65536-50000)%256; count05s++; if(count05s==10) { count05s=0; LED_flash=~LED_flash; }}4.9定時(shí)器1函數(shù)主要處理倒計(jì)時(shí)和正計(jì)時(shí)的是定時(shí)器1。一旦參數(shù)設(shè)置完成,定時(shí)器1開始工作。正計(jì)時(shí)從零開始計(jì)數(shù),直到設(shè)定的值;而倒計(jì)時(shí)則從設(shè)定的值開始遞減,直到零結(jié)束。在處理毫秒和秒的進(jìn)制問題時(shí)要特別注意,確保秒與分、分與時(shí)的進(jìn)制正確。voidtime_intt1(void)interrupt3using1 //定時(shí)器1中斷,主要進(jìn)行計(jì)數(shù),根據(jù)正計(jì)數(shù)與倒計(jì)數(shù)的不同,當(dāng)P1處于0.01s~99.99s時(shí),每隔1ms計(jì)數(shù)加一或減一。{ //當(dāng)P1為1s~99min99s時(shí),每隔1s加一或減一,當(dāng)P1為1min~99h99min時(shí),每隔1min加一或減一. TH1=(65536-1000)/256; //重置計(jì)數(shù)初值 //定時(shí)為1MS TL1=(65536-1000)%256; count1s++; if(c==1) { TR1=0; shuju(); //調(diào)用鍵處理 Disp4(); //調(diào)用顯示 } if(fla==1) { if((uqian==qian)&&(ubai==bai)&&(ushi==shi)&&(uge==ge)) { TR1=0; led=1; s=0;// e=1; } if(num==1) { if(count1s==10) { count1s=0; uge++; if(uge>=10) { if((uqian>=qian)&&(ubai>=bai)&&(ushi>=shi)) { TR1=0; led=1; s=0;// e=1; } uge=0; ushi++; if((ubai==9)&&(uqian==9)) { if(ushi>9) { ushi=0; ubai++; if(ubai>9) { ubai=0; uqian++; } } } else { if(ushi>5) { ushi=0; ubai++; if(ubai>9) { ubai=0; uqian++; } } } } } } if(num==2) { if(count1s==1000) { count1s=0; uge++; if(uge>=10) { if((uqian>=qian)&&(ubai>=bai)&&(ushi>=shi)) { TR1=0; led=1; s=0;// e=1; } uge=0; ushi++; if((ubai==9)&&(uqian==9)) { if(ushi>9) { ushi=0; ubai++; if(ubai>9) { ubai=0; uqian++; } } } else { if(ushi>5) { ushi=0; ubai++; if(ubai>9) { ubai=0; uqian++; } } } } } } if(num==3) { if(count1s==60000) { count1s=0; uge++; if(uge>=10) { if((uqian>=qian)&&(ubai>=bai)&&(ushi>=shi)) { TR1=0; led=1; s=0;// e=1; } uge=0; ushi++; if((ubai==9)&&(uqian==9)) { if(ushi>9) { ushi=0; ubai++; if(ubai>9) { ubai=0; uqian++; } } } else { if(ushi>5) { ushi=0; ubai++; if(ubai>9) { ubai=0; uqian++; } } } } } } } if(fla==2) { if((dqian==0)&&(dbai==0)&&(dshi==0)&&(dge==0)) { TR1=0; led=1; s=0;// e=1; } if(num==1) { if(count1s==10) { count1s=0; dge--; if(dge<0) { dge=9; dshi--; if((dqian==9)&&(dbai==9)) { if(dshi<0) { dshi=9; dbai--; if(dbai<0) { dbai=9; dqian--; } } } else { if(dshi<0) { dshi=5; dbai--; if(dbai<0) { dbai=9; dqian--; } } } } } } if(num==2) { if(count1s==1000) { count1s=0; dge--; if(dge<0) { dge=9; dshi--; if((dqian==9)&&(dbai==9)) { if(dshi<0) { dshi=9; dbai--; if(dbai<0) { dbai=9; dqian--; } } } else { if(dshi<0) { dshi=5; dbai--; if(dbai<0) { dbai=9; dqian--; } } } } } } if(num==3) { if(count1s==60000) { count1s=0; dge--; if(dge<0) { dge=9; dshi--; if((dqian==9)&&(dbai==9)) { if(dshi<0) { dshi=9; dbai--; if(dbai<0) { dbai=9; dqian--; } } } else { if(dshi<0) { dshi=5; dbai--; if(dbai<0) { dbai=9; dqian--; } } } } } } }}4.10IAP記憶操作IAP記憶函數(shù)包含了四個(gè)核心部分,分別是IAP關(guān)閉、IAP寫入、IAP讀取和IAP擦除函數(shù)。其中,IAP關(guān)閉函數(shù)主要用于在完成IAP操作后執(zhí)行關(guān)閉指令,IAP寫入函數(shù)主要負(fù)責(zé)將數(shù)據(jù)寫入EEPROM區(qū)域,IAP讀取函數(shù)主要負(fù)責(zé)從EEPROM區(qū)域讀取數(shù)據(jù),IAP擦除函數(shù)主要負(fù)責(zé)執(zhí)行扇區(qū)擦除命令REF_Ref24489\r\h[15]。IAPclose() //記憶程序,記憶IAP關(guān)閉{ IAP_CONTR=0;//IAP命令寄存器,設(shè)置為0無ISP操作 IAP_CMD=0; //IAP命令寄存器,設(shè)置為0時(shí)無ISP操作 IAP_TRIG=0; //IAP命令觸發(fā)寄存器 IAP_ADDRH=0x80;//IAP操作時(shí)的地址寄存器高8位 IAP_ADDRL=0;//IAP操作時(shí)的地址寄存器低8位}charIAPREAD(unsignedintadd) //記憶程序,記憶讀{ unsignedchardat; IAP_CONTR=0x82; //IAP命令寄存器,設(shè)置為0x82時(shí)允許IAP讀/寫/擦除DataFlash/EEPROM IAP_CMD=1; //允許從用戶的應(yīng)用程序區(qū)對“DataFlash/EEPROM區(qū)”進(jìn)行字節(jié)讀 IAP_ADDRL=add; //設(shè)置IAP操作時(shí)的地址寄存器高8位 IAP_ADDRH=add>>8;//設(shè)置IAP操作時(shí)的地址寄存器低8位 IAP_TRIG=0x5a;//IAP命令觸發(fā)寄存器,先給IAP_TRIG寫入5AH,再寫入A5H,ISP/IAP命令才會(huì)生效 IAP_TRIG=0xa5; _nop_(); dat=IAP_DATA;//數(shù)據(jù)寫入DataFlash/EEPROM IAPclose(); returndat; }IAPwrite(unsignedintadd,unsignedchardat)//記憶程序,記憶寫{ IAP_CONTR=0x82; IAP_CMD=2; //允許從用戶的應(yīng)用程序區(qū)對“DataFlash/EEPROM區(qū)”進(jìn)行字節(jié)編程 IAP_ADDRL=add; IAP_ADDRH=add>>8; IAP_DATA=dat; IAP_TRIG=0x5a; IAP_TRIG=0xa5; _nop_(); IAPclose(); }IAPwipe(unsignedintadd) //記憶程序,記憶擦除{ IAP_CONTR=0x82; IAP_CMD=3; //允許從用戶的應(yīng)用程序區(qū)對“DataFlash/EEPROM區(qū)”進(jìn)行扇區(qū)擦除 IAP_ADDRL=add; IAP_ADDRH=add>>8; IAP_TRIG=0x5a; IAP_TRIG=0xa5; _nop_(); IAPclose(); }4.11INT1掉電檢測外部中斷INT1主要處理掉電時(shí)IAPwirte函數(shù),當(dāng)主電路掉電時(shí),會(huì)在INT1端口處產(chǎn)生一個(gè)下降沿脈沖,程序進(jìn)入外部中斷處理REF_Ref24450\r\h[14]。voidexint1()interrupt2 //掉電中斷檢測,當(dāng)?shù)綦姇r(shí),P3處于記憶工作狀態(tài),則該中斷執(zhí)行IAP操作{ unsignedchari;// IAPwipe(IAP_ADRESS);// Delay1ms(); if(fla==2) { Disp_Buf4[9]=dqian; Disp_Buf4[10]=dbai; Disp_Buf4[11]=dshi; Disp_Buf4[12]=dge; } if(fla==1) { Disp_Buf4[9]=uqian; Disp_Buf4[10]=ubai; Disp_Buf4[11]=ushi; Disp_Buf4[12]=uge; } if(clk==2) { for(i=0;i<13;i++) { IAPwrite(IAP_ADRESS+i,Disp_Buf4[i]); }} }4.12WiFi驅(qū)動(dòng)編寫ESP8266WIFI模塊具有透傳功能。一旦設(shè)定完網(wǎng)際協(xié)議(IP)及子網(wǎng)掩碼等基本配置并且成功建立了連線之后,用戶可以通過指令輕松切換入"TransparentMode",也就是我們所說的"透過式通訊狀態(tài)"。在這個(gè)情況下,主機(jī)可以使用USART與ESP8266交換信息,而ESP8266也可以利用其無線上網(wǎng)功能把收到的信息傳遞給主機(jī)。反之亦然,即當(dāng)ESP8266接到了來自互聯(lián)網(wǎng)的數(shù)據(jù)時(shí)會(huì)將其轉(zhuǎn)換成為可由USART讀取的形式并將它送回給主機(jī)。在此期間內(nèi),ESP8266僅執(zhí)行了信息的搬運(yùn)工作而不對其內(nèi)容或大小做任何修改或者加工。因此從形式來看就好像是在兩個(gè)設(shè)備之間存在著一種“看不見、摸不著”的通信一樣。我們的設(shè)計(jì)方案采用了這種方法以實(shí)現(xiàn)對網(wǎng)絡(luò)消息流的管理控制。在這個(gè)所謂的'transparencymode'中,ESP8266具有一項(xiàng)特性就是能夠自主決定何時(shí)停止當(dāng)前的消息序列——如果UART端輸入的時(shí)間間距超過二十毫秒的話就會(huì)被視為該次訊息已經(jīng)完成;相反的情況則是持續(xù)接受直至到達(dá)最大容量限制(大約兩千字節(jié)左右)為止才會(huì)終止本次對話流程。當(dāng)檢測出一次完整的交流已告一段落的時(shí)候,ESP8266便開始啟動(dòng)WLAN部分以便繼續(xù)下一步操作REF_Ref24391\r\h[13]。在物聯(lián)網(wǎng)的室內(nèi)led照明控制系統(tǒng)啟動(dòng)之后,我們會(huì)將wifi模塊設(shè)置為ap模式,并調(diào)整好相關(guān)的網(wǎng)絡(luò)參數(shù)。接著,它就可以進(jìn)入透傳模式了。UART_Init();delay_nms(4000);//ESP8266網(wǎng)絡(luò)初始化UART_Send_Str("AT+CWMODE=2\r\n"); //設(shè)置成路由模式delay_nms(1000);UART_Send_Str("AT+CWSAP=\"My_RGB\",\"0123456789\",11,4\r\n"); //設(shè)置路由SSID和密碼delay_nms(1000);UART_Send_Str("AT+RST\r\n"); //復(fù)位重啟delay_nms(4000);UART_Send_Str("AT+CIPMUX=0\r\n"); //設(shè)置成單連接delay_nms(1000); UART_Send_Str("AT+CIPSTART=\"UDP\",\"\",7136,7671\r\n"); //連接UDP客戶端 delay_nms(1000);UART_Send_Str("AT+CIPMODE=1\r\n"); //進(jìn)入透傳模式 delay_nms(1000);第5章組裝調(diào)試5.1插件元件五步焊接操作法1.準(zhǔn)備工作:將需要的物品,比如焊接工件,電烙鐵,焊錫線和烙鐵支架等,擺放在方便操作的地方。2.對焊接點(diǎn)進(jìn)行加熱:將烙鐵頭放在焊接點(diǎn)上,讓其開始升溫。3.讓焊料熔化:先將焊接點(diǎn)加熱至一定溫度,然后用焊錫絲接觸焊接處,使焊料融化。焊錫絲應(yīng)該從烙鐵頭的溫度較高的一側(cè)加入,而不是直接放在烙鐵頭上。將焊錫絲迅速移開:在焊錫絲融化足夠的焊料后,立即將焊錫絲移開。5.取出電烙鐵:一旦焊接區(qū)域的焊膏開始充盈并且溶解的助焊劑尚未徹底消失,這時(shí)的焊錫最為明亮并具有最高的流動(dòng)性能,這就是理想的焊接狀況。立即把電烙鐵頭從該處拿走,這個(gè)時(shí)刻何時(shí)采取行動(dòng)、如何操作以及移動(dòng)的速率,都直接影響到焊接部位的表現(xiàn)。正確的做法應(yīng)該是首先緩慢然后加速,以45度角的方式快速地抽離電烙鐵頭,直至最后的那個(gè)剎那才突然提升。5.2SMT工藝流程SMT就是表面組裝技術(shù)(Surface

Mounted

Technology的縮寫),是目前電子組裝行業(yè)里最流行的一種技術(shù)和工藝。

5.2.1特點(diǎn)1、電子產(chǎn)品體積小、重量輕,采用貼片元件制造。相比傳統(tǒng)插裝元件,體積和重量約為其1/10,一般實(shí)施SMT后,體積可減小40%~60%,重量可減輕60%~80%。2、信賴度高,抗震能力強(qiáng)。焊接部位的缺陷率較低。3、頻率特性卓越,降低了電磁和射頻的干擾。4、自動(dòng)化實(shí)施簡單,能夠增加生產(chǎn)效率,從而降低成本30%~50%,減少對原材料、能源、設(shè)備、勞動(dòng)力和時(shí)間等資源的消耗。5.2.2優(yōu)點(diǎn)1.隨著電子產(chǎn)品越來越趨向于小型化,傳統(tǒng)的穿孩插件元素難以減少。電子產(chǎn)品的功能不斷提升,目前IC已經(jīng)廣泛應(yīng)用,尤其是大規(guī)模、高度集成的IC已經(jīng)不再采用穿孔明元件,而是使用表面貼片元件。隨著產(chǎn)品規(guī)模化和生產(chǎn)自動(dòng)化的進(jìn)步,制造企業(yè)需要在成本低、產(chǎn)量高的基礎(chǔ)上生產(chǎn)高品質(zhì)產(chǎn)品,以滿足顧客需求并增強(qiáng)市場競爭力。5.隨著電子元件和集成電路(IC)的不斷更新,半導(dǎo)體材料得到了更廣泛的應(yīng)用。5.我們必須緊密跟隨國際的電子科技革命趨勢。SMT的基本工藝包括了絲?。ɑ螯c(diǎn)膠)、貼裝(并固化)、回流焊接、清洗、檢測和返修。具體流程圖5.1所示:圖5.1流程圖實(shí)物SMT組裝如圖5.2所示:圖5.1流程圖5.3基于物聯(lián)網(wǎng)的時(shí)間繼電器的調(diào)試(1)ESP8266模塊連接方法:把模塊接入計(jì)算機(jī)系統(tǒng)中:需要將其從TTL電壓轉(zhuǎn)成RS232標(biāo)準(zhǔn)。該模塊需以3.3V作為其電源輸入。確保正確地連上TX和RX接口,并同樣處理好RX和TX端口。對于那些采用不同類型TTL電壓的微控制器設(shè)備來說,可以利用這個(gè)模塊來實(shí)現(xiàn)連接:只需保證TX和RX之間的鏈接,同時(shí)也要注意RX和TX的對應(yīng)關(guān)系。另外,它還可提供3.3V的電力供應(yīng)。以下是針對四根導(dǎo)線(GPIO2、GPIO0、CH_PD及GPIO16(RST))的功能說明:GPIO0:高電平表示從FLASH啟動(dòng),低電平表示進(jìn)入系統(tǒng)升級狀態(tài);GPIO16:可用作外部硬件復(fù)位(RST);CH_PD:用于選擇AT指令模式;需要特別留意的是,RX引腳連接到UTXD單片機(jī),VCC接3.3V電壓,其余引腳需要通過10K電阻連接到VCC(連接后默認(rèn)為AT指令模式)。使用AT指令的方法如下:該組件采用的是3.3伏特的電源供應(yīng)方式。啟動(dòng)超高速端接器或者其他的串聯(lián)接口測試設(shè)備是必要的步驟之一。設(shè)定通訊速率至標(biāo)準(zhǔn)數(shù)值的115200bps、字符長度設(shè)成八個(gè)比特長(byte)、暫停時(shí)間定于一位數(shù)字上且沒有檢驗(yàn)?zāi)J胶土鲃?dòng)管理功能也是必須完成的工作內(nèi)容部分。通過把計(jì)算機(jī)上的USB-Serial轉(zhuǎn)換器的TXD與RXD相連來實(shí)現(xiàn)對這個(gè)通信單元的支持工作狀態(tài)檢測任務(wù)需要用到的命令就是"AT+CR",如果收到反饋信息顯示出“Ok”則說明此項(xiàng)操作已經(jīng)成功執(zhí)行完畢了這意味著你的部件能夠正常運(yùn)作,必須保證部件供電充足,否則可能會(huì)出現(xiàn)問題。在vcc和gnd之間增加幾個(gè)電解電容是解決電源問題的最優(yōu)選擇。盡管模塊的電流僅為70-80mA,但這只是平均電流。了解GPRS的人應(yīng)該清楚,射頻模塊瞬時(shí)的電流非常高,通常在幾十安培左右,為了供給模塊使用電荷,因此需要一定數(shù)量的電容器。ESP8266能夠被設(shè)定成station、AP或者station+AP的三種狀態(tài),這就表示該模組能以設(shè)備的身份與本地區(qū)域內(nèi)的路由器建立聯(lián)接,也能設(shè)為路由器本身,并且還能兼具成為本區(qū)域內(nèi)設(shè)備和服務(wù)器的雙重角色。詳細(xì)的配置步驟如下:1、AP模式(本系統(tǒng)用的就是AP模式):第一步發(fā)送命令:AT+RST(執(zhí)行指令)指令:AT+RST響應(yīng):OK第二步:發(fā)送命令:AT+CWMODE=2(設(shè)置指令)指令:AT+CWMODE=<mode>說明:<mode>:1-Station模式,2-AP模式,3-AP兼Station模式響應(yīng):OK說明:需重啟后生效(AT+RST)第三步:發(fā)送命令:AT+CWSAP="MY_RGB","0123456789",11,0指令:AT+CWSAP=<ssid>,<pwd>,<chl>,<ecn>說明:指令只有在AP模式開啟后有效<ssid>:字符串參數(shù),接入點(diǎn)名稱<pwd>:字符串參數(shù),密碼最長64字節(jié),ASCII<chl>:通道號(hào)<ecn>:0-OPEN,1-WEP,2-WPA_PSK,3-WPA2_PSK,4-WPA_WPA2_PSK響應(yīng):OK然后就可以在你的手機(jī)或者是電腦通過無線網(wǎng)卡連接到剛剛創(chuàng)建的熱點(diǎn)MY_RGB上了。最后一步是開啟服務(wù)器模式:發(fā)送命令:AT+CIPMUX=1和AT+CIPSERVER=1,8080(因?yàn)橹挥性陂_啟多連接模式的時(shí)候才能開啟服務(wù)器模式)然后就可以通過網(wǎng)絡(luò)調(diào)試助手來通過“TCPClient”模式下添加“IP:(模塊默認(rèn)的IP),端口8080(上一步設(shè)置的)”2、Client模式:第一步:AT+RSTAT+CWMODE=1//設(shè)置為station模式AT+RST//重啟生效AT+CWLAP//查看可以網(wǎng)絡(luò)AT+CWJAP="G202","****"http://連接自己要連接的網(wǎng)絡(luò),前面是SSID后面是密碼,具體AT指令可以參考官方的AT集AT+CIFSR//返回模塊的IP地址說明已經(jīng)正確連接到路由器AT+CIPMUX=1//打開多連接否則會(huì)報(bào)錯(cuò)LinktyperrorAT+CIPSTART=0,"TCP","11",8080//其中的IP號(hào)和端口號(hào)是自己在局域網(wǎng)內(nèi)建立的AT+CIPSEND=0,100123456789//發(fā)送10個(gè)字符給服務(wù)器3、Station+Client模式:AT+RSTAT+CWMODE=3//設(shè)置為station模式AT+CWLAP//查看可以網(wǎng)絡(luò)AT+CWJAP="G202","****"http://連接自己要連接的網(wǎng)絡(luò)AT+CIFSR//返回模塊的IP地址說明已經(jīng)正確連接到路由器返回IP地址“30”AT+CIPMUX=1//打開多連接AT+CIPSERVER=1,8080//建立sever結(jié)論我們通過本畢業(yè)設(shè)計(jì)成功研發(fā)了一款基于物聯(lián)網(wǎng)技術(shù)的智能繼電器。該繼電器采用了IAP15W4K61S4單片機(jī)作為核心控制器,同時(shí)利用時(shí)鐘芯片提供精準(zhǔn)的時(shí)鐘信息。整個(gè)系統(tǒng)通過燈控終端建立了一個(gè)獨(dú)立的WiFi熱點(diǎn)網(wǎng)絡(luò),無需連接外部互聯(lián)網(wǎng),并采用UDP協(xié)議進(jìn)行數(shù)據(jù)傳輸。為保障通信安全性,我們應(yīng)用了WPA2加密方式。在設(shè)計(jì)過程中,我們充分發(fā)揮了IAP15W4K61S4單片機(jī)的優(yōu)勢,如低功耗、小體積、價(jià)格實(shí)惠、功能豐富以及強(qiáng)大的抗干擾能力。利用KEIL軟件的開發(fā)環(huán)境,我們成功完成了軟件開發(fā)和調(diào)試工作,實(shí)現(xiàn)了各種控制功能和定時(shí)操作

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論