<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                * 導師視頻講解:[**去聽課**](https://www.bilibili.com/video/BV1k34y1D7Vz?p=31) >[success] **技術支持說明:** >**1**.一般以自主學習為主 > **2**.可到官方問答社區中提問:[**去提問**](https://bbs.csdn.net/forums/zigbee) > **3**.工程師**會盡快**解答社區問題,但他們是一線開發,【**難以保證**】解答時效,解答辛苦,感謝理解! <br/> ## **相關 API 說明** 打開SampleSwitch這個工程,在hal_led.h文件中可以找到操作LED的API,文件所在位置如圖所示。 ![](https://img.kancloud.cn/20/f7/20f789801615cae8ea8761bef18a7c1b_1680x1011.png =500x) ### 在這個頭文件中,有3個常用的API,代碼如下: ``` /* * 初始化LED */ extern void HalLedInit( void ); /* * 開關LED */ extern uint8 HalLedSet( uint8 led, uint8 mode ); /* * 閃爍LED */ extern void HalLedBlink( uint8 leds, uint8 cnt, uint8 duty, uint16 time ); ``` ### HalLedInit()的作用是初始化LED。在上一章節中,我們講解過在hal_drivers.c文件中的驅動程序初始化函數HalDriverInit()里面調用了這個函數。 ### 在Z-Stack 3.0中,HAL默認支持了4個LED,LED的邏輯定義如下: ``` /* LEDS - The LED number is the same as the bit position */ #define HAL_LED_1 0x01 #define HAL_LED_2 0x02 #define HAL_LED_3 0x04 #define HAL_LED_4 0x08 #define HAL_LED_ALL (HAL_LED_1 | HAL_LED_2 | HAL_LED_3 | HAL_LED_4) ``` ### HalLedSet( uint8 led, uint8 mode )用來設定LED的工作模式。其中的第1個參數led用于指定待設定的LED,第2個參數mode用于指定工作模式,這個工作模式有3種: (1)開啟,對應的宏定義是HAL_LED_MODE_ON。 (2)關閉,對應的宏定義是HAL_LED_MODE_OFF。 (3)反轉,對應的宏定義是HAL_LED_MODE_TOGGLE。 例如如果要開啟第1盞LED,可以按這個方式調用: ``` HalLedSet( HAL_LED_1,//指定第1盞LED HAL_LED_MODE_ON);//開啟 ``` ### HalLedBlink( uint8 leds, uint8 cnt, uint8 duty, uint16 time )的作用是讓LED閃爍。其中的第1個參數leds用于指定LED,第2個參數cnt用于指定閃爍的次數,第3個參數duty用于指定LED是開啟狀態時的占空比,第4個參數time用于指定每次閃爍的時間周期(單位:ms)。 ### 舉個例子說明一下使用方法,例如如果需要讓第1盞LED閃爍10次,每次閃爍的時間周期是2000ms,而且在這2000ms中有60%的時間LED要處于開啟狀態,那么可以按照以下方式調用: ``` HalLedBlink( HAL_LED_1,//指定第1盞LED 10,//指定閃爍次數是10次 60,//指定60%的時間LED是處于開啟狀態 2000);//指定1次閃爍的時間周期是2000ms,也就是在1次閃爍周期中,LED的開啟時長是1200ms,關閉時長是800ms ``` <br/> ## **LED的物理映射** 在調用LED API之前,需要配置好LED的物理映射定義。LED的物理映射定義在hal\_board\_cfg.h文件中,文件所在位置如圖所示。 ![](https://img.kancloud.cn/e9/69/e969a6125d26718dd84d829ef50e3a6d_327x365.png =300x) ### 默認的LED的物理映射定義如下: ``` //LED1 #define LED1_BV BV(0) #define LED1_SBIT P1_0 #define LED1_DDR P1DIR #define LED1_POLARITY ACTIVE_HIGH #if defined (HAL_BOARD_CC2530EB_REV17) //LED2 #define LED2_BV BV(1) #define LED2_SBIT P1_1 #define LED2_DDR P1DIR #define LED2_POLARITY ACTIVE_HIGH //LED3 #define LED3_BV BV(4) #define LED3_SBIT P1_4 #define LED3_DDR P1DIR #define LED3_POLARITY ACTIVE_HIGH #ifdef ENABLE_LED4_DISABLE_S1 //LED4 #define LED4_BV BV(1) #define LED4_SBIT P0_1 #define LED4_DDR P0DIR #define LED4_POLARITY ACTIVE_HIGH #define LED4_SET_DIR() do {LED4_DDR |= LED4_BV;} while (0) #else #define LED4_SET_DIR() #endif #endif ``` 這里以LED1為例講解一下物理映射定義的含義。 (1)其中的BV(N)表示數值1向左移動N位,等價于(1 << N),因此BV(0)的值為1<<0,也就是等于1。 >[info] <<是向左移位運算符,1<<0表示數值1向左移動0個位,移位后的值不變,仍等于1。舉多一個例子,例如數值1的二進制數是0000 0001,1<<2表示把0000 0001中的所有位向左移動兩位,并且在低位補0、把移出的高位丟棄,所以計算結果也就是0000 0100,對應的十進制數是3。如果讀者不了解這個運算符,需要補充一下相關的知識。 (2)#define LED1_SBIT P1_0表示LED1與CC2530的P1_0連接。 (3)#define LED1_DDR P1DIR表示LED1對應的方向寄存器為P1DIR。P1DIR在前面的章節已經講解過,這里不再講解了。 (4)#define LED1_POLARITY ACTIVE_HIGH表示LED1是高電平驅動的,也就是給P1_0輸入高電平,LED1就會被點亮。 ### 這些是協議棧的默認配置,開發者需要根據實際的硬件連接情況進行修改。例如,配套的ZigBee開發板是把LED連接到P0\_4的,因此可以把LED1的引腳修改為P0_4,修改后代碼如下: ``` //LED1 #define LED1_BV BV(4) #define LED1_SBIT P0_4 #define LED1_DDR P0DIR #define LED1_POLARITY ACTIVE_HIGH ``` ### 剩下的LED2、LED3和LED4由于沒有用到,因此可以暫時忽略。 <br/> <br/> ## **項目定制** * 如需項目定制開發,可掃碼添加項目經理好友(注明“**項目定制**”) * 定制范圍:**NB-IoT**、**CATn(4G)**、**WiFi**、**ZigBee**、**BLE Mesh**以及**STM32**、**嵌入式Linux**等IoT技術方案 * 善學坊官網:[www.sxf-iot.com](https://www.sxf-iot.com/) ![](https://img.kancloud.cn/ca/73/ca739f92cab220a3059378642e3bd502_430x430.png =200x) * 非項目定制**勿擾**,此處**非**技術支持
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看