時間:2017年12月html
階段:大二上學期安全
背景:單片機原理與應用課設網絡
名稱:智能燈控函數
本系統實現了多方式控燈功能,有按鍵控燈、串口指令控燈、點對點無線射頻控燈、AI模式控燈。其中AI模式控燈是經過紅外模塊感應外界是否有人靠近來控制燈的亮滅及經過光敏傳感器模塊感應外界光照強度進而動態調整PWM佔空比的輸出來控制燈的亮度。測試
物聯網是新一代信息技術的重要組成部分,也是「信息化」時代的重要發展階段。互聯網是物聯網個過渡,物聯網將成爲新時代的發展靈魂。ui
處於AI時代來臨前的我深感可慶,傳統的燈控須要大量的佈線,若要實現雙控、三控及多控更是須要加大用線量,且開關還須要特別定製,及其麻煩,對於遠程控制更是不敢想象。spa
咱們將要設計並打造出一款基於ZigBee模塊,多傳感器,多方式開關,遠程智能控制的燈控系統,達到智能照明的節能、環保、溫馨、方便的功能。設計
關鍵詞 物聯網;智能;控制;LED燈3d
1.1 系統研究背景調試
傳統的燈控須要大量的佈線,若要實現雙控、三控及多控更是須要加大用線量,且開關還須要特別定製,及其麻煩,對於遠程控制更是不敢想象。
1.2 系統研究的意義和目的
設計並打造出一款基於ZigBee模塊,多傳感器,多方式開關,遠程智能控制的燈控系統,達到智能照明的節能、環保、溫馨、方便的功能。
2.1 系統的結構
本系統有軟件和硬件兩部分組成。
軟件部分:串口調試助手,控制燈的亮滅、打開和關閉AI模式和實時監測燈的變化狀況和日誌
硬件部分:兩個ZigBee模塊,其中控制模塊能夠控制燈的亮滅和打開和關閉AI模式,被控制模塊有人體紅外感應模塊、光敏傳感器和LED發光二極管,其自己按鍵S1能夠控制燈的亮滅,S2按鍵能夠控制AI模式的開和關。AI模式是經過紅外感應模塊和光敏傳感器智能控燈。
圖2.1 系統結構圖
2.2 系統的功能
1)按鍵控燈:開發板按鍵S1能夠控制燈的亮和滅;
2)串口控燈:串口調試助手可發1開燈,和0關燈,控制燈的亮和滅;
3)無線控燈:一對一無線控制燈的開關,安全,可靠,無線發送模塊的按鍵S1爲燈控按鍵;
4)AI模式控燈:智能燈控的核心,AI模式能夠感應周圍是否有人通過來控制燈的開和關,而且能夠根據外界的光照強度來調節自身燈的亮度,達到了節能、環保、溫馨的絕佳效果;
5)多方式AI模式開關:本系統提供多方式控制AI模式的開啓和關閉,其方式有:按鍵S二、串口、無線發送模塊按鍵S2;
6)實時信息:串口助手實時上報燈的亮滅狀況和當前受到哪方面的控制,如無線開燈時,串口將會顯示「----無線開燈成功-----」和「/////AI模式關閉/////」信息,以達到最佳安全級別。
2.3 開發環境
IAR Embedded Workbench微型處理器開發環境
3.1 Zigbee芯片 CC2530
ZigBee是基於IEEE802.15.4標準的低功耗局域網協議。根據國際標準規定,ZigBee技術是一種短距離、低功耗的無線通訊技術。這一名稱(又稱紫蜂協議)來源於蜜蜂的八字舞,因爲蜜蜂(bee)是靠飛翔和「嗡嗡」(zig)地抖動翅膀的「舞蹈」來與同伴傳遞花粉所在方位信息,也就是說蜜蜂依靠這樣的方式構成了羣體中的通訊網絡。其特色是近距離、低複雜度、自組織、低功耗、低數據速率。主要適合用於自動控制和遠程控制領域,能夠嵌入各類設備。簡而言之,ZigBee就是一種便宜的,低功耗的近距離無線組網通信技術。ZigBee是一種低速短距離傳輸的無線網絡協議。ZigBee協議從下到上分別爲物理層(PHY)、媒體訪問控制層(MAC)、傳輸層(TL)、網絡層(NWK)、應用層(APL)等。其中物理層和媒體訪問控制層遵循IEEE 802.15.4標準的規定。
3.2 LED發光二極管
LED發光二極管採用的是2*5*7MM霧狀白藍色發光二極管,二極管的陽極接在ZigBee模塊的P1_0引腳,陰極接ZigBee模塊的GND引腳。
圖3.1 LED發光二極管實物圖
3.3 人體紅外感應模塊
人體紅外感應模塊採用的是完整版的HC-SR501人體模塊,自動感應,紅外感應模塊的VCC接在ZigBee模塊的5.0vVCC引腳,GND接在ZigBee模塊的GND 引腳,out接在ZigBee模塊的P1_3引腳。
圖3.2 人體紅外感應模塊原理圖 圖3.3 人體紅外感應模塊實物圖
3.4 光敏電阻傳感器
光敏電阻傳感器採用的是4線光敏電阻傳感器模塊,光敏電阻型號爲:5516,本產品使用的是AO模擬量輸出,光敏電阻傳感器的VCC腳接在ZigBee模塊的3.3vVCC引腳,GND接在ZigBee模塊的GND引腳,AO接在ZigBee模塊的P0_5引腳。
圖3.4 光敏傳感器模塊原理圖 圖 3.5 光敏傳感器模塊實物圖
4.1系統總體功能設計
ADC環境光照強度魔術轉換;PWM多級調光;多中斷智能處理;人體紅外感應;無線遠距離控制。
圖4.1 程序流程圖
4.2 AI模式
AI模式能夠感應周圍是否有人通過來控制燈的開和關,而且能夠根據外界的光照強度來調節自身燈的亮度,達到了節能、環保、溫馨的絕佳效果。
主函數while(1)循環裏,if((boozd==1)&&(P1_3==1))(boozd爲AI模式是否容許標誌位,P1_3==1表示當前有人通過)成立則會不斷獲取當前ADC環境光照強度魔術轉換後的值,而後用if(){}else if(){}方法與標準區間進行比較,若比較成功將會以當前區間所對應的LED亮度動態調整PWM佔空比輸出,而後將進行新判斷、獲取、比較。
圖 4.2-1
如圖 4.2-1,串口調試助手發送 2,收到 CC2530 串口發送的的信息,此時紅外人體感應模塊和光敏傳感器模塊二者協調工做,共同控制 LED 燈,也能夠經過接收 CC2530 單片機的按鍵模塊的 S2 按鍵來打開和關閉 AI 模式,也可經過發送CC2530 單片機的按鍵 S2 來控制 AI 模式的啓動與關閉;
圖 4.2-2
如圖 4.2-2,系統處於 AI 模式時用手握緊光敏傳感器模塊,讓光敏傳感器模塊處於黑暗的環境下,可見 LED 燈的亮度
圖 4.2-3
如圖 4.2-3,系統處於 AI 模式時,打開手機閃光燈靠近光敏傳感器模塊,可見LED 燈的亮度明顯下降,當閃光燈更加接近光敏傳感器模塊時,LED 燈會熄滅
4.3 多中斷智能處理
本系統包含3大中斷處理函數:
1》》串口接收中斷處理函數:
#pragma vector=URX0_VECTOR
__interrupt void urx0(){}
可判斷串口接收到的數據,而後進行智能處理,當接收到‘1’時,會以最大亮開燈和關閉AI模式,而且向串口調試助手發送「---串口開燈成功-----」和「----AI模式關閉-----」日誌,當收到‘0’時,將向串口發送「/////串口關燈成功////」日誌;當收到‘2’時,模塊將會利用標誌位判斷AI模式是否打開,若打開則進行關閉操做,並向串口發送「----AI模式打開-----」日誌;當收到其餘數據時,模塊將向串口將會發送「!!!無該指令!!!」日誌。
圖 4.3-1
如圖 4.3-1,串口調試助手發送‘1’,LED 燈會以全亮的形式打開,並關閉AI模式
圖 4.3-2
如圖 4.3-2,串口調試助手發送‘0’,LED 燈熄滅 (2 按鍵中斷處理函數:
#pragma vector=P0INT_VECTOR
__interrupt void p0int(){}
模塊按鍵有 S1 和 S2,分別對應的是 ZigBee 模塊的 P0_0 和 P0_1 引腳,S1能夠控制燈的亮滅,當按鍵按下且 if(P0IFG&0x01)成立則表示可進入 S1 中斷處理函數,函數裏將根據標誌位狀態進行下一步操做,若標誌位顯示此時燈是滅的,則將會進行開燈功能,並向串口發送相應日誌;S2 能夠控制 AI 模式的開和關,當按按下且 if(P0IFG&0x02)成立將進入 S2 中斷處理函數,函數裏將根據標誌位狀態進行下一步操做,若標誌位顯示此時 AI 模式已開啓,則會進行關閉 AI 模式操做,並先串口發送相應日誌。
圖 4.3-3
如圖 4.3-3,當按下接收 CC2530 單片機的按鍵模塊的 S2 按鍵,串口調
試助手收到單片機發來的 AI 模式打開的信息,此時 AI 模式正在運行中。
圖 4.3-4
如圖 4.3-4,當再次按下接收 CC2530 單片機的按鍵模塊的 S2 按鍵,串口調試助手收到單片機發來的 AI 模式關閉信息,此時 LED 燈熄滅
圖 4.3-5
如圖 4.3-5,當按下接收 CC2530 單片機的按鍵模塊的 S1 按鍵,串口調試
助手收到單片機發來的按鍵開燈成功和 AI 模式關閉信息,此時 LED 最亮顯示
圖 4.3-6
如圖 4.3-6,當再次按下接收 CC2530 單片機的按鍵模塊的 S1 按鍵,串口調試助手收到單片機發來的 LED 關閉信息,此時 LED 燈熄滅
3》》RF 中斷處理函數
#pragma vector=RF_VECTOR __interrupt void x1(){}
當 ZigBee 模式收到發送模塊數據時且 if(RFIRQF0 & 0x40)成立將進入 RF接收處理函數,讀取數據包的倒數第 4 和第 3 個有效字節,倒數第 3 位數據對應串口發送‘2’的功能,倒數第 4 位數據對應的是串口發送‘1’的功能
圖 4.3-7
如圖 4.3-7,當發送 CC2530 單片機模塊按下 S1 按鍵時 ,接受 CC2530 將會進入 RF 中斷,並收到「0x0D,0x51,0x88,0x00, 0x07,0x20,0xEF,0xBE,0x20, 0x50,'1','0'」 數據包,通過解析可知是控制燈的亮滅指令,接受單片機模塊執行開燈和關閉 AI 模式
圖 4.3-8
如圖 4.3-8,當發送 CC2530 單片機模塊再次按下 S1 按鍵時 ,接受CC2530 將會再次進入 RF 中斷,並再次接收到「0x0D,0x51,0x88,0x00, 0x07,0x20,0xEF,0xBE,0x20, 0x50,'1','0'」 數據包,通過解析可知是控制燈的亮滅指令,接受單片機模塊執行關燈操做
圖 4.3-9
如圖 4.3-9,當發送 CC2530 單片機模塊按下 S2 按鍵時 ,接受 CC2530 將會進入RF 中斷,並收到「0x0D,0x51,0x88,0x00,0x07,0x20,0xEF,0xBE,0x20, 0x50,'0','2'」 數據包,通過解析可知是控制 AI 模式的啓動與中止指令,接受單片機判斷此時 AI 模式是否開啓而後繼續相反操做。
圖 4.3-10
如圖 4.3-10,當發送 CC2530 單片機模塊再次按下 S2 按鍵時 ,接受 CC2530將會再次進入 RF 中斷,並收到「0x0D,0x51,0x88,0x00,0x07,0x20,0xEF, 0xBE,0x20,0x50,'0','2'」 數據包,通過解析可知是控制 AI 模式的啓動與中止指令,接受單片機判斷此時 AI 模式是否開啓而後進行相反操做。
5.1. 系統硬件調試
單個功能一一測試完成後,發現 ZigBee 模塊僅有一個 GND 引腳,因此把全
部傳感器、二極管等的 GND 引腳一塊兒用 1 根杜邦線引入 ZigBee 模塊的 GND 引腳。
5.1 硬件整體實物圖
5.2. 系統軟件調試
如何更加準確的知道當前環境的光照狀況,明暗變化的光照強度 ADC 變化,能夠經過:
char str[30];
sprintf(str,"adc 數值爲:%d",adc);
uartTX_Send(str);
在主函數實時發送 ADC 的值到串口調試助手裏,獲取每一個光照階段裏 ADC轉換的值,計算 PWM 佔空比以達到最佳的調光效果。
RF收
1 #include<iocc2530.h> 2 #include<stdio.h> 3 #include<string.h> 4 #include<stdbool.h> 5 #define LED P1_1 6 #define uint unsigned int 7 bool boozd=1; 8 bool boog=1; 9 uint pwmx[11]={0x00,0xF7,0xE1,0xC8,0xAF,0x96,0x7D,0x64,0x4B,0x32,0x01}; 10 uint adc; 11 float adcResu; 12 void InitLED(){//*****************初始化LED燈 13 P1SEL &=0xFD; 14 P1DIR |=0x02; 15 LED=0; 16 } 17 void InitADC(){//********************初始化ADC 18 P0DIR &=0xDF;//P0_5爲輸入 19 APCFG |=0x20;//設置爲模擬口 20 ADCCON3 =0x75;//0011 0101,端口電壓,512抽取率,P0_5 21 adc=0; 22 ADCH=0; 23 ADCL=0;//清除ADC數據 24 ADCCON1=0x30;//中止ADC轉換 25 ADCCON1 |=0x40;//啓動ADC轉換 26 } 27 void Initclock()//*************************************時鐘初始化 28 {//32MHz 29 SLEEPCMD &=0xFB;//開啓所有RC振盪器,避免16MHZRC振盪器被關閉 30 while((SLEEPSTA&0x40)==0);//等待32MHZ上電穩定 31 CLKCONCMD &=0xBF;//設置32MHZ爲系統時鐘源 32 while(CLKCONSTA&0x40);//等待32MHZ成功成爲系統時鐘源 33 CLKCONCMD |=0x38; 34 CLKCONCMD &=0xF8;//系統時鐘不分頻輸出,定時器爲250KHZ 35 SLEEPCMD |=0x04;//關閉不用的RC振盪器 36 } 37 38 void InitUart(){//*******************************串口初始化 39 PERCFG &=0xFE;//將串口0的位置選在P0口 40 P2DIR &=0x3F; //P0口的外設優先級控制設爲串口0優先 41 P0SEL |=0x0C;//P0口的二、3管腳設爲外設工做方式 42 U0CSR |=0xC0;//USART0工做的UART模式,接收使能 43 U0UCR=0x02;//據格式爲8位數據位、1位中止位、沒有校驗位 44 U0GCR |=11;//波特率爲115200 45 U0BAUD |=216; 46 EA=1; 47 URX0IE=1;//接收中斷打開 48 UTX0IF=0; 49 URX0IF=0; 50 } 51 void delay(uint i){//*********************延時函數 52 for(uint j=0;j<i;j++) 53 for(uint x=0;x<1000;x++); 54 } 55 void uartTX_Send(char *strx){//********************串口發送 56 while(*strx!='\0'){ 57 U0DBUF=*strx; 58 while((U0CSR&0x02)==0);//等待發送完成 59 *strx++; 60 U0CSR &=0xFD; 61 } 62 } 63 void InitTime(){//**********************pwm 64 //輸出比較,P1_0 65 P1SEL |=0x01; 66 P1DIR &=0xEE; 67 PERCFG |=0x40; 68 P2DIR |=0xC0;//定時器通道2-3最高優先級 69 T1CTL=0x02;//模模式,0x00-T1CC0!!!!!!!!!!!!!!!! 70 T1CCTL2=0x1C; 71 T1CC0H=0x00; 72 T1CC0L=0xFA;//週期爲1ms,頻率爲1KHZ 必須設置!!!! 73 T1CC2H=0x00; 74 T1CC2L=pwmx[0]; 75 //0x00 0xF7 0xE1 0xC8 0xAF 0x96 0x7D 0x64 0x4B 0x32 0x19 76 } 77 void InitButton(){//*******************按鍵中斷初始化 78 P0SEL &=0xFC; 79 P0DIR &=0xFC; 80 P0INP &=0xFC; 81 P2INP &=0xFC; 82 PICTL |=0x01; 83 P0IE=1; 84 P0IEN |=0x03; 85 P0IF=0; 86 P0IFG &=0xFC; 87 } 88 void Initho(){//******************************紅外感應初始化 89 //P1_3 90 P1SEL &=0xF7; 91 P1DIR &=0xF7; 92 P1INP &=0xF7; 93 P2INP |=0x40; 94 } 95 void InitWX()//***********************************射頻的初始化 96 { 97 FRMCTRL0 |=0x60; 98 TXFILTCFG =0x09; 99 AGCCTRL1 =0x15; 100 FSCAL1=0x00; 101 102 RFIRQM0 |=0x40;//打開接收中斷 103 IEN2 |=0x01; 104 FREQCTRL=(11+(25-11)*5);// 25號信道可改設置載波爲2475M 105 106 PAN_ID0=0x07; 107 PAN_ID1=0x20;//PAMID 108 109 RFST=0xEC;//清除接收緩衝器 110 RFST=0xE3;//開啓接收使能 111 112 SHORT_ADDR0=0xEF; 113 SHORT_ADDR1=0xBE;//設置模塊網絡地址 114 } 115 void main(){ 116 InitLED(); 117 Initclock(); 118 InitUart(); 119 InitADC(); 120 InitTime(); 121 InitButton(); 122 Initho(); 123 InitWX(); 124 boozd=1; 125 boog=1; 126 while(1){ 127 if(ADCCON1&0x80){ 128 adc |=(ADCL>>2); 129 adc |=(ADCH<<6); 130 if((boozd==1)&&(P1_3==1)){ 131 LED=1; 132 if(adc>6191){T1CC2H=0x00;T1CC2L=pwmx[10];} 133 else if(adc>5191){T1CC2H=0x00;T1CC2L=pwmx[8];} 134 else if(adc>4191){T1CC2H=0x00;T1CC2L=pwmx[6];} 135 else if(adc>3191){T1CC2H=0x00;T1CC2L=pwmx[4];} 136 else if(adc>2191){T1CC2H=0x00;T1CC2L=pwmx[2];} 137 if(adc<2191){T1CC2H=0x00;T1CC2L=pwmx[0];} 138 /* char str[30]; 139 sprintf(str,"adc數值爲:%d",adc); 140 uartTX_Send(str);*/ 141 }else if(boog){ 142 LED=0; 143 T1CC2H=0x00; 144 T1CC2L=pwmx[0]; 145 } 146 InitADC();//再次啓動 147 delay(1000); 148 149 } 150 } 151 } 152 #pragma vector=URX0_VECTOR 153 __interrupt void urx0(){ //*******************串口中斷處理函數 154 155 char bufch1; 156 bufch1=U0DBUF; 157 if(bufch1=='1') 158 {boog=0; 159 T1CC2H=0x00; 160 T1CC2L=pwmx[10]; 161 boozd=0; 162 LED=1; 163 uartTX_Send("\r\n ----串口開燈成功----- \r\n"); 164 uartTX_Send("\r\n ----AI模式關閉----- \r\n"); 165 } 166 else if(bufch1=='0') 167 {boog=0; 168 boozd=0; 169 LED=0; 170 T1CC2H=0x00; 171 T1CC2L=pwmx[0]; 172 uartTX_Send("\r\n /////串口關燈成功//// \r\n"); 173 } 174 else if(bufch1=='2'){ 175 boog=1; 176 LED=1; 177 boozd=1; 178 uartTX_Send("\r\n ----AI模式打開----- \r\n"); 179 } 180 else 181 uartTX_Send("\r\n !!!無該指令!!! \r\n"); 182 183 184 } 185 #pragma vector=P0INT_VECTOR//**************按鍵中斷處理函數 186 __interrupt void p0int(){ 187 if(P0IFG&0x01){ 188 delay(150); 189 if(P0_0==0){ 190 boog=0; 191 if(LED==1){ 192 LED=0; 193 boozd=0; 194 T1CC2H=0x00; 195 T1CC2L=pwmx[0]; 196 uartTX_Send("\r\n /////按鍵關燈成功//// \r\n"); 197 198 }else{ 199 LED=1; 200 boozd=0; 201 uartTX_Send("\r\n ----按鍵開燈成功----- \r\n"); 202 uartTX_Send("\r\n /////AI模式關閉///// \r\n"); 203 T1CC2H=0x00; 204 T1CC2L=pwmx[10]; 205 } 206 } 207 } 208 if(P0IFG&0x02){ 209 delay(150); 210 if(P0_1==0){ 211 boog=1; 212 if(boozd==0){ 213 boozd=1; 214 LED=1; 215 uartTX_Send("\r\n ----AI模式打開----- \r\n"); 216 }else{ 217 boozd=0; 218 LED=0; 219 uartTX_Send("\r\n /////AI模式關閉///// \r\n"); 220 } 221 } 222 } 223 P0IF=0; 224 P0IFG &=0xFC; 225 } 226 #pragma vector=RF_VECTOR//******************RF中斷處理函數 227 __interrupt void x1() 228 { 229 if(RFIRQF0 & 0x40){ 230 231 static int len; 232 static char ch; 233 len=ch=0; 234 len=RFD; //第一個字節 235 while(len>0){ 236 ch=RFD; 237 if(len==4){ 238 if(ch=='1'){ 239 boog=0; 240 if(LED==1){ 241 LED=0; 242 boozd=0; 243 T1CC2H=0x00; 244 T1CC2L=pwmx[0]; 245 uartTX_Send("\r\n /////無線關燈成功//// \r\n"); 246 247 }else{ 248 LED=1; 249 boozd=0; 250 uartTX_Send("\r\n ----無線開燈成功----- \r\n"); 251 uartTX_Send("\r\n /////AI模式關閉///// \r\n"); 252 T1CC2H=0x00; 253 T1CC2L=pwmx[10]; 254 }}} 255 if(len==3){ 256 if(ch=='2'){ 257 boog=1; 258 if(boozd==0){ 259 boozd=1; 260 LED=1; 261 uartTX_Send("\r\n ----AI模式打開----- \r\n"); 262 }else{ 263 boozd=0; 264 LED=0; 265 uartTX_Send("\r\n /////AI模式關閉///// \r\n"); 266 }}} 267 len--; 268 } 269 RFIRQF0 &=~0x40; 270 S1CON=0; 271 RFST =0xEC; 272 RFST=0xE3; 273 }}
RF發
1 #include<iocc2530.h> 2 void Initwx()//********************************射頻的初始化 3 { 4 EA=0; 5 FRMCTRL0 |=0x60; 6 TXFILTCFG =0x09; 7 AGCCTRL1 =0x15; 8 FSCAL1=0x00; 9 10 RFIRQM0 |=0x40;//打開射頻接收中斷,應該在下面寫接收中斷函數 11 IEN2 |=0x01;//RFIE中斷開 12 FREQCTRL=(11+(25-11)*5);//設置信道爲25則載波爲2475M 13 14 PAN_ID0=0x07;//////PANID 15 PAN_ID1=0x20;//0x2007 16 17 RFST=0xEC;//清除接收緩衝器 18 RFST=0xE3;//開啓接收使能 19 EA=1; 20 } 21 void fa( char *fsj,int len){//************************發送函數 22 RFST=0xEC;//確保接收是空 23 RFST=0xE3;//清接收標誌位 24 while(FSMSTAT1 & 0x22);//等待射頻發送準備好 25 RFST =0xEE;//確保發送隊列爲空 26 RFIRQF1 &=~0x02;//清空發送標誌位 27 for(int i=0;i<len;i++){ 28 RFD=fsj[i];} 29 RFST=0xE9;//發送緩衝區的數據 30 31 while(!(RFIRQF1 & 0x02));//等待發送完成 32 RFIRQF1=~0x02;//清發送完成標誌 33 } 34 35 void delay(){//*****************延時函數 36 for(int i=0;i<30;i++) 37 for(int j=0;j<1000;j++); 38 } 39 void go32m()//*************************時鐘頻率初始化 40 { 41 SLEEPCMD &=0xFB;//開啓所有RC振盪器,避免16MHZRC振盪器被關閉 42 while((SLEEPSTA&0x40)==0);//等待32MHZ上電穩定 43 CLKCONCMD &=0xBF;//設置32MHZ爲系統時鐘源 44 while(CLKCONSTA&0x40);//等待32MHZ成功成爲系統時鐘源 45 CLKCONCMD |=0x38; 46 CLKCONCMD &=0xF8;//系統時鐘不分頻輸出,定時器爲250KHZ 47 SLEEPCMD |=0x04;//關閉不用的RC振盪器 48 } 49 void InitButton()//************************** 50 { 51 P0SEL &=0xFC; 52 P0DIR &=0xFC; 53 P0INP &=0xFC; 54 P2INP &=0xFC; 55 PICTL |=0x01; 56 P0IE=1; 57 P0IEN |=0x03; 58 P0IF=0; 59 P0IFG &=0xFC; 60 } 61 void InitLED(){//*************************************** 62 P1SEL &=0xFC; 63 P1DIR |=0x03; 64 P1_0=1; 65 P1_1=1; 66 67 } 68 void main(){ 69 InitLED(); 70 go32m(); 71 InitButton(); 72 Initwx(); 73 SHORT_ADDR0=0x50; 74 SHORT_ADDR1=0x20;//設置模塊網絡地址爲0x2050; 75 while(1); 76 } 77 #pragma vector=P0INT_VECTOR 78 __interrupt void xx() 79 { 80 if(P0IFG&0x01){ 81 delay(); 82 if(P0_0==0){ 83 84 P1_0=~P1_0; 85 char fsj[]={0x0D,0x51,0x88,0x00,0x07,0x20,0xEF,0xBE,0x20,0x50,'1','0'}; 86 fa(fsj,12); //發送函數 87 } 88 } 89 if(P0IFG&0x02){ 90 delay(); 91 if(P0_1==0){ 92 93 P1_0=~P1_0; 94 char fsj[]={0x0D,0x51,0x88,0x00,0x07,0x20,0xEF,0xBE,0x20,0x50,'0','2'}; 95 fa(fsj,12); //發送函數 96 } 97 } 98 P0IF=0; 99 P0IFG &=0xFC;}