<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                * 導師視頻講解:[**去聽課**](https://www.bilibili.com/video/BV1k34y1D7Vz?p=7) >[success] **技術支持說明:** >**1**.一般以自主學習為主 > **2**.可到官方問答社區中提問:[**去提問**](https://bbs.csdn.net/forums/zigbee) > **3**.工程師**會盡快**解答社區問題,但他們是一線開發,【**難以保證**】解答時效,解答辛苦,感謝理解! <br/> 接著上節課的內容,切換到LED工程,如圖所示。 ![](https://img.kancloud.cn/9f/80/9f8022cdea4fc5e209e763698df0dc81_454x522.png =200x) <br/> ## **LED控制原理** #### **計算機的邏輯層與電路層** &emsp;&emsp;在計算機邏輯層中,一般是使用二進制數字0或1來控制對象或表示對象的狀態。在計算機電路層中,一般是用高電平(3.3 v)來表示邏輯上的1,用低電平(0 v)來表示邏輯上的0。 ### #### **CPU的IO口** &emsp;&emsp;CPU的GPIO口,通常簡稱為IO口或引腳,可以理解為從CPU芯片里引出的一根導線,用于連接外部的設備。通俗地講,一個CPU會有多個IO口,每個IO口有兩種工作模式,分別是輸出信號模式和接收信號模式。 ### 在輸出信號模式時,開發者可以通過代碼來控制這個IO口輸出的電平,這個電平狀態有高電平(3.3v)和低電平(0v)兩種。在輸入信號模式時,開發者可以通過代碼來檢測這個IO口是處于高電平還是低電平的狀態。 #### **LED的原理分析** ZigBee開發板的LED原理圖如圖所示。 ![](https://img.kancloud.cn/f6/6e/f66ec236bfa6c38ad81e0cdca544dece_832x164.png =600x) 其中的D2表示LED,其右端接地(GND),因此右端的電壓為0v。LED的左端依次連接著R12和IO\_LED。IO\_LED是CC2530的一個IO口,能夠輸出高電平(3.3v)或低電平(0v)。R12是一個穩壓電阻,用于防止電路的電壓過大而燒壞LED。當IO\_LED輸出高電平時,LED左端電壓為3.3v,右端電壓為0v,左端和右端形成了3.3v的電壓差,因此LED被點亮;反之,當IO\_LED輸出低電平時,LED左端和右端電壓均為0v,因此LED被熄滅。 >[danger] 如您因缺少硬件原理相關知識導致未能看懂電路圖,需先補充相關知識。 <br/> ## **CC2530的引腳簡介** CC2530 配備了40個IO口,如圖所示。 ![](https://img.kancloud.cn/3b/23/3b234788608ef8733336d64b58fdea90_832x950.png =400x) 其中的P0\_0~P0\_7屬于P0端口,P1\_0~P1\_7屬于P1端口,P2\_0~P2\_5屬于P2端口,這些IO口都可以通過編程的方式使用,接下來將會結合示例來講解其使用方法。 <br/> ## **\* 查閱TI官方數據手冊** 我們可以在本課程配套資源中找到CC2530數據手冊,如圖所示。 ![](https://img.kancloud.cn/de/d6/ded6b2d7b3a94417cad583928ba0d0ac_930x640.png =200x) * 下載地址:https://gitee.com/study-j/zigbee/tree/master/%E8%AF%BE%E5%A4%96%E8%B5%84%E6%96%99%E5%8F%82%E8%80%83/CC2530%E6%95%B0%E6%8D%AE%E6%89%8B%E5%86%8C ### 該數據手冊的目錄如下。 ![](https://img.kancloud.cn/9c/b6/9cb6dd696c1221b429429e3b719ece07_490x1262.png =250x) ### 展開《I/O端口》章節,其目錄如下。 ![](https://img.kancloud.cn/e2/3a/e23a3b890a44292040b6289db904c625_478x724.png =250x) ### 此數據手冊可以用作查閱工具書,供我們隨時查閱CC2530的各個細節,例如使用GPIO時就可以找到《I/O 端口》這一小節,使用定時器時就可以找到定時器章節。 <br/> ## **IO口的使用方法** **相關寄存器簡介** 可以通過配置相關寄存器的方式來使用IO口,例如配置指定的IO口為輸出信號模式并控制其輸出高/低電平。CC2530中與IO口配置相關的寄存器如下。 * P0:端口0配置寄存器 * P1:端口1配置寄存器 * P2 :端口2配置寄存器 * PERCFG:外設控制寄存器 * APCFG:模擬外設 I/O 配置寄存器 * P0SEL :端口 0 功能選擇寄存器 * P1SEL :端口 1 功能選擇寄存器 * P2SEL :端口 2 功能選擇寄存器 * P0DIR :端口 0 方向寄存器 * P1DIR :端口 1 方向寄存器 * P2DIR :端口 2 方向寄存器 * P0INP :端口 0 輸入模式寄存器 * P1INP :端口 1 輸入模式寄存器 * P2INP :端口 2 輸入模式寄存器 * P0IFG :端口 0 中斷狀態標志寄存器 * P1IFG :端口 1 中斷狀態標志寄存器 * P2IFG :端口 2 中斷狀態標志寄存器 * PICTL :中斷邊緣寄存器 * P0IEN :端口 0 中斷掩碼寄存器 * P1IEN :端口 1 中斷掩碼寄存器 * P2IEN :端口 2 中斷掩碼寄存器 * PMUX :掉電信號 Mux 寄存器 * OBSSEL0 :觀察輸出控制寄存器 0 * OBSSEL1 :觀察輸出控制寄存器 1 * OBSSEL2 :觀察輸出控制寄存器 2 * OBSSEL3 :觀察輸出控制寄存器 3 * OBSSEL4 :觀察輸出控制寄存器 4 * OBSSEL5 :觀察輸出控制寄存器 5 <br/> #### **使用P0_4 IO口** 在ZigBee開發板中,CC2530的 P0\_4與LED連接,因此可以通過CC2530的 P0\_4來控制LED的亮滅。可以對P0\_4相關的寄存器進行配置來控制P0\_4 的狀態和行為。P0_4相關的寄存器及相應說明見表4-。 ### | 寄存器 | 說明 | | --- | --- | | P0 | 8位寄存器,8個位分別與P0\_0~P0\_7一一對應,分別用于設置或讀取這8個IO口的電平狀態 | | P0SEL | 8位寄存器,8個位分別與P0\_0~P0\_7一一對應,分別配置這8個IO口的功能。如果IO口對應的位為0,表示該IO口用于通用輸入/輸出;如果為1,表示用于特定的功能 | | P0DIR | 8位寄存器,8個位分別與P0\_0~P0\_7一一對應,分別配置這8個IO口的通信方向。如果IO口對應的位為0,表示該IO口處于輸入信號模式;如果為1,表示處于輸出信號模式 | <br/> 根據表格說明,可以按如下方式配置P0\_4的相關寄存器和控制其輸出電平,代碼如下: ``` //?把P0_4配置為通用輸出IO口 P0SEL &= ~(1<<4); // 把P0SEL寄存器的第4位設置為0,表示把P0_4配置為通用IO口 P0DIR |= (1<<4); // 把P0DIR寄存器的第4位設置為1,表示把P0_4配置為輸出信號模式 P0_4=0;//輸出低電平 P0_4=1;//輸出高電平 ``` 其中的P0_4是在頭文件ioCC2530.h中定義的,在配置好相關寄存器后,給其賦0或1即可控制其輸出電平狀態。這里簡單講解一下向左位移運算符<<、取反運算符~、按位與運算符&和按位或運算符|,以便加深讀者對代碼的理解。 (1)向左位移運算符 << 把所有二進制數字向左移動指定的位數,高位的數字移出(舍棄),低位的空位補0。例如“1<<4”表示把0000 0001中的所有數字向左移動4位,并且高位的0移出舍棄,低位的空位補0,所以運算結果為0001 0000。 (2)取返運算符 ~ 把所有二進制數字取反,例如對0001 0000進行取反運算后的結果為1110 1111。 (3)按位與運算符& 按位與運算規則是把兩邊的數轉換為二進值數,然后把兩個數的對應位逐位進行與運算,與運算的規則為1&1=1、1&0=0、0&1=0和0&0=0,例如1101 1101和1110 1111進行按位與運算后的結果為1100 1101。 (4)按位或運算符| 按位或運算規則是把兩邊的數轉換為二進值數,然后把兩個數的對應位逐位進行或運算,或運算的規則為1&1=1、1&0=1、0&1=1和0&0=0,例如1101 1101和0001 0000進行按位與運算后的結果為1101 1101。 <br/> ## **編寫LED控制代碼** 學習了相關原理后,可以編寫代碼來控制LED,示例代碼如下: ``` //51單片機入門/2.GPIO實驗/Workspace/code/led/led.c #include "ioCC2530.h" #include <stdio.h> #include <stdint.h> //P0_4由頭文件ioCC2530.h定義 #define LED P0_4 //定義LED的開關狀態和對應的值 #define LED_ON 1 #define LED_OFF 0 static void delayMs(uint16_t nMs); static void initLed(void); void main() { initLed();//初始化LED while(1) { printf("Set led to on!\r\n"); LED = LED_ON;//開啟LED delayMs(500);//延時0.5s后才繼續往下執行程序 printf("Set led to off!\r\n"); LED = LED_OFF;//關閉LED delayMs(500);//延時0.5s后才繼續往下執行程序 } /* while */ } /** * @fn delayMs * * @brief 讓程序延后指定的時間才接著運行 * * @param nMs - 時間長度,以毫秒為單位,值范圍:165535 * * @return none */ static void delayMs(uint16_t nMs) { uint16_t i,j; for (i = 0; i < nMs; i++) //經由實際測試可以得出執行535次循環耗時最接近1ms for (j = 0; j < 535; j++); } /** * @fn initLed * * @brief 初始化LED,完成P0_4相關寄存器的配置 */ static void initLed() { P0SEL &= ~(1<<4); P0DIR |= (1<<4); } ``` &emsp;&emsp;以上代碼實現了閃爍LED的功能。程序首先通過 initLed對寄存器P0SEL和P0DIR進行初始化,然后對LED值進行定時反轉,從而實現了閃爍LED的效果。 <br/> ## **仿真調試** >[danger] 在學習本節課前,需要先掌握基本的程序下載及仿真操作,參考:[程序下載及仿真](2482302) 1. 把開發板通過仿真器連接到電腦上。 2. 按一下仿真器的復位按鍵。 ![](https://img.kancloud.cn/a6/65/a66518b91448e99ee3e1594218f21591_1710x612.png =200x) ### 3. 打開本實驗代碼,編譯鏈接通過后,點擊“下載仿真”按鈕,如圖所示。 ![](https://img.kancloud.cn/13/f9/13f9b59478944be9567eb840f95108d4_1372x1204.png =300x) ### 4. 點擊Go按鈕,全速運行程序,可以觀察到LED閃爍的效果,并且Terminal I/O不斷輸出對應的狀態信息,如圖所示。 ![](https://img.kancloud.cn/7e/b7/7eb78bc8b2723cfeaf2a58126c170732_2448x858.png =500x) ### 5. 點擊如圖所示按鈕可以停止運行程序。 ![](https://img.kancloud.cn/eb/fc/ebfc0bd853cc4d11664c68d4a06983f8_2448x858.png =500x) <br/> <br/> ## **商務合作** 如有以下需求,可掃碼添加管理員好友,注明“**商務合作**” * 項目定制開發,技術范圍:**NB-IoT**、**CATn(4G)**、**WiFi**、**ZigBee**、**BLE Mesh**以及**STM32**、**嵌入式Linux**等; * 入駐平臺,成為講師; * 接項目賺外快; * 善學坊官網:[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>

                              哎呀哎呀视频在线观看