基于STM32單片機(jī)的智能家居系統(tǒng)設(shè)計(jì)_第1頁(yè)
基于STM32單片機(jī)的智能家居系統(tǒng)設(shè)計(jì)_第2頁(yè)
基于STM32單片機(jī)的智能家居系統(tǒng)設(shè)計(jì)_第3頁(yè)
基于STM32單片機(jī)的智能家居系統(tǒng)設(shè)計(jì)_第4頁(yè)
基于STM32單片機(jī)的智能家居系統(tǒng)設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩34頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)專心-專注-專業(yè)精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)單片機(jī)課程設(shè)計(jì)報(bào)告基于STM32單片機(jī)的智能家居系統(tǒng)設(shè)計(jì) 姓 名:sssssssssbbbbbbbb 班 級(jí): 學(xué) 號(hào): xxxxxxxxxxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxxxxxxxxxx 指導(dǎo)老師: yyyyyyyyy 日期: 2012.05.272012.06.07 華南農(nóng)業(yè)大學(xué)工程學(xué)院摘 要目前市場(chǎng)上針對(duì)普通家庭的智能防盜、防火等產(chǎn)品很多,但基于遠(yuǎn)程報(bào)警系統(tǒng)的智能家居產(chǎn)品價(jià)格不菲。本次設(shè)計(jì)的基于STM32的智能家居報(bào)警系統(tǒng)實(shí)用性

2、非常強(qiáng),設(shè)計(jì)成本低廉,非常適合普通家庭使用,而且隨時(shí)可以升級(jí)。本產(chǎn)品采用的是以意法半導(dǎo)體公司生產(chǎn)的單片機(jī)STM32F103RBT6作為主控芯片,AT24C02作為靜態(tài)存儲(chǔ)芯片,4*4 薄膜鍵盤和紅外熱式感應(yīng)作為探測(cè)器,GSM和揚(yáng)聲器的家庭報(bào)警模塊。隨著信息技術(shù)的發(fā)展,實(shí)現(xiàn)家居的信息化、網(wǎng)絡(luò)化,是當(dāng)前智能家居系統(tǒng)發(fā)展的新趨勢(shì)。本設(shè)計(jì)將通信技術(shù)與防盜系統(tǒng)緊密結(jié)合,為一款便敏小巧,低成本,適合普通室內(nèi)報(bào)警的智能報(bào)警系統(tǒng)。本系統(tǒng)通過傳感器獲取室內(nèi)人員信息,并將信號(hào)發(fā)送到單片機(jī)微處理器。系統(tǒng)收到報(bào)警信息后通過辨認(rèn)密碼的方式確定目標(biāo)身份,并通過蜂鳴器報(bào)警的方式警示入侵者。另外,系統(tǒng)配備具手機(jī)通信功能的GS

3、M模塊,能將室內(nèi)安全狀況第一時(shí)間發(fā)送至用戶手機(jī)終端。不僅大大提高系統(tǒng)安全性及智能性,也方便用戶的使用。 經(jīng)測(cè)試,本系統(tǒng)穩(wěn)定可靠,同時(shí)具有友好的人機(jī)界面,為用戶提供安全服務(wù)的同時(shí),實(shí)現(xiàn)系統(tǒng)智能化管理。關(guān)鍵字:智能報(bào)警 存儲(chǔ)器 傳感器 GSM目 錄1 方案比較與選擇11.1 方案一:采用數(shù)字電路控制11.2 方案二:采用雙音多頻電路與語(yǔ)音電路相結(jié)合的控制方案11.3 方案三:采用以STM32單片機(jī)為核心的控制方案22 主要元器件介紹32.1 主芯片STM3232.2 顯示屏-OLCD1286442.3 外部存儲(chǔ)芯片-AT24C0253 模塊分析73.1 STM32控制模塊73.2 密碼鎖鍵盤輸入及

4、存儲(chǔ)模塊73.3人體熱釋感應(yīng)模塊73.4顯示模塊73.5報(bào)警模塊74 硬件組成部分84.1 硬件組成部分84.2 仿真分析115 電路板的制作,焊接,調(diào)試135.1電路板制作135.2電路板焊接145.3電路板調(diào)試146 討論及進(jìn)一步研究和建議157 課程設(shè)計(jì)心得16附錄17參考文獻(xiàn)341、方案的比較與選擇1.1 方案一: 由數(shù)字電路搭建的智能家居安全系統(tǒng),用以雙JK觸發(fā)器構(gòu)成的數(shù)字邏輯電路作為密碼控制系統(tǒng)的核心控制,共設(shè)了9個(gè)數(shù)字輸入鍵,還有確認(rèn)鍵和取消鍵等。如果用戶輸入密碼錯(cuò)誤,則電路將報(bào)警;若電路連續(xù)報(bào)警三次,即密碼輸入錯(cuò)誤3次,電路將鎖定鍵盤并長(zhǎng)時(shí)間報(bào)警。這樣可以防止他人潛入進(jìn)入家居住

5、宅。方案系統(tǒng)框圖如圖1所示。圖11.2 方案二:通過微處理器控制技術(shù)將雙音多頻電路與語(yǔ)音電路相結(jié)合,利用電話網(wǎng)絡(luò)技術(shù)和相關(guān)的傳感器,開發(fā)一種具有聯(lián)網(wǎng)功能的智能報(bào)警系統(tǒng)。該報(bào)警系統(tǒng)由傳感器終端、計(jì)算機(jī)控制中心、小區(qū)管理中心的接警主機(jī)及相關(guān)軟件組成。如圖2所示,主機(jī)電路由射頻接收模塊接收傳感器發(fā)來的報(bào)警信號(hào),通過解碼電路解碼后得到報(bào)警傳感器預(yù)先設(shè)定的地址碼和數(shù)據(jù)碼類型。主機(jī)和傳感器兩者設(shè)定的地址碼相同時(shí)才能被主機(jī)接收。解碼輸出信號(hào)進(jìn)入主控制器的中斷輸入端,觸發(fā)中斷處理程序。圖21.3 方案三:本方案以STM32單片機(jī)作為控制核心,通過密碼鎖進(jìn)行驗(yàn)證,使用LCD模塊進(jìn)行顯示,當(dāng)密碼輸入錯(cuò)誤次數(shù)大于三

6、次時(shí),將被視為非法入侵,語(yǔ)音報(bào)警模塊發(fā)出報(bào)警。若通過其他途徑非法侵入時(shí),該系統(tǒng)將通過熱釋人體感應(yīng)模塊啟動(dòng)報(bào)警模塊進(jìn)行報(bào)警??傮w系統(tǒng)框圖如圖3所示:液晶顯示模塊人體熱釋感應(yīng)模塊E2PROM GSM模塊STM32控制模塊揚(yáng)聲器功放語(yǔ)音芯片4x4密碼鎖鍵盤輸入模塊 圖3 方案一設(shè)計(jì)簡(jiǎn)單且操作容易,但沒有可發(fā)展空間,而且后期修改幾乎是不可能的;方案二的系統(tǒng)功能齊全,但是設(shè)計(jì)復(fù)雜,該系統(tǒng)適用于小區(qū)式管理,實(shí)現(xiàn)小區(qū)與物業(yè)管理中心的安全狀態(tài)保障,最終實(shí)現(xiàn)小區(qū)聯(lián)網(wǎng)控制,適合在小區(qū)管理用戶大規(guī)模使用;方案三雖然功能偏少,設(shè)計(jì)相對(duì)簡(jiǎn)單,而且實(shí)現(xiàn)相對(duì)容易,適合于家庭個(gè)人用戶使用,最重要的是該方案具有極大的擴(kuò)展空間,

7、設(shè)計(jì)靈活,可以自由嵌入各模塊,同時(shí)可以通過修改程序來改變功能。綜上三種方案,結(jié)合自身的設(shè)計(jì)水平,我們組選擇方案三作為我們的最終設(shè)計(jì)方案。2、主要元器件介紹2.1 主芯片STM32F103RBT6STM32F103RBT6/STM32F103是 ST 公司基于ARM最新Cortex-M3架構(gòu)內(nèi)核的32位處理器產(chǎn)品,內(nèi)置128KB的Flash、20K的RAM、12位AD、4個(gè)16位定時(shí)器和3路USART通訊口等多種資源,時(shí)鐘頻率最高可達(dá)72MHz。參數(shù)介紹如圖4:圖42.2 顯示屏-OLCD128642.2.1概述OLCD12864帶中文字庫(kù)的128X64是一種具有4位/8位并行、2線或3線串行多

8、種接口方式,內(nèi)部含有國(guó)標(biāo)一級(jí)、二級(jí)簡(jiǎn)體中文字庫(kù)的點(diǎn)陣圖形液晶顯示模塊;其顯示分辨率為12864, 內(nèi)置8192個(gè)16*16點(diǎn)漢字,和128個(gè)16*8點(diǎn)ASCII字符集.利用該模塊靈活的接口方式和簡(jiǎn)單、方便的操作指令,可構(gòu)成全中文人機(jī)交互圖形界面??梢燥@示84行1616點(diǎn)陣的漢字. 也可完成圖形顯示.低電壓低功耗是其又一顯著特點(diǎn)。由該模塊構(gòu)成的液晶顯示方案與同類型的圖形點(diǎn)陣液晶顯示模塊相比,不論硬件電路結(jié)構(gòu)或顯示程序都要簡(jiǎn)潔得多,且該模塊的價(jià)格也略低于相同點(diǎn)陣的圖形液晶模塊。2.2.2基本特性:(1)、低電源電壓(VDD:+3.0-+5.5V)(2)、顯示分辨率:12864點(diǎn) (3)、內(nèi)置漢字字

9、庫(kù),提供8192個(gè)1616點(diǎn)陣漢字(簡(jiǎn)繁體可選) (4)、內(nèi)置 128個(gè)168點(diǎn)陣字符 (5)、2MHZ時(shí)鐘頻率 (6)、顯示方式:STN、半透、正顯 (7)、驅(qū)動(dòng)方式:1/32DUTY,1/5BIAS (8)、視角方向:6點(diǎn) (9)、背光方式:側(cè)部高亮白色LED,功耗僅為普通LED的1/51/10 (10)、通訊方式:串行、并口可選 (11)、內(nèi)置DC-DC轉(zhuǎn)換電路,無需外加負(fù)壓 (12)、無需片選信號(hào),簡(jiǎn)化軟件設(shè)計(jì)(13)、工作溫度: 0 - +55 ,存儲(chǔ)溫度: -20 - +602.2.3、應(yīng)用說明欲在某一個(gè)位置顯示中文字符時(shí),應(yīng)先設(shè)定顯示字符位置,即先設(shè)定顯示地址,再寫入中文字符編碼

10、。顯示ASCII字符過程與顯示中文字符過程相同。不過在顯示連續(xù)字符時(shí),只須設(shè)定一次顯示地址,由模塊自動(dòng)對(duì)地址加1指向下一個(gè)字符位置,否則,顯示的字符中將會(huì)有一個(gè)空ASCII字符位置。當(dāng)字符編碼為2字節(jié)時(shí),應(yīng)先寫入高位字節(jié),再寫入低位字節(jié)。模塊在接收指令前,向處理器必須先確認(rèn)模塊內(nèi)部處于非忙狀態(tài),即讀取BF標(biāo)志時(shí)BF需為“0”,方可接受新的指令。如果在送出一個(gè)指令前不檢查BF標(biāo)志,則在前一個(gè)指令和這個(gè)指令中間必須延遲一段較長(zhǎng)的時(shí)間,即等待前一個(gè)指令確定執(zhí)行完成。指令執(zhí)行的時(shí)間請(qǐng)參考指令表中的指令執(zhí)行時(shí)間說明。“RE”為基本指令集與擴(kuò)充指令集的選擇控制位。當(dāng)變更“RE”后,以后的指令集將維持在最后

11、的狀態(tài),除非再次變更“RE”位,否則使用相同指令集時(shí),無需每次均重設(shè)“RE”位。2.3 外部存儲(chǔ)芯片-AT24C02EEPROM (Electrically Erasable Programmable Read-Only Memory),電可擦可編程只讀存儲(chǔ)器,是一種掉電后數(shù)據(jù)不丟失的存儲(chǔ)芯片。 EEPROM 可以在電腦上或?qū)S迷O(shè)備上擦除已有信息,重新編程。一般用在即插即用。它是可用戶更改的只讀存儲(chǔ)器(ROM),其可通過高于普通電壓的作用來擦除和重編程(重寫)。不像EPROM芯片,EEPROM不需從計(jì)算機(jī)中取出即可修改。AT24CXX是美國(guó)ATMEL公司的低功耗CMOS串行EEPROM,典型的

12、型號(hào)有AT24C01A/02/04/08/16等5種,它們的存儲(chǔ)容量分別是1024/2048/4096/8192/16384位;也就是128/256/512/1024/2048字節(jié);使用電壓級(jí)別有5V,2.7V,2.5V,1.8V。AT24C02是一個(gè)CMOS標(biāo)準(zhǔn)的EEPROM存儲(chǔ)器,是AT24CXX系列(AT24C01/02/04/08/16)成員之一,這些EEPROM存儲(chǔ)器的特點(diǎn)是功耗小、成本低、電源范圍寬,靜態(tài)電源電流約30uA110uA,具有標(biāo)準(zhǔn)的I2C總線接口,是應(yīng)用廣泛的小容量存儲(chǔ)器之一。圖5 圖5是AT24C02的引腳圖,這個(gè)芯片是一個(gè)8腳芯片,內(nèi)部存儲(chǔ)器有256字節(jié)。引腳功能介

13、紹如下:A0(引腳1):器件地址的A0位,是器件地址的最低位,器件地址排列是A6 A5 A4 A3 A2 A1 A0 R/W。A1(引腳2):器件地址的A1位。A2(引腳3):器件地址的A2位。GND(引腳4):地線。SDA(引腳5):數(shù)據(jù)總線引腳。SCL(引腳6):時(shí)鐘總線引腳。TEST(引腳7):測(cè)試引腳,Vcc(引腳8):電源線引腳。3、模塊分析本系統(tǒng)的硬件部分主要由單片機(jī)STM32F103RBT6、晶振電路、報(bào)警電路、44矩陣鍵盤和OLCD12864顯示電路和人體熱釋感應(yīng)模塊組成;其中報(bào)警電路使用揚(yáng)聲器進(jìn)行聲音報(bào)警??偟膩碚f,智能家居系統(tǒng)主要由微處理器模塊(MCU)、模塊、人體紅外檢測(cè)

14、報(bào)警模塊、鍵盤模塊、顯示模塊構(gòu)成。3.1 STM32控制模塊微處理器模塊,也就是由STM32F103RBT6單片機(jī)構(gòu)成,因?yàn)楸鞠到y(tǒng)要實(shí)現(xiàn)密碼檢測(cè)、密碼設(shè)定、聲光提醒等功能,要求微處理器必須提供足夠的I/O口,而且由于系統(tǒng)體積限制,所以選用STM32F103RBT6單片機(jī)。3.2 4x4密碼鎖鍵盤輸入及存儲(chǔ)模塊本設(shè)計(jì)采用的是矩陣式按鍵鍵盤,它由行線和列線組成,也稱行列式鍵盤,按鍵位于行列的交叉點(diǎn)上,密碼鎖的密碼由鍵盤輸入完成,與獨(dú)立式按鍵鍵盤相比,要節(jié)省很多I/O口。本設(shè)計(jì)中使用的這個(gè)4*4鍵盤不但能完成密碼的輸入還能作特別功能鍵使用,比如修改密碼后退功能等。鍵盤的每個(gè)按鍵功能可以在程序設(shè)計(jì)中設(shè)

15、置。存儲(chǔ)模塊不僅可以存儲(chǔ)及修改用戶的6位密碼,還可以動(dòng)態(tài)地存儲(chǔ)修改用戶的手機(jī)號(hào)碼,手機(jī)號(hào)碼的最大容量為7個(gè),方便用戶更換手機(jī)后不影響GSM模塊的報(bào)警功能的使用。3.3人體熱釋感應(yīng)模塊當(dāng)檢測(cè)到非法入侵的人體時(shí),啟動(dòng)報(bào)警模塊報(bào)警。3.4顯示模塊考慮到友好的人機(jī)界面,采用OLCD12864液晶顯示。顯示模塊的作用主要是顯示當(dāng)前家居安全情況、提示信息和輸入的密碼,以方便用戶使用。3.5報(bào)警模塊報(bào)警模塊主要有兩大部分組成。第一部分是由語(yǔ)音芯片、功放、揚(yáng)聲器組成的聲音報(bào)警電路,當(dāng)密碼輸入錯(cuò)誤次數(shù)大于三次,或者有非法侵入等行為,系統(tǒng)會(huì)用揚(yáng)聲器實(shí)現(xiàn)聲音報(bào)警;第二部分主要是由GSM模塊構(gòu)成的短信通知電路,當(dāng)遇到

16、前面所述的情況時(shí),GSM模塊會(huì)向主人手機(jī)發(fā)送短信提醒有非法入侵。4、硬件組成部分及仿真分析4.1 硬件組成部分:4.1.1 STM32單片機(jī)控制模塊:圖64.1.2 存儲(chǔ)芯片AT24C02模塊電路圖:圖74.1.3 4x4密碼鎖鍵盤輸入模塊:圖84.1.4 GSM模塊:圖94.1.5 SW調(diào)試接口:圖104.1.6 報(bào)警模塊:圖114.1.7 電源模塊:圖1241.8 人體熱釋感應(yīng)模塊:圖134.1.9 顯示模塊:圖144.2 仿真分析由于電路的其它部分功能相對(duì)簡(jiǎn)單,所以在硬件上直接可以實(shí)現(xiàn),并未對(duì)它們進(jìn)行仿真,這里只對(duì)GSM模塊進(jìn)行仿真調(diào)試,分析結(jié)果如下:通過RS-232將GSM模塊和主控制

17、板連接起來。這樣要注意要將RXD-RXD,TXD-TXD連接起來,不要憑經(jīng)驗(yàn)交叉連接。這里我采用串口調(diào)試助手,通過RS-232與電腦連接來調(diào)試。把串口波特率設(shè)置為9600,效驗(yàn)為設(shè)置為NONE,數(shù)據(jù)位8位,停止位1位。圖15模塊有兩種發(fā)送方式:TEXT模式和PDU模式。PDU模式可以用Unicode編碼發(fā)送英文、漢字。采用PDU模式比較復(fù)雜,TEXT模式雖然只能發(fā)送英文,但其無需編碼,發(fā)送簡(jiǎn)單,所以我在測(cè)試時(shí)采用TEXT模式。TEXT 發(fā)送模式:(相對(duì)簡(jiǎn)單很多。)發(fā)送:AT返回:ATOK發(fā)送:AT+CMGF=1返回:AT+CMGF=1OK發(fā)送:AT+CSCA=+00返回:AT+CSCA=+00

18、OK發(fā)送:AT+CMGS=返回:AT+CMGS=發(fā)送:XXXXXX(0-9,A-Z)XXXXX 是指阿拉伯?dāng)?shù)字0-9,英文26 個(gè)字母A-Z返回:XXXXXX(0-9,A-Z)XXXXX 是指阿拉伯?dāng)?shù)字0-9,英文26 個(gè)字母A-Z發(fā)送:1A(十六進(jìn)制發(fā)送)返回:+CMGS: XXXOK以上為 TEXT 方式發(fā)送截圖:如果不能正常發(fā)送,返回ERROR,則說明需要格式化??梢园l(fā)送AT&F 命令格式化。發(fā)送:AT&F返回:AT&F5、電路板的制作,焊接,調(diào)試5.1電路板制作在制作電路板之前,先畫好PCB電路圖。注意點(diǎn)有三個(gè):、元件的封裝。注意焊盤的大小和焊盤之間的距離。、注意線寬大小,本設(shè)計(jì)把線寬

19、調(diào)至0.8mm。、布局和布線。注意盡量少飛線和單層PCB板布線。電路板制作有以下5步:(1)打印電路圖:先設(shè)置相關(guān)的參數(shù),后在油性紙面上進(jìn)行PCB電路圖的打印,將圖紙打印好之后后,注意不要刮落到碳粉。(2)過塑:把打印的PCB圖緊緊貼到電路板上,并且用膠紙來黏好。之后把電路板放到過塑機(jī)上進(jìn)行過塑,約2040次。若印得不太理想,但是基本脈絡(luò)都在,則可以使用油性筆進(jìn)行線路修補(bǔ)。(3)腐蝕:把過塑好的電路板放到鹽酸與雙氧水的混合物上面進(jìn)行腐蝕。腐蝕過后,電路板要用清水清洗。(4)用洗板水把碳粉清理干凈,此時(shí)可以看到清晰的銅線線路。(5)對(duì)焊盤中間進(jìn)行鉆孔,鉆孔之后就是最終完成的電路板。圖16 PCB

20、圖5.2電路板焊接電路板制作好后,便可以進(jìn)行焊接了。焊接時(shí)要注意下問題:(1)檢查一下電路板銅線是否存在隔斷,若存在,則進(jìn)行焊錫把隔斷的銅線線路進(jìn)行相連。(2)對(duì)照原理圖以及PCB圖來進(jìn)行焊接。(3)注意排阻和電容的極性,插座的方向等問題。(4)焊錫時(shí)注意某些相近的管腳是否相連導(dǎo)致短路。5.3電路板調(diào)試在電路板調(diào)試的過程中,我們是分模塊進(jìn)行調(diào)試,同時(shí)軟件和硬件相結(jié)合,最開始的是檢查L(zhǎng)CD模塊的實(shí)現(xiàn),在接上各元器件之后,整個(gè)電路表面運(yùn)行良好,屏幕也無法顯示。我們?cè)俅螜z查電路,最開始以為是焊接出現(xiàn)問題,便再進(jìn)行一次電路的檢查,同時(shí)調(diào)節(jié)液晶顯示的對(duì)比度,以希望得到最好的我亮度顯示。最終經(jīng)反復(fù)檢查,發(fā)

21、現(xiàn)時(shí)液晶接口的第三口的滑動(dòng)變阻器的封裝問題導(dǎo)致該滑動(dòng)變阻器無法正常工作,經(jīng)過討論我們將其進(jìn)行跳線連接。然后進(jìn)行蜂鳴器報(bào)警功能的檢查,通過改變限流電阻的大小并燒寫合適程序,我們是蜂鳴器達(dá)到預(yù)想期的效果。第三就是進(jìn)行人體紅外感應(yīng)模塊的調(diào)試,該電路和程序較為簡(jiǎn)單,較為容易實(shí)現(xiàn)。第四總系統(tǒng)的調(diào)試,經(jīng)過前一輪的奮戰(zhàn),我們將所有模塊按設(shè)想結(jié)合起來,修改程序并經(jīng)過多次測(cè)試終于實(shí)現(xiàn)了預(yù)定功能。6、討論及進(jìn)一步研究和建議本設(shè)計(jì)的功能主要包括,手動(dòng)修改和清除密碼,手動(dòng)輸入、修改和刪除手機(jī)號(hào)碼(最大容量為7個(gè)),輸入密碼錯(cuò)誤3次報(bào)警,人體紅外檢測(cè)入侵及入侵報(bào)警,密碼斷電保護(hù),GSM短信報(bào)警,手動(dòng)復(fù)位。應(yīng)該特別提到的

22、是密碼斷電保護(hù),由于修改密碼后,如果沒有斷電保護(hù)裝置的話,在下一次啟動(dòng)電路的時(shí)候,上一次的密碼是不會(huì)保存的,這對(duì)密碼的安全性有很大的威脅;在此次設(shè)計(jì)中,我們是通過AT24C02芯片可實(shí)現(xiàn)密碼和手機(jī)號(hào)碼的存儲(chǔ),進(jìn)行掉電保護(hù)。同時(shí)GSM短信報(bào)警可以實(shí)現(xiàn)遠(yuǎn)距離監(jiān)控。7、課程設(shè)計(jì)心得我們主要是運(yùn)用單片機(jī)設(shè)計(jì)了一個(gè)報(bào)警系統(tǒng),并且用模塊化的設(shè)計(jì)方法來實(shí)現(xiàn)這個(gè)電路。在程序編寫結(jié)束后,我們還對(duì)該程序進(jìn)行了調(diào)試, 能按預(yù)期的效果進(jìn)行模擬,基本完成課程設(shè)計(jì)的要求。通過這次單片機(jī)課程設(shè)計(jì),我們收獲了很多:首先是對(duì)單片機(jī)的整個(gè)認(rèn)識(shí)和把握,這個(gè)過程包括選題,利用c語(yǔ)言設(shè)計(jì)程序,選元器件,畫電路原理圖和PCB電路圖,制板

23、,到最后利用自制的板進(jìn)行下載調(diào)試和檢驗(yàn),整個(gè)過程哪怕有一個(gè)細(xì)節(jié)錯(cuò)了,整個(gè)設(shè)計(jì)也就失敗。我們一開始編好程序后,出現(xiàn)一些小錯(cuò)誤導(dǎo)致無法完成編譯。在解決程序設(shè)計(jì)問題之后,我們開始畫電路原理圖和PCB電路圖,特別是在畫PCB的時(shí)候,元器件的放置,布線出現(xiàn)很多問題。通過查閱相關(guān)資料,完成PCB之后我們又在制板的過程中遇到很多問題,如PCB線寬設(shè)置、焊盤直徑設(shè)置等等,因?yàn)檫@些小問題會(huì)影響制板后電路板的制作效果,甚至?xí)绊懺骷暮附?。在焊接完程序片機(jī)后用單開發(fā)板進(jìn)行下載調(diào)試和檢驗(yàn),最后才完成了這個(gè)課程設(shè)計(jì)。因?yàn)橐婚_始沒有經(jīng)驗(yàn),所以在整個(gè)過程中遇到了很多錯(cuò)誤和麻煩,然而我們對(duì)一些錯(cuò)誤卻不能一步到位的判斷出來

24、,這就告訴我們?cè)O(shè)計(jì)一個(gè)實(shí)驗(yàn)或者做一件事情時(shí),首先有一個(gè)大局意識(shí),而且能夠預(yù)見出現(xiàn)的問題和能夠快速作出對(duì)這些問題或錯(cuò)誤的反應(yīng)與處理。同時(shí)通過這個(gè)實(shí)驗(yàn),我們也深刻的發(fā)現(xiàn)理論與實(shí)際的區(qū)別,特別是電路的仿真與實(shí)際電路的運(yùn)行有著很大的差別,往往能夠在電腦進(jìn)行成功仿真的電路在實(shí)際電路上卻相差甚遠(yuǎn)。其次是通過寫實(shí)驗(yàn)報(bào)告,我們也學(xué)到了一些東西,例如我們把我們的實(shí)驗(yàn)過程和成果弄出來了,如何把它們展示給其他人看,這就是規(guī)則的問題,雖然我們寫的時(shí)候有時(shí)候會(huì)很麻煩,但是這也是方便大家交流的一種好方法。最后,通過這次設(shè)計(jì)實(shí)驗(yàn),我們發(fā)現(xiàn)了編程軟件有時(shí)候并不很好的放映實(shí)踐情況,因此我們應(yīng)該設(shè)計(jì)一個(gè)更好的軟件來仿真,一個(gè)好的

25、仿真軟件可以減少對(duì)試驗(yàn)箱的依賴而且更方便仿真調(diào)試與程序的修改??傊?,這次實(shí)驗(yàn)不僅僅加強(qiáng)了我們的動(dòng)手編程能力,也大大加強(qiáng)了我們團(tuán)隊(duì)合作以及設(shè)計(jì)的能力,使我們?cè)诶碚搶W(xué)習(xí)和編程練習(xí)方面都獲得了較大的收獲。附錄#include stdint.h#include string.h#include stm32f10 x.h#include CoOS.h #include app.h/用戶任務(wù)函數(shù)#include BSP.h/與開發(fā)板相關(guān)的函數(shù)#include LED.h#include key_4x4.h#include vir_key.h#include vir_intrude_check.h#incl

26、ude vir_warning.h#include vir_ext_memory.h#include vir_gui.h#include vir_gsm.h#define MEM_BK20_NUM 10 #define MEM_BK20_SIZE 200 #define NULL 0#define PHONE_IADD 8#define PHONE_NADD 8#define PHONE_MAX 7#define PHONE_NMLEN 16OS_STK StartUp_StkSTARTUP_STK_SIZE; /定義棧OS_STK LED0_StkLED0_STK_SIZE; /定義棧OS_

27、STK MainApp_StkMainApp_STK_SIZE; /定義棧OS_STK Alarm_StkAlarm_STK_SIZE; /定義棧uint8_t FlagFirstInter = 1;typedef enum app_state ST_PREVENT_DIS,ST_PREVENT_EN APP_STATE;APP_STATE ST_Current = ST_PREVENT_DIS;OS_MMID MemBk20_ID; unsigned int MemBk20MEM_BK20_SIZE/4; uint8_t Alarm_Flag = 0;uint8_t Alarm_EN = 0

28、;APP_STATE StPreventDis(void);APP_STATE StPreventEn(void);APP_STATE SetPassWord(void);uint8_t CheckPassWord(void);uint8_t SetIPhone(void);void Phone_Init(void);void Task_StartUp(void *pdata) (void)pdata; BSP_Init(); GUI_Init(); VirKey_Init(); VirIntrudeCheck_Init(); VirWarning_Init(); VirExtMemory_I

29、nit();/ GUI_P8x16Str(0, 0,JJJJ); VirGsmInit(); MemBk20_ID = CoCreateMemPartition(U8*)MemBk20,20, MEM_BK20_NUM); CoCreateTask(Task_LED0, (void *)0, LED0_PRIO, &LED0_StkLED0_STK_SIZE-1, LED0_STK_SIZE); CoCreateTask(Task_Alarm, (void *)0, Alarm_PRIO, &Alarm_StkAlarm_STK_SIZE-1, Alarm_STK_SIZE); CoCreat

30、eTask(Task_MainApp, (void *)0, MainApp_PRIO, &MainApp_StkMainApp_STK_SIZE-1, MainApp_STK_SIZE); CoExitTask();void Task_LED0(void *pdata) while(1) LED_REG_ON; CoTickDelay(500); LED_REG_OFF; CoTickDelay(500); void Task_Alarm(void *pdata) uint8_t i; uint8_t tab_buf8; char phone13=0; uint8_t phone_time

31、= 0; while(1) if(Alarm_EN = 1) if(VirIntrudeCheck()=1) CoTickDelay(20); if(VirIntrudeCheck()=1) Alarm_Flag = 1; if(Alarm_Flag = 1) Alarm_Flag = 0; VirWarningEnable(); if(phone_time % 10 = 0) VirExtMemoryRead(PHONE_IADD,tab_buf,8); for(i=1;i=tab_buf0;i+) VirExtMemoryRead(tab_bufi+2,phone,11); GUI_P8x

32、16Str(32,6,phone); GUI_DrawNum16x8_uint16_t(0,6,phone11,2); VirGsmSendChinaMsg(phone,534E519C75354FE163DF60FF1A7CFB7EDF68C06D4BE0D660E52ABA4FF0C8BF78B6660D53002);/);91775B664E4B5BB6華農(nóng)電信提醒你:有不速之客! GUI_P8x16Str(0,6, ); CoTimeDelay(0,0,30,0); VirWarningDisable(); phone_time+; CoTickDelay(80); void Task

33、_MainApp(void *pdata)/ VirExtMemoryWrite(0,6);/ Phone_Init(); while(1) switch(ST_Current) case ST_PREVENT_DIS: ST_Current = StPreventDis(); break; case ST_PREVENT_EN: ST_Current = StPreventEn(); break; default: ST_Current = ST_PREVENT_EN; break; CoTickDelay(50); APP_STATE StPreventDis(void) char key

34、_val; uint8_t res; if(FlagFirstInter = 1) Alarm_EN = 0; FlagFirstInter = 0; GUI_CLS(); GUI_DrawHz16x16(16,2,HzBaoDiao,6); GUI_DrawHz16x16(0,4,HzDiaoYu,8); key_val = VirKeyValGet(2000); if(key_val != #) return ST_PREVENT_DIS; GUI_CLS(); GUI_DrawHz16x16(24,0,HzZaYang,5); GUI_DrawHz16x16(8,2,HzFanDao,3

35、); GUI_DrawHz16x16(8,4,HzGaiMiMa,5); GUI_DrawHz16x16(8,6,HzSheZhiSJ,5); while(1) key_val = VirKeyValGet(20000); if(key_val = KEY_NULL) FlagFirstInter = 1; return ST_PREVENT_DIS; switch(key_val) case A: FlagFirstInter = 1; return ST_PREVENT_EN; /break; case B: GUI_CLS(); GUI_DrawHz16x16(24,2,HzShuJiu

36、MiMa,5); CoTimeDelay(0,0,1,0); res = CheckPassWord(); if(res = 1) SetPassWord(); FlagFirstInter = 1; return ST_PREVENT_DIS; /break; case C: res = CheckPassWord(); if(res = 1) SetIPhone(); FlagFirstInter = 1; return ST_PREVENT_DIS; /break; case *: FlagFirstInter = 1; return ST_PREVENT_DIS; /break; de

37、fault: /continue; break; APP_STATE StPreventEn(void) char key_val; uint8_t res; if(FlagFirstInter = 1) Alarm_EN = 1; FlagFirstInter = 0; GUI_CLS(); GUI_DrawHz16x16(16,2,HzYouGou,10); key_val = VirKeyValGet(2000); if(key_val != #) return ST_PREVENT_EN; res = CheckPassWord(); if(res = 0) FlagFirstInte

38、r = 1; return ST_PREVENT_EN; else if(res = 1) FlagFirstInter = 1; return ST_PREVENT_DIS; return ST_PREVENT_EN;uint8_t CheckPassWord(void) uint8_t i; char key_val; char * ppw_buf1; char * ppw_buf2; char * ppw_buf3; uint8_t in_times = 1; int cmp_res; while(ppw_buf1 = NULL) ppw_buf1 = (char *)CoGetMemo

39、ryBuffer(MemBk20_ID); CoTickDelay(50); while(ppw_buf2 = NULL) ppw_buf2 = (char *)CoGetMemoryBuffer(MemBk20_ID); CoTickDelay(50); while(ppw_buf3 = NULL) ppw_buf3 = (char *)CoGetMemoryBuffer(MemBk20_ID); CoTickDelay(50); for(i=0;i= 0 & key_val = 9 & i 0) i-; ppw_buf1i = 0; ppw_buf3i = 0; else if(key_v

40、al = #) cmp_res = strncmp(ppw_buf1, ppw_buf2, 6); if(cmp_res = 0) CoFreeMemoryBuffer(MemBk20_ID, (void* )ppw_buf1); CoFreeMemoryBuffer(MemBk20_ID, (void* )ppw_buf2); CoFreeMemoryBuffer(MemBk20_ID, (void* )ppw_buf3); return 1; else switch(in_times) case 1: GUI_CLS(); GUI_DrawHz16x16(16,0,HzPWRong1,21

41、); CoTimeDelay(0,0,2,0); break; case 2: GUI_CLS(); GUI_DrawHz16x16(16,0,HzPWRong2,17); CoTimeDelay(0,0,2,0); break; case 3: Alarm_Flag = 1; GUI_CLS(); GUI_DrawHz16x16(24,2,HzPWRong3,6); CoTimeDelay(0,0,10,0); CoFreeMemoryBuffer(MemBk20_ID, (void* )ppw_buf1); CoFreeMemoryBuffer(MemBk20_ID, (void* )pp

42、w_buf2); CoFreeMemoryBuffer(MemBk20_ID, (void* )ppw_buf3); return 0; /break; default: break; in_times+; for(i=0;i7;i+) ppw_buf1i = 0; ppw_buf3i = 0; i = 0; else if( (key_val = KEY_NULL) | (key_val = *) CoFreeMemoryBuffer(MemBk20_ID, (void* )ppw_buf1); CoFreeMemoryBuffer(MemBk20_ID, (void* )ppw_buf2)

43、; CoFreeMemoryBuffer(MemBk20_ID, (void* )ppw_buf3); return 0; else continue; uint8_t SetPassWord(void) uint8_t i; char key_val; char * ppw_buf1; char * ppw_buf2; char * ppw_buf3; uint8_t in_times = 1; int cmp_res; while(ppw_buf1 = NULL) ppw_buf1 = (char *)CoGetMemoryBuffer(MemBk20_ID); CoTickDelay(5

44、0); while(ppw_buf2 = NULL) ppw_buf2 = (char *)CoGetMemoryBuffer(MemBk20_ID); CoTickDelay(50); while(ppw_buf3 = NULL) ppw_buf3 = (char *)CoGetMemoryBuffer(MemBk20_ID); CoTickDelay(50); for(i=0;i= 0 & key_val = 9 & i 0) i-; if(in_times = 1) ppw_buf1i = 0; else if(in_times = 2) ppw_buf2i = 0; ppw_buf3i

45、 = 0; else if(key_val = #) if(i = 6) if(in_times = 1) in_times = 2; for(i=0;i7;i+) ppw_buf3i = 0; i = 0; else if(in_times = 2) cmp_res = strncmp(ppw_buf1, ppw_buf2, 6); if(cmp_res = 0) VirExtMemoryWrite(0,ppw_buf2,6); GUI_CLS(); GUI_DrawHz16x16(16,2,HzCrPWSucs,7); CoTimeDelay(0,0,2,0); CoFreeMemoryB

46、uffer(MemBk20_ID, (void* )ppw_buf1); CoFreeMemoryBuffer(MemBk20_ID, (void* )ppw_buf2); CoFreeMemoryBuffer(MemBk20_ID, (void* )ppw_buf3); return 1; else in_times = 1; for(i=0;i7;i+) ppw_buf1i = 0; ppw_buf2i = 0; ppw_buf3i = 0; i = 0; GUI_CLS(); GUI_DrawHz16x16(32,2,HzRInPassWord,4); CoTimeDelay(0,0,2

47、,0); else if( (key_val = KEY_NULL) | (key_val = *) CoFreeMemoryBuffer(MemBk20_ID, (void* )ppw_buf1); CoFreeMemoryBuffer(MemBk20_ID, (void* )ppw_buf2); CoFreeMemoryBuffer(MemBk20_ID, (void* )ppw_buf3); return 0; else continue; char PBuf114;char PBuf214;char PBuf314;uint8_t SetIPhone(void) uint8_t i,i

48、ndex = 1; uint8_t focus = 0; uint8_t cmp_res; char key_val;/ char p_buf114;/ char p_buf214;/ char p_buf314; char p_index8;/ char * p_buf1;/ char * p_buf2;/ char * p_buf3;/ char * p_index;/ while(p_buf1 = NULL)/ / p_buf1 = (char *)CoGetMemoryBuffer(MemBk20_ID); / CoTickDelay(50);/ / while(p_buf2 = NU

49、LL)/ / p_buf2 = (char *)CoGetMemoryBuffer(MemBk20_ID); / CoTickDelay(50);/ / while(p_buf3 = NULL)/ / p_buf3 = (char *)CoGetMemoryBuffer(MemBk20_ID); / CoTickDelay(50);/ / while(p_index = NULL)/ / p_index = (char *)CoGetMemoryBuffer(MemBk20_ID); / CoTickDelay(50);/ for(i=0;i= 1 & key_val 1) index-; continu

溫馨提示

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

評(píng)論

0/150

提交評(píng)論