Top Banner
TI CC2530 ZigBee PRO 無線感測專業開發套件 實驗手冊 V0112 瑞晶資訊股份有限公司 Onecardsolution.com 台中市 403 西區台中港路一段 12 12 TEL : 04-2203-1005 FAX : 04-2203-1006
46

TI CC2530 ZigBee PROftp.syris.com/SYRIS_ZIGBEE_2530_SDK_DVD/PowerPoint/TI... · 2012. 1. 3. · TI CC2530 ZigBee PRO 件 套 發 開 業 專 測 感 線 無 冊 手 驗 實 1 1 0

Jan 31, 2021

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
  • TI CC2530 ZigBee PRO

    無線感測專業開發套件

    實驗手冊

    V0112

    瑞晶資訊股份有限公司 Onecardsolution.com

    台中市 403 西區台中港路一段 12 號 12 樓 TEL : 04-2203-1005 FAX : 04-2203-1006

  • 瑞晶資訊股份有限公司 TI CC2530 ZigBee PRO 無線感測專業開發套件實驗手冊

    目錄

    0. 版本變更 ....................................................... 3 1. ZigBee基本概念 ................................................. 4

    1.1 ZigBee無線感測網路簡介 ...................................... 4 1.1.1 ZigBee無限感測網路源起與歷史............................ 4

    1.2 ZigBee2007/pro ........................................... 4 1.2.1 ZigBee規格比較 ....................................... 5 1.2.2 ZigBee2007協定的新架構 ................................ 5

    1.3 ZigBee專業應用............................................. 5 2. CC2530 ZigBee開發套件硬體架構 ................................... 6

    2.1 CC2530 ZigBee開發套件特色 .................................. 6 2.1.1 單晶片實驗主板(MCU-KIT1) .............................. 6 2.1.2 CC2530 MCU板(ZIGBEE-MCU1) ........................... 7

    2.2 基本感測與界面模組 .......................................... 7 2.2.1 溫度偵測模組(M140) .................................... 7 2.2.2 滾珠傾斜震動偵測(M180) ................................. 7 2.2.3 I2C EEPROM記憶體(M230) ............................... 8 2.2.4 可變電阻電壓調整輸入(M190) ............................. 8 2.2.5 照度亮度偵測(M170) .................................... 8 2.2.6 繼電器/按鍵(M270) ..................................... 9 2.2.7 LED調光(M160)....................................... 9 2.2.8 三軸位移加速度偵測(M220) .............................. 10

    2.3 進階感測與界面模組 ......................................... 10 2.3.1 RTC時鐘(M100)....................................... 10 2.3.2 聲音輸入(M290) ...................................... 11 2.3.3 全方向的震動偵測(M110) ................................ 11 2.3.4 SPI串列記憶體 EEPROM(M120)............................ 12 2.3.5 紅外線接收(M130) ..................................... 12 2.3.6 霍爾元件電流偵測(M150) ................................ 12 2.3.7 溫濕度偵測(M200) ..................................... 13 2.3.8 R/G/B全彩 LED調色(M240) ............................. 13 2.3.9 DAC電壓輸出(M210) ................................... 13 2.3.10 RFID讀卡模組(M250) ................................. 14 2.3.11 馬達驅動(M280) ..................................... 15 2.3.12 麥克風(M290) ..................................... 16

    3. 建立開發環境 ................................................... 17 3.1 安裝 IAR EW8051 ........................................... 17 3.2 專案開啟編譯與除錯 ......................................... 21

    3.2.1 專案開啟 ............................................ 21 3.2.2 編譯 ................................................ 22 3.2.3 除錯 ................................................ 23

    3.3 安裝使用燒錄韌體工具 ........................................ 25

    - 1 -

  • 瑞晶資訊股份有限公司 TI CC2530 ZigBee PRO 無線感測專業開發套件實驗手冊

    3.3.1 安裝燒錄韌體工具 ...................................... 25 3.3.2 操作使用韌體燒錄工具 .................................. 28

    4. 訊號傳輸介面原理介紹 ............................................ 30 4.1 類比數位資料轉換器 ADC(Analog to Digital Converter) ......... 30 4.2 中斷 INT .................................................. 31 4.3 串列通訊 I2C ............................................... 31 4.4 串列通訊 SPI ............................................... 32 4.5 數位輸出入介面 DI/DO ........................................ 33 4.6 脈寬調變 PWM ............................................... 33 4.7 計時/計數器(TIMER/COUNTER) ................................ 33

    5. MCU單板實驗 ................................................... 34 5.1 晶片模組 IO控制 ............................................34

    6. 主板與感測介面模組實驗 .......................................... 36 6.1 溫度偵測(M140) ............................................ 36 6.2 10mmLED調光(M160) ........................................ 37 6.3 照度亮度偵測(M170) ........................................ 38 6.4 滾珠傾斜震動偵測(M180) ..................................... 39 6.5 電壓調整輸入-可變電阻(M190) ................................. 39 6.6 三軸位移加速度偵測(M220) ................................... 40 6.7 記憶體 EEPROM(M230) ....................................... 40 6.8 繼電器/按鍵(M270) ......................................... 43 6.9 Timer實驗 ................................................ 43 6.10 Keypad & LCD ............................................ 44

    - 2 -

  • 瑞晶資訊股份有限公司 TI CC2530 ZigBee PRO 無線感測專業開發套件實驗手冊

    0. 版本變更

    - 3 -

    日期 版本 說明

    2009-10-29 0100 初版

    2009-11-06 0110 內容新增、修正

    2009-11-17 0111 範例程式章節修改

    2012-01-03 0112 聯絡方式修改、排版修正

  • 瑞晶資訊股份有限公司 TI CC2530 ZigBee PRO 無線感測專業開發套件實驗手冊

    1. ZigBee 基本概念

    1.1 ZigBee 無線感測網路簡介 ZigBee 無線感測網路是近年來逐漸興起的一個短距離傳輸技術標準,是一門新型的技術,它是由家

    用無線通訊規格 HomeRF 聯盟所分支出來的(“Home Life”或”FireFly”),主要用於近距離的無線連接。 ZigBee 無線網路有其特定的無線電標準,可透過數千個 ZigBee 設備,以接力的方式串起一個個

    ZigBee 無線區域網路,經由無線電波在設備之間做資料傳輸,而且只需要很少的能量,所以通訊效率可 說是非常的高。

    由於常被使用於收集感測訊號(如溫度感測),故又被稱之為 ZigBee 無線感測網路。

    1.1.1 ZigBee 無限感測網路源起與歷史 ZigBee 的命名來自於蜜蜂(Bee),看似混亂的 Z 自行飛翔動作,實際上卻是將有花與蜂蜜的位置

    訊息正確的傳達給其他的蜜蜂。ZigBee 技術也有類似的通訊能力,也是將訊息傳達給其他 ZigBee 通 訊設備,故命名之。

    ZigBee 聯盟在 2002 年成立,主要由 Chipcon、Ember、飛思卡爾(Freescale)、Honeywell、三菱 (Mitsubish)、摩托羅拉(Motorola)、恩智浦(NXP)以及三星(Samsung)所共同推廣而成,其官方網址 www.ZigBee.org。

    圖 1.1 ZigBee 聯盟標誌

    ZigBee 技術誕生後,經歷了持續完善的成長過程,其核心技術軟體協定棧,從 2004 年 2 月的第 一個版本 ZigBee 2004,到 2007 年開發完成的 ZigBee 2007,ZigBee PRO,歷時 4 年,不斷完善和不 斷改進,在網路可靠性、網路容量、低功耗、抗干擾等多個方面,技術日趨完善。

    圖 1.2 ZigBee 技術歷年成長圖

    1.2 ZigBee2007/pro

    本實驗平台以 ZigBee2007/pro 為主要開發技術,下面針對 ZigBee2007/pro 做一些簡單的介紹。

    - 4 -

  • 瑞晶資訊股份有限公司 TI CC2530 ZigBee PRO 無線感測專業開發套件實驗手冊

    1.2.1 ZigBee 規格比較 相較於 ZigBee2004、ZigBee2006,ZigBee2007/pro 改進了:

    ZigBee 2007/pro 是工業級和商業級協定棧。

    ZigBee 2007/pro 適合於大型網路(超過 1000 個節點的大型無線感測器網路) 。 ZigBee 2007/pro 改進了路由方式,是路由更加可靠,路由表格更加節省記憶體。 ZigBee 2007/pro 增加了高級跳頻技術,具有超強網路抗干擾能力。 ZigBee 2007/pro 可以分包傳輸長資料包。 ZigBee 2007/pro 提供商業級的加密通訊。

    ZigBee 無線網路的基本部件包括協調器(Coordinator)、路由器(Router) 和終端節點(End Device),這些基本部件的核心都是一個完整、具有 IEEE802.15.4 標準無線收發器和微處理器(單片機) 的片上系統 SoC(也稱為無線單片機)。

    由於 ZigBee 2007 和 ZigBee PRO 軟體協定比較複雜,需要較大的記憶體空間和較大的運算處理 能力。

    1.2.2 ZigBee2007 協定的新架構 ZigBee-2007 規範定了兩套高級的功能指令集(feature set):分別是 ZigBee 功能命令集和

    ZigBee PRO 功能命令集。(註:ZigBee 2004 和 2006 皆無,且不相容這兩套新的命令集)。 ZigBee 協定模式(Stack Profile 1) 是 2006 發佈,目標是消費型電子產品和燈光商業應用環

    境,設計簡單,使用在少於 300 個節點的網路。 ZigBee PRO 協定模式 (Stack Profile 2) 在 2007 年發佈,目標是商業和工業環境,支援大型

    網路,可以有 1000 個以上網路節點,相應更好的安全性。

    1.3 ZigBee 專業應用

    2.4 GHz IEEE 802.15.4 標準系統。

    RF4CE 遙控控制系統。

    ZigBee 樓宇自動化、計量節能照明系統。

    工業控制和監測、消費電子。

    低功率無線感測器網路。

    健康照顧和醫療保健。

    圖 1.3 ZigBee 在市面上的相關產品

    ZigBee 是一種全球無線語言,能夠將截然不同的設備連接起來協同運作,進而提高日常生活水準。

    ZigBee 聯盟是一個由 300 多家會員公司組成的非營利性聯盟,致力於推動 ZigBee 無線技術的發展。該 聯盟將 ZigBee 作為消費型電子、能源、住宅、商業和工業領域領先的無線聯網、傳感和控制標準,在 全球各地進行推廣。

    - 5 -

  • 瑞晶資訊股份有限公司 TI CC2530 ZigBee PRO 無線感測專業開發套件實驗手冊

    2. CC2530 ZigBee 開發套件硬體架構

    2.1 CC2530 ZigBee 開發套件特色

    內建 USB 除錯、調試、模擬、燒錄功能。

    配套提供多種感測器(照度/溫度/加速度)20 種以上 。提供 C 原始程式碼與實驗。

    完整 C51 語言原始程式碼,熟悉、順手、入門快 。完整 Z-Stack 支援。

    IAR 環境,開發方便、快捷、簡單。

    具有液晶顯示。直觀、明瞭。

    電容式觸控按鍵可彈性規劃鍵盤(20 鍵)。

    支援 ETHERNET 網路與 RS232(USB)通訊。

    2.1.1 單晶片實驗主板(MCU-KIT1) 主板包含:

    LCM(16*2)含背光 網路 ETHERNET RJ-45 連接器 USB 轉 RS232 Mini-USB 連接器 3.3V 穩壓 IC LED 3 顆,通訊 TX/RX 與網路(NET)

    - 6 -

  • 瑞晶資訊股份有限公司 TI CC2530 ZigBee PRO 無線感測專業開發套件實驗手冊

    2.1.2 CC2530 MCU 板(ZIGBEE-MCU1) MCU 板包含:

    MCU CC2530 (TI) 3.3V 穩壓 IC LED 8 顆 BUZZER 蜂鳴器 按鈕開關 2 個 除錯燒錄器含 RESET 開關 附 Mini-USB 線材

    2.2 基本感測與界面模組 2.2.1 溫度偵測模組(M140) 2.2.2 滾珠傾斜震動偵測(M180)

    - 7 -

    功能描述 可即時偵測感應環境溫度狀況 備 註 精確度 ±1% 13-bit ,SPI 串列通訊介面

    功能描述 利用模組內的滾珠的移動,偵測感應傾斜或震動 備 註 外部中斷實驗

  • 瑞晶資訊股份有限公司 TI CC2530 ZigBee PRO 無線感測專業開發套件實驗手冊

    2.2.3 I2C EEPROM 記憶體(M230) 2.2.4 可變電阻電壓調整輸入(M190) 2.2.5 照度亮度偵測(M170)

    - 8 -

    功能描述 偵測環境照度亮度 備 註 ADC 轉換實驗

    功能描述 可變電阻電壓調整輸入 備 註 ADC 轉換實驗

    功能描述 I2C 串列介面記憶體存取實驗 備 註

  • 瑞晶資訊股份有限公司 TI CC2530 ZigBee PRO 無線感測專業開發套件實驗手冊

    2.2.6 繼電器/按鍵(M270) 2.2.7 LED 調光(M160)

    - 9 -

    功能描述 繼電器功能 備 註 DI/DO 實驗

    功能描述 LED 調光 備 註 PWM 實驗

  • 瑞晶資訊股份有限公司 TI CC2530 ZigBee PRO 無線感測專業開發套件實驗手冊

    2.2.8 三軸位移加速度偵測(M220)

    2.3 進階感測與界面模組 2.3.1 RTC 時鐘(M100)

    - 10 -

    功能描述 RTC 時鐘 備 註 I2C

    功能描述 三軸位移加速度偵測 備 註 SPI

  • 瑞晶資訊股份有限公司 TI CC2530 ZigBee PRO 無線感測專業開發套件實驗手冊

    2.3.2 聲音輸入(M290) 2.3.3 全方向的震動偵測(M110)

    - 11 -

    功能描述 聲音輸入 備 註 MIC A/D

    功能描述 全方向的震動偵測 備 註 INT

  • 瑞晶資訊股份有限公司 TI CC2530 ZigBee PRO 無線感測專業開發套件實驗手冊

    2.3.4 SPI 串列記憶體 EEPROM(M120) 2.3.5 紅外線接收(M130) 2.3.6 霍爾元件電流偵測(M150)

    - 12 -

    功能描述 SPI 介面的串列記憶體 EEPROM 備 註 SPI

    功能描述 霍爾元件電流偵測 備 註 (A/D)

    功能描述 紅外線接收 備 註 DI

  • 瑞晶資訊股份有限公司 TI CC2530 ZigBee PRO 無線感測專業開發套件實驗手冊

    2.3.7 溫濕度偵測(M200)

    2.3.8 R/G/B 全彩 LED 調色(M240)

    2.3.9 電壓輸出 D/A(M210)

    - 13 -

    功能描述 溫濕度偵測 備 註 I2C

    功能描述 DAC 電壓輸出 備 註 SPI

    功能描述 R/G/B 全彩 LED 調色,可調整紅、藍、綠三種顏色 備 註 PWN

  • 瑞晶資訊股份有限公司 TI CC2530 ZigBee PRO 無線感測專業開發套件實驗手冊

    2.3.10 RFID 讀卡模組(M250)

    - 14 -

    功能描述 RFID 讀卡模組,可讀出 125K 卡片 ID 編號 備 註 DI

  • 瑞晶資訊股份有限公司 TI CC2530 ZigBee PRO 無線感測專業開發套件實驗手冊

    2.3.11 馬達驅動(M280)

    - 15 -

    功能描述 馬達驅動,可調整正轉或是逆轉以及轉速 備 註 PWN

  • 瑞晶資訊股份有限公司 TI CC2530 ZigBee PRO 無線感測專業開發套件實驗手冊

    2.3.12 麥克風輸入(M290)

    - 16 -

    功能描述 可從麥克風端接收環境聲音分貝值 備 註 MIC A/D

  • 瑞晶資訊股份有限公司 TI CC2530 ZigBee PRO 無線感測專業開發套件實驗手冊

    3. 建立開發環境

    3.1 安裝 IAR EW8051 IAR System 是一套針對微處理晶片而開發的編譯軟體,本手冊使用 MCU-51 V7.51A 版做說明。主要

    撰寫語言為 C,可直接透過軟體本身做燒錄的動作。

    圖 3.1 IAR System 安裝軟體的歡迎畫面

    確認無誤後點選 Accept 進入安裝步驟。

    圖 3.2 使用 IAR System 的規範及合約

    - 17 -

  • 瑞晶資訊股份有限公司 TI CC2530 ZigBee PRO 無線感測專業開發套件實驗手冊

    安裝 IAR 必須有 License number,輸入後點選下一步(Next>)。

    圖 3.3 填上 IAR 軟體的 License

    輸入 License Key 後點選下一步(Next>)。 注意: License Key 最後面的”#”也要填上,此 License Key 必須與 License#是一對的。

    圖 3.4 填上 License Key

    - 18 -

  • 瑞晶資訊股份有限公司 TI CC2530 ZigBee PRO 無線感測專業開發套件實驗手冊

    圖 3.5 確定安裝路徑

    圖 3.6 選擇完整安裝

    在一切設定都完成之後(如圖 3.5 圖 3.6),就可以開始安裝了。

    - 19 -

  • 瑞晶資訊股份有限公司 TI CC2530 ZigBee PRO 無線感測專業開發套件實驗手冊

    圖 3.7 開始安裝

    圖 3.8 安裝完成

    安裝完成,接下來介紹編譯及燒錄的步驟,可以搭配範例程式一起學習。

    - 20 -

  • 瑞晶資訊股份有限公司 TI CC2530 ZigBee PRO 無線感測專業開發套件實驗手冊

    3.2 專案開啟編譯與除錯 關於 IAR 的軟體操作方面,本章節僅介紹執行本套件所提供範例所需之功能,其餘詳細操作說明,請 參閱 IAR 之使用導引文件內容。

    3.2.1 專案開啟 開啟 IAR 之後,可於啟始畫面開啟現有 workspace(圖 3.9)

    圖 3.9 起始畫面 – 開啟 Workspace

    也可於工具列上選取開啟現有 workspace(圖 3.10)

    圖 3.10 工具列 – 開啟 Workspace

    - 21 -

  • 瑞晶資訊股份有限公司 TI CC2530 ZigBee PRO 無線感測專業開發套件實驗手冊

    3.2.2 編譯 開啟範例程式或完成程式的撰寫後,可從下圖(圖 3.11)將整個專案做編譯的動作,建議讀者可以先配 合範例做練習,會幫助讀者更快進入狀況。

    圖 3.11 編譯整個專案

    編譯後在 Build 欄位中會告知是否有錯誤的程式碼,並列出錯誤訊息。 圖 3.12 是無錯誤的訊息,至於 warnings 的部分,雖然就算有警告也能作燒錄,不過建議讀者能養成好 習慣,將所有的問題解決,才是最完整的程式。

    - 22 -

  • 瑞晶資訊股份有限公司 TI CC2530 ZigBee PRO 無線感測專業開發套件實驗手冊

    圖 3.12 確定程式編譯無錯誤訊息 3.2.3 除錯 編譯完成並且都無錯誤訊息後,即可開始燒錄與除錯,下圖(圖 3.13)的紅框處皆可執行燒錄與除錯的 動作。

    圖 3.13 燒錄程式

    除錯技巧:可於程式碼前的灰色區域,連點兩下滑鼠左鍵,設定中斷點,在編譯後進入中斷點時,可

    - 23 -

  • 瑞晶資訊股份有限公司 TI CC2530 ZigBee PRO 無線感測專業開發套件實驗手冊

    將滑鼠游標移至欲觀察之變數上,觀看其變數值是否正確。

    - 24 -

  • 瑞晶資訊股份有限公司 TI CC2530 ZigBee PRO 無線感測專業開發套件實驗手冊

    3.3 安裝使用燒錄韌體工具 本套件可透過安裝 Texas Instrument 所提供之 SmartRF Flash Programmer 程式來進行韌體燒 錄,下列將介紹如何安裝及簡易操作使用說明。

    3.3.1 安裝燒錄韌體工具 點擊安裝程式執行檔後,會出現歡迎畫面。

    圖 3.14 燒錄韌體工具安裝歡迎畫面

    接下來,安裝程式會詢問安裝路徑,欲變更安裝目的路徑請按 Change,若無請按 Next 繼續。

    圖 3.15 詢問是否變更安裝路徑畫面

    - 25 -

  • 瑞晶資訊股份有限公司 TI CC2530 ZigBee PRO 無線感測專業開發套件實驗手冊 選擇完整(Complete)安裝或自訂(Custom)安裝,建議選擇完整安裝。

    圖 3.16 選擇完整或自訂安裝畫面

    在正式安裝程式之前,有一確認安裝畫面,按下 Install 按鈕後,即立刻開始安裝。

    圖 3.17 確認安裝畫面

    - 26 -

  • 瑞晶資訊股份有限公司 TI CC2530 ZigBee PRO 無線感測專業開發套件實驗手冊 安裝完成後,會出現安裝完成畫面,可於此畫面勾選是否將程式捷徑放置桌面。

    圖 3.18 安裝完成畫面 若勾選將程式捷徑放置桌面,在桌面將多出此圖示。

    - 27 -

  • 瑞晶資訊股份有限公司 TI CC2530 ZigBee PRO 無線感測專業開發套件實驗手冊

    3.3.2 操作使用韌體燒錄工具 本開發套件提供數個範例程式供使用者開發、測試 ZigBee MCU1、MCU-KIT1及其它模組元件功能, 使用者可單獨對 ZigBee MCU1做 IO、Light、Switch測試,也可將 ZigBee MCU1與 MCU-KIT1及 其它模組元件進行搭配整合測試。

    圖 3.19 ZigBee MCU1 與 MCU-KIT1 整合

    將 USB cable 插上 ZigBee MCU1,開啟 TI SmartRF Flash Programmer,畫面如下圖(圖 3.20)。 燒錄程式請參考下列步驟: Step 1: 點選 System-on-Chip 頁籤 Step 2: 選擇欲燒錄之 MCU Step 3: 選擇欲燒錄之程式 HEX 檔 (如: \\Example\CC2530_ex_基本款\mcu-kit1\ex_M140\debug\M140.hex) Step 4: 在 Actions 中,選擇 Erase, program and verify Step 5: 點選 Perform actions,進行燒錄

    - 28 -

  • 瑞晶資訊股份有限公司 TI CC2530 ZigBee PRO 無線感測專業開發套件實驗手冊

    1

    2

    3

    4

    5

    圖 3.20 韌體燒錄工具主畫面

    - 29 -

  • 瑞晶資訊股份有限公司 TI CC2530 ZigBee PRO 無線感測專業開發套件實驗手冊

    4. 訊號傳輸介面原理介紹

    4.1 類比數位資料轉換器 ADC(Analog to Digital Converter) 微電腦系統具備了快速運算、儲存資料的能力,在現今的機電系統中,微電腦所製作而成的控制器

    (controller)早已取代舊時純機械式或是電機機械式的控制機構。微電腦內部之訊號模式,皆為數位式訊 號,即通常所謂的邏輯「0」或「1」,邏輯 0 代表低電位,通常在微電腦系統中為 0 伏特,邏輯 1 代表高 電位,通常在微電腦系統中為 5 伏特。

    然而在自然界中的物理現象,當予以數量化之後往往是呈現連續的類比訊號,因此若欲將外界物理 量的變化量傳入微電腦中進行運算,或是要由微電腦輸出命令驅動裝置時,就需要將訊號進行轉換的處 理,圖 4.1 即為一利用微電腦控制系統的機電裝置的資料訊息處理流程。

    類比 訊號

    類比/數位轉換 A/D Converter

    數位 訊號

    微電腦控制器 Microprocessor

    數位 訊號

    數位/類比轉換 D/A Converter

    類比 訊號

    Controller 圖 4.1 資料訊息處理流程

    ADC 類比∕數位轉換過程可以用圖 4.2 表示,過程主要有兩項,首先要對欲轉換的資料進行取樣與保 存(Sampling and Holding),然後再將擷取到的資料加以量化(Quantization),如此就完成了資料的轉換。 其中取樣的目的在於將原始類比資料一一擷取,因此取樣率(Sampling rate)越高則訊號越不易失真,亦 即解析度越高;量化的目的則是在於將藉由取樣所獲得的資料以 0 與 1 的組合予以編碼,同樣的量化的位 元數越高則解析度越高。

    類比訊號 Analog signal

    取樣與保存 Sampling & Holding

    量化 Quantization

    數位訊號

    Digital signal 圖 4.2 類比/數位資料轉換

    圖 4.3 則為 ADC 內部電路概念圖,在圖中開關 S 往復切換將輸入 Vi 訊號取樣,並且利用電容器 C 將取 樣後的訊號加以保存,然而在下一次取樣後電容器中的資料將會被更新,因此需要在下一次取樣前將資 料完成量化儲存至微電腦的記憶單元中。

    圖 4.3 ADC 取樣與保存電路概念圖

    另一方面,為了要提高取樣率以及轉換的效率,在真實的電路設計上,往往利用多組的取樣—保存迴路, 或是加上不同的比較電路至設計中,目前 ADC 大致有四類的設計,分別是:回饋型(feedback-type converter)、雙斜率型(dual-slope converter)、並聯型(parallel or flash converter)、以及電容充電型 (charge-redistribution converter),各類型 ADC 在轉換效能與單位成本方面均各有優缺點,例如就轉換速 度而言以並聯型 ADC 速度最快,而以解析度而言則以雙斜率型 ADC 較高。

    - 30 -

  • 瑞晶資訊股份有限公司 TI CC2530 ZigBee PRO 無線感測專業開發套件實驗手冊

    圖 4.4 為回饋型 ADC 的電路圖,圖中先將取樣後的訊號 Vc 以差動比較器產生正負變化的訊號,然後再 以計數器將此正負變化的訊號記錄並輸出,而輸出的數位訊號再利用 DAC 轉換成類比訊號,與下一筆類 比訊號作比較,如此就能將類比訊號一一的轉換成數位訊號,也正因為每一個轉換後的訊號會回饋至差 動比較器與下一筆資料比較,因此稱為回饋型 ADC。

    圖 4.4 回饋型類比數位轉換器 4.2 中斷 INT

    中斷是指 CPU 正執行正常工作的期間,由 CPU 外界或內部產生的一個例外的要求,要求 CPU 暫時 停下目前的工作,來做些必要的處理,以便滿足突如其來的狀況。

    中斷的種類大體來說,不外乎硬體中斷、軟體中斷這兩類。硬體中斷的形成,通常是外界的硬體裝 置利用由 CPU 拉出的中斷要求信號線來通知 CPU 中斷的請求。而軟體中斷,通常是 CPU 自己引發的, 比如說執行了不該執行的指令、計算錯誤或者是執行某個用來產生軟體中斷的指令。

    對於處理中斷的一般原則是將目前執行 CPU 狀態紀錄下來,然後跳到中斷處理程式做進一歩處理; 中斷處理完成後,回復中斷發生前的狀態,然後繼續正常的程式執行。這些在進入及退出中斷所要做的 工作,根據不同 CPU 的複雜度,會有不同的負擔(Overhead),通常有個術語叫做:中斷潛伏期(Interrupt Latency),就是用來說明這類的處理延遲。

    4.3 串列通訊 I2C I²C 是內部整合電路的稱呼,是一種串列通訊匯流排,使用多主從架構。

    圖 4.5 I²C bus

    I²C 只使用兩條雙向開放集極(Open Drain)(串列資料(SDA)及串列時脈(SCL))並利用電阻 將電位上拉。I²C 允許相當大的工作電壓範圍,但典型的電壓準位為+3.3V 或+5v。

    I²C 的參考設計使用一個 7 位元長度的位址空間但保留了 16 個位址,所以在一組匯流排最多可和 112 個節點通訊。常見的 I²C 匯流排依傳輸速率的不同而有不同的模式:標準模式(100 Kbit/s)、低速模式 (10 Kbit/s),但時脈頻率可被允許下降至零,這代表可以暫停通訊。而新一代的 I²C 匯流排可以和更多

    - 31 -

  • 瑞晶資訊股份有限公司 TI CC2530 ZigBee PRO 無線感測專業開發套件實驗手冊 的節點(支援 10 位元長度的位址空間)以更快的速率通訊:快速模式(400 Kbit/s) 高速模式(3.4 Mbit/s)。

    雖然最大的節點數目是被位址空間所限制住,但實際上也會被匯流排上的總電容所限制住,一般而 言為 400 pF。

    圖 4.6

    4.4 串列通訊 SPI

    序列周邊介面(Serial Peripheral Interface Bus,SPI),類似 I2C,是一種 4 線同步序列資料協定, 適用於可攜式裝置平台系統,但使用率較 I2C 少。序列周邊介面一般是 4 線,有時亦可為 3 線,有別於 I2C 的 2 線,以及 1-Wire。

    圖 4.7 SPI 匯流排: 單一 master 對單一 slave

    SPI 的通信原理很簡單,它需要至少 4 條線,事實上 3 條也可以。也是所有基於 SPI 的設備共有的, 分別為: SDI(數據輸入): SDI 配合 SCK 提供的時鐘脈波,可完成數據的輸入。 SDO(數據輸出): SDO 配合 SCK 提供的時鐘脈波,可完成數據的輸出。 SCK(時脈訊號): 提供時鐘脈波讓 SDI、SDO 能配合波形一來一往的完成輸入與輸出訊號。 CS(選擇): CS 通常是晶片內部就寫好的,只有在預定的啟動訊號(高電位或低電位)狀態時,其他功能才 被允許執行(必須參考 DataSheet)。

    圖 4.8 SPI 匯流排: 單一 master 對複合 slave

    - 32 -

  • 瑞晶資訊股份有限公司 TI CC2530 ZigBee PRO 無線感測專業開發套件實驗手冊 4.5 數位輸出入介面 DI/DO

    輸入埠(input port)負責將外界的命令、資料取入微電腦中。一般微電腦的輸入埠只能夠輸入 0 與 1 兩 種狀態,但有些微電腦的輸入埠具有類比輸入端(即內含類比/數位轉換器,A/D converter)因此可輸入類 比電壓。

    輸出埠(output port)負責將 CPU 處理之結果送至外界。一般微電腦的輸出埠只能輸出 0 與 1 兩種狀態, 但有些微電腦的輸出埠具有類比輸出端(即內含數位/類比轉換器,D/A converter)因此可輸出類比電壓。 由於很多微電腦所用之元件既可當輸入埠用方可當輸出埠用,因此人 們常將輸入埠與輸出埠合稱為 I/O Port。

    輸入電路:微電腦必須與按鈕、微動開關、磁簧開關、光電開關、溫度開關、近接開關…等相連接, 才能得知外界的現況而做適當的處理。其接法有二,一以低態動作(activeLow),一以高態動作(activeHi)。

    輸出電路:微電腦的輸出埠沒有能力直接去驅動馬達、電磁閥、電燈泡、電熱器…等負載,因此必 須在微電腦與負載間加入"輸出介面電路"諸如電晶體、繼電器、固態電驛、電磁接觸器…等。其接法有 二,一以低態動作(activeLow),一以高態動作(activeHi)。

    4.6 脈寬調變 PWM 脈寬調變 PWM 是 Pulse Width Modulation 的縮寫,他是利用 0 與 1 的數位訊號的寬度調整來模擬類比

    輸出的一種控制,那他廣泛運用在量測通訊與功率控制還有轉變中,他的原理是當給隔壁得電壓到應用 中,例如 led 的時候他會全亮或是直流馬達他就會全速旋轉,但是如果在隔壁電壓中關掉一點關掉一點時 間,那他的亮度就會稍微減少,那馬達的轉速也會稍微降低,那如果把關掉的區間調得更大,那他的 led 的亮度也會更加減少,然後馬達的速也會稍微降低利用這一種調整他的脈寬,然後使的他的輸出感覺上 好像是他的平均值降低,這一種類比控制就叫做脈寬調變的方式

    圖 4.9 PWM 脈波寬度調變信號圖

    4.7 計時/計數器(TIMER/COUNTER)

    單晶片的內部有計時/計數器,可接收內部震盪信號或外界輸入的信號,而能產生一個中斷與計數 值。如果這個輸入信號代表某一事件發生的次數,則計時/計數器即是在作事件的計數;如果這個輸入信 號是一個固定頻率的信號,則計時/計數器則可用以作計算時間的工作。因此,單晶片的計時/計數器為一 體兩面,完全取決於信號的特質而定。

    - 33 -

  • 瑞晶資訊股份有限公司 TI CC2530 ZigBee PRO 無線感測專業開發套件實驗手冊

    5. MCU 單板實驗

    5.1 晶片模組 IO 控制 本實驗目的在於讓讀者了解基本的 IO 控制,實驗內容主要以控制 8 顆 LED、2 個按鍵以及 1 顆蜂鳴器的搭配。

    - 34 -

    專案: ex_io 程式碼來源: io.c #include "define.h" #include "usb_hid.h"

    // Buttons sbit HAL_IO_BTN_1 = P3 ^ 2; sbit HAL_IO_BTN_2 = P3 ^ 3; // Buzzer sbit HAL_IO_BUZZER = P4 ^ 0; // LEDs #define HAL_IO_LED_PORT

    P1

    void Beep(void)

    { … HAL_IO_BUZZER = 0; for (j = 0; j < 140; j++); HAL_IO_BUZZER = 1; for (j = 0; j < 140; j++);

    } void WaitMs(uint16 msec) {

    … } void main(void)

    { …

    P1M0 = 0x00; P1M1 = 0xFF;

    wdt = WDTCR; wdt |= 0x37; // Setting and Reset WDT

    … {

    if (HAL_IO_BTN_1 == 0) { … } if (HAL_IO_BTN_2 == 0) { … }

    if (mode == 1) {

    … {

    i = 0x01;

    mode = 2; }

    } if (mode == 2) {

    … {

    i = 0x80;

    //引用 “會使用到的程式檔

    這個部分是 IO Port 設定 P3^2 代表 IO P3.2 以此類推

    蜂鳴器的工作模式

    HAL_IO_BUZZER=0 則蜂鳴器停止 HAL_IO_BUZZER=1 則蜂鳴器啟動

    延遲的副程式

    LED 8765 4321 0000 0000 =0x00 =LED 全滅

    LED 8765 4321 1111 1111 =0xFF =LED 全亮

    HAL_IO_BTN_1==0 按鍵 1 啟動

    HAL_IO_BTN_2==0 按鍵 2 啟動

    LED 8765 4321

    0000 0001 =0x01 =LED1 LED 8765 4321

    1000 0000 =0x80 =LED8

  • 瑞晶資訊股份有限公司 TI CC2530 ZigBee PRO 無線感測專業開發套件實驗手冊

    mode = 1; }

    }

    }

    }

    WaitMs(100);

    WDTCR = wdt; - 35 -

    延遲 0.1 秒

  • 瑞晶資訊股份有限公司 TI CC2530 ZigBee PRO 無線感測專業開發套件實驗手冊

    6. 主板與感測介面模組實驗

    6.1 溫度偵測(M140) ±1% 13-bit(SPI)

    - 36 -

    專案: ex_M140 程式碼來源: ex.c void main(void) {

    … while (TRUE) {

    … halLcdWriteLine(HAL_LCD_LINE_2, " Temp. = C"); halLcdWriteChar(HAL_LCD_LINE_2, 14, 0xDF); while (TRUE) {

    val = M140_GetValue(); if ((0x2000 &val) == 0x2000) {

    val = ((val - 16384) *10) / 32; } else {

    val = (val *10) / 32; } halLcdWriteChar(HAL_LCD_LINE_2, 9, (val / 100) + '0');

    halLcdWriteChar(HAL_LCD_LINE_2, 10, ((val / 10) % 10) + '0');

    halLcdWriteChar(HAL_LCD_LINE_2, 11, '.'); halLcdWriteChar(HAL_LCD_LINE_2, 12, (val % 10) + '0');

    } }

    }

    //省略的部分,請參考前面的範例

    //0xDF 在這裡是 ASCII 碼的°

    //印出“ Temp. = °C ”

    //確定得到的數為正值 //0x2000=0010000000000000 //第一個字元為 0,此數為正

    //取 val 的數印出

    // 如 999/100=9 // (999/10)=99.9 //(99.9/10 取餘數)=商 9 餘 9

    //(999/10 取餘數)=商 99 餘 9

    //取 val 的數印出 //同上的運算法

    專案: ex_M140 程式碼來源: M140.c uint8 M140_SpiRW(uint8 ch) {

    uint8 i, cmd, ret; cmd = ch; for (i = 0; i < 8; i++) {

    HAL_SPI_CLK_CLR(); if (cmd &0x80) {

    HAL_SPI_MOSI_SET(); } else {

    HAL_SPI_MOSI_CLR(); } cmd

  • 瑞晶資訊股份有限公司 TI CC2530 ZigBee PRO 無線感測專業開發套件實驗手冊

    return ret; } void ADT7301_Start(void) {

    HAL_SPI_CS_EN(); M140_SpiRW(0x00); M140_SpiRW(0x00); HAL_SPI_CS_DIS();

    } void ADT7301_Read(void) {

    HAL_SPI_CS_EN(); M140_Value = M140_SpiRW(0x20); M140_Value = (M140_Value 0) {

    … if (key == 'U') {

    if (duty < 100) {

    duty += 5; }

    } if (key == 'N') {

    if (duty > 0) {

    duty -= 5; }

    } M160_On(duty); halLcdDisplayUint8(HAL_LCD_LINE_2, 10, HAL_LCD_RADIX_DEC, duty);

    } } M160_Off();

    } }

    //省略的部分,請參考前面的範例

    //初始狀態設為 50%的亮度

    //以 key 代表按下的按鍵

    //每按下↑一次則…

    //亮度+5%

    //每按下↓一次則…

    //亮度-5%

    //LCD 會以十進制顯示目前的亮度

    //為幾%

  • 瑞晶資訊股份有限公司 TI CC2530 ZigBee PRO 無線感測專業開發套件實驗手冊

    void M160_PWM(void) {

    M160_DutyCount++; if (M160_DutyCount >= 100) {

    M160_DutyCount = 0; } if (M160_DutyCount >= M160_DutyValue) {

    //用程式寫的PWM

    HAL_DO_OFF(); } else {

    HAL_DO_ON(); }

    } void M160_Init(void) {

    HAL_DO_OUTPUT(); HAL_DO_OFF(); RCAP2H = 0xFF; RCAP2L = 0x9B; T2_Function = M160_PWM; ET2 = 1;

    }

    6.3 照度亮度偵測(M170) (A/D)

    - 38 -

    //參考 M160.h //設定初始狀態

    專案: ex_M170 程式碼來源: ex.c void main(void) {

    … while (TRUE) {

    … while (TRUE) {

    val = M170_GetValue(); if (val > 250) {

    val -= 250; } else {

    val = 0; } val /= 15; if (val > 100) {

    val = 100; } halLcdDisplayUint8(HAL_LCD_LINE_2, 10, HAL_LCD_RADIX_DEC, val);

    } }

    }

    //省略的部分,請參考前面的範例

    專案: ex_M170 程式碼來源: M170.c 與 ex_M150 相同寫法 //與 ex_M150 相同,必須參考

    // adc.c

  • 瑞晶資訊股份有限公司 TI CC2530 ZigBee PRO 無線感測專業開發套件實驗手冊

    6.4 滾珠傾斜震動偵測(M180) (INT)

    6.5 電壓調整輸入-可變電阻(M190) (A/D)

    - 39 -

    專案: ex_M180 程式碼來源: ex.c void exM180(void) {

    uint8 key; M180_Init(); M180_Enable(); halLcdWriteLine(HAL_LCD_LINE_1, "** M180 Test **"); halLcdWriteLine(HAL_LCD_LINE_2, " Count ="); while (TRUE) { halLcdDisplayUint16(HAL_LCD_LINE_2, 10, HAL_LCD_RADIX_DEC, M180_GetValue());

    key = halKeypadPushed(); halMcuWaitMs(100); if (key == '*') {

    break; }

    } M180_Disable();

    }

    //LCD 第一行顯示內容

    //LCD 第二行顯示內容

    //LCD 第二行第十格顯示內容 //顯示十進制的數值

    //MCU 延遲 0.1 秒 //假設壓按鍵*,則跳出程式

    專案: ex_M190 程式碼來源: ex.c void exM190(void) {

    uint8 key; M190_Init(); halLcdWriteLine(HAL_LCD_LINE_1, "** M190 Test **"); halLcdWriteLine(HAL_LCD_LINE_2, " Value ="); while (TRUE) {

    halLcdDisplayUint16(HAL_LCD_LINE_2, 10, HAL_LCD_RADIX_DEC, M190_GetValue()); halMcuWaitMs(200); key = halKeypadPushed(); halMcuWaitMs(100); if (key == '*') {

    break; }

    } }

    //LCD 第一行顯示內容

    //LCD 第二行顯示內容

    //LCD 第二行第十格顯示內容 //顯示十進制的數值

    //MCU 延遲 0.1 秒 //假設壓按鍵*,則跳出程式

    專案: ex_M190 程式碼來源: M190.c 與 ex_M150 相同寫法 //與 ex_M150 相同,必須參考

    // adc.c

    專案: ex_M180 程式碼來源: M180.c 與ex_M110 相同寫法 //請參考 ex_M110

  • 瑞晶資訊股份有限公司 TI CC2530 ZigBee PRO 無線感測專業開發套件實驗手冊

    6.6 三軸位移加速度偵測(M220) (SPI)

    6.7 記憶體 EEPROM(M230) (I2C)

    - 40 -

    專案: ex_M220 程式碼來源: ex.c void exM220(void) {

    … while (TRUE) {

    M220_Pooling(); if ((M220_X_AXIS_Value &0x8000) == 0x8000) {

    M220_X_AXIS_Value = 65535-M220_X_AXIS_Value; halLcdWriteChar(HAL_LCD_LINE_2, 0, '-');

    } else {

    halLcdWriteChar(HAL_LCD_LINE_2, 0, '+'); } if ((M220_Y_AXIS_Value &0x8000) == 0x8000) {

    M220_Y_AXIS_Value = 65535-M220_Y_AXIS_Value; halLcdWriteChar(HAL_LCD_LINE_2, 6, '-');

    } else {

    halLcdWriteChar(HAL_LCD_LINE_2, 6, '+'); } if ((M220_Z_AXIS_Value &0x8000) == 0x8000)

    { M220_Z_AXIS_Value = 65535-M220_Z_AXIS_Value; halLcdWriteChar(HAL_LCD_LINE_2, 12, '-');

    } else {

    halLcdWriteChar(HAL_LCD_LINE_2, 12, '+'); }

    halLcdDisplayUint16(HAL_LCD_LINE_2, 1, HAL_LCD_RADIX_DEC, M220_X_AXIS_Value); halLcdDisplayUint16(HAL_LCD_LINE_2, 7, HAL_LCD_RADIX_DEC, M220_Y_AXIS_Value); halLcdDisplayUint16(HAL_LCD_LINE_2, 13, HAL_LCD_RADIX_DEC, M220_Z_AXIS_Value);

    … }

    }

    //0x80=1000000000000000

    // 2^15= 65536

    //顯示在第二行第 0 格,判斷 X 軸 //是否負值

    //顯示在第二行第 0 格,判斷 X 軸 //是否正值

    //顯示在第二行第六格,判斷 Y 軸 //是否負值

    //顯示在第二行第六格,判斷 Y 軸 //是否正值

    //顯示在第二行第十二格,判斷軸 //是否負值

    //顯示在第二行第十二格,判斷 //Z 軸是否正值 //LCD 第二行第一格讀值顯示 X 讀 //值 //LCD 第二行第七格讀值顯示 Y 讀 //值 //LCD 第二行第十三格讀值顯示 //Z 讀值

    專案: ex_M230 程式碼來源: ex.c void main(void) {

    … while (TRUE) {

    … while (TRUE)

    //省略的部分,請參考前面的範例

    專案: ex_M220 程式碼來源: M220.c

  • 瑞晶資訊股份有限公司 TI CC2530 ZigBee PRO 無線感測專業開發套件實驗手冊

    { …

    M230_WriteEEPROM(0, key); //將輸入的值寫入EEPROM

    }

    halLcdWriteChar(HAL_LCD_LINE_2, 6, key); key = M230_ReadEEPROM(0); halLcdWriteChar(HAL_LCD_LINE_2, 14, key);

    //LCD 印出使用者輸入的值 //將EEPROM 內的值讀出 //LCD 印出EEPROM 內目前的值

    } }

    }

    - 41 -

    專案: ex_M230 程式碼來源: M230.c void M230_I2cStart(void) {

    HAL_I2C_SCL_SET(); HAL_I2C_SDA_SET(); halMcuWaitUs(2); HAL_I2C_SDA_CLR(); halMcuWaitUs(2); HAL_I2C_SCL_CLR(); halMcuWaitUs(2);

    }

    void M230_I2cStop(void) {

    HAL_I2C_SDA_CLR(); halMcuWaitUs(2); HAL_I2C_SCL_SET(); halMcuWaitUs(2); HAL_I2C_SDA_SET(); halMcuWaitUs(2);

    }

    void M230_I2cAck(void) {

    HAL_I2C_SDA_CLR(); HAL_I2C_SCL_SET(); halMcuWaitUs(2); HAL_I2C_SCL_CLR(); halMcuWaitUs(2);

    }

    void M230_I2cNack(void) {

    HAL_I2C_SDA_SET(); HAL_I2C_SCL_SET(); halMcuWaitUs(2); HAL_I2C_SCL_CLR(); halMcuWaitUs(2);

    }

    void M230_I2cWrite(uint8 d) {

    uint8 i;

    for (i = 0; i < 8; i++) {

    if (d &0x80) {

    HAL_I2C_SDA_SET(); } else {

    HAL_I2C_SDA_CLR(); }

    //I2C 的運作模式

    //I2C 的停止模式

    //確認 I2C 訊號

    //停止確認

    //跑八個位元

  • 瑞晶資訊股份有限公司 TI CC2530 ZigBee PRO 無線感測專業開發套件實驗手冊

    HAL_I2C_SCL_SET(); d = d > 7)) &0x0E) | 0xA0; M230_I2cStart(); M230_I2cWrite(res); M230_I2cAck(); M230_I2cWrite((uint8)addr); M230_I2cAck(); M230_I2cStart(); M230_I2cWrite(res+1); M230_I2cAck(); res = M230_I2cRead(); M230_I2cNack(); M230_I2cStop(); return res;

    }

    - 42 -

  • 瑞晶資訊股份有限公司 TI CC2530 ZigBee PRO 無線感測專業開發套件實驗手冊

    6.8 繼電器/按鍵(M270) (DI/DO)

    6.9 Timer 實驗 這裡我們以 BUZZER 為例,讓讀者能練習 Timer 的用法。 ex_sound 來源:

    - 43 -

    專案: ex_M270 程式碼來源: ex.c void main(void) {

    … while (TRUE) {

    … halLcdWriteLine(HAL_LCD_LINE_2, "DI=[1][1] DO=[0]"); while (TRUE) {

    udi = M270_GetDI(); halLcdWriteChar(HAL_LCD_LINE_2, 4, (udi &0x01) + '0');

    halLcdWriteChar(HAL_LCD_LINE_2, 7, ((udi >> 1) &0x01) + '0'); halLcdWriteChar(HAL_LCD_LINE_2, 14, udo + '0'); if ((udi &0x01) == 0x00) {

    udo = 1; M270_SetDO(udo);

    } if ((udi &0x02) == 0x00) {

    udo = 0; M270_SetDO(udo);

    } …

    HAL_RELAY_OFF(); }

    }

    //省略部分,請參考前面的範例

    //顯示初始狀態

    //Key1 (11111110)&(00000001)=(00000000)=0 //Key2 (11111101)&(00000001)=(00000001)=1 //(11111110)>>1=(01111111)&0x01=1 //(11111101)>>1=(01111110)&0x01=0

    專案: ex_M270 程式碼來源: M270.c void M270_SetDO(uint8 udo) {

    if(udo==0) HAL_RELAY_OFF();

    else HAL_RELAY_ON();

    } uint8 M270_GetDI(void) {

    uint8 udi; udi=0x03; if(HAL_KEY_1_PUSHED())

    udi&=~(0x01); if(HAL_KEY_2_PUSHED())

    udi&=~(0x02); return udi;

    }

    //這裡的 //HAL_RELAY_OFF() //HAL_RELAY_OFF() //請參考 M270.h

    //M270 模組上的KEY1

    //udi=11111110 //M270 模組上的KEY2 //udi=11111101

    sound.c void Timer0_int(void)interrupt 1 using 2

  • 瑞晶資訊股份有限公司 TI CC2530 ZigBee PRO 無線感測專業開發套件實驗手冊

    if (BeepTag == 1)

    BeepTag = 0; HAL_IO_BUZZER = 0;

    else {

    BeepTag = 1; HAL_IO_BUZZER = 1;

    } TL0 = FreqLO;

    } TH0 = FreqHI;

    //將 Timer 作狀態初始化的設定 void Initial_Timer0(void) {

    IP = 0x02; // hi priority: Timer0 TMOD = 0x01; // Set Timer0 at Mode1 ( 16 bit ) TR0 = 0; ET0 = 1;

    } void SoundFreq(uint16 freq) {

    … f = 500000L / (uint32)freq; i = (unsigned int)(f); j = 65535-i; FreqHI = (uint8)(j / 256); FreqLO = (uint8)(j % 256); BeepTag = 1; HAL_IO_BUZZER = 1; TL0 = FreqLO; TH0 = FreqHI; TR0 = 1;

    } void StopSound(void) {

    BeepTag = 1; HAL_IO_BUZZER = 1; TR0 = 0;

    }

    6.10 Keypad & LCD

    - 44 -

    //終止 Timer 中斷 //執行 Timer 中斷

    //設定蜂鳴器的頻率 //{ //計算 TimerOut 的中斷點 // // // //} //TimerOut 的數值 //TimerOut=1 執行 //TimerOut=0 停止

    專案: ex_keypad_lcd 程式碼來源: keypad_lcd.c void main(void) {

    uint8 ch, no;

    halBoardInit();

    halLedSet(8);

    utilPrintLogo("** Keypad LCD **"); halMcuWaitMs(300); halBuzzer(300); while (halKeypadPushed() == 0); utilMenuSelect(NULL); halLcdClear(); no = 0; while (TRUE) {

    ch = halKeypadPushed(); if (ch > 0) {

    if (no >= 16) {

    //按下任一鍵進入程式

    //因為 LCD 只有 2*16 格

    //所以若輸入的次數大於

  • 瑞晶資訊股份有限公司 TI CC2530 ZigBee PRO 無線感測專業開發套件實驗手冊

    }

    }

    halLcdWriteChar(HAL_LCD_LINE_2, no - 16, ch);

    } else {

    halLcdWriteChar(HAL_LCD_LINE_1, no, ch); } no++; if (no >= 32) {

    halBuzzer(300); halLcdClear(); no = 0;

    } halMcuWaitMs(200);

    } halMcuWaitMs(100);

    - 45 -

    //16 次就必須換到第二行 //輸入的次數會累加