版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 信息與通信工程學院</b></p><p> 單片機系統(tǒng)課程設(shè)計報告</p><p> 完成日期:2011年5月2日</p><p> 系:電子信息工程系</p><p> 專 業(yè):通信工程</p><p> 班 級:</p><p
2、> 設(shè)計題目:智能家居中控系統(tǒng)</p><p> 學生姓名:</p><p> 指導教師:</p><p><b> 目錄</b></p><p><b> 一、項目概述1</b></p><p> 二、設(shè)計任務(wù)和性能指標2</p><p&
3、gt; 2.1 設(shè)計任務(wù)2</p><p> 2.2 性能指標2</p><p><b> 三、原理概述3</b></p><p><b> 四、設(shè)計方案4</b></p><p> 4.1 框圖設(shè)計5</p><p> 4.2 硬件設(shè)計6&
4、lt;/p><p> 4.2.1 STC89C52單片機7</p><p> 4.2.2 射頻nRF905發(fā)送模塊8</p><p> 4.2.3 TC35iGSM模塊10</p><p> 4.2.4 紅外線發(fā)送模塊11</p><p> 4.2.5 顯示電路12</p>
5、<p> 4.3 軟件設(shè)計13</p><p> 4.3.1 主程序14</p><p> 4.3.2 子程序16</p><p> 五、調(diào)試及性能分析20</p><p> 5.1 調(diào)試步驟21</p><p> 5.2 性能分析21</p><p>&
6、lt;b> 六、心得體會22</b></p><p><b> 參考文獻23</b></p><p> 附錄一 系統(tǒng)硬件電路圖24</p><p> 附錄二 程序清單26</p><p><b> 項目概述</b></p><p>
7、隨著現(xiàn)代科學技術(shù)的發(fā)展,生活水平的提高,人們的生活方式和生活質(zhì)量的要求也同以前有了追求。回到家里享受安靜舒適方便快捷的休息方式已經(jīng)是時代發(fā)展的要求和人們生活所必需。為了讓人們快速從當前繁瑣的家庭勞動中解放出來,為了迎合時代科技發(fā)展的要求,我們設(shè)計了智能家居中控系統(tǒng)。將家居的環(huán)境參數(shù)諸如:濕度、溫度等信息,還有水煤電等線管數(shù)據(jù)的報警等信息通過短信,電話等多種途徑,將信息快速準確的及時的發(fā)送到主人手中,讓你無論何時何地隨時掌握家里的數(shù)據(jù)信息
8、,還有解決了家里電器設(shè)備的操控的繁瑣,只要通過中控臺全部控制家里的應(yīng)用電器。 </p><p> 二、設(shè)計任務(wù)和性能指標</p><p><b> 2.1 設(shè)計任務(wù)</b></p><p> 利用單片機及外圍接口電路和相關(guān)的功能模塊設(shè)計制作一個智能家居中控設(shè)備,并且用LCD12864液晶顯示器把相關(guān)的功能模塊采集到的數(shù)據(jù)顯示出來,顯示當
9、前操作的意義等相關(guān)的數(shù)據(jù)信息。</p><p> 要求用AD6 設(shè)計出相關(guān)的電路圖并且畫出系統(tǒng)的電路原理圖,印刷電路板,繪出程序流程圖,并給出程序清單。</p><p><b> 2.2 性能指標</b></p><p> 數(shù)據(jù)顯示: LCD12864顯示每次中控臺發(fā)出或是接受到數(shù)據(jù)信息的意義以及相關(guān)的參數(shù)顯示出來。</p>
10、<p> 控制模塊: 控制模塊主要是由nRF905采集外圍的具有nRF905發(fā)射終端設(shè)備。例如采集溫度,濕度數(shù)據(jù),接受遙控設(shè)備的射頻遙控等命令。短信提醒功能,通過nRF905采集的數(shù)據(jù)經(jīng)過MCU控制后,經(jīng)過TC35i模塊經(jīng)過手機的短信平臺把相關(guān)的數(shù)據(jù)信息發(fā)送給使用者。</p><p> 系統(tǒng)精度:該中控系統(tǒng)是整個家居體系的核心處理部分,能夠把數(shù)據(jù)進行綜合匯總,將所有的有關(guān)的數(shù)據(jù)實時準確的進行綜合匯
11、總控制。實現(xiàn)對家居設(shè)備的監(jiān)控和管理的掌控能力。經(jīng)過這幾大模塊功能的組合應(yīng)用,使家居的主人可以在任何時間,任何地點,隨時掌控家里的所有信息和控制管理。</p><p><b> 三、原理概述</b></p><p> 該系統(tǒng)主要是基于四大控制模塊建立構(gòu)成的控制管理體系。首先是射頻模塊:射頻模塊將家居的具有射頻控制模塊的采集子終端以及遙控終端。主要是進行接收控制命令和
12、采集家居的相關(guān)的數(shù)據(jù),在這里具體表現(xiàn)為,采集家居的溫度,濕度,煤氣報警,水電的報警數(shù)據(jù)以及射頻遙控器的遙控指令。再者是紅外線發(fā)送模塊:該模塊的主要功能是控制具有紅外線接收能力的家電設(shè)備例如:TV、DVD和電視機頂盒等相關(guān)的家用電器。該模塊主要是通過射頻模塊接收到的控制命令控制家用電器設(shè)備。還有就是LCD液晶顯示模塊:該模塊主要功能是用于顯示每次采集到的數(shù)據(jù)或是接受到的命令進行顯示,說明每次操作的具體意義。最后是GSM模塊:該模塊是基于手
13、機服務(wù)商的短信平臺進行工作的,該模塊的功能是當家里的水電煤氣等管理模塊發(fā)出報警信息的時候,家里沒有人在指定的時間內(nèi)進行先關(guān)的處理控制的時候,這時中控系統(tǒng)將采集到的報警命令通過GSM模塊以短信的方式發(fā)送給家里的主人,這樣保證了家里的主人無論在何時何地,隨時掌握家里的所以信息。</p><p><b> 四、設(shè)計方案</b></p><p> 4.1 框圖設(shè)計&l
14、t;/p><p> 整個控制系統(tǒng)的基本模塊組成及與MCU之間的聯(lián)系的設(shè)計如圖所示分別包括了每個模塊的具體信息其系統(tǒng)框圖如圖4.1 所示。</p><p><b> 圖4.1</b></p><p> 4.2 硬件設(shè)計</p><p> TC35i新版西門子工業(yè)GSM模塊是一個支持中文短信息的工業(yè)級GSM模塊,工
15、作在EGSM900和GSM1800雙頻段,電源范圍為直流3.3~4.8V ,電流消耗——休眠狀態(tài)為3.5mA,空閑狀態(tài)為25mA,發(fā)射狀態(tài)為300mA(平均),2.5A峰值;可傳輸語音和數(shù)據(jù)信號, 功耗在EGSM900(4類)和GSM1800(1類)分別為2W和1W ,通過接口連接器和天線連接器分別連接SIM卡讀卡器和天線。SIM電壓為3V/1.8V,TC35i的數(shù)據(jù)接口(CMOS電平)通過AT命令可雙向傳輸指令和數(shù)據(jù),可選波特率為30
16、0b/s~115kb/s , 自動波特率為1.2kb/s~115kb/s。它支持Text和PDU格式的SMS(Short Message Service,短消息),可通過AT命令或關(guān)斷信號實現(xiàn)重啟和故障恢復,中文資料如下:TC35i由供電模塊(ASIC)、閃存、ZIF連接器、天線接口等6部分組成。作為TC35i的核心基帶處理器主要處理GSM終端內(nèi)的語音和數(shù)據(jù)信號,并涵蓋了蜂窩射頻設(shè)備中的所有模擬和數(shù)字功能。4.2.1 STC89C5
17、2單片機</p><p> STC89C52具體介紹如下:</p><p> ?、?主電源引腳(2根)</p><p> VCC(Pin40):電源輸入,接+5V電源</p><p> GND(Pin20):接地線</p><p> ?、谕饨泳д褚_(2根)</p><p> XTAL1
18、(Pin19):片內(nèi)振蕩電路的輸入端</p><p> XTAL2(Pin20):片內(nèi)振蕩電路的輸出端</p><p><b> ?、劭刂埔_(4根)</b></p><p> RST/VPP(Pin9):復位引腳,引腳上出現(xiàn)2個機器周期的高電平將使單片機復位。</p><p> ALE/PROG(Pin30):地
19、址鎖存允許信號</p><p> PSEN(Pin29):外部存儲器讀選通信號</p><p> EA/VPP(Pin31):程序存儲器的內(nèi)外部選通,接低電平從外部程序存儲器讀指令,如果接高電平則從內(nèi)部程序存儲器讀指令。</p><p> ?、芸删幊梯斎?輸出引腳(32根)</p><p> STC89C52單片機有4組8位的可編程I/
20、O口,分別位P0、P1、P2、P3口,每個口有8位(8根引腳),共32根。</p><p> PO口(Pin39~Pin32):8位雙向I/O口線,名稱為P0.0~P0.7</p><p> P1口(Pin1~Pin8):8位準雙向I/O口線,名稱為P1.0~P1.7 </p><p> P2口(Pin21~Pin28):8位準雙向I/O口線,名稱為P2.0~
21、P2.7 </p><p> P3口(Pin10~Pin17):8位準雙向I/O口線,名稱為P3.0~P3.7</p><p> STC89C52主要功能</p><p> nRF905可自動完成處理字頭和循環(huán)冗余碼校驗的工作,可由片內(nèi)硬件自動完成曼徹斯特編碼/解碼, SPI接口與微控制器通信的使用,配置非常方便,其功耗也非常低,輸出功率為-10dBm發(fā)射時電
22、流只有11mA,在接收模式時電流為12.5mA。 nRF905單片無線收發(fā)模塊工作由一個完全集成的頻率調(diào)制器,一個帶解調(diào)器的接收器,一個功率放大器,一個晶體震蕩器和一個調(diào)節(jié)器組成。自動產(chǎn)生前導碼和CRC是ShockBurst工作模式的特點,可以很容易通過SPI接口進行編程配置[8]。</p><p> 為實現(xiàn)無線傳輸?shù)墓δ?,本系統(tǒng)采用杭州飛拓電子有限公司生產(chǎn)的NewMsg_RF905SE無線通信模塊。NewMs
23、g_RF905SE的特點如下:</p><p> 433Mhz開放ISM頻段免許可證使用</p><p> 最高工作速率50kbps,高效GFSK調(diào),抗干擾能力強,特別適合工業(yè)控制場合</p><p> 125頻道,滿足多點通信和跳頻通信需要</p><p> 內(nèi)置硬件CRC檢錯和點對多點通信地址控制</p><p
24、> 低功耗1 .9—3.6V工作,待機模式下狀態(tài)僅為2.5 Ua</p><p> 收發(fā)模式切換時間<650us</p><p> 4.2.2 超聲波測距單片機系統(tǒng)</p><p> 單片機系統(tǒng)主要由:STC89C52單片機、晶振、復位電路、電源濾波部份構(gòu)成。STC89C52單片機是超聲波測距的核心部分,主要任務(wù):</p><
25、;p> 控制GSM模塊的指令發(fā)送。</p><p> 控制射頻模塊的工作。</p><p> 控制LCD顯示電路的工作。</p><p><b> 接受按鍵掃描。</b></p><p> 4.2.3 射頻電路</p><p> NewMsg_RF905SE管腳圖如3.5所示
26、。</p><p> 圖3.5 NewMsg_RF905SE管腳圖</p><p><b> 說明:</b></p><p> VCC腳電壓范圍為3V—3.6V之間,不能在這個區(qū)間之外,超過3.6V將會燒毀模塊。推薦3.3V左右。</p><p> 除電源VCC和接地端,其余腳都可以直接和普通的5V單片機I/O口
27、直接相連,無需電平轉(zhuǎn)換。當然對3V左右的單片機更加適用了。</p><p> 表3.1 NewMsg_RF905SE管腳圖</p><p> 3.2.3 工作方式</p><p> nRF905工作模式由TRX_CE、TX_EN、PWR_UP的設(shè)置來設(shè)定。工作模式由表3.1 </p><p><b> 所示[9]。</
28、b></p><p> 表3.2 nRF905工作模式</p><p> 電路原理圖如圖4.2.3所示。</p><p><b> 圖4.2.3</b></p><p> 4.2.4 GSM模塊TC35i</p><p> TC35i硬件設(shè)計:TC35i模塊有40個引腳,通過一個
29、ZIF(Zero Insertion Force,零阻力插座)連接器引出。這40個引腳可以劃分為5類,即電源、數(shù)據(jù)輸入/輸出、SIM卡、音頻接口和控制。TC35i的第1~5引腳是正電源輸入腳通常推薦值4.2V,第6~10引腳是電源地。11、12為充電引腳,可以外接鋰電池,13為對外輸出電壓(共外電路使用),14為ACCU-TEMP接負溫度系數(shù)的熱敏電阻,用于鋰電池充電保護控制。15腳是啟動腳IGT,系統(tǒng)加電后為使TC35i進入工作狀態(tài),
30、必須給IGT加一個大于100ms的低脈沖,電平下降持續(xù)時間不可超過1ms。16~23為數(shù)據(jù)輸入/輸出,分別為DSR0、RING0、RxD0、TxD0、CTS0、RTS0、DTR0 和DCD0。tc35i模塊的數(shù)據(jù)輸入/輸出接口實際上是一個串行異步收發(fā)器,符合ITU-T RS232接口標準。它有固定的參數(shù):8位數(shù)據(jù)位和1位停止位,無校驗位,波特率在300bps~115kbps之間可選,默認9600。硬件握手信號用RTS0/CTS0,軟件流
31、量控制用XON/XOFF,CMOS電平,支持標準的AT命令集。其</p><p><b> 圖4.2.4</b></p><p> 4.2.5 顯示電路</p><p> 該系統(tǒng)采用112864液晶屏顯示模塊</p><p> 2864A-1漢字圖形點陣液晶顯示模塊,可顯示漢字及圖形,內(nèi)置8192個中文漢字(
32、16X16點陣)、128個字符(8X16點陣)及64X256點陣顯示RAM(GDRAM)。</p><p> 主要技術(shù)參數(shù)和顯示特性:</p><p> 電源:VDD 3.3V~+5V(內(nèi)置升壓電路,無需負壓);</p><p> 顯示內(nèi)容:128列× 64行</p><p><b> 顯示顏色:黃綠</b&
33、gt;</p><p> 顯示角度:6:00鐘直視</p><p><b> LCD類型:STN</b></p><p> 與MCU接口:8位或4位并行/3位串行</p><p><b> 配置LED背光</b></p><p> 多種軟件功能:光標顯示、畫面移位、
34、自定義字符、睡眠模式等</p><p> 邏輯工作電壓(VDD):4.5~5.5V</p><p> 電源地(GND):0V</p><p> 工作溫度(Ta):0~60℃(常溫) / -20~75℃(寬溫)</p><p> 串行數(shù)據(jù)傳送共分三個字節(jié)完成:</p><p> 第一字節(jié):串口控制—格式 111
35、11ABC</p><p> A為數(shù)據(jù)傳送方向控制:H表示數(shù)據(jù)從LCD到MCU,L表示數(shù)據(jù)從MCU到LCD</p><p> B為數(shù)據(jù)類型選擇:H表示數(shù)據(jù)是顯示數(shù)據(jù),L表示數(shù)據(jù)是控制指令</p><p><b> C固定為0</b></p><p> 第二字節(jié):(并行)8位數(shù)據(jù)的高4位—格式 DDDD0000&l
36、t;/p><p> 第三字節(jié):(并行)8位數(shù)據(jù)的低4位—格式 0000DDDD</p><p> 串行接口時序參數(shù):(測試條件:T=25℃ VDD=4.5V)</p><p><b> 圖4.2.5</b></p><p><b> 4.3 軟件設(shè)計</b></p><p&g
37、t; 4.3.1 主程序</p><p> 本系統(tǒng)的智能化核心是STC89C52,其收發(fā)程序和應(yīng)用軟件全部固化在EPROM內(nèi)。它的工作過程是:當系統(tǒng)上電后,單片機進入監(jiān)控狀態(tài),同時完成對各端口的初始化工作,當外部的采集數(shù)據(jù)模塊的終端設(shè)備有報警信息時候,直接發(fā)送傳達的指令在沒有采取的到相應(yīng)的指令的情況下,短信發(fā)送模塊激活,向固定的電話發(fā)送短信報告之相應(yīng)的數(shù)據(jù)信息。LCD顯示模塊同時顯示收到數(shù)據(jù)的意義。當中控臺
38、收到射頻遙控器的指令時,通過MCU的綜合處理,將射頻協(xié)議和紅外線協(xié)議轉(zhuǎn)換,發(fā)射出與之對應(yīng)的紅外線命令從而實現(xiàn)對家用電器的控制和管理的操作。此時遙控器接收模塊接收相應(yīng)數(shù)據(jù)并將數(shù)據(jù)在LCD顯示屏上顯示。</p><p> 圖4.3為主程序流程圖。</p><p> 圖4.3主程序流程圖</p><p> 4.3.2 系統(tǒng)的子程序。</p><
39、p> RF905無線數(shù)傳程序包括無線發(fā)送程序和無線接收程序。</p><p> ShockBurst TX發(fā)送流程分一下幾步:</p><p> 當微控制器有效數(shù)據(jù)要發(fā)送時,通過SPI接口,按時序跋接收機的地址和藥發(fā)送的數(shù)據(jù)傳送給RF905,SPI接口的速率在通信協(xié)議和器件配置時確定;</p><p> 微控制器置高TRX_CE和TX_EN,激發(fā)RF9
40、05的ShockBurstTM發(fā)送模式;</p><p> RF905的ShockBurstTM發(fā)送:</p><p> 射頻寄存器自動開啟;</p><p> 數(shù)據(jù)打包(加頭字和CRC校驗碼);</p><p><b> 發(fā)送數(shù)據(jù)包;</b></p><p> 當數(shù)據(jù)發(fā)送完成,數(shù)據(jù)準備
41、好引腳被置高;</p><p> AUTO_RETRAN被置高,RF905不斷重發(fā),自動進入空閑。注意:ShockBurstTM工作模式保證,一旦發(fā)送數(shù)據(jù)的過程開始,無論TRX-NE和TX_EN引腳是高或低,發(fā)送過程都會被處理完。只有在前一個數(shù)據(jù)包被發(fā)送完畢,RF905才能接受下一個發(fā)送數(shù)據(jù)包。</p><p> ShockBurst TX發(fā)送流程圖如圖4.4所示五、調(diào)試及性能分析&l
42、t;/p><p><b> 圖 4.4</b></p><p> ShockBurst RX接收流程分一下幾步:</p><p> 當TRX_CE高、TX_EN為低時,RF905J進入ShockBurst TM接收模式;</p><p> 650us后,RF905不斷監(jiān)測,等待接收數(shù)據(jù);</p><
43、;p> 當RF905檢測到同一頻段的載波時,載波檢測引腳被置高;</p><p> 當接收到一個匹配的地址,AM引腳;</p><p> 當一個正確的數(shù)據(jù)包接收完畢,RF905自動移去字頭、地址和CRC校驗位,然后把DR引腳置高;</p><p> 微控制器把TRX_CE置低,RF905進入空閑模式;</p><p> 微控制
44、器通過SPI口,以一定的速率把數(shù)據(jù)移到微控制器內(nèi);</p><p> 當所有的數(shù)據(jù)接收完畢,RF905把DR引腳和AM引腳置低;</p><p> RF905此時可以進入ShockBurst TM接收模式、ShockBurst TM發(fā)送模式或關(guān)機。</p><p> 當正在接收一個數(shù)據(jù)包時,TRX-CE或TX_EN引腳的狀態(tài)發(fā)生改變,RF905立即把其工作模式
45、改變,數(shù)據(jù)包丟失。當微處理器接到AM引腳的信號之后,其就知道RF905正在接收數(shù)據(jù)包,其可以決定是讓RF905繼續(xù)接收該數(shù)據(jù)包還是進入另一個工作模式。</p><p> ShockBurst RX接收流程圖如圖4.5所示。</p><p><b> 圖 4.5</b></p><p> 顯示模塊LCD12864程序編寫:</p>
46、;<p> 本系統(tǒng)采用的是串行通信方式,這樣可以有效的減少單片機的I/O的占用,為將來的功能的擴展提供了接口控制。主要的指令如下:</p><p><b> 寫指令:</b></p><p> void write_cmd(uchar cmd)</p><p> { <
47、;/p><p> lcdrs = 0;//低電平表命令</p><p> lcdrw = 0;// 低電平表寫</p><p> P0 = cmd;//把命令送給P0</p><p> lcden = 0;//產(chǎn)生一個高脈沖</p><p> delay_ms(5);</p><p>
48、lcden = 1;</p><p> delay_ms(5);//不用的時候把en拉低,12864不使能</p><p> lcden = 0; </p><p><b> }</b></p><p><b> ?。?)寫數(shù)據(jù):</b></p><p> void
49、 write_dat(uchar dat)</p><p> { </p><p> lcdrs = 1;//高電平表示數(shù)據(jù)</p><p> lcdrw = 0;//低電平表示寫</p><p> P0 = dat;//把數(shù)據(jù)送到端口</p><p> lc
50、den = 0;//產(chǎn)生一個高脈沖</p><p> delay_ms(5);</p><p> lcden = 1;</p><p> delay_ms(5);</p><p> lcden = 0; //不用時不使能</p><p><b> }</b></p>&l
51、t;p> TC35i的發(fā)送短信程序:</p><p><b> 5.1 調(diào)試步驟</b></p><p> 焊接好各個模塊后,進行模塊的單獨測試。紅外線發(fā)送調(diào)試部分比較要求細致一些,在這里的時序控制問題和頻率精度的設(shè)計要求較高,在計算初值和調(diào)試載波的占空比的時候都要利用示波器精確測量。GSM模塊根據(jù)相應(yīng)用到的指令進行分部的調(diào)試,最后在進行整個模塊的功能調(diào)
52、試。顯示模塊調(diào)試比較簡單了,只要保證對應(yīng)的引腳電路的正確,時能時鐘應(yīng)用正確,液晶屏就會按照程序設(shè)計的方式進行顯示。無線射頻模塊的調(diào)試要進行收發(fā)兩種模式的相互配合,在調(diào)試的時候可以利用DR引腳和CD引腳在工作模式下的特殊性進行調(diào)試。在所有的模塊都調(diào)試成功后才可以進行系統(tǒng)的軟件的綜合控制管理MAIN函數(shù)測試和調(diào)試工作。</p><p><b> 六、心得體會</b></p>&l
53、t;p> 兩個月的單片機課程設(shè)計結(jié)束了,在這次的課程設(shè)計中不僅檢驗了我所學習的知識,也培養(yǎng)了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。在設(shè)計過程中,與同學分工設(shè)計,和同學們相互探討,相互學習,相互監(jiān)督。學會了合作,學會了運籌帷幄,學會了寬容,學會了理解,也學會了做人與處世。課程設(shè)計是我們專業(yè)課程知識綜合應(yīng)用的實踐訓練,著是我們邁向社會,從事職業(yè)工作前一個必不少的過程.”千里之行始于足下”,通過這次課程設(shè)計,我深
54、深體會到這句千古名言的真正含義.我今天認真的進行課程設(shè)計,學會腳踏實地邁開這一步,就是為明天能穩(wěn)健地在社會大潮中奔跑打下堅實的基礎(chǔ).通過這次智能家居中控設(shè)計,本人在多方面都有所提高。通過這次智能家居中控設(shè)計,綜合運用本專業(yè)所學課程的理論和生產(chǎn)實際知識進行一次智能家居中控設(shè)計工作的實際訓練從而培養(yǎng)和提高學生獨立工作能力,鞏固與擴充了智能家居中控設(shè)計等課程所學的內(nèi)容,掌握智能家居中控設(shè)計的方法和步驟,同時各科相關(guān)的課程都有了全面的復習,獨立
55、思考的能力也有了提高。在這次設(shè)計過程中,體現(xiàn)出我們設(shè)計智能家居中控的能力以及綜合運用知識的能力,體會了學以致用、突出自己勞動成果的喜悅心情</p><p><b> 七,參考文獻</b></p><p> [1] 樓然苗,李光飛.51系列單片機設(shè)計實例.北京航空航天大學出版社 ,2003</p><p> [2] 何希才.常用集成電路應(yīng)用
56、實例.電子工業(yè)出版社,2007</p><p> [3] 楊國田,白 焰,董 玲.51單片機實用C語言程序設(shè)計.中國電力出版社,2009</p><p> [4] 楊居義.單片機課程設(shè)計指導.清華大學出版社,2009</p><p> 附錄一 系統(tǒng)硬件電路圖</p><p><b> 附錄三 程序清單</b>
57、</p><p> 超聲波測距器單片機程序 (文件1保存為ceju.c)</p><p> #include<reg51.h></p><p> #defineuchar unsigned char</p><p> #define unit unsigned int</p><p> #d
58、efine ulong unsigned long</p><p> #include"intrins.h"</p><p> #include"string.h"</p><p> sbit ir=P3^4;//紅外發(fā)射管控制腳 </p><p> uint count, set_count;
59、//中斷計數(shù),設(shè)定中斷次數(shù) </p><p> bit keyflag,flag;//紅外發(fā)送標志,按鍵標志位 </p><p> uchar irsys[4]={0x1a,0xa1,0xdc,0x03};//26位系統(tǒng)碼,最后一個字節(jié)只用2位 </p><p> uchar ircode,irdata,num; </p><p>
60、unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};</p><p> #define buf_max 72//緩存長度72</p><p> uchar a,i;</p><p> uchar rec_buf[buf_max];//接收緩存</p&
61、gt;<p> #include"stdio.h"</p><p> #include"math.h"</p><p> #define uchar unsigned char </p><p> #define uint unsigned int</p><p> #defi
62、ne WC0x00// Write configuration register command </p><p> #define RC0x10 // Read configuration register command</p><p> #define WTP0x20 // Write TX Payload command</p>
63、;<p> #define RTP0x21// Read TX Payload command</p><p> #define WTA0x22// Write TX Address command</p><p> #define RTA0x23// Read TX Address command</p><
64、p> #define RRP0x24// Read RX Payload command</p><p> typedef struct RFConfig</p><p><b> {</b></p><p><b> uchar n;</b></p><p> uch
65、ar buf[10];</p><p> }RFConfig;</p><p> code RFConfig RxTxConf = </p><p><b> {</b></p><p><b> 10,</b></p><p> 0x4c, 0
66、x0c, 0x44, 0x20, 0x20, 0xcc, 0xcc, 0xcc,0xcc, 0x58</p><p><b> };</b></p><p> // 905配置初始化數(shù)據(jù)//字節(jié)1以10dBm功率輸出//RX、TX地址寬度為4字節(jié)。</p><p> //0x20, 0x20:收發(fā)32字節(jié)//允許CRC8位校驗外接(模塊
67、自身帶有的)16MHz晶振。</p><p> //0x4c:頻率430mhz s</p><p> // 0x20, 0x20:收發(fā)32字節(jié)</p><p> // 0xcc, 0xcc, 0xcc,0xcc:spi寫入的地址</p><p> uchar data TxBuf[]="12345";</p&
68、gt;<p> uchar data RxBuf[6];</p><p> uchar temp;</p><p> unsigned char code table1[]=</p><p> {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86
69、,0x8e,0xaa}; </p><p> uchar bdata DATA_BUF;//片內(nèi)RAM尋址存儲</p><p> sbitflag=DATA_BUF^7;</p><p> sbitflag1=DATA_BUF^0;</p><p> sbitTX_EN =P0^7;</p><
70、p> sbitTRX_CE =P0^6;</p><p> sbitPWR_UP =P0^5;</p><p> sbitMISO =P0^1;</p><p> sbitMOSI =P0^0;</p><p> sbitSCK =P2^7;</p><
71、;p> sbitCSN =P2^3;</p><p> sbitAM =P0^3;</p><p> sbitDR =P2^2;</p><p> sbitCD =P0^4;</p><p> sbit SDATA_595 = P1^0;</p
72、><p> sbit SCLK_595 = P1^1;</p><p> sbit SRCLK_595 = P1^2;</p><p> sbit wei_y0 = P1^4;</p><p> sbit LED=P2^0;</p><p> sbit key1 = P3^0;&
73、lt;/p><p> sbit key4 = P3^1;</p><p> sbit key5 = P3^2;</p><p> sbit dula = P2^6;sbit wela = P2^7;//SCM12864-05端口定義#define LCD_DATA P0 //數(shù)據(jù)口sbit RS = P3^5; //并行的指令/數(shù)據(jù)選擇信號
74、, H數(shù)據(jù), L命令sbit RW = P3^6; //并行讀寫選擇信號, H讀, L寫sbit E = P3^4; //并行使能端, H有效, L無效sbit PSB = P3^7; //并/串接口選擇, H并,L串sbit RET = P3^3; //復位, L有效</p><p> uchar code datas1[] = {"歡迎使用家居中控系統(tǒng)"};uchar code
75、 datas2[] = {"工作模式:"};uchar code datas3[] = {"意義:"};uchar code datas4[] = {"指令碼:"};</p><p> void InitIO(void);// Initialize IO port</p><p> void Inituart(vo
76、id); // initialize 232 uart</p><p> void Config905(void);// Config nRF905 module配置NRF905模式</p><p> void SetTxMode(void);// Set nRF905 in Tx mode</p><p> void TxPacket
77、(void);// Send data by nRF905</p><p> void SpiWrite(uchar);// Write data to nRF905</p><p> void Delay(uchar n);// Delay 100us</p><p> void display();</p><p>
78、; void SendData_595 ();</p><p> void OutputData_595 ();</p><p> void main()</p><p><b> {</b></p><p><b> while(1)</b></p><p>
79、{//=========RF905初始化 ===========================</p><p> CSN=1;// Spi disable</p><p> SCK=0;// Spi clock line init high</p><p> DR=1;// Init DR for input
80、</p><p> AM=1;// Init AM for input</p><p> PWR_UP=1;// nRF905 power on</p><p> TRX_CE=0;// Set nRF905 in standby mode spi編程模式</p><p> TX_EN=0;
81、// set radio in Rx mode</p><p> Config905(); // Config nRF905 module</p><p><b> key1=0;</b></p><p> if(key4!=1) //電動機反轉(zhuǎn) 窗簾打開 </p><p><b>
82、 {</b></p><p> TxBuf[0] =1;</p><p><b> } </b></p><p> if(key5!=1) //電動機正轉(zhuǎn) 窗簾關(guān)閉</p><p><b> { </b></p><p> TxBuf[0] =2;
83、</p><p><b> }</b></p><p> if(key6!=1) //電動機停止 </p><p><b> { </b></p><p> TxBuf[0] =3;</p><p><b> }</b></p&
84、gt;<p> if(key7!=1) //進入自動模式(光控窗簾) </p><p><b> { </b></p><p> TxBuf[0] =4;</p><p><b> }</b></p><p> SetTxMode(); // Set Tx
85、Mode*/</p><p> TxPacket(); // T發(fā)送數(shù)據(jù)包</p><p><b> } </b></p><p><b> }</b></p><p> void Delay(uchar n)</p><p><b>
86、{</b></p><p><b> uint i;</b></p><p> while(n--)</p><p> for(i=0;i<80;i++);</p><p><b> }</b></p><p> void Config905(v
87、oid)</p><p><b> {</b></p><p> uchar i;</p><p> CSN=0;// Spi enable for write a spi command</p><p> SpiWrite(WC);// Write config command寫放配置
88、命令</p><p> for (i=0;i<RxTxConf.n;i++)// Write configration words 寫放配置字</p><p><b> {</b></p><p> SpiWrite(RxTxConf.buf[i]);</p><p><b> }</b
89、></p><p> CSN=1;// Disable Spi</p><p><b> }</b></p><p> void SpiWrite(uchar byte)</p><p><b> {</b></p><p><b> u
90、char i;</b></p><p> DATA_BUF=byte;// Put function's parameter into a bdata variable </p><p> for (i=0;i<8;i++) // Setup byte circulation bits</p><p><
91、;b> {</b></p><p> if (flag) // Put DATA_BUF.7 on data line</p><p><b> MOSI=1;</b></p><p><b> else</b></p><p><b>
92、MOSI=0;</b></p><p> SCK=1; // Set clock line high</p><p> DATA_BUF=DATA_BUF<<1; // Shift DATA_BUF</p><p> SCK=0; // Set clock line low </p>
93、<p><b> }</b></p><p><b> SCK=0;</b></p><p><b> }</b></p><p> void TxPacket(void)</p><p><b> {</b></p>
94、<p><b> uchar i;</b></p><p> PWR_UP=1;//上電</p><p> TX_EN=1;//發(fā)送使能</p><p> TRX_CE=0;// Set TRX_CE low進入spi編程模式</p><p> CSN=0;// Spi
95、enable for write a spi command spi使能</p><p> SpiWrite(WTA);// Write address command 寫入“寫地址命令”</p><p> for (i=0;i<4;i++)// Write 4 bytes address</p><p><b> {</b
96、></p><p> SpiWrite(RxTxConf.buf[i+5]);</p><p><b> }</b></p><p> CSN=1;// Spi disable</p><p><b> Delay(1);</b></p><p&
97、gt; CSN=0;// Spi enable for write a spi command</p><p> SpiWrite(WTP);// Write payload command寫入“寫數(shù)據(jù)命令”</p><p> for (i=0;i<32;i++)//寫入“寫地址命令”</p><p><b> {<
98、/b></p><p> SpiWrite(TxBuf[i]);// Write 32 bytes Tx data </p><p><b> }</b></p><p> CSN=1;// Spi disable</p><p> TRX_CE=1;// 進入發(fā)送模式
99、發(fā)送數(shù)據(jù)</p><p><b> Delay(1);</b></p><p> /*if (DR)</p><p><b> { </b></p><p><b> LED=0;</b></p><p> Delay(500);</p
100、><p><b> LED=1;</b></p><p> Delay(500);</p><p><b> }*/</b></p><p> TRX_CE=0;// Set TRX_CE low進入spi編程模式</p><p> display();
101、</p><p><b> }</b></p><p> void SetTxMode(void)</p><p><b> {</b></p><p><b> TX_EN=1;</b></p><p><b> TRX_
102、CE=1;</b></p><p> Delay(1); // delay for mode change(>=650us)</p><p><b> }</b></p><p> //延時約2usvoid delayUs(){nop_();_nop_();}//延時 a * 1msvoid dela
103、yMs(uint a){ uint i, j; for(i = a; i > 0; i--) for(j = 100; j > 0; j--);}</p><p> //檢測LCD是否處于忙狀態(tài), 若忙返回1, 空閑返回0bit ch
104、eckBusy(){ bit busy; RS = 0; RW = 1; E = 1; delayUs(); busy = (bit)(LCD_DATA&0x80); E = 0;
105、160; return busy;}</p><p> //等待LCD到空閑void wait(){ while(checkBusy());}</p><p> //寫命令void writeCmd(uchar cmd){ wait(); RS =
106、0; RW = 0; E = 0; delayUs(); LCD_DATA = cmd; delayUs(); E = 1; delayUs(); &
107、#160; E = 0;}</p><p> //寫數(shù)據(jù)void writeData(uchar dat){ wait(); RS = 1; RW = 0; E = 0; delayUs();
108、 LCD_DATA = dat; delayUs(); E = 1; delayUs(); E = 0;}</p><p> //初始化LCDvoid init(){ PSB = 1; //并口方式
109、60; writeCmd(0x30); //基本指令, 擴充指令為34H delayMs(10); writeCmd(0x0c); //顯示開, 關(guān)光標 delayMs(10); writeCmd(0x01); //清屏 de
110、layMs(10);}</p><p> void setPosition(uchar x, uchar y){ uchar p; switch(x%4) { case 0: p = 0x80; break; //第一行開始地址 &
111、#160; case 1: p = 0x90; break; //第二行 case 2: p = 0x88; break; //第三行 case 3: p = 0x98; break; //第四行
112、; } p += y; writeCmd(p);}</p><p> void writeString(uchar * str){ uchar i = 0; while(str[i] != '\0') {
113、0; writeData(str[i++]); }}</p><p> /**//***************************LCD12864***************************/</p><p> void display(){//先關(guān)閉數(shù)碼管
114、, 使兩個鎖存器鎖存, 因開了數(shù)碼管, USB電壓驅(qū)動不夠, 將 無法使LCD正常工作 dula = wela = 0; init(); setPosition(0, 0); writeString(datas1); setPosi
115、tion(1, 0); writeString(datas2); setPosition(2, 0); writeString(datas3); setPosition(3, 0); writeString(datas4);
116、 while(1);}</p><p> //******************************************************************</p><p> void delay(uint z) //1ms延時</p><p><b> {</b></p><
117、p><b> uint x,y;</b></p><p> for(x=z;x>0;x--)</p><p> for(y=110;y>0;y--);</p><p><b> }</b></p><p> void SerialInit()//初始化程序(必須使用,否則
118、無法收發(fā))</p><p><b> {</b></p><p> TMOD=0x20;//設(shè)置定時器工作方式為8位自動裝入數(shù)據(jù)</p><p> TH1=0xfd;//裝入初值,波特率9600</p><p><b> TL1=0xfd;</b></p><p>
119、 TR1=1;//打開定時器</p><p> SM0=0;//設(shè)置串行通訊工作模式,(10為一部發(fā)送,波特率可變,由定時器1的溢出率控制)</p><p> SM1=1;//(同上)在此模式下,定時器溢出一次就發(fā)送一個位的數(shù)據(jù)</p><p> REN=1;//串行接收允許位(要先設(shè)置sm0sm1再開串行允許)</p><p><
120、;b> EA=1;</b></p><p><b> ES=1;</b></p><p><b> }</b></p><p> /*//////////////////////////////////////////////////////////////////////////////////
121、//////////////////</p><p> // 函數(shù)名:void Uart1Sends(char* at)</p><p> // 作用: 發(fā)送字符串到串口1</p><p> // 參數(shù): char* at 字符串頭地址</p><p><b> // 返回:</b></p><
122、;p> ////////////////////////////////////////////////////////////////////////////////////////////////////*/</p><p> void Uart1Sends(char* at)</p><p> { </p><p>
123、; uchar cnt=0; </p><p> ES=0;//關(guān)串行口中斷</p><p> while(*(at+cnt))//判斷一串數(shù)據(jù)是否結(jié)束</p><p><b> {</b></p><p> SBUF=*(at+cnt);//發(fā)送數(shù)據(jù)</p&
124、gt;<p> while(TI==0);//查詢發(fā)送是否結(jié)束</p><p> TI=0;//清除發(fā)送一標志位</p><p> cnt++;//準備發(fā)送一個數(shù)據(jù)</p><p><b> }</b></p><p> ES=1;//開串行口中斷</p><p>
125、;<b> }</b></p><p> /*****************判斷緩存中是否含有指定的字符串函數(shù)******************/</p><p> /*函數(shù)原型:bit hand(unsigned char *a)</p><p> /*函數(shù)功能:判斷緩存中是否含有指定的字符串</p><p&g
126、t; /*輸入?yún)?shù):unsigned char *a 指定的字符串</p><p> /*輸出參數(shù):bit 1---含有 0---不含有</p><p><b> /*調(diào)用模塊:無</b></p><p> /*************************************************************
127、*********/</p><p> bit hand(uchar *a)</p><p><b> { </b></p><p> if(strstr(rec_buf,a)!=NULL) //!=是不等于</p><p><b> return 1;</b></p>&
128、lt;p><b> else</b></p><p><b> return 0;</b></p><p><b> }</b></p><p> /**************************清除緩存數(shù)據(jù)函數(shù)****************************/</p
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機課程設(shè)計智能家居系統(tǒng)
- 單片機課程設(shè)計-基于gsm的智能家居系統(tǒng)
- 基于單片機的智能家居安防系統(tǒng)設(shè)計
- 基于單片機的智能家居控制設(shè)計
- 基于單片機的智能家居控制設(shè)計開題報告.doc
- 基于單片機的智能家居控制設(shè)計開題報告.doc
- 基于單片機的智能家居控制設(shè)計 (2)
- 基于單片機的智能家居畢業(yè)設(shè)計
- 基于arduino單片機的智能家居設(shè)計
- 單片機課程設(shè)計報告---單片機秒表系統(tǒng)設(shè)計
- 基于單片機的智能家居系統(tǒng)的研究.pdf
- 單片機課程設(shè)計報告---單片機控制秒表系統(tǒng)
- 基于單片機的智能家居安保系統(tǒng)的設(shè)計研究.pdf
- 畢業(yè)設(shè)計-----基于單片機的智能家居控制系統(tǒng)設(shè)計
- 智能家居控制系統(tǒng)課程設(shè)計
- 文獻綜述--基于單片機的智能家居控制設(shè)計.doc
- 單片機課程設(shè)計報告
- 《單片機課程設(shè)計》報告
- 單片機課程設(shè)計報告
- 單片機課程設(shè)計報告
評論
0/150
提交評論