目 錄
第一章 前言
1.1 本課題的研究背景和意義
1.2 本課題研究的主要內容
1.3 本論文的主要內容及結構安排
第二章 系統設計
系統總體設計方案
2.1 系統硬件設計
2.2.1 主控板電路設計
2.2.2 STC89C52簡介
2.2.3 檢測模塊的設計與選用
2.2.4繼電器輸出模塊
2.2.5 nRF2401A無線射頻模塊
2.2.6 基于MAX232與PC通訊
2.3.1 遙控器的設計
2.3.2 顯示屏LCD1602
2.3.3 時鐘芯片DS1302
2.3.4 LM7805與AMS1084
2.3.5 按鍵指示電路及實現
2.4 硬件設計開發
2.4.1 開發環境protel99SE
2.4.2 電路板的制作
第三章 程序的設計實現
3.1 系統整體程序框架
3.2.1 主控板程序設計
3.2.2 燈光延時等待的設計與思考
3.3.1 遙控器程序設計
3.3.2 NRF2401A無線射頻通訊的程序設計
3.3.2 LCD1602顯示模塊的程序設計
3.3.3 DS1302時鐘芯片的設計
3.4軟件設計開發
3.4.1 軟件開發環境KeiluVision4簡介
3.4.2 KEIL的使用
3.4.3單片機程序的燒寫
第四章 調試結果
結束語
1 緒論
1.1 本課題的研究背景和意義
隨著科技的發展,和人們的生活水平不斷提高,居住環境的改善備受關注,于是家居智能化的快速興起,滿足人們對舒適,安全,便捷以及節能環保的時尚生活的追求,F階段人類社會的進步越來越依賴于對能源的開發與利用,然而人們對能源無盡的需求量和有限的能源數量形成了不可抗拒的矛盾,能源匱乏不僅是我國所面臨的危機,更是世界所面臨的嚴峻考驗。而中國是一個人口大國,家庭是其中最基本的一個組成單元,家庭照明占我國電能消耗的一大部分。管理好家庭燈光照明系統,不僅能減少電能的巨大浪費,優化我們的生活方式和居住環境,還能為我們提供優質、舒適、安全的生活空間。
燈光的智能化是智能家居的重要組成部分,本文介紹了一種基于單片機和無線射頻技術的的智能燈光控制系統(增多)
1.2 本課題研究的主要內容
本設計所制作的智能燈光主要用來控制照明燈,通過檢測室內有無人員和室內光線的強弱來控制照明燈的開啟和關閉,以達到根據不同的環境,人們的不同需要實現室內不同位置的照明需求,并且可以通過遙控對室內的燈光進行控制,實現自動/手動切換,更加人性化的設計,讓該系統有了更高的實用價值。
該設計主要由主控板和遙控器組成,其中:主控板包括單片機控制模塊、檢測輸入模塊、射頻通訊模塊、PC上位機監控模塊、驅動電路模塊、繼電器輸出模塊。遙控器包括單片機控制模塊、無線射頻模塊、鍵盤模塊、顯示器模塊。通過測試,系統穩定,能夠根據外界環境的變化自動進行開關的控制。由于單片機的I/O口資源豐富,可將后級擴展成多路自動開關,同時控制多路照明燈,使其應用于賓館、學校、家庭等環境。所以該設計具有較廣泛的應用前景。(合并)
1.3 論文的主要內容及結構安排鑒于無線通訊與燈光智能系統的重要意義及單片機在該系統中的獨特優勢,本論文選擇以單片機為核心,以紅外感應與光強感應為被測量,開關按鈕可切換狀態,設計了智能燈光系統。不但實現了下位機對燈光的自動控制、實時監測與遙控器的通訊,還在此基礎上實現了對時間的顯示,操作系統的簡便化,讓系統更容易被用戶使用。
論文結構安排如下:
第一章:智能燈光系統的普遍性性與研究現狀,以及論文的主要內容與結構。
第二章:總體設計方案與硬件設計,其中包括主控板和遙控器的設計。
第三章:主控板和遙控器的程序設計。
第四章:調試結果。
2 方案設計
圖2-1 系統總體設計方案
系統總體設計方案
如圖2-1所示,單片機選用STC89C52,通過光強檢測模塊檢測出外界光強,是否合適開燈,由紅外檢測模塊檢測是否有人進入房間,通過主控板的單片機進行控制。在主控板上有狀態轉換按鍵,通過按鍵控制各個房間的狀態,是強制開/強制關/自動狀態。主控板通過無線射頻模塊與遙控器通訊,給遙控器傳送各個房間的狀態信息,并且接收遙控器發來的控制信號。在遙控器上,把接收來的狀態信號,將其通過LCD1602顯示屏顯示出來。用戶在不去該房間的情況下監控房間燈光的狀態,并且通過遙控器上的鍵盤進行控制。時鐘模塊將當前時間發送給單片機,單片機再通過程序控制,將時間顯示在顯示屏上。
2.1 系統硬件設計
單片機選用的是STC89C52,光強檢測模塊采用光敏電阻實現,紅外檢測模塊采用HC-SR501 人體紅外感應模塊,RS232通訊模塊采用MAX232對信號轉換,無線射頻模塊采用nRF2401A模塊,顯示屏使用LCD1602,時鐘芯片使用DS1302,鍵盤使用可復位按鍵開關。
2.2.1 主控板電路設計
電路設計我用的是protel99繪制。由于光強檢測和紅外檢測需要較大的空間,我將單片機P1口都接出來了外部接口,將其制作成方便安裝的分離模塊式。P0口主要功能是與nRF2401A無線射頻模塊相連。P2口我將其分成三部分P2.0,P2.1,P2.2三個管腳我用它們作為繼電器輸出接口;P2.3,P2.4,P0.7作為各個房間的自動狀態指示燈;P2.5,P2.6,P2.7采集主控板上按鍵信號,用于轉換各個房間的控制狀態。TXD和RXD兩個管腳分別接MAX232芯片的R1_OUT和T1_IN位,作為單片機與PC通訊的接口。電路原理圖如圖2-2所示。
圖2-2 主控板總原理圖

2.2.2 STC89C52簡介

STC89C52是一種低功耗、高性能、價格低廉的CMOS8位微控制器,具有 8K 在系統可編程Flash 儲存器。在單芯片上,擁有靈巧的8 位CPU 和在系統可編程Flash,使得STC89C52為眾多嵌入式控制應用系統提供高靈活、超有效的解決方案。CPU 停止工作,允許RAM、定時器/計數器、串口、中斷繼續工作。其引腳圖如圖2-3所示。 圖2-3 STC89C52單片機
2.2.3 檢測模塊的設計與選用
1)光強檢測模塊
光強檢測模塊采用的是光敏電阻5516,其亮電阻約5KΩ,暗電阻約500KΩ。將其與電阻串聯,與三極管9014組成光強檢測模塊,工作電壓為5V(如圖2-4所示)。在光照下,其阻值迅速下降,三極管9014的基極電壓升高,三極管導通,輸出信號由高變低。當光照強度變暗后,光敏電阻的阻值升高,三極管基極電壓降低, 圖2-4 光強檢測模塊電路

三級管截止,光強檢測信號由低變高。
2)紅外檢測模塊
紅外檢測模塊采用封裝好的紅外熱釋傳感器HC-SR501(圖2-5),感應范圍138°*125°,感應距離7m,工作溫度-15~+70℃。通過跳線將其觸發模式調成可重復收發模式,接入工作電壓+5V,將其信號端接入單片機端口。 圖2-5 紅外傳感器
2.2.4繼電器輸出模塊

該系統采用的繼電器為24V繼電器,需要使用ULN2003將單片機輸出的5V電壓信號放大到24V驅動繼電器工作。由于STC89C52單片機一般用并口進行編程,理論上可以直接用單片機的幾根I/O口接并口線,但如果電路板沒做好,可能會連帶把計算機并口燒壞,所以要加個74HC244芯片隔離一下。(如圖2-7所示)
ULN2003是高耐壓、大電流復合晶體管陣列,由七個硅NPN 復合晶體管組成(圖2-6)。ULN2003 工作電壓高,工作電流大,灌電流可達500mA,并且能夠在關態時承受50V 的電壓,輸出還可以在高負載電流并行運行,多用于單片機、智能儀表、PLC、數字量輸出卡等控制電路中。可直接驅動繼電器等負載。由于ULN2003是一個非門電路,繼電器線圈另一端接在+24V電源上,當+5V的控制信號傳送到ULN2003中, 圖2-6 ULN2003 ULN2003會輸出一個低電平,讓線圈吸合。
74HC244是一個三態緩沖器,作為單片機輸出緩沖作用?梢詫纹瑱C輸出信號長時間保持。
圖2-7 繼電器輸出模塊電路圖
2.2.5 nRF2401A無線射頻模塊
作為主控板與遙控器通訊的重要組成樞紐,無線射頻模塊,該系統選用的是nRF2401A無線射頻模塊,如圖2-8所示。nRF2401A是挪威Nordic公司推出的2.4G單片無線射頻收發芯片,芯片內置頻率合成器、功率放大器、晶體振蕩器和調制器等功能模塊,輸出功率和通信頻道可通過程序進行配置。該芯片具有接收靈敏度高、外圍電路少、發射功率低、傳輸速率高、低功耗等優點。nRF2401 適用于多種無線通信的場合,如:無線鼠標、無心數據采集、小型無線網絡、無線抄表、門禁系統、小區傳呼、監控系統、非接觸RF智能卡、無線遙控、無線音頻/視頻數據傳輸等。
圖2-8 nRF2401A引腳示意圖
nFR2401A引腳功能如表2-1所示:
表2-1 NRF2401A引腳功能表
nFR2401A的工作模式有配置模式、收發模式、待機模式、關機模式四種。模式由主控芯片通過軟件設置。芯片上電后,STC89C52通過接口將配置數據送入芯片,設置收發模式、收發頻率、接收地址、發射功率、CRC校驗和的長度、有效數據的長度等。傳輸中,只有地址,校驗和匹配的數據包才能被進一步處理,產生中斷信號。這時,S3C2440讀取數據。在同一時刻nRF2401A只能處于接收或發送模式中的一種,一般以接收模式為待機狀態。
nRF2401A工作模式如表2-2所示:
表2-2 nRF2401A工作模式 該系統是用的是通道一,所以單片機接口只需接入PWR_UP,CE,CS,CLK1四個控制位和數據位DATA1。同時將CLK2第二通道的脈沖輸入信號接地,以防干擾。
nRF2401A工作電壓為+3.3V而單片機使用的是+5V的直流電源,所以使用AMS1084-3.3V降壓芯片將+5V的直流電轉換成+3.3V的直流電為nRF2401A供電。其外圍電路如圖2-9所示。
圖2-9 AMS1088-3.3V外圍電路 圖2-10 MAX232
2.2.6 基于MAX232與PC通訊

MAX232是一種把電腦的串行口rs232信號電平(-10 ,+10v)轉換為單片機所用到的TTL信號點平(0 ,+5)的芯片, 使用+5v單電源供電,MAX232共16跟引腳,第一部分是電荷泵電路。由1、2、3、4、5、6腳和4只電容構成。功能是產生+12v和-12v兩個電源,提供給RS-232串口電平的需要。第二部分是數據轉換通道。由7、8、9、10、11、12、13、14腳構成兩個數據通道。其中13腳(R1IN)、
12腳(R1OUT)、11腳(T1IN)、14腳(T1OUT)為第一數據通道。8腳(R2IN)、9腳(R2OUT)、10腳(T2IN)、7腳(T2OUT)為第二數據通道。其接線電路如圖2-10所示。 圖2-11 MAX232周邊電路
在該系統中,MAX232分別連接著RS232串口和單片機的TXD,RXD位,使用的是通道1,即使用的輸入輸出的管腳是T1_OUT,T1_IN,R1_OUT,R1_IN。周邊電路如圖2-11所示。
2.3.1 遙控器的設計
在遙控器的設計中,P0口外接一個排阻,排阻公共端接的是AMS1084-3.3V輸出的+3.3V電源,主要控制nRF2401A無線射頻模塊,負責與主控板進行無線通訊;P1口連接的是LCD1602顯示屏的8位數據位DB0-DB7,P3.4接LCD的E端(使能端),P3.5接LCD1602的R/W管腳,負責控制LCD1602的讀寫控制,P3.6接LCD1602的RS管腳,負責對寄存器的選擇。同時,LCD1602的VSS位接地,VDD接LM7805提供的+5V電源。并且VEE外接一個電位器,控制背光亮度。單片機的P2.1-P2.4分別接了四個低電平觸發的按鍵,作為UP上翻,DOWN下翻,SWITCH切換,BACKLIGHT背光。P2.5-P2.7三位分別接入時鐘芯片DS1302的SLCK,I/O,CE,作為讀寫時間的控制位和數據通道。同時單片機的TXD,RXD與MAX232相連,通過RS232串口與計算機通訊?傠娐吩韴D如圖2-12所示。
圖2-12 遙控器總電路原理圖
2.3.2 顯示屏LCD1602
1602液晶也叫1602字符型液晶,它是一種專門用來顯示字母、數字、符號等的點陣型液晶模塊。它由若干個5X7或者5X11等點陣字符位組成,每個點陣字符位都可以顯示一個字符,每位之間有一個點距的間隔,每行之間也有間隔,起到了字符間距和行間距的作用,正因為如此所以它不能很好地顯示圖形。
LCD1602功能管腳如表2-3所示:
表2-3 LCD1602功能管腳
在設計中,我們將VCC和VSS分別接電源+5V和地,為LCD1602供電,在VEE端接了一個20K的變阻器到+5V電源,通過調整變阻器的阻值來調整LCD1602的對比度,當電壓越高時對比度越弱,反之越強。RS寄存器選擇端,RW讀寫信號線,E使能端這三位分別接入單片機的P3.6,P3.5,P3.4。通過程序控制這三位控制位對LCD1602的讀寫操作。15腳和16腳主要是為LCD1602的背光供電,將其分別接入電源+5V和電源地。
2.3.3 時鐘芯片DS1302
DS1302 是美國DALLAS公司推出地一種高性能、低功耗、帶RAM的實時時鐘電路,它能對年、月、日、周、時、分、秒進行計時,具有閏年補償功能。工作電壓為2.5V~5.5V,外接32.768MHz的晶振。采用三線接口與單片機進行同步通信,并可采用突發方式,一次傳送多個字節的時鐘信號或RAM數據。DS1302內部有一個31×8的RAM寄存器,用于臨時性存放數據。DS1302是DS1202的升級產品,與DS1202兼容,但增加了主電源/后備電源雙電源引腳,同時提供了對后備電源進行涓細電流充電的能力。
DS1302功能引腳如表2-4所示:
表2-4 DS1302管腳功能
| | |
| | |
| | |
| | |
| | |
| | 復位/片選線,通過把RST輸入驅動置高電平來啟動所有的數據傳送。 |
| | |
| | |
| | |
在該系統中,VCC2用LM7805提供的+5V電壓供電,VCC1備用電源使用的是紐扣電池CR2016,提供的電壓是+3V。I/O管腳接單片機的P2.6腳,作為單片機對DS1302進行讀寫操作的數據通道,SCLK接入單片機P2.5口,作為單片機與DS1302的通訊時鐘輸入端,CE接入單片機P2.7口主要對DS1302發送片選信號。
2.3.4 LM7805與AMS1084
1)LM7805應用
圖2-13 LM7805典型應用電路
單片機電源電路的設計以三端集成穩壓器LM7805為核心,它屬于串聯穩壓電路,其工作原理與分立元件的串聯穩壓電源相同。圖2-13是三端穩壓集成電路LM7805的典型應用電路,三端集成穩壓器設置的啟動電路,在穩壓電源啟動后處于正常狀態時,啟動電路與穩壓電源內部其他電路脫離聯系,這樣輸入電壓變化不直接影響基準電路和恒流源電路,保持輸出電壓的穩定。電路中Ci的作用是消除輸入連線較長時其電感效應引起的自激振蕩,減小紋波電壓,取值范圍在0.1μF~1μF之間,本文Ci選用0.33μF;在輸出端接電容Co是用于消除電路高頻噪聲,改善負載的瞬態響應,一般取0.1μF左右,本文Co即選用0.1μF。一般電容的耐壓應高于電源的輸入電壓和輸出電壓。另外,為避免輸入端斷開時Co從穩壓器輸出端向穩壓器放電,造成穩壓器的損壞,在穩壓器的輸入端和輸出端之間跨接一個二極管,對LM7805起保護作用。
LM7805輸入電壓為8V到36V,最大工作電流1.5A,具有輸入電壓范圍寬,工作電流大,輸出精度高且工作及其穩定,外圍電路簡單等特點,太陽能電池電壓即使有較大的波動,也能穩定的輸出5V電壓,從而是單片機等控制電路正常工作,且成本低。
2)AMS1084
由于單片機、LCD、DS1302使用電壓為+5V直流電,而NRF2401A射頻使用電壓為+3.3V~+3.6V,所以需要將5V的直流電變壓成3.3V為NRF2401A射頻芯片供電,其接線圖如圖2-14所示
圖2-14 AMS1084-3.3V外部接線圖
2.3.5 按鍵指示電路及實現
在單片機應用系統中,按鍵主要有兩種形式:1、獨立按鍵;2、矩陣編碼鍵盤。獨立按鍵的每個按鍵都單獨接到單片機的一個I/O口上,獨立按鍵則通過判斷按鍵端口的電位即可識別按鍵操作;而矩陣鍵盤通過行列交叉按鍵編碼進行識別。
通常所用的按鍵為輕觸機械開關,正常情況下按鍵的接點是斷開的,當我們按壓按鈕時,由于機械觸點的彈性作用,一個按鍵開關在閉合時不會馬上穩定地接通,在斷開時也不會一下子斷開。因而機械觸點在閉合及斷開的瞬間均伴隨有一連串的抖動,抖動時間的長短由按鍵的機械特性及操作人員按鍵動作決定,一般為5ms~20ms;按鍵穩定閉合時間的長短是由操作人員的按鍵按壓時間長短決定的,一般為零點幾秒至數秒不等。
在本設計中由于按鍵不是太多,故采用獨立按鍵法,這樣可以減小編程的難度,圖2-15為本設計的按鍵接線圖。
圖2-15 按鍵接線圖
2.4.1 開發環境protel99SE
開發硬件設計主要使用的是protel 99軟件如圖15所示,protel是Altium公司在80年代末推出的EDA軟件,在電子行業的CAD軟件中,它當之無愧地排在眾多EDA軟件的前面,是電子設計者的首選軟件,它較早就在國內開始使用,在國內的普及率也最高,有些高校的電子專業還專門開設了課程來學習它,幾乎所有的電子公司都要用到它,許多大公司在招聘電子設計人才時在其條件欄上常會寫著要求會使用protel。
Protel99 SE共分5個模塊,分別是原理圖設計、PCB設計(包含信號完整性分析)、自動布線器、原理圖混合信號仿真、PLD設計。
圖2-16 protel工作空間界面
首先進入protel新建一個工程,在菜單欄中的file→new,然后選擇路徑和設定工程名稱,單機OK,這樣就成功的新建了一個工程。在右邊會出現工作空間,單機右鍵→new→選擇Schematic Document,這樣就新建了一個電氣原理圖(如圖2-16),修改原理圖名稱,然后進入原理圖,繪制需要的電氣圖。
在原理圖繪制完畢后,對每個元件選擇相應的封裝,接著在菜單欄里的design菜單中選擇Update to PCB,protel會自動在工作空間中生成與原理圖同名的PCB圖,并且在PCB中標記有飛線,這樣會方便布線,分布號元器件位置,設置好線寬,焊盤等設置,即可開始繪圖。如圖2-17所示。
圖2-17 PCB圖形繪制
2.4.2 電路板的制作
繪制完畢PCB圖后,將其打印在轉印紙上,將其覆蓋在擦洗打磨干凈的覆銅板上,平整的固定住,與其一起在快速制版機中加熱。注意,溫度過高可能會使覆銅板銅皮翹起,溫度太低會使碳粉吸附不牢固。轉印好銅板后,將轉印好的銅板放入氯化鐵溶液中浸泡腐蝕,將沒有覆蓋碳粉的部分腐蝕掉,待腐蝕完畢后,用細砂紙將電路上的碳粉打磨掉露出同色的銅皮即可。使用0.5mm的鉆頭在焊盤上打孔,并且對照著PCB圖焊接好對應的元器件,經過萬用表測試無斷線無短路即可上電使用。成果如圖2-18所示。
圖2-18 焊接完畢的電路板
第三章 程序的設計實現
3.1 系統整體程序框架
本設計整體工作主要由單片機程序控制實現,其工作過程為:電路啟動初始化,電路功能選擇,通訊握手,讀取信號,顯示信號,輸出選擇并確定輸出,單片機采集外部光強和紅外信號等,程序整體框架如圖3-1所示。
圖3-1 程序整體框架圖
3.2主控板程序設計
本設計流程框圖如圖3-2所示。首先上電,對各個模塊進行初始化,然后檢測各個房間的燈光狀態(自動狀態,強制開,強制關),將狀態寫給NRF2401A射頻芯片的緩存區,并將其發射給遙控器。再進行對各個狀態的處理,強制開狀態則將該房間對應的管腳置1;反之,強制關則將對應房間的管腳清零。繼電器輸出模塊會通過管腳電平變化改變繼電器線圈電流,控制線圈吸合或者斷開,從而控制房間燈光的開關。如果是自動狀態,則通過光強傳感器、紅外傳感器判斷房間是否應該開燈。當外部亮度足夠亮,則不需要開燈;若外部亮度較暗,則通過紅外傳感器檢測是否有37℃的紅外頻率出現,當有人被紅外傳感器檢測到,紅外傳感器信號位跳變為高電平,單片機相應管腳接收到該信號會進行處理,控制對應房間的管腳變為高電平。
圖3-2 主控板程序流程圖
3.2.1 燈光延時等待的設計與思考
考慮到在家居時,很多人會暫時離開一下某件屋子,然后會回來,這樣使燈具頻繁的開關可能會導致燈具的損壞,所以設計了一套燈光延時等待程序,為了節省MCU的占用率,該段程序使用的是內部定時器進行計時,這樣可以再執行其他程序的同時進行延時。
通過TMOD將單片機內部定時器0與定時器1的工作方式選方式一。TMOD狀態字如表3-1所示
表3-1 TMOD狀態字
計算出計時器每次計時時間,并對TH1,TL1,TH0,TL0進行賦值。計算公式如3-2式。
T=(65536-X)TCY (3-2)
在式3-2中T為定時器定時時間,X為寄存器存儲值,將其高八位寫入TH中低八位寫入TL中;TCY為一個指令周期,TCY與晶振頻率f有關,TCY =12/f。
由于每次計時器計時長度有限約10ms(方便計算),不能達到系統要求,在使用時,設定了一個時間次數變量TIME,讓其循環100次即可延時1S,如需時間改變,改變TIME值即可。定時器的調用步驟如圖3-3所示。
圖3-3 定時器調用框圖
鑒于本設計有多個房間(多于兩個)而單片機中僅有兩個定時器,所以在每次調用定時器時都會有一個對定時器選擇的程序。當需要使用定時器時,先進行判定,定時器0是否被其他房間所占用,若沒有被占用則使用定時器0,若被占用了,則使用定時器1 。若定時器0與定時器1同時被占用,則調用手動編寫的延時定時器程序,由于該程序段比較占用單片機,會影響到系統整體的運行速度,所及將其優先級放在最后。
3.3.1 遙控器程序設計
遙控器主要包含的模塊有LCD1602顯示器,DS1302時鐘芯片,NRF2401A射頻模塊,還有按鍵部分。主要設計思路如下,首先上電對各個模塊初始化,讀取DS1302中的時間數據,同時讓LCD液晶顯示屏顯示時間與房間,接著通過NRF2401A向主控板發送信號,要求返回各個房間的狀態,并將其寫入LCE液晶顯示屏上。然后掃描鍵盤,判斷是否有房間狀態需要改變,若有鍵盤按下,則將按鍵信號通過NRF2401A射頻發送到主控板中,主控板接收到信號后改變房間狀體,同時返回當前房間狀態,讓遙控板上的LCD作出相應的顯示。其流程框圖如圖3-4所示。
圖3-4 遙控器工作流程圖
3.3.2 NRF2401A無線射頻通訊的程序設計
1)初始化程序初始化函數: void n1A_Init_Dev()
程序包括端口初始化和向芯片寫控制字操作,初始化流程如圖3-2所示。
圖3-5 NRF2401A初始化框圖
NRF2401A的工作模式如表3-2所示:
表3-2 NRF2401A工作模式
對nRF2401A的初始化包括nRF2401A上電和向nRF2401A寫控制字。nRF2401A上電是將芯片的PWR-UP管腳設置為高電平,上電以后才可以對nRF2401A進行控制和讀寫操作。nRF2401A共有18Byte(144bit)的命令字。其配置字格式如表3-3所示。
表3-3 配置字格式
向nRF2401A寫控制字操作時序圖3-6所示。
圖3-6 向nRF2401A寫命令字時序圖
PWR-UP為高,, CE為低時,置位CS,芯片處于命令字寫入狀態,通過通道1向芯片的控制字緩沖區寫入命令字,按照由高位到低位的順序,命令字全部寫入后,將CS置底,nRF2401A芯片將會根據命令字配置相應的內部模塊。在第一次配置操作結束后,只有最后兩個字節的命令字可以被更改,前16個字節的修改無效,如果需要修改前16個字節的命令字(如果通道接收地址,接收數據長度等),則需要掉電(PWR-UP置低)后重新上電(PWR-UP置高),才能對芯片進行徹底初始化操作。
2)數據發送程序nRF2401A采用ShockBurstTM(突發模式)方式發送數據。單片機向nRF2401A發送數據流程圖3-4所示。
圖3-7 單片機向nRF2401A發送數據流程
單片機向nRF2401A發送數據的時序如圖3-8所示。
圖3-8 單片機向nRF2401A發送數據時序圖
圖3-9 單片機向nRF2401A發送數據格式
An~A0為接收機地址,不超過40位,通過更換地址,可以向多個nRF2401A模塊發送數據;Dk~D0為待發送的數據。以上數據由單片機發送到nRF2401A之后,nRF2401A將會進行打包并發射,打包后的數據格式如圖3-10所示。
圖3-10 nRF2401A對外發送數據的打包格式
其中,前緩沖是硬件自動添加,地址由用戶設定。為32-40位;循環冗余校驗由內置CRC糾檢錯硬件電路自動添加?稍O為O、8或6位。所有的數據總共長度為256位。
3)據接收程序當接收端成功接收到數據后,將會置位對應的管腳數據請求DR1/DR2,單片機通過按鍵查詢該管腳狀態,或者通過中斷方式接受數據。數據接收流程如圖3-11所示。
圖3-11單片機讀取數據流程
單片機從nRF20401A讀取數據的時序如圖3-12所示。
圖3-12 單片機從nRF2401A讀取數據時序圖
3.3.2 LCD1602顯示模塊的程序設計
四種基本操作
LCD有四種基本操作,具體如表3-4所示。
表3-4 LCD與單片機之間有四種基本操作
(1)讀狀態操作
執行讀狀態字操作如表3-4所示,須滿足RS=0、R/W=1。根據管腳功能,當為有效電平時,狀態命令字可從LCD模塊傳輸到數據總線。同時可以保持一段時間,從而實現讀狀態字的功能。圖2-8所示為讀入狀態字流程圖。
圖3-13 LCD讀入狀態字流程
(2)寫命令操作
由表3-4可知當RS=0,R/W=0時,才可以通過單片機或用戶指令把數據即命令,寫到LCD模塊,此時就對LCD進行調制?刹捎貌樵兎绞剑合茸x入狀態字,再判斷忙標志,最后寫命令字。
1)命令字
表3-5所示為命令字,其主要介紹了指令名稱、控制信號及控制代碼。其指令名稱是指要實現的功能,控制代號是采用的十六進制的數值表示的。
a.清零操作是指輸入某命令字后即能將整個屏幕顯示的內容全部清除;
b.歸home位:將光標送到初始位;其中的*號為任意,高低電平均可;
c.輸入方式:設光標移動方向并指定整體顯示,是否移動。I/D=0:減量方式,S=1:移位,S=0:不移位;
d.顯示狀態:D指設置整體顯示開關;C指設置光標顯示開關;B指設置光標的字符閃耀;
e.光標畫面滾動:R/L指右移或左移;S/C指移動總體或光標;
f.功能設置:DL接口數位,L指顯示行數,F顯示字型;
g.CGRAM地址設制:相當于一個數據庫,可以在其中選擇所需要的符號;
h.DDRAM地址設制:顯示定位;
i.讀BF和AC:B為最高位忙的標志,F為標志位;
j.寫數據:將數據按要求寫入到對應的單元;
k.讀數據:讀相應單元內的數據。
表3-5 命令字
2)寫命令字流程(如圖3-14所示)
圖3-14 LCD1602寫命令字流程圖
3)定義光標位置
把顯示數據要某個位置,就是把顯示數據寫在相應的DDRAM地址中,DDRAM地址占7位。Set DDRAM address命令如表3-6所示。光標定位,寫入一個顯示字符后,DDRAM地址會自動加1或減1,加或減由輸入方式設置。
表3-6 SetDDRAMaddress命令
第1行DDRAM地址與第2行DDRAM地址并不連續。如表3-7所示。
表3-7 DDRAM地址
4)LCD初始化
從通電開始通過延時,先經過判忙后再進行功能設置,過一段時間后可以設制顯示狀態(如設置行、位或陣列)再經過延時后清屏后再可以設置輸入方式,具體如圖3-15所示。
圖3-15 LCD初始化流程
LCD顯示程序的設計一般先要確定LCD的初始化、光標定位、確定顯示字符后,LCD就可以按輸入的字符串顯示。
3.3.3 DS1302時鐘芯片的設計
1)DS1302的控制字
DS1302的控制字節如表3-8所示:
表3-8 命令字節格式
控制字節的最高有效位(位7)必須是邏輯1,如果它為0,則不能把數據寫入到DS1302中。位6如果為0,則表示存取日歷時鐘數據,為1表示存取RAM數據;位5至位1指示操作單元的地址;最低有效位(位0)如為0表示要進行寫操作,為1表示進行讀操作,控制字節總是從最低位開始輸出。
2)DS1302的數據輸入輸出
在控制指令字輸入后的下一個SCLK時鐘的上升沿時數據被寫入DS1302,數據輸入從低位即位0開始。同樣,在緊跟8位的控制指令字后的下一個SCLK脈沖的下降沿讀出DS1302的數據,讀出數據時從低位0位至高位7,數據讀寫時序如圖3-16所示:
圖3-16 數據讀寫時序
3) DS1302的寄存器
DS1302共有12個寄存器,其中有7個寄存器與日歷、時鐘相關,存放的數據位為BCD碼形式。其日歷、時間寄存器及其控制字見表2。
此外,DS1302還有年份寄存器、控制寄存器、充電寄存器、時鐘突發寄存器及與RAM相關的寄存器等。時鐘突發寄存器可一次性順序讀寫除充電寄存器外的所有寄存器的內容。 DS1302與RAM相關的寄存器分為兩類,一類是單個RAM單元,共31個,每個單元組態為一個8位的字節,其命令控制字為C0H--FDH,其中奇數為讀操作,偶數為寫操作;再一類為突發方式下的RAM寄存器,此方式下可一次性讀寫所有的RAM的31個字節,命令控制字為FEH(寫)、FFH(讀)。
表3-9 DS1302的日歷、時鐘寄存器及其控制字
1