




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、無線傳感器網絡第第7 7章章 CC2530CC2530實現紅實現紅外通信外通信計計算機科算機科學學系系 宋文強宋文強1 7.1 7.1 紅紅外通信外通信簡簡介介v 紅紅外外遙遙控方式是以控方式是以紅紅外外線線作作為載為載體體來傳來傳送控制信息的,同送控制信息的,同時時隨隨著著電電子技子技術術的的發(fā)發(fā)展,展,單單片機的出片機的出現現,催生了,催生了數數字字編碼編碼方式方式的的紅紅外外遙遙控系控系統(tǒng)統(tǒng)的快速的快速發(fā)發(fā)展。展。v 紅紅外外遙遙控具有很多的控具有很多的優(yōu)優(yōu)點:點:v紅紅外外線發(fā)線發(fā)射裝置采用射裝置采用紅紅外外發(fā)發(fā)光二光二極極管,管,遙遙控控發(fā)發(fā)射器易于小型射器易于小型化且價格低廉;化且
2、價格低廉;v采用采用數數字信字信號編碼號編碼和二次和二次調調制方式,不制方式,不僅僅可以可以實現實現多路信息多路信息的控制,增加的控制,增加遙遙控功能,提高信控功能,提高信號傳輸號傳輸的抗干的抗干擾擾性,性,減減少少誤誤動動作,而且功率消耗低;作,而且功率消耗低;v紅紅外外線線不不會會向室外泄露,不向室外泄露,不會產會產生信生信號號串串擾擾;v反反應應速度快、速度快、傳輸傳輸效率高、工作效率高、工作穩(wěn)穩(wěn)定可靠。定可靠。 2 紅紅外外發(fā)發(fā)射信射信號號的形成的形成 3 紅紅外外線遙線遙控接收控接收電電路路 v 紅紅外接收端普遍采用價格便宜,性能可靠的一體化外接收端普遍采用價格便宜,性能可靠的一體化
3、紅紅外接收外接收頭頭接收接收紅紅外信外信號號,它它同同時對時對信信號進號進行放大行放大、檢檢波、整形,得到波、整形,得到數數字信字信號號的的編碼編碼信息再送信息再送給單給單片機,片機,經單經單片機解片機解碼并執(zhí)碼并執(zhí)行,去控制相行,去控制相關對關對象。象。 4 紅紅外外發(fā)發(fā)射射電電路路 v 由于由于CC2530CC2530可以使用定可以使用定時時器器產產生生38K38K的的調調制信制信號號,所以,所以只需要在只需要在CC2530CC2530引腳上接一引腳上接一個紅個紅外外發(fā)發(fā)射管就可以了,在射管就可以了,在一般情一般情況況下,下,還還需要串需要串連連一一個個小小電電阻。阻。v 需要注意的是需要
4、注意的是紅紅外外發(fā)發(fā)射射對對引腳的引腳的驅動驅動能力有要求,能力有要求,CC2530CC2530只有引腳只有引腳P1_0P1_0和和P1_1P1_1符合要求,可以作符合要求,可以作為紅為紅外信外信號號的的輸輸出引腳出引腳 5 7.2 7.2 實驗實驗1 1:中:中斷斷方式方式發(fā)發(fā)射射紅紅外信外信號號v 定定時時器器3 3有一有一個單獨個單獨的分的分頻頻器,器,T3CTL.DIV=010T3CTL.DIV=010,有效,有效時時鐘鐘= =標記頻標記頻率率/4/4v 定定時時器器3 3選擇選擇“ “模模” ”模式模式v 當當定定時時器器3 3的的計數計數器器值值=T3CC0=T3CC0時時,發(fā)發(fā)生
5、定生定時時器器3 3溢出中溢出中斷斷v 在中在中斷處斷處理函理函數數中,如果中,如果當當前的信前的信號為號為0 0,將將高低高低電電平平進進行行轉換轉換6 #include #include #define uin unsigned int#define uin unsigned int#define T1_Start T1CTL = 0 xa#define T1_Start T1CTL = 0 xa/ / 啟動啟動定定時時器器1 1的宏的宏#define T1_Stop T1CTL = 0 x8#define T1_Stop T1CTL = 0 x8/ / 停止定停止定時時器器1 1的宏的宏
6、#define T1_Clear T1STAT = 0#define T1_Clear T1STAT = 0/ / 清清除定除定時時器器1 1中中斷標斷標志的宏志的宏/ / 啟動啟動定定時時器器1 1通道通道0 0比比較值較值的宏的宏#define T1_Set(dat) T1CC0L=dat; T1CC0H=dat8#define T1_Set(dat) T1CC0L=dat; T1CC0H=dat8#define T1_Over() (T1STAT & 1)#define T1_Over() (T1STAT & 1)/ / 測試測試定定時時器器1 1通道通道0 0中中斷標斷
7、標志的宏志的宏static unsigned int count;static unsigned int count;/ / 延延時計數時計數static unsigned char flag;static unsigned char flag;/ / 紅紅外外發(fā)發(fā)送送標標志志char iraddr1; char iraddr1; / / 十六位地址的第一十六位地址的第一個個字字節(jié)節(jié)char iraddr2;char iraddr2;/ / 十六位地址的第二十六位地址的第二個個字字節(jié)節(jié)7 發(fā)發(fā)送送紅紅外外數數據的函據的函數數void SendIRdata(char p_irdata)void
8、SendIRdata(char p_irdata) int i; int i; char irdata = p_irdata; char irdata = p_irdata; T1_Set(9000); T1_Set(9000); / / 發(fā)發(fā)9ms9ms的低的低電電平引平引導碼導碼 flag = 0; flag = 0; T1_Clear();T1_Clear(); T1_Start(); T1_Start(); while(!T1_Over(); while(!T1_Over(); T1_Stop(); T1_Stop(); T1_Set(4500); T1_Set(4500); / /
9、發(fā)發(fā)4.5ms4.5ms的高的高電電平引平引導碼導碼 flag = 1; flag = 1; T1_Clear();T1_Clear(); T1_Start(); T1_Start(); while(!T1_Over(); while(!T1_Over(); T1_Stop(); T1_Stop(); flag = 0; flag = 0; T1_Set(300); T1_Set(300);/ / 發(fā)發(fā)300s300s低低電電平引平引導碼導碼 T1_Clear();T1_Clear(); T1_Start(); T1_Start(); while(!T1_Over(); while(!T1_O
10、ver(); T1_Stop(); T1_Stop();8 發(fā)發(fā)送送紅紅外外數數據的函據的函數數 irdata = iraddr1; irdata = iraddr1;/ / 發(fā)發(fā)送十六位地址的第一送十六位地址的第一個個字字節(jié)節(jié) for(i=0; i8; i+) for(i=0; i1; irdata = irdata1;/ / 右移一位,準右移一位,準備發(fā)備發(fā)送下一位送下一位 9 發(fā)發(fā)送送紅紅外外數數據的函據的函數數 flag = 0; flag = 0; irdata = iraddr2; irdata = iraddr2;/ / 發(fā)發(fā)送十六位地址的第二送十六位地址的第二個個字字節(jié)節(jié) fo
11、r(i=0; i8; i+) for(i=0; i1; irdata = irdata1; 10 發(fā)發(fā)送送紅紅外外數數據的函據的函數數 flag = 0; flag = 0; irdata = p_iradata; irdata = p_iradata;/ / 發(fā)發(fā)送一送一個數個數據字據字節(jié)節(jié) for(i=0; i8; i+) for(i=0; i1; irdata = irdata1; 11 發(fā)發(fā)送送紅紅外外數數據的函據的函數數 flag = 0; flag = 0; irdata = p_iradata; irdata = p_iradata;/ / 發(fā)發(fā)送送數數據的反據的反碼碼 for(
12、i=0; i8; i+) for(i=0; i1; irdata = irdata1; flag = 1;flag = 1; 12 T3T3、T1T1初始化函初始化函數數void Init_T3()void Init_T3() P1DIR = 0 x02; P1DIR = 0 x02;/ P1_1/ P1_1引腳引腳設為輸設為輸出出 CLKCONCMD &= 0 x7F; CLKCONCMD &= 0 x7F;/ / 晶振晶振頻頻率率32MHz32MHz while(CLKCONSTA & 0 x40); while(CLKCONSTA & 0 x40); /
13、/ 等待晶振等待晶振穩(wěn)穩(wěn)定定 EA = 1; EA = 1;/ / 開開放放總總控中控中斷斷 T3IE = 1; T3IE = 1;/ / 開開放定放定時時器器3 3中中斷斷 T3CTL = 0 x46; T3CTL = 0 x46;/ / 定定時時器器3 3設為設為4 4分分頻頻,“ “模模” ”模式模式 T3CCTL0 = 0 x44; T3CCTL0 = 0 x44;/ / 定定時時器器3 3通道通道0 0開開放中放中斷斷,設設比比較較模式模式 T3CC0 = 105; T3CC0 = 105;/ / 設設置定置定時時器器3 3通道通道0 0比比較較寄存器寄存器 void Init_T1
14、()void Init_T1() T1IE = 1; T1IE = 1;/ / 開開放定放定時時器器1 1中中斷斷 T1CTL = 0 x0A; T1CTL = 0 x0A;/ / 定定時時器器1 1設設分分頻頻,“ “模?!?”模式模式 T1CCTL0 = 0 x44; T1CCTL0 = 0 x44;/ / 定定時時器器1 1通道通道0 0開開放中放中斷斷,設設比比較較模式模式 13 主函主函數數void main()void main() Init_T3(); Init_T3(); Init_T1(); Init_T1(); P1_1 = 1; P1_1 = 1;/ IR/ IR輸輸出引
15、腳,初始化出引腳,初始化為為1 1 T3CTL |= 0 x10; T3CTL |= 0 x10;/ / 啟動啟動定定時時器器3 3 iraddr1 = 0; iraddr1 = 0;/ / 地址地址碼碼第一第一個個字字節(jié)節(jié) iraddr2 = 0 xFF; iraddr2 = 0 xFF;/ / 地址地址碼碼第二第二個個字字節(jié)節(jié) SendIRdata(18); SendIRdata(18); 14 定定時時器器3 3的中的中斷處斷處理函理函數數#pragma vector = T3_VECTOR#pragma vector = T3_VECTOR_interrupt void T3_ISR(
16、)_interrupt void T3_ISR() / / 當標當標志位志位為為0 0時時,將將IRIR輸輸出引腳出引腳電電平反平反轉轉,輸輸出出38kHz38kHz信信號號 if(flag = 0) if(flag = 0) P1_1 = P1_1; P1_1 = P1_1; else else P1_1 = 0; P1_1 = 0; / / 每(每(1/760001/76000)秒被)秒被調調用一次用一次15 7.3 7.3 實驗實驗2 2:PWMPWM方式方式輸輸出出紅紅外信外信號號v 利用利用1616位的定位的定時時器器1 1和和8 8位的定位的定時時器器3 3相配合,可以用相配合,可
17、以用PWMPWM方式方式輸輸出出紅紅外信外信號號v 定定時時器器3 3用于用于產產生生載載波波vT3CC0T3CC0設設置周期置周期vT3CC1T3CC1設設置占空比置占空比v通道通道1 1用于用于PWMPWM輸輸出出v 通道通道1 1使用比使用比較較模式:模式:在比在比較時清較時清除,在除,在0 x000 x00設設置置輸輸出出v 定定時時器器1 1采用定采用定時時器器3 3通道通道1 1的的輸輸出比出比較較信信號號作作為標記為標記,而,而不是采用系不是采用系統(tǒng)標記統(tǒng)標記v 定定時時器器1 1計數計數器不再器不再計計算系算系統(tǒng)時鐘統(tǒng)時鐘信信號號的的個數個數,而是,而是計計算算定定時時器通道器
18、通道1 1輸輸出的方波出的方波個數個數例如:例如:T3CC0=211,T3CC1=105,則通道則通道1輸出占空比為輸出占空比為1:2的方波的方波16 定時器定時器3通道通道1的輸出的輸出定時器定時器1計數器的輸入計數器的輸入17 v IRCTL.IRGEN=1IRCTL.IRGEN=1,定,定時時器器1 1處處于于IRIR產產生模式生模式v T1CTL.MODE=10T1CTL.MODE=10,定,定時時器器1 1處處于于調調制模式制模式v 定定時時器器1 1的周期使用的周期使用T1CC0T1CC0設設置置vT1CCTL0.MODE=1T1CCTL0.MODE=1,通道,通道0 0處處于比于
19、比較較模式模式vT1CCTL1.CMP=011T1CCTL1.CMP=011,通道,通道1 1處處于比于比較較模式,在比模式,在比較時設較時設置置輸輸出出,在,在0 x00000 x0000清清除,用于除,用于輸輸出出門門控信控信號號vT1CC1.T1CC1T1CC1.T1CC1標記載標記載波的波的個數個數v NECNEC格式格式紅紅外外編碼編碼要求要求數數據據“ “1”1”的持的持續(xù)時間為續(xù)時間為 1680s 1680s高高電電平平 + 560s+ 560s低低電電平平v 因此因此T1CC1=1680/26.3=64T1CC1=1680/26.3=64v T1CC0=(1680+560)/2
20、6.3=85 T1CC0=(1680+560)/26.3=8518 7.3 7.3 實驗實驗2 2:PWMPWM方式方式輸輸出出紅紅外信外信號號#include #include #include “exboard.h”#include “exboard.h”#define T1_Set(dat) T1CC0L=dat; T1CC0H=dat8#define T1_Set(dat) T1CC0L=dat; T1CC0H=dat8/ / 設設置定置定時時常常數數#define T11_Set(dat) T1CC1L=dat; T1CC1H=dat8#define T11_Set(dat) T1C
21、C1L=dat; T1CC1H=dat8char iraddr1 = 0;char iraddr1 = 0;/ / 十六位地址低字十六位地址低字節(jié)節(jié)char iraddr2 = 0 xFF;char iraddr2 = 0 xFF;/ / 十六位地址高字十六位地址高字節(jié)節(jié)void Set_ST_Period(uint sec)void Set_ST_Period(uint sec)/ / 設設置睡眠定置睡眠定時時器工作周期器工作周期 long sleepTimer = 0; long sleepTimer = 0; sleepTimer |= ST0; sleepTimer |= ST0;/
22、/ 先先讀讀出睡眠定出睡眠定時時器的器的當當前前值值 sleepTimer |= (long)ST18; sleepTimer |= (long)ST18; sleepTimer |= (long)ST216; sleepTimer |= (long)ST216); ST2 = (char)(sleepTimer16);/ / 再再寫寫回睡眠定回睡眠定時時器器 ST1 = (char)(sleepTimer8); ST1 = (char)(sleepTimer8); ST0 = (char)sleepTimer; ST0 = (char)sleepTimer; 19 初始化睡眠定初始化睡眠定時
23、時器器void Init_SLEEP_TIMER()void Init_SLEEP_TIMER() ST2 = 0 x00; ST2 = 0 x00; ST1 = 0 x0F; ST1 = 0 x0F; ST0 = 0 x0F; ST0 = 0 x0F; EA = 1; EA = 1;/ / 開總開總控中控中斷斷 STIE = 1; STIE = 1;/ / 睡眠定睡眠定時時器中器中斷斷使能使能 STIF = 0; STIF = 0;/ / 睡眠定睡眠定時時器中器中斷狀態(tài)斷狀態(tài)位置位置0 0 20 SendIRdata()SendIRdata()函函數數void SendIRdata(char
24、 p_irdata)void SendIRdata(char p_irdata) int i; int i; char irdata; char irdata; T1_Set(180); T1_Set(180);/ / 發(fā)發(fā)4.5ms4.5ms的高的高電電平起始平起始碼碼 T11_Set_(165); T11_Set_(165); Set_ST_Period(154); Set_ST_Period(154);/ / 設設置睡眠定置睡眠定時時器周期器周期 while(!(IRCON & 0 x80); while(!(IRCON & 0 x80); STIF = 0; STIF
25、= 0; irdata = iraddr1; irdata = iraddr1;/ / 發(fā)發(fā)送十六位地址的第一送十六位地址的第一個個字字節(jié)節(jié) for(i=0; i8; i+) for(i=0; i1; irdata = irdata1; 21 SendIRdata()SendIRdata()函函數數 irdata = iraddr2; irdata = iraddr2;/ / 發(fā)發(fā)送十六位地址的第二送十六位地址的第二個個字字節(jié)節(jié) for(i=0; i8; i+) for(i=0; i1; irdata = irdata1; 22 SendIRdata()SendIRdata()函函數數 ird
26、ata = p_irdata; irdata = p_irdata;/ / 發(fā)發(fā)送送8 8位位數數據據 for(i=0; i8; i+) for(i=0; i1; irdata = irdata1; 23 SendIRdata()SendIRdata()函函數數 irdata = p_irdata; irdata = p_irdata;/ / 發(fā)發(fā)送送8 8位位數數據的反據的反碼碼 for(i=0; i8; i+) for(i=0; i1; irdata = irdata1; T3CTRL &= 0 x10; T3CTRL &= 0 x10; 24 T3T3、T1T1初始化初始
27、化void Init_T3()void Init_T3() T3IE = 0; T3IE = 0;/ / 關關定定時時器器3 3中中斷斷 T3CTL = 0 x46; T3CTL = 0 x46;/ / 定定時時器器3 3設設置置4 4分分頻頻,“ “模模” ”模式模式 T3CCTL1 = 0 x24; T3CCTL1 = 0 x24;/ / 通道通道1 1開開中中斷斷 T3CC0 = 211; T3CC0 = 211;/ / 波形波形總總周期周期 T3CC1 = 105; T3CC1 = 105;/ / 波形高波形高電電平平寬寬度度 void Init_T1()void Init_T1()
28、T1IE = 0; T1IE = 0;/ / 關關定定時時器器1 1中中斷斷 T1CTL = 0 x02; T1CTL = 0 x02;/ / 定定時時器器1 1設設置置為為“ “模模” ”模式模式 PERCFG = 0 x40;PERCFG = 0 x40;/ / 定定時時器器1 1使用使用備備用位置用位置2 2,輸輸出引腳出引腳為為P1_1P1_1 T1CCTL0 = 0 x04; T1CCTL0 = 0 x04;/ / 定定時時器器1 1通道通道0 0設為設為比比較輸較輸出出 T1CCTL1 = 0 x5C; T1CCTL1 = 0 x5C;/ / 定定時時器器1 1通道通道1 1設為設
29、為比比較輸較輸出出 25 主函主函數數void main()void main() CLKCONCMD &= 0 x7F; CLKCONCMD &= 0 x7F; / / 晶振晶振頻頻率率32MHz32MHz while(CLKCONSTA & 0 x40) while(CLKCONSTA & 0 x40) / / 等待晶振等待晶振穩(wěn)穩(wěn)定定 P1SEL = 0 xFE; P1SEL = 0 xFE;/ / 將將引腳引腳設設置置為為外外設設功能功能 P2SEL = 0 x28; P2SEL = 0 x28; P1DIR = 0 xFE; P1DIR = 0 xFE
30、;/ / 將將相相應應引腳引腳設設置置為輸為輸出出 Init_T3(); Init_T3(); P1_1 = 0; P1_1 = 0; IRCTL = 0 x01; IRCTL = 0 x01;/ / 定定時時器器3 3的的輸輸出作出作為為定定時時器器1 1的的標記輸標記輸入入 Init_T1(); Init_T1(); Init_SLEEP_TIMER(); Init_SLEEP_TIMER(); T3CTL |= 0 x10; T3CTL |= 0 x10;/ / 啟動啟動定定時時器器3 3 SendIRdata(18); SendIRdata(18);/ / 發(fā)發(fā)送送紅紅外外數數據據 2
31、6 7.4 7.4 實驗實驗3 3:紅紅外接收外接收(1 1)實驗實驗目的:目的:編編程程實現實現接收接收紅紅外外遙遙控器的按控器的按鍵編碼鍵編碼,并將并將其其鍵碼顯鍵碼顯示在示在學習學習板的板的LCD1602LCD1602顯顯示示屏屏上。上。(2 2)設計設計思路:思路:v 紅紅外接收要求能準確外接收要求能準確計計算信算信號號周期,所以使用定周期,所以使用定時時器器1 1。將將定定時時器器1 1進進行行3232分分頻頻,每,每個計數個計數周期周期1s1sv 紅紅外外遙遙控器的按控器的按鍵動鍵動作是作是隨隨機機產產生的,需要使用生的,需要使用輸輸入引腳入引腳P1_0P1_0的中的中斷斷服服務務
32、程序程序來處來處理理紅紅外接收外接收頭頭接收的接收的數數據據27 7.4 7.4 實驗實驗3 3:紅紅外接收外接收實驗實驗#include #include #include “exboard.h”#include “exboard.h”#include “l(fā)cd.h”#include “l(fā)cd.h”#define IRIN P1_0#define IRIN P1_0char IRCOM7;char IRCOM7;#define T1_Start() T1CTL = 0 x09#define T1_Start() T1CTL = 0 x09#define T1_Stop() T1CTL = 0
33、 x08#define T1_Stop() T1CTL = 0 x08#define T1_Clear() T1STA = 0#define T1_Clear() T1STA = 0#define T1_Set(dat) T1CC0L=dat; T1CC0H=dat8#define T1_Set(dat) T1CC0L=dat; T1CC0H=dat8#define T1_Over()(T1STAT & 1)#define T1_Over()(T1STAT & 1)28 7.4 7.4 實驗實驗3 3:紅紅外接收外接收實驗實驗void main()void main() CLK
34、CONCMD &= 0 x7F; CLKCONCMD &= 0 x7F;/ / 晶振晶振頻頻率率32MHz32MHz while(CLKCONSTA & 0 x40); while(CLKCONSTA & 0 x40);/ / 等待晶振等待晶振穩(wěn)穩(wěn)定定 P0DIR = 0 xF0; P0DIR = 0 xF0;/ / 設設置置P0P0口引腳方向口引腳方向 P1DIR = 0 x1C; P1DIR = 0 x1C; / / 設設置置P1P1口引腳方向口引腳方向 lcd_init(); lcd_init();/ / 初始化初始化LCDLCD顯顯示示屏屏 P1IEN
35、|= 0 x11; P1IEN |= 0 x11;/ P1_0/ P1_0設設置置為為中中斷斷方式方式 PICTL |= 0 x02; PICTL |= 0 x02;/ / 下降沿下降沿觸發(fā)觸發(fā) EA = 1; EA = 1;/ / 開開放放總總控中控中斷斷 IEN2 |= 0 x10; IEN2 |= 0 x10;/ P0/ P0設設置置為為中中斷斷方式方式 T1CTL = 0 x09; T1CTL = 0 x09; while(1); while(1); 29 中中斷斷服服務務程序程序#pragma vector = P1INT_VECTOR#pragma vector = P1INT_V
36、ECTOR_interrupt void P1_ISR()_interrupt void P1_ISR() unsigned char j, k; unsigned char j, k; unsigned int N = 0; unsigned int N = 0; IEN2 &= 0 x10; IEN2 &= 0 x10; if(IRIN = 1) if(IRIN = 1) IEN2 |= 0 x10; IEN2 |= 0 x10; return; return; T1CNTL = 0; T1CNTL = 0; T1CNTH = 0; T1CNTH = 0; T1_Start
37、() T1_Start()30 while(!IRIN);while(!IRIN); T1_Stop(); T1_Stop(); N = T1CNTH; N = T1CNTH; N = N8; N = N8; N = N+T1CNTL; N = N+T1CNTL; if(N8500) if(N8500) IEN2 |= 0 x10; IEN2 |= 0 x10; return; return; T1CNTL = 0; T1CNTL = 0; T1CNTH = 0; T1CNTH = 0;31 for(j=0; j4; j+)for(j=0; j4; j+) for(k=0; k8; k+) f
38、or(k=0; k8; k+) while(IRIN); while(IRIN); while(!IRIN); while(!IRIN); T1CNTL = 0; T1CNTL = 0; T1CNTH = 0; T1CNTH = 0; T1_Start(); T1_Start(); while(IRIN); while(IRIN); N = T1CNTH; N = T1CNTH; N = N8; N = N=2000) if(N=2000) IEN2 |= 0 x10; IEN2 |= 0 x10; break; break; IRCOMJ = IRCOMJ1; IRCOMJ = IRCOMJ
39、1; if(N=700) if(N=700) IRCOMJ = IRCOMJ | 0 x80; IRCOMJ = IRCOMJ | 0 x80; N = 0; N = 0; T1CNTL = 0; T1CNTL = 0; T1CNTH = 0; T1CNTH = 0; T1_Stop(); T1_Stop(); 32 IEN2 |= 0 x10;IEN2 |= 0 x10; IRCOM5 = IRCOM2 & 0 x0F; IRCOM5 = IRCOM2 & 0 x0F; IRCOM6 = IRCOM2 4; IRCOM6 = IRCOM2 4; if(IRCOM59) if(
40、IRCOM59)/ / 轉換為轉換為ASCIIASCII碼碼 IRCOM5 = IRCOM2 + 0 x37; IRCOM5 = IRCOM2 + 0 x37; else else IRCOM5 = IRCOM2 + 0 x30; IRCOM5 = IRCOM2 + 0 x30; if(IRCOM69) if(IRCOM69) / / 轉換為轉換為ASCIIASCII碼碼 IRCOM6 = IRCOM2 + 0 x37; IRCOM6 = IRCOM2 + 0 x37; else else IRCOM6 = IRCOM2 + 0 x30; IRCOM6 = IRCOM2 + 0 x30; P1
41、DIR = 0 x1C; P1DIR = 0 x1C; lcd_pos(0); lcd_pos(0); lcd_wdat(IRCOM6); lcd_wdat(IRCOM6);/ / 在在LCDLCD上上顯顯示示結結果果 lcd_pos(1); lcd_pos(1); lcd_wdat(IRCOM5); lcd_wdat(IRCOM5); P1IFG |= 0 x00; P1IFG |= 0 x00; 33 補補充充實驗實驗:無:無線線點燈點燈實驗實驗操作方法:操作方法:v 把把main()main()主函主函數數中的第一行中的第一行寫為寫為: uint8 appMode = SWITCH;ui
42、nt8 appMode = SWITCH; v 選擇選擇 Project-Rebuild All Project-Rebuild All 編譯編譯v 下下載載到到發(fā)發(fā)射模射模塊塊v 把把main()main()主函主函數數中的第一行中的第一行寫為寫為: uint8 appMode = uint8 appMode = L LIGHTIGHT; ; v 選擇選擇 Project-Rebuild All Project-Rebuild All 編譯編譯v 下下載載到到發(fā)發(fā)射模射模塊塊v 兩個兩個模模塊塊分分別別上上電電,按,按發(fā)發(fā)射模射模塊塊的的S1S1鍵鍵,接收模,接收模塊塊LED1LED1狀態(tài)狀
43、態(tài)在在“ “點亮點亮” ”與與“ “熄熄滅滅” ” 之之間來間來回切回切換換34 實驗實驗:無:無線線點燈點燈(1)(1)#include #include #include #include #include #include #include #include #include hal_mcu.h#include hal_mcu.h#include hal_button.h#include hal_button.h#include hal_rf.h#include hal_rf.h#include basic_rf.h#include basic_rf.h#define RF_CHANNE
44、L #define RF_CHANNEL 25 25 / 2.4GHz RF channel/ 2.4GHz RF channel/ BasicRF address definitions/ BasicRF address definitions#define PAN_ID #define PAN_ID 0 x20070 x2007#define SWITCH_ADDR #define SWITCH_ADDR 0 x25200 x2520#define LIGHT_ADDR #define LIGHT_ADDR 0 xBEEF0 xBEEF#define APP_PAYLOAD_LENGTH#
45、define APP_PAYLOAD_LENGTH1 1#define LIGHT_TOGGLE_CMD #define LIGHT_TOGGLE_CMD 0 0/ Application states/ Application states#define IDLE #define IDLE 0 0#define SEND_CMD #define SEND_CMD 1 1/ Application role/ Application role#define NONE #define NONE 0 0#define SWITCH #define SWITCH 1 1#define LIGHT #
46、define LIGHT 2 2#define APP_MODES #define APP_MODES 2 235 實驗實驗:無:無線線點燈點燈(2)(2)static uint8 pTxDataAPP_PAYLOAD_LENGTH; static uint8 pTxDataAPP_PAYLOAD_LENGTH; / / 聲聲明明發(fā)發(fā)送送緩緩沖沖區(qū)區(qū)static uint8 pRxDataAPP_PAYLOAD_LENGTH; static uint8 pRxDataAPP_PAYLOAD_LENGTH; / / 聲聲明接收明接收緩緩沖沖區(qū)區(qū)static basicRfCfg_t basicR
47、fConfig;static basicRfCfg_t basicRfConfig;#ifdef SECURITY_CCM#ifdef SECURITY_CCM static uint8 key= 0 xc0, 0 xc1, 0 xc2, 0 xc3, 0 xc4, 0 xc5, 0 xc6, 0 xc7, static uint8 key= 0 xc0, 0 xc1, 0 xc2, 0 xc3, 0 xc4, 0 xc5, 0 xc6, 0 xc7, 0 xc8, 0 xc9, 0 xca, 0 xcb, 0 xcc, 0 xcd, 0 xce, 0 xcf,; 0 xc8, 0 xc9,
48、0 xca, 0 xcb, 0 xcc, 0 xcd, 0 xce, 0 xcf,;#endif#endif/ / 聲聲明本地函明本地函數數static void appLight();static void appLight();static void appSwitch();static void appSwitch();36 實驗實驗:無:無線線點燈點燈(3)(3)static void appLight()static void appLight() / Initialize BasicRF/ Initialize BasicRF basicRfConfig.myAddr = LIGH
49、T_ADDR; basicRfConfig.myAddr = LIGHT_ADDR; if(basicRfInit(&basicRfConfig) = FAILED) if(basicRfInit(&basicRfConfig) = FAILED) HAL_ASSERT(FALSE); HAL_ASSERT(FALSE); basicRfReceiveOn(); basicRfReceiveOn(); / Main loop/ Main loop while (TRUE) while (TRUE) while(!basicRfPacketIsReady(); while(!ba
50、sicRfPacketIsReady(); / / 檢查檢查模模塊塊是否已是否已經經可以接收下一可以接收下一個數個數據,據,/ / 如果準如果準備備好好則則返回返回 TRUETRUE / / 把收到的把收到的數數據據復復制到制到bufferbuffer中中 if(basicRfReceive(pRxData, APP_PAYLOAD_LENGTH, NULL)0)if(basicRfReceive(pRxData, APP_PAYLOAD_LENGTH, NULL)0) if(pRxData0 = LIGHT_TOGGLE_CMD) if(pRxData0 = LIGHT_TOGGLE_CMD
51、) /判判斷斷接收到的接收到的數數據是否據是否為為LIGHT_TOGGLE_CMDLIGHT_TOGGLE_CMD halLedToggle(1); halLedToggle(1); / / 改改變變Led1Led1的的狀態(tài)狀態(tài) 37 實驗實驗:無:無線線點燈點燈(4)(4)static void appSwitch()static void appSwitch() pTxData0 = LIGHT_TOGGLE_CMD; pTxData0 = LIGHT_TOGGLE_CMD; / Initialize BasicRF/ Initialize BasicRF basicRfConfig.my
52、Addr = SWITCH_ADDR; basicRfConfig.myAddr = SWITCH_ADDR; if(basicRfInit(&basicRfConfig)=FAILED) if(basicRfInit(&basicRfConfig)=FAILED) HAL_ASSERT(FALSE); HAL_ASSERT(FALSE); basicRfReceiveOff(); basicRfReceiveOff(); / / 由于模由于模塊塊只需要只需要發(fā)發(fā)射,所以把接收射,所以把接收屏屏蔽掉以降低功耗蔽掉以降低功耗 / Main loop/ Main loop while (TRUE) while (TRUE) if(halButtonPush
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年幼兒啟蒙:好餓的毛毛蟲制作指南
- 公司材料采購員年終工作總結(19篇)
- 房屋簡單維修合同(20篇)
- 行政專員年終工作總結800字(31篇)
- 2025年教案設計展望:自然拼讀法的教學應用
- 骨質疏松及其藥物治療1課件
- 免疫與治療性疫苗課件
- 手術室突發(fā)事件的應急處理
- 2025年幼兒園保育員培訓理論與實踐相結合
- 建筑工程施工班組中途退場協(xié)議書
- 烏頭堿中毒-演示文稿
- 2023年甘肅省卷中考英語真題
- 最全-房屋市政工程安全生產標準化指導圖冊
- 《魅力教師的修煉》讀書心得體會4篇
- 雙壁鋼圍堰施工與管理
- 2016年百貨商城商場超市企劃全年活動策劃方案模板
- 民航法規(guī)與實務PPT全套教學課件
- 富血小板血漿的臨床應用
- 2023年湖南食品藥品職業(yè)學院高職單招(英語)試題庫含答案解析
- GB/T 39096-2020石油天然氣工業(yè)油氣井油管用鋁合金管
- 爐外精煉說課
評論
0/150
提交評論