單片機課程設計報告智能家居中控系統(tǒng)_第1頁
單片機課程設計報告智能家居中控系統(tǒng)_第2頁
單片機課程設計報告智能家居中控系統(tǒng)_第3頁
單片機課程設計報告智能家居中控系統(tǒng)_第4頁
單片機課程設計報告智能家居中控系統(tǒng)_第5頁
已閱讀5頁,還剩36頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、信息與通信工程學院信息與通信工程學院單片機系統(tǒng)課程設計報告單片機系統(tǒng)課程設計報告 完成日期:完成日期:2011 年年 5 月月 2 日日系:電子信息工程系專 業(yè):通信工程班 級:081,2 班設計題目:智能家居中控系統(tǒng)學生姓名:袁安 張路指導教師:李厚杰目錄目錄一、項目概述一、項目概述.1 1二、設計任務和性能指標二、設計任務和性能指標.2 22.12.1 設計任務設計任務 .2 22.22.2 性能指標性能指標 .2 2三、原理概述三、原理概述.3 3四、設計方案四、設計方案.4 44.14.1 框圖設計框圖設計 .5 54.24.2 硬件設計硬件設計 .6 64.2.14.2.1 stc8

2、9c52stc89c52 單片機單片機 .7 74.2.24.2.2 射頻射頻 nrf905nrf905 發(fā)送模塊發(fā)送模塊.8 84.2.34.2.3 tc35igsmtc35igsm 模塊模塊 .10104.2.44.2.4 紅外線發(fā)送模塊紅外線發(fā)送模塊.11114.2.54.2.5 顯示電路顯示電路.12124.34.3 軟件設計軟件設計 .13134.3.14.3.1 主程序主程序.14144.3.24.3.2 子程序子程序.1616五、調試及性能五、調試及性能分分析析.20205.15.1 調試步驟調試步驟 .21215.25.2 性能分析性能分析 .2121六、心得體會六、心得體會.

3、2222參考文獻參考文獻.2323附錄一附錄一 系統(tǒng)系統(tǒng)硬硬件電路圖件電路圖.2424附錄二附錄二 程序清單程序清單.2626一、一、項目概述項目概述隨著現代科學技術的發(fā)展,生活水平的提高,人們的生活方式和生活質量的要求也同以前有了追求?;氐郊依锵硎馨察o舒適方便快捷的休息方式已經是時代發(fā)展的要求和人們生活所必需。為了讓人們快速從當前繁瑣的家庭勞動中解放出來,為了迎合時代科技發(fā)展的要求,我們設計了智能家居中控系統(tǒng)。將家居的環(huán)境參數諸如:濕度、溫度等信息,還有水煤電等線管數據的報警等信息通過短信,電話等多種途徑,將信息快速準確的及時的發(fā)送到主人手中,讓你無論何時何地隨時掌握家里的數據信息,還有解決

4、了家里電器設備的操控的繁瑣,只要通過中控臺全部控制家里的應用電器。 二、設計任務和性能指標2.1 設計任務利用單片機及外圍接口電路和相關的功能模塊設計制作一個智能家居中控設備,并且用 lcd12864 液晶顯示器把相關的功能模塊采集到的數據顯示出來,顯示當前操作的意義等相關的數據信息。要求用 ad6 設計出相關的電路圖并且畫出系統(tǒng)的電路原理圖,印刷電路板,繪出程序流程圖,并給出程序清單。2.2 性能指標數據顯示: lcd12864 顯示每次中控臺發(fā)出或是接受到數據信息的意義以及相關的參數顯示出來??刂颇K: 控制模塊主要是由 nrf905 采集外圍的具有 nrf905 發(fā)射終端設備。例如采集溫

5、度,濕度數據,接受遙控設備的射頻遙控等命令。短信提醒功能,通過 nrf905 采集的數據經過 mcu 控制后,經過 tc35i 模塊經過手機的短信平臺把相關的數據信息發(fā)送給使用者。系統(tǒng)精度:該中控系統(tǒng)是整個家居體系的核心處理部分,能夠把數據進行綜合匯總,將所有的有關的數據實時準確的進行綜合匯總控制。實現對家居設備的監(jiān)控和管理的掌控能力。經過這幾大模塊功能的組合應用,使家居的主人可以在任何時間,任何地點,隨時掌控家里的所有信息和控制管理。三、原理概述三、原理概述該系統(tǒng)主要是基于四大控制模塊建立構成的控制管理體系。首先是射頻模塊:射頻模塊將家居的具有射頻控制模塊的采集子終端以及遙控終端。主要是進行

6、接收控制命令和采集家居的相關的數據,在這里具體表現為,采集家居的溫度,濕度,煤氣報警,水電的報警數據以及射頻遙控器的遙控指令。再者是紅外線發(fā)送模塊:該模塊的主要功能是控制具有紅外線接收能力的家電設備例如:tv、dvd 和電視機頂盒等相關的家用電器。該模塊主要是通過射頻模塊接收到的控制命令控制家用電器設備。還有就是 lcd 液晶顯示模塊:該模塊主要功能是用于顯示每次采集到的數據或是接受到的命令進行顯示,說明每次操作的具體意義。最后是 gsm 模塊:該模塊是基于手機服務商的短信平臺進行工作的,該模塊的功能是當家里的水電煤氣等管理模塊發(fā)出報警信息的時候,家里沒有人在指定的時間內進行先關的處理控制的時

7、候,這時中控系統(tǒng)將采集到的報警命令通過 gsm模塊以短信的方式發(fā)送給家里的主人,這樣保證了家里的主人無論在何時何地,隨時掌握家里的所以信息。四、設計方案4.1 框圖設計整個控制系統(tǒng)的基本模塊組成及與 mcu 之間的聯(lián)系的設計如圖所示分別包括了每個模塊的具體信息其系統(tǒng)框圖如圖 4.1 所示。nrf905 射頻模塊tc35igsm 模塊紅外線發(fā)送模塊電路lcd12864 顯示模塊按鍵模塊stc89c52 單片機圖 4.14.2 硬件設計tc35i 新版西門子工業(yè) gsm 模塊是一個支持中文短信息的工業(yè)級 gsm 模塊,工作在egsm900 和 gsm1800 雙頻段,電源范圍為直流 3.34.8v

8、 ,電流消耗休眠狀態(tài)為3.5ma,空閑狀態(tài)為 25ma,發(fā)射狀態(tài)為 300ma(平均),2.5a 峰值;可傳輸語音和數據信號, 功耗在 egsm900(4 類)和 gsm1800(1 類)分別為 2w 和 1w ,通過接口連接器和天線連接器分別連接 sim 卡讀卡器和天線。sim 電壓為 3v/1.8v,tc35i 的數據接口(cmos 電平)通過 at 命令可雙向傳輸指令和數據,可選波特率為 300b/s115kb/s , 自動波特率為1.2kb/s115kb/s。它支持 text 和 pdu 格式的 sms(short message service,短消息),可通過 at 命令或關斷信號

9、實現重啟和故障恢復,中文資料如下:tc35i 由供電模塊(asic)、閃存、zif 連接器、天線接口等 6 部分組成。作為 tc35i 的核心基帶處理器主要處理 gsm 終端內的語音和數據信號,并涵蓋了蜂窩射頻設備中的所有模擬和數字功能。4.2.14.2.1 stc89c52stc89c52 單片機單片機stc89c52 具體介紹如下: 主電源引腳(2 根)vcc(pin40):電源輸入,接5v 電源gnd(pin20):接地線外接晶振引腳(2 根)xtal1(pin19):片內振蕩電路的輸入端xtal2(pin20):片內振蕩電路的輸出端控制引腳(4 根)rst/vpp(pin9):復位引腳

10、,引腳上出現 2 個機器周期的高電平將使單片機復位。ale/prog(pin30):地址鎖存允許信號psen(pin29):外部存儲器讀選通信號ea/vpp(pin31):程序存儲器的內外部選通,接低電平從外部程序存儲器讀指令,如果接高電平則從內部程序存儲器讀指令??删幊梯斎?輸出引腳(32 根)stc89c52 單片機有 4 組 8 位的可編程 i/o 口,分別位 p0、p1、p2、p3 口,每個口有 8 位(8 根引腳) ,共 32 根。po 口(pin39pin32):8 位雙向 i/o 口線,名稱為 p0.0p0.7p1 口(pin1pin8):8 位準雙向 i/o 口線,名稱為 p1

11、.0p1.7 p2 口(pin21pin28):8 位準雙向 i/o 口線,名稱為 p2.0p2.7 p3 口(pin10pin17):8 位準雙向 i/o 口線,名稱為 p3.0p3.7stc89c52 主要功能主要功能特性兼容 mcs51 指令系統(tǒng)8k 可反復擦寫 flash rom32 個雙向 i/o 口256x8bit 內部 ram3 個 16 位可編程定時/計數器中斷時鐘頻率 0-24mhz2 個串行中斷可編程 uart 串行通道2 個外部中斷源共 6 個中斷源2 個讀寫中斷口線3 級加密位低功耗空閑和掉電模式軟件設置睡眠和喚醒功能nrf905 可自動完成處理字頭和循環(huán)冗余碼校驗的工

12、作,可由片內硬件自動完成曼徹斯特編碼/解碼, spi 接口與微控制器通信的使用,配置非常方便,其功耗也非常低,輸出功率為-10dbm 發(fā)射時電流只有 11ma,在接收模式時電流為 12.5ma。 nrf905 單片無線收發(fā)模塊工作由一個完全集成的頻率調制器,一個帶解調器的接收器,一個功率放大器,一個晶體震蕩器和一個調節(jié)器組成。自動產生前導碼和 crc 是 shockburst 工作模式的特點,可以很容易通過 spi 接口進行編程配置8。為實現無線傳輸的功能,本系統(tǒng)采用杭州飛拓電子有限公司生產的newmsg_rf905se 無線通信模塊。newmsg_rf905se 的特點如下:(1) 433m

13、hz 開放 ism 頻段免許可證使用(2) 最高工作速率 50kbps,高效 gfsk 調,抗干擾能力強,特別適合工業(yè)控制場合(3) 125 頻道,滿足多點通信和跳頻通信需要(4) 內置硬件 crc 檢錯和點對多點通信地址控制(5) 低功耗 1 .93.6v 工作,待機模式下狀態(tài)僅為 2.5 ua(6) 收發(fā)模式切換時間650us4.2.2 超聲波測距單片機系統(tǒng)單片機系統(tǒng)主要由:stc89c52 單片機、晶振、復位電路、電源濾波部份構成。stc89c52 單片機是超聲波測距的核心部分,主要任務:(1) 控制 gsm 模塊的指令發(fā)送。(2) 控制射頻模塊的工作。(3) 控制 lcd 顯示電路的工

14、作。(4) 接受按鍵掃描。4.2.3 射頻電路newmsg_rf905se 管腳圖如 3.5 所示。p24p26p35p33p34p23p25傳傳傳傳傳傳p22u+5vccw+5vcc1csn12trx_ce3pwr_up4tx_en2csn12uclk5mos110moso9sck11am7cd8gnd14dr6nrf905u8p213.3vp20圖 3.5 newmsg_rf905se 管腳圖說明:(1)vcc 腳電壓范圍為 3v3.6v 之間,不能在這個區(qū)間之外,超過 3.6v 將會燒毀模塊。推薦 3.3v 左右。(2)除電源 vcc 和接地端,其余腳都可以直接和普通的 5v 單片機 i

15、/o 口直接相連,無需電平轉換。當然對 3v 左右的單片機更加適用了。表 3.1 newmsg_rf905se 管腳圖管腳名稱管腳功能說明1vcc電源電源+1.93.6v dc2tx_en數字輸入tx_en =1 tx 模式 tx_en =1 rx 模式3trx_ce數字輸入使能芯片發(fā)射和接收4pwr_up數字輸入芯片上電5uclk時鐘輸出本模塊該腳廢棄不用,向后兼容6cd數字輸入載波檢測7am數字輸入地址匹配8dr數字輸入接收或發(fā)射數據完成9misospi 接口spi 輸出10mosispi 接口spi 輸入11sckspi 時鐘spi 時鐘12csnspi 使能spi 使能13gnd地接地

16、14gnd地接地3.2.3 工作方式工作方式nrf905 工作模式由 trx_ce、tx_en、pwr_up 的設置來設定。工作模式由表 3.1 所示9。表 3.2 nrf905 工作模式pwr_uptrx_cetx_en工作模式0xx掉電和 spi 編程10xstandby 和 spi 編程110shockburst rx111shockburst tx電路原理圖如圖 4.2.3 所示。圖 4.2.34.2.4 gsm 模塊 tc35itc35i 硬件設計:tc35i 模塊有 40 個引腳,通過一個 zif(zero insertion force,零阻力插座)連接器引出。這 40 個引腳可

17、以劃分為 5 類,即電源、數據輸入/輸出、sim 卡、音頻接口和控制。tc35i 的第 15 引腳是正電源輸入腳通常推薦值 4.2v,第 610 引腳是電源地。11、12 為充電引腳,可以外接鋰電池,13 為對外輸出電壓(共外電路使用),14 為 accu-temp 接負溫度系數的熱敏電阻,用于鋰電池充電保護控制。15 腳是啟動腳igt,系統(tǒng)加電后為使 tc35i 進入工作狀態(tài),必須給 igt 加一個大于 100ms 的低脈沖,電平下降持續(xù)時間不可超過 1ms。1623 為數據輸入/輸出,分別為dsr0、ring0、rxd0、txd0、cts0、rts0、dtr0 和 dcd0。tc35i 模

18、塊的數據輸入/輸出接口實際上是一個串行異步收發(fā)器,符合 itu-t rs232 接口標準。它有固定的參數:8位數據位和 1 位停止位,無校驗位,波特率在 300bps115kbps 之間可選,默認 9600。硬件握手信號用 rts0/cts0,軟件流量控制用 xon/xoff,cmos 電平,支持標準的 at 命令集。其中 18 腳 rxd0、19 腳 txd0 為 ttl 的串口通訊腳,需要和單片機或者 pc 通訊。tc35i 使用外接式 sim 卡, 2429 為 sim 卡引腳,sim 卡同 tc35i 是這樣連接的:sim 上的 ccrst、ccio、cccl、ccvcc 和 ccgn

19、d 通過 sim 卡閱讀器與 tc35i 的同名端直接相連,zif 連接座的 ccin 引腳用來檢測 sim 卡是否插好,如果連接正確,則 ccin 引腳輸出高電平,否則為低電平。tc35i 的第 32 腳 sync 引腳有兩種工作模式,一種是指示發(fā)射狀態(tài)時的功率增長情況,另一種是指示 tc35i 的工作狀態(tài),可用 at 命令 at+sync 進行切換,本模塊使用的是后一種。當 led 熄滅時,表明 tc35i 處于關閉或睡眠狀態(tài);當 led為 600 ms 亮/600ms 熄時,表明 sim 卡沒有插入或 tc35i 正在進行網絡登錄;當 led 為75 ms 亮/3s 熄時,表明 tc35

20、i 已登錄進網絡,處于待機狀態(tài)。30、31、32 腳為控制腳,其中 30 為 rtc backup,31 為 power down,32 為 sync。3538 為語音接口,35、36接揚聲器放音。37、38 可以直接接駐極體話筒來采集聲音(37 是話筒正端,39 是話筒負端)電路原理圖如圖 4.2.4 所示。圖 4.2.44.2.5 顯示電路該系統(tǒng)采用 112864 液晶屏顯示模塊2864a-1 漢字圖形點陣液晶顯示模塊,可顯示漢字及圖形,內置 8192 個中文漢字(16x16 點陣) 、128 個字符(8x16 點陣)及 64x256 點陣顯示 ram(gdram) 。主要技術參數和顯示特

21、性:(1)電源:vdd 3.3v+5v(內置升壓電路,無需負壓);(2) 顯示內容:128 列 64 行(3)顯示顏色:黃綠(4)顯示角度:6:00 鐘直視(5)lcd 類型:stn(6)與 mcu 接口:8 位或 4 位并行/3 位串行(7)配置 led 背光(8) 多種軟件功能:光標顯示、畫面移位、自定義字符、睡眠模式等(9)邏輯工作電壓(vdd):4.55.5v(10) 電源地(gnd):0v(11) 工作溫度(ta):060(常溫) / -2075(寬溫)(12) 串行數據傳送共分三個字節(jié)完成:第一字節(jié):串口控制格式 11111abc a 為數據傳送方向控制:h 表示數據從 lcd 到

22、 mcu,l 表示數據從 mcu 到 lcd b 為數據類型選擇:h 表示數據是顯示數據,l 表示數據是控制指令 c 固定為 0第二字節(jié):(并行)8 位數據的高 4 位格式 dddd0000第三字節(jié):(并行)8 位數據的低 4 位格式 0000dddd串行接口時序參數:(測試條件:t=25 vdd=4.5v)圖 4.2.54.3 軟件設計4.3.1 主程序本系統(tǒng)的智能化核心是 stc89c52,其收發(fā)程序和應用軟件全部固化在 eprom 內。它的工作過程是:當系統(tǒng)上電后,單片機進入監(jiān)控狀態(tài),同時完成對各端口的初始化工作,當外部的采集數據模塊的終端設備有報警信息時候,直接發(fā)送傳達的指令在沒有采取

23、的到相應的指令的情況下,短信發(fā)送模塊激活,向固定的電話發(fā)送短信報告之相應的數據信息。lcd 顯示模塊同時顯示收到數據的意義。當中控臺收到射頻遙控器的指令時,通過 mcu 的綜合處理,將射頻協(xié)議和紅外線協(xié)議轉換,發(fā)射出與之對應的紅外線命令從而實現對家用電器的控制和管理的操作。此時遙控器接收模塊接收相應數據并將數據在lcd 顯示屏上顯示。圖 4.3 為主程序流程圖。系統(tǒng)初始化接受數據/發(fā)送指令顯示信息的意義發(fā)送紅外線命/發(fā)送令短信查詢新的指令信息開始圖 4.3 主程序流程圖4.3.2 系統(tǒng)的子程序。 rf905 無線數傳程序包括無線發(fā)送程序和無線接收程序。shockburst tx 發(fā)送流程分一下

24、幾步:(1) 當微控制器有效數據要發(fā)送時,通過 spi 接口,按時序跋接收機的地址和藥發(fā)送的數據傳送給 rf905,spi 接口的速率在通信協(xié)議和器件配置時確定;(2) 微控制器置高 trx_ce 和 tx_en,激發(fā) rf905 的 shockbursttm 發(fā)送模式;(3) rf905 的 shockbursttm 發(fā)送:(4) 射頻寄存器自動開啟;(5) 數據打包(加頭字和 crc 校驗碼) ;(6) 發(fā)送數據包;(7) 當數據發(fā)送完成,數據準備好引腳被置高;(8) auto_retran 被置高,rf905 不斷重發(fā),自動進入空閑。注意:shockbursttm工作模式保證,一旦發(fā)送數

25、據的過程開始,無論 trx-ne 和 tx_en 引腳是高或低,發(fā)送過程都會被處理完。只有在前一個數據包被發(fā)送完畢,rf905 才能接受下一個發(fā)送數據包。shockburst tx 發(fā)送流程圖如圖發(fā)送流程圖如圖 4.4 所示所示五、調試及性能分析圖 4.4待機tx-en=1pwr-up=1trx-ce=1spi 編程載入有效地址trx-ce=0?通信模塊上電crc 和前導碼發(fā)射數據包發(fā)射完 dr=1產生前導碼后 dr=0trx-ce=1?aut0-retran=1?shockburst rx 接收流程分一下幾步:(1) 當 trx_ce 高、tx_en 為低時,rf905j 進入 shockb

26、urst tm 接收模式;(2) 650us 后,rf905 不斷監(jiān)測,等待接收數據;(3) 當 rf905 檢測到同一頻段的載波時,載波檢測引腳被置高;(4) 當接收到一個匹配的地址,am 引腳;(5) 當一個正確的數據包接收完畢,rf905 自動移去字頭、地址和 crc 校驗位,然后把 dr 引腳置高;(6) 微控制器把 trx_ce 置低,rf905 進入空閑模式;(7) 微控制器通過 spi 口,以一定的速率把數據移到微控制器內;(8) 當所有的數據接收完畢,rf905 把 dr 引腳和 am 引腳置低;(9) rf905 此時可以進入 shockburst tm 接收模式、shock

27、burst tm 發(fā)送模式或關機。當正在接收一個數據包時,trx-ce 或 tx_en 引腳的狀態(tài)發(fā)生改變,rf905 立即把其工作模式改變,數據包丟失。當微處理器接到 am 引腳的信號之后,其就知道 rf905 正在接收數據包,其可以決定是讓 rf905 繼續(xù)接收該數據包還是進入另一個工作模式。shockburst rx 接收流程圖如圖接收流程圖如圖 4.5 所示。所示。待機tx-en=1pwr-up=1trx-ce=1?通信模塊上電進入待機模式檢測載波信號檢測到則 cd=1地址正確?am=1?數據接收crc 正確?am=0數據接收trx-ce=1?mcu 通 過 spi 對接口讀出有效數據

28、am=1 dr=0 圖 4.5顯示模塊 lcd12864 程序編寫:本系統(tǒng)采用的是串行通信方式,這樣可以有效的減少單片機的 i/o 的占用,為將來的功能的擴展提供了接口控制。主要的指令如下:(1)寫指令:void write_cmd(uchar cmd) lcdrs = 0;/低電平表命令 lcdrw = 0;/ 低電平表寫 p0 = cmd;/把命令送給 p0 lcden = 0;/產生一個高脈沖delay_ms(5); lcden = 1;delay_ms(5);/不用的時候把 en 拉低,12864 不使能 lcden = 0; (2)寫數據:void write_dat(uchar d

29、at) lcdrs = 1;/高電平表示數據 lcdrw = 0;/低電平表示寫 p0 = dat;/把數據送到端口 lcden = 0;/產生一個高脈沖 delay_ms(5); lcden = 1;delay_ms(5); lcden = 0; /不用時不使能tc35i 的發(fā)送短信程序:5.1 調試步驟焊接好各個模塊后,進行模塊的單獨測試。紅外線發(fā)送調試部分比較要求細致一些,在這里的時序控制問題和頻率精度的設計要求較高,在計算初值和調試載波的占空比的時候都要利用示波器精確測量。gsm 模塊根據相應用到的指令進行分部的調試,最后在進行整個模塊的功能調試。顯示模塊調試比較簡單了,只要保證對應的

30、引腳電路的正確,時能時鐘應用正確,液晶屏就會按照程序設計的方式進行顯示。無線射頻模塊的調試要進行收發(fā)兩種模式的相互配合,在調試的時候可以利用 dr 引腳和 cd 引腳在工作模式下的特殊性進行調試。在所有的模塊都調試成功后才可以進行系統(tǒng)的軟件的綜合控制管理main 函數測試和調試工作。六、心得體會兩個月的單片機課程設計結束了,在這次的課程設計中不僅檢驗了我所學習的知識,也培養(yǎng)了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。在設計過程中,與同學分工設計,和同學們相互探討,相互學習,相互監(jiān)督。學會了合作,學會了運籌帷幄,學會了寬容,學會了理解,也學會了做人與處世。課程設計是我們專業(yè)課程

31、知識綜合應用的實踐訓練,著是我們邁向社會,從事職業(yè)工作前一個必不少的過程 ”千里之行始于足下”,通過這次課程設計,我深深體會到這句千古名言的真正含義我今天認真的進行課程設計,學會腳踏實地邁開這一步,就是為明天能穩(wěn)健地在社會大潮中奔跑打下堅實的基礎通過這次智能家居中控設計,本人在多方面都有所提高。通過這次智能家居中控設計,綜合運用本專業(yè)所學課程的理論和生產實際知識進行一次智能家居中控設計工作的實際訓練從而培養(yǎng)和提高學生獨立工作能力,鞏固與擴充了智能家居中控設計等課程所學的內容,掌握智能家居中控設計的方法和步驟,同時各科相關的課程都有了全面的復習,獨立思考的能力也有了提高。在這次設計過程中,體現出

32、我們設計智能家居中控的能力以及綜合運用知識的能力,體會了學以致用、突出自己勞動成果的喜悅心情,從中發(fā)現自己平時學習的不足和薄弱環(huán)節(jié),從而加以彌補。在此感謝我們的李厚杰老師.,老師嚴謹細致、一絲不茍的作風一直是我工作、學習中的榜樣;老師循循善誘的教導和不拘一格的思路給予我無盡的啟迪;這次智能家居中控的每個實驗細節(jié)和每個數據,都離不開老師您的細心指導。而您開朗的個性和寬容的態(tài)度,幫助我們能夠很順利的完成了這次課程設計。同時感謝對我?guī)椭^的同學們,謝謝你們對我們的幫助和支持,讓我感受到同學的友誼。由于我們的設計能力有限,在設計過程中難免出現錯誤,懇請老師們多多指教,我十分樂意接受你們的批評與指正,我

33、們將萬分感謝。七,參考文獻1 樓然苗,李光飛.51 系列單片機設計實例.北京航空航天大學出版社 ,20032 何希才.常用集成電路應用實例.電子工業(yè)出版社,20073 楊國田,白 焰,董 玲.51 單片機實用 c 語言程序設計.中國電力出版社,20094 楊居義.單片機課程設計指導.清華大學出版社,2009附錄一附錄一 系統(tǒng)硬件電路圖系統(tǒng)硬件電路圖附錄三附錄三 程序清單程序清單超聲波測距器單片機程序 (文件 1 保存為 ceju.c)#include#define uchar unsigned char#define unit unsigned int#define ulong unsigne

34、d long#includeintrins.h#includestring.hsbit ir=p34;/紅外發(fā)射管控制腳 uint count, set_count;/中斷計數,設定中斷次數 bit keyflag,flag;/紅外發(fā)送標志,按鍵標志位 uchar irsys4=0 x1a,0 xa1,0 xdc,0 x03;/26 位系統(tǒng)碼,最后一個字節(jié)只用 2 位 uchar ircode,irdata,num; unsigned char code table=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90;#def

35、ine buf_max 72/緩存長度 72uchar a,i;uchar rec_bufbuf_max;/接收緩存#includestdio.h#includemath.h#define uchar unsigned char #define uint unsigned int#define wc0 x00/ write configuration register command #define rc0 x10 / read configuration register command#define wtp0 x20 / write tx payload command#define rt

36、p0 x21/ read tx payload command#define wta0 x22/ write tx address command#define rta0 x23/ read tx address command#define rrp0 x24/ read rx payload commandtypedef struct rfconfiguchar n;uchar buf10;rfconfig;code rfconfig rxtxconf = 10,0 x4c, 0 x0c, 0 x44, 0 x20, 0 x20, 0 xcc, 0 xcc, 0 xcc,0 xcc, 0 x

37、58;/ 905 配置初始化數據/字節(jié) 1 以 10dbm 功率輸出/rx、tx 地址寬度為 4 字節(jié)。/0 x20, 0 x20:收發(fā) 32 字節(jié)/允許 crc8 位校驗外接(模塊自身帶有的)16mhz 晶振。/0 x4c:頻率 430mhz s/ 0 x20, 0 x20:收發(fā) 32 字節(jié)/ 0 xcc, 0 xcc, 0 xcc,0 xcc:spi 寫入的地址uchar data txbuf=12345;uchar data rxbuf6;uchar temp; unsigned char code table1=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0

38、 x82,0 xf8, 0 x80,0 x90,0 x88,0 x83,0 xc6,0 xa1,0 x86,0 x8e,0 xaa; uchar bdata data_buf;/片內 ram 尋址存儲sbit flag =data_buf7;sbit flag1=data_buf0;sbit tx_en =p07;sbit trx_ce =p06;sbit pwr_up =p05;sbit miso =p01;sbit mosi =p00;sbit sck =p27;sbit csn =p23;sbit am =p03;sbit dr =p22;sbit cd =p04;sbit sdata_

39、595 = p10;sbit sclk_595 = p11;sbit srclk_595 = p12;sbit wei_y0 = p14;sbit led=p20;sbit key1 = p30;sbit key4 = p31;sbit key5 = p32;sbit dula = p26;sbit wela = p27;/scm12864-05 端口定義#define lcd_data p0 /數據口sbit rs = p35; /并行的指令/數據選擇信號, h 數據, l 命令sbit rw = p36; /并行讀寫選擇信號, h 讀, l 寫sbit e = p34; /并行使能端, h

40、 有效, l 無效sbit psb = p37; /并/串接口選擇, h 并,l 串sbit ret = p33; /復位, l 有效uchar code datas1 = 歡迎使用家居中控系統(tǒng);uchar code datas2 = 工作模式:;uchar code datas3 = 意義:;uchar code datas4 = 指令碼:;void initio(void);/ initialize io portvoid inituart(void); / initialize 232 uartvoid config905(void);/ config nrf905 module 配置

41、nrf905 模式void settxmode(void);/ set nrf905 in tx modevoid txpacket(void);/ send data by nrf905void spiwrite(uchar);/ write data to nrf905void delay(uchar n);/ delay 100usvoid display();void senddata_595 ();void outputdata_595 ();void main()while(1) /=rf905 初始化 =csn=1;/ spi disablesck=0;/ spi clock l

42、ine init highdr=1;/ init dr for inputam=1;/ init am for inputpwr_up=1;/ nrf905 power ontrx_ce=0;/ set nrf905 in standby mode spi 編程模式tx_en=0;/ set radio in rx modeconfig905(); / config nrf905 module key1=0; if(key4!=1) /電動機反轉 窗簾打開 txbuf0 =1; if(key5!=1) /電動機正轉 窗簾關閉 txbuf0 =2; if(key6!=1) /電動機停止 txbu

43、f0 =3; if(key7!=1) /進入自動模式(光控窗簾) txbuf0 =4; settxmode(); / set tx mode*/txpacket(); / t 發(fā)送數據包 void delay(uchar n)uint i;while(n-)for(i=0;i80;i+);void config905(void)uchar i;csn=0;/ spi enable for write a spi commandspiwrite(wc);/ write config command 寫放配置命令for (i=0;irxtxconf.n;i+) / write configrati

44、on words 寫放配置字spiwrite(rxtxconf.bufi);csn=1;/ disable spivoid spiwrite(uchar byte)uchar i;data_buf=byte;/ put functions parameter into a bdata variable for (i=0;i8;i+) / setup byte circulation bitsif (flag) / put data_buf.7 on data linemosi=1;elsemosi=0;sck=1; / set clock line highdata_buf=data_buf1

45、; / shift data_bufsck=0; / set clock line low sck=0;void txpacket(void)uchar i;pwr_up=1;/上電tx_en=1;/發(fā)送使能 trx_ce=0;/ set trx_ce low進入 spi 編程模式csn=0;/ spi enable for write a spi command spi 使能spiwrite(wta);/ write address command 寫入“寫地址命令”for (i=0;i4;i+)/ write 4 bytes address spiwrite(rxtxconf.bufi+5

46、);csn=1;/ spi disabledelay(1);csn=0;/ spi enable for write a spi command spiwrite(wtp);/ write payload command寫入“寫數據命令”for (i=0;i=650us)/延時約 2usvoid delayus()nop_();_nop_();/延時 a * 1msvoid delayms(uint a) uint i, j; for(i = a; i 0; i-) for(j = 100; j 0; j-);/檢測 lcd 是否處于忙狀態(tài), 若忙返回 1, 空閑返回 0bit checkbu

47、sy() bit busy; rs = 0; rw = 1; e = 1; delayus(); busy = (bit)(lcd_data&0 x80); e = 0; return busy;/等待 lcd 到空閑void wait() while(checkbusy();/寫命令void writecmd(uchar cmd) wait(); rs = 0; rw = 0; e = 0; delayus(); lcd_data = cmd; delayus(); e = 1; delayus(); e = 0;/寫數據void writedata(uchar dat) wait(

48、); rs = 1; rw = 0; e = 0; delayus(); lcd_data = dat; delayus(); e = 1; delayus(); e = 0;/初始化 lcdvoid init() psb = 1; /并口方式 writecmd(0 x30); /基本指令, 擴充指令為 34h delayms(10); writecmd(0 x0c); /顯示開, 關光標 delayms(10); writecmd(0 x01); /清屏 delayms(10);void setposition(uchar x, uchar y) uchar p; switch(x%4) c

49、ase 0: p = 0 x80; break; /第一行開始地址 case 1: p = 0 x90; break; /第二行 case 2: p = 0 x88; break; /第三行 case 3: p = 0 x98; break; /第四行 p += y; writecmd(p);void writestring(uchar * str) uchar i = 0; while(stri != 0) writedata(stri+); /*/*lcd12864*/void display()/先關閉數碼管, 使兩個鎖存器鎖存, 因開了數碼管, usb 電壓驅動不夠, 將 無法使 lc

50、d正常工作 dula = wela = 0; init(); setposition(0, 0); writestring(datas1); setposition(1, 0); writestring(datas2); setposition(2, 0); writestring(datas3); setposition(3, 0); writestring(datas4); while(1);/*void delay(uint z) /1ms 延時 uint x,y; for(x=z;x0;x-) for(y=110;y0;y-);void serialinit()/初始化程序(必須使用,

51、否則無法收發(fā))tmod=0 x20;/設置定時器工作方式為 8 位自動裝入數據th1=0 xfd;/裝入初值,波特率 9600tl1=0 xfd;tr1=1;/打開定時器sm0=0;/設置串行通訊工作模式, (10 為一部發(fā)送,波特率可變,由定時器 1 的溢出率控制)sm1=1;/(同上)在此模式下,定時器溢出一次就發(fā)送一個位的數據ren=1;/串行接收允許位(要先設置 sm0sm1 再開串行允許)ea=1;es=1;/*/ 函數名:void uart1sends(char* at)/ 作用: 發(fā)送字符串到串口 1/ 參數: char* at 字符串頭地址/ 返回:/*/void uart1s

52、ends(char* at) uchar cnt=0; es=0;/關串行口中斷while(*(at+cnt)/判斷一串數據是否結束sbuf=*(at+cnt);/發(fā)送數據while(ti=0); /查詢發(fā)送是否結束ti=0;/清除發(fā)送一標志位cnt+;/準備發(fā)送一個數據es=1;/開串行口中斷 /*判斷緩存中是否含有指定的字符串函數*/*函數原型:bit hand(unsigned char *a)/*函數功能:判斷緩存中是否含有指定的字符串/*輸入參數:unsigned char *a 指定的字符串/*輸出參數:bit 1-含有 0-不含有/*調用模塊:無/*/bit hand(uchar

53、 *a) if(strstr(rec_buf,a)!=null) /!=是不等于 return 1; else return 0;/*清除緩存數據函數*/*函數原型:void clr_buf(void)/*函數功能:清除緩存數據/*輸入參數:無/*輸出參數:無/*調用模塊:無/*/void clr_buf(void) for(i=0;i=buf_max;i+) rec_bufi=0; i=0;/*清除短信函數*/*函數原型:void clr_ms(void)/*函數功能:清除短信/*輸入參數:無/*輸出參數:無/*調用模塊:無/*/void clr_ms(void) uart1sends(at

54、+cmgd=1r); void gsm(void) jdq=0; serialinit(); uart1sends(atr); delay(2000); clr_buf(); uart1sends(at+cnmi=2,1r); delay(2000); while(!hand(ok); clr_buf(); uart1sends(at+cmgf=1r);/文本方式 while(!hand(ok); clr_buf(); while(1) if(strstr(rec_buf,+cmti)!=null)/若字符串中含有+cmti就表示有新的短信 clr_buf(); uart1sends(at+c

55、mgr=1r);/發(fā)送讀指令delay(1000); if(strstr(rec_buf,open )!=null)/繼電器 1 打開 jdq=1; else if(strstr(rec_buf,close)!=null)/繼電器 1 關閉 jdq=0; while(!hand(ok); clr_buf(); clr_ms();/刪除短信 void ser() interrupt 4 /串口中斷處理 es=0; /關串口中斷ri=0; /關接收中斷rec_bufi=sbuf;if(i0;x-) for(y=188;y0;y-); /20mhz 的晶振這里應該是 188 /* 按鍵掃描 */ v

56、oid keyscan(void) uchar keytemp; p1=0 xfe; keytemp=p1&0 xfe; if(keytemp!=0 xfe) delay(10); /keytemp=p1&0 xff; if(keytemp!=0 xfe) keyflag=1;/有按鍵標志 switch(keytemp) case 0 xf6:irdata=1;break;/按鍵 1 case 0 xee:irdata=2;break;/按鍵 2 case 0 xde:irdata=3;break;/按鍵 3 default:break; p1=0 xfd;keytemp=p1

57、&0 xfd; if(keytemp!=0 xfd) delay(10); / keytemp=p1&0 xff; if(keytemp!=0 xfd) keyflag=1;switch(keytemp) case 0 xf5:irdata=4;break;/按鍵 4 case 0 xed:irdata=5;break;/按鍵 5 case 0 xdd:irdata=6;break;/按鍵 6 default:break; p1=0 xfb; keytemp=p1&0 xfb; if(keytemp!=0 xfb) delay(10); /keytemp=p1&

58、0 xff; if(keytemp!=0 xfb) keyflag=1; switch(keytemp) case 0 xf3:irdata=7;break;/按鍵 7 case 0 xeb:irdata=8;break;/按鍵 8 case 0 xdb:irdata=9;break;/按鍵 9 default:break; /*注釋掉的原來掃描鍵盤程序*/*void keyscan(void) uchar keytemp; p1=0 xc7; keytemp=p1&0 xc7; if(keytemp!=0 xc7) delay(10); keytemp=p1&0 xc7; i

59、f(keytemp!=0 xc7) keyflag=1;/有按鍵標志 switch(keytemp) case 0 xce:irdata=1;break;/按鍵 1 case 0 xd6:irdata=2;break;/按鍵 2 case 0 xe6:irdata=3;break;/按鍵 3 case 0 xcd:irdata=4;break;/按鍵 4 case 0 xd5:irdata=5;break;/按鍵 5 case 0 xe5:irdata=6;break;/按鍵 6 case 0 xcb:irdata=7;break;/按鍵 7 case 0 xd3:irdata=8;break

60、;/按鍵 8 */* 發(fā)送 8 位紅外數據 */ void sendcode_8(void) uchar i; for(i=0;i8;i+) set_count=42;/發(fā)送 0.56ms 38k 紅外波(編碼中的 0.56ms 低電平)原來 28 flag=1; /發(fā)送載波count=0; tr0=1;while(countset_count);tr0=0; flag=0;/when the time is over should turn off the redline if(ircode&0 x01)/判斷紅外編碼最低位,1 寬的高電平,0 窄的高電平 set_count=120; /原來是 120 這里為什么會是這樣呢,可能是因為系統(tǒng)的晶振的關系吧,這是調

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論