版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
項目二十二
Z-Stack協(xié)議棧按鍵控制01項目導入項目導入
物聯(lián)網設備在使用過程中常用到手動控制功能,如按不同按鍵遠程控制其他多個設備的打開或關閉。本項目通過在協(xié)調器上按不同按鍵,控制多個終端模塊IO口的開啟或關閉,讓大家了解Z-Stack協(xié)議棧下按鍵控制技術的工作原理、代碼編寫、程序燒錄、程序調試的整個過程,并通過實驗結果加以驗證。02項目分析項目分析
本項目需要1個協(xié)調器模塊和1個終端節(jié)點模塊。由協(xié)調器模塊的按鍵控制終端節(jié)點IO口的輸出,完成手動遠程控制終端節(jié)點外接的設備打開或關閉。如果協(xié)調器上有多個按鍵,也可以修改代碼實現多個設備的遠程控制。后續(xù)課程中我們會采用在用戶手機上通過云平臺遠程控制這些網絡設備,從而實時了解這些設備運行狀況,并發(fā)送相關指令控制相關設備的運行?!卷椖恳蟆?.用Z-Stack協(xié)議棧實現協(xié)調器端的按鍵參數采集。2.用Z-Stack協(xié)議棧實現按鍵數據傳輸。3.Z-Stack協(xié)議棧下實現終端節(jié)點接收到的按鍵數據控制設備。03項目目標項目目標學會使用Z-Stack協(xié)議棧下的終端節(jié)點所接設備的控制方法。學會Z-Stack協(xié)議棧下的下的按鍵參數采集代碼的編寫。學會使用Z-Stack協(xié)議棧下的按鍵數據無線傳輸。熟悉Z-Stack協(xié)議棧下的按鍵參數設置。04知識儲備
要完成這個項目的設計,我們首先要了解HAL目錄下主板、按鍵、LCD、LED、uart串口等硬件設備的中斷設置概念,掌握按鍵中斷方式和查詢方式的設置方法、調用方法和代碼的編寫。4.1按鍵初始化1.按鍵的定義:在文件hal_board_cfg.h中默認定義兩個按鍵PUSH1和PUSH2。/*S1*/#definePUSH1_BVBV(0)#definePUSH1_SBITP0_1//定義PUSH1按鍵為P0_1腳/*JoystickCenterPress*/#definePUSH2_BVBV(0)#definePUSH2_SBITP2_0//定義PUSH2按鍵為P2_0腳#definePUSH2_POLARITYACTIVE_HIGH//定義PUSH1初始為高電平4.2按鍵初始化
系統(tǒng)啟動過程中主程序main()調用OnBoard.c文件中的InitBoard(OB_READY)函數。voidInitBoard(uint8level){if(level==OB_COLD){
osal_int_disable(INTS_ALL);}else//如果不是OB_COLD狀態(tài){
HalKeyConfig(HAL_KEY_INTERRUPT_DISABLE,OnBoard_KeyCallback);}}
HalKeyConfig(HAL_KEY_INTERRUPT_DISABLE,OnBoard_KeyCallback),//其意義為禁用按鍵中斷
OnBoard_KeyCallback為中斷的回調函數。4.3系統(tǒng)按鍵初始化1.操作系統(tǒng)在hal_key.c文件中定義按鍵SW_6的端口和需要設置的寄存器。/*SW_6isatP0.1*/#defineHAL_KEY_SW_6_PORTP0//P0端口#defineHAL_KEY_SW_6_BITBV(1)//P0.1引腳#defineHAL_KEY_SW_6_SELP0SEL//P0端口功能寄存器#defineHAL_KEY_SW_6_DIRP0DIR//P0端口方向寄存器/*SW_6interrupts*/#defineHAL_KEY_SW_6_EDGEBITBV(0)#defineHAL_KEY_SW_6_EDGEHAL_KEY_FALLING_EDGE//下降沿觸發(fā)中斷#defineHAL_KEY_SW_6_IENIEN1//中斷屏蔽寄存器#defineHAL_KEY_SW_6_IENBITBV(5)//
IEN1的第5位#defineHAL_KEY_SW_6_ICTLP0IEN//端口中斷允許寄存器#defineHAL_KEY_SW_6_ICTLBITBV(1)//位中斷允許寄存器#defineHAL_KEY_SW_6_PXIFGP0IFG//中斷標志寄存器系統(tǒng)按鍵初始化2.在hal_key.c文件的HalKeyInit()函數中設置按鍵I/O口的模式和方向寄存器。voidHalKeyInit(void){
HAL_KEY_SW_6_SEL&=~(HAL_KEY_SW_6_BIT);//設置SW6引腳功能為普通IO口
HAL_KEY_SW_6_DIR&=~(HAL_KEY_SW_6_BIT);//設置SW6引腳方向為輸入
……}3.在hal_key.c文件的HalKeyConfig()函數中設置按鍵中斷寄存器。本例未使用中斷,因此無需設置相關寄存器。voidHalKeyConfig(boolinterruptEnable,halKeyCBack_tcback){
if(Hal_KeyIntEnable)//如果開啟了中斷模式{……
PICTL|=HAL_KEY_SW_6_EDGEBIT;//設置下降沿觸發(fā)
HAL_KEY_SW_6_ICTL|=HAL_KEY_SW_6_ICTLBIT;//P0IEN寄存器相關位置1系統(tǒng)按鍵初始化HAL_KEY_SW_6_IEN|=HAL_KEY_SW_6_IENBIT;//IEN1寄存器相關位置1HAL_KEY_SW_6_PXIFG=~(HAL_KEY_SW_6_BIT);//P0IFG寄存器相關位置1……}else//如果沒有開啟中斷{HAL_KEY_SW_6_ICTL&=~(HAL_KEY_SW_6_ICTLBIT);//P0IEN寄存器相關位清0HAL_KEY_SW_6_IEN|=HAL_KEY_SW_6_IENBIT;//IEN1寄存器相關位置1HAL_KEY_SW_6_PXIFG=~(HAL_KEY_SW_6_BIT);//P0IFG寄存器相關位置1……}4.4輪詢按鍵事件
按鍵初始化設置函數HalKeyConfig()調用了設置定時器函數osal_start_timerEx(Hal_TaskID,HAL_KEY_EVENT,HAL_KEY_POLLING_VALUE)。其含義為:每經過HAL_KEY_POLLING_VALUE時間(默認100ms),則啟動一個硬件處理任務Hal_TaskID,任務內容為HAL_KEY_EVENT(按鍵事件),簡單說來就是定時查詢按鍵有無動作。如果開啟了按鍵中斷,則關閉這個定時器,改由中斷觸發(fā)按鍵事件。當發(fā)生按鍵事件時,硬件事件處理函數Hal_ProcessEvent()首先調用HalKeyPoll()函數判斷是哪個按鍵動作,如果PUSH1動作則將PUSH1與系統(tǒng)按鍵HAL_KEY_SW_6綁定。輪詢按鍵事件voidHalKeyPoll(void){if(HAL_PUSH_BUTTON1())
{
keys|=HAL_KEY_SW_6;
}}其次回調函數OnBoard_KeyCallback()調用osal_msg_send(),發(fā)送按鍵狀態(tài)消息到系統(tǒng)任務,由系統(tǒng)對此按鍵任務進行處理。4.5按鍵時發(fā)送廣播包1.在SampleApp.c文件的SampleApp_HandleKeys()函數中添加發(fā)送廣播包的函數。voidSampleApp_HandleKeys(uint8shift,uint8keys){if(keys&HAL_KEY_SW_6){if(keyCounter<3)//keyCounter有1和2兩種狀態(tài)
SampleApp_SendPeriodicMessage1(keyCounter++);else{keyCounter=1;SampleApp_SendPeriodicMessage1(keyCounter++);}}在發(fā)送的廣播包中發(fā)送控制編號voidSampleApp_SendPeriodicMessage1(uint8index){if(AF_DataRequest(&SampleApp_Periodic_DstAddr,&SampleApp_epDesc,
SAMPLEAPP_PERIODIC_CLUSTERID,
1,
&index,
&SampleApp_TransID,
AF_DISCV_ROUTE,
AF_DEFAULT_RADIUS)==afStatus_SUCCESS)
{
if(index==1)
HalLedSet(HAL_LED_1,HAL_LED_MODE_OFF);//狀態(tài)1時燈滅
else
HalLedSet(HAL_LED_1,HAL_LED_MODE_ON);//狀態(tài)2時燈亮……
}}4.6處理接收到的控制數據
在SampleApp.c文件下的SampleApp_MessageMSGCB()函數負責接收到數據的處理。終端和路由節(jié)點接收到廣播包后,采用接收到的燈光控制數據控制LED1的狀態(tài)。如果帶有液晶顯示功能,也可將數據顯示到液晶屏上。voidSampleApp_MessageMSGCB(afIncomingMSGPacket_t*pkt){……caseSAMPLEAPP_PERIODIC_CLUSTERID://收到廣播數據data=(uint8)pkt->cmd.Data[0];if(data=='A')
HalLedBlink(HAL_LED_2,4,50,200);//收到終端發(fā)送來的“A1”包時LED2燈閃4次elseif(data==1)
HalLedSet(HAL_LED_1,HAL_LED_MODE_OFF);//收到狀態(tài)包“1”時LED1燈滅else
HalLedSet(HAL_LED_1,HAL_LED_MODE_ON);//收到狀態(tài)包“2”時LED1燈亮break;……}05項目實施實施過程(1)在hal_board_cfg.h修改按鍵端口/*S1*/#definePUSH1_BVBV(0)#definePUSH1_SBITP0_0//設置按鍵1為P0_0/*S2*/#definePUSH2_BVBV(0)#definePUSH2_SBITP2_0//設置按鍵2為P2_0#definePUSH2_POLARITYACTIVE_HIGH實施過程(2)OnBoard.c中禁止按鍵中斷:voidInitBoard(uint8level)HalKeyConfig(HAL_KEY_INTERRUPT_DISABLE,OnBoard_KeyCallback);(3)在hal_key.c文件中設置寄存器/*SW_6isatP0.0*/#defineHAL_KEY_SW_6_PORTP0#defineHAL_KEY_SW_6_BITBV(0)#defineHAL_KEY_SW_6_SELP0SEL#defineHAL_KEY_SW_6_DIRP0DIR實施過程(4)在hal_key.c文件中HalKeyInit(void)
函數中設置寄存器
HAL_KEY_SW_6_SEL&=~(HAL_KEY_SW_6_BIT);
HAL_KEY_SW_6_DIR&=~(HAL_KEY_SW_6_BIT);
(5)在hal_key.c文件的HalKeyConfig()函數中屏蔽中斷。因未開啟中斷,此步可省略。
HAL_KEY_SW_1_ICTL&=~HAL_KEY_SW_1_ICTLBIT;HAL_KEY_SW_1_IEN&=~HAL_KEY_SW_1_IENBIT;HAL_KEY_SW_1_PXIFG=~(HAL_KEY_SW_1_BIT);HAL_KEY_SW_1_PXIFG=~(HAL_KEY_SW_1_BIT);(6)在hal_key.c文件的HalKeyPoll()函數中綁定硬件按鍵BUTTON1與系統(tǒng)按鍵SW6if(HAL_PUSH_BU
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 湖北省武漢市2024年中考一模數學試題含答案
- 遼寧大學《公共政策理論與應用》2023-2024學年第一學期期末試卷
- 黃河交通學院《藝術實踐(2)》2023-2024學年第一學期期末試卷
- 江蘇海事職業(yè)技術學院《建筑工程進度控制》2023-2024學年第一學期期末試卷
- 【物理】第七章 力 章末練習 2024-2025學年八年級下冊人教版物理
- 黑龍江財經學院《醫(yī)藥學術推廣綜合實訓》2023-2024學年第一學期期末試卷
- 重慶三峽職業(yè)學院《大數據與數據分析》2023-2024學年第一學期期末試卷
- 重慶城市管理職業(yè)學院《消防工程綜合》2023-2024學年第一學期期末試卷
- 浙江育英職業(yè)技術學院《裝飾工程制圖及AutoCAD應用》2023-2024學年第一學期期末試卷
- 體現漢字文化的有趣漢字故事
- TSGD7002-2023-壓力管道元件型式試驗規(guī)則
- 建筑工地節(jié)前停工安全檢查表
- QUALITY MANUAL質量手冊(英文版)
- 決策的藝術課件
- 國際經濟學國際貿易的標準理論
- 8D報告培訓教材(PPT 47頁)
- -居民死亡醫(yī)學證明(推斷)書
- 糖尿病酮癥酸中毒病例討論-文檔資料
- 液相色譜質譜質譜儀LCMSMSSYSTEM
- 民辦非企業(yè)單位章程核準表-空白表格
- 派克與永華互換表
評論
0/150
提交評論