




已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
滁州學(xué)院本科畢業(yè)論文本 科 畢 業(yè) 設(shè) 計(或論 文)論文題目 具有自動躲藏功能的鬧鐘小車 的設(shè)計與實現(xiàn) 作者姓名 X X 所學(xué)專業(yè)名稱 計算機(jī)科學(xué)與技術(shù) 指導(dǎo)教師 XXX 2017年5月14日學(xué) 生: (簽字)學(xué) 號: 2013211463答 辯 日 期: 2017年 5 月 14 日指 導(dǎo) 教 師: (簽字)目 錄摘要11 概述22 設(shè)計方案論證22.1 功能要求22.2 方案確定22.2.1 單片機(jī)的選擇方案和論證22.2.2 時鐘芯片的選擇方案和論證32.2.3 電路部分最終方案確定33 主控制器和外圍器件33.1 AT89S52單片機(jī)33.2 DS1302芯片介紹43.2.1 DS1302的性能特新43.2.2 DS1302工作原理43.3 LCD1602液晶顯示屏介紹53.3.1 LCD1602的工作原理53.3.2 LCD1602的管腳功能53.4 E18-D80NK紅外傳感器介紹63.4.1 E18-D80NK光電傳感器工作原理64 硬件電路設(shè)計64.1 總體思路設(shè)計64.1.1 紅外避障電路74.1.2 液晶屏顯示電路74.1.3 復(fù)位電路74.1.4 晶振電路84.1.5 有源蜂鳴器電路84.1.6 供電電源電路94.1.7 電機(jī)驅(qū)動電路95 軟件的程序?qū)崿F(xiàn)105.1 開發(fā)軟件的介紹105.2 程序部分模塊設(shè)計115.2.1 主函數(shù)設(shè)計115.2.2 LCD1602初始化程序設(shè)計125.2.3 紅避障程序與電機(jī)驅(qū)動的實現(xiàn)135.2.4 實時時間、定時時間顯示設(shè)計155.2.5 延時函數(shù)和蜂鳴器設(shè)定函數(shù)176 系統(tǒng)調(diào)試和功能測試176.1 系統(tǒng)調(diào)試176.1.1 軟件調(diào)試176.1.2 硬件調(diào)試186.2 功能測試18結(jié)束語21參考文獻(xiàn)21附錄22致謝28 摘要本設(shè)計的主要功能是為了設(shè)計一款具有自動躲藏功能的鬧鈴小車系統(tǒng)的自動躲藏功能,即在鬧鐘工作前能自動移動到在某個位置躲藏起來,實現(xiàn)鬧鐘的實際作用。該系統(tǒng)設(shè)計包括硬件系統(tǒng)和軟件系統(tǒng)兩個部分。硬件部分采用AT89S52處理器為處理芯片,其他部分包括DS1302實時時鐘芯片、LCD液晶顯示屏和調(diào)時按鍵電路等成。軟件部分采用keil系列軟件為開發(fā)環(huán)境,采用C語言進(jìn)行編程實現(xiàn),首先將電路模塊化,模塊包括時鐘程序模塊、鍵盤程序模塊、液晶顯示程序模塊以及紅外避檢測模塊等。每個模塊間相互作用,在LCD1602上顯示當(dāng)前時間以及定時時間,實現(xiàn)鬧鐘的完整功能。關(guān)鍵字:紅外傳感器;鬧鐘;AT89S52;DS1302;LCD1 概述在日新月異的21世紀(jì)里,家用電子產(chǎn)品得到了迅速發(fā)展。許多家電設(shè)備都趨于人性化、智能化,這些電器設(shè)備大部分都含有CPU控制器或者是單片機(jī)。單片機(jī)以其高可靠性、高性價比、低電壓、低功耗等一系列優(yōu)點,近幾年得到迅猛發(fā)展和大范圍推廣,廣泛應(yīng)用于工業(yè)控制系統(tǒng)、通訊設(shè)備、日常消費類產(chǎn)品和玩具等。并且已經(jīng)深入到工業(yè)生產(chǎn)的各個環(huán)節(jié)以及人民生活的各個方面,如車間流水線控制、自動化系統(tǒng)、智能型家用電器(冰箱、空調(diào)、彩電)等1。用單片機(jī)來控制的小型家電產(chǎn)品具有便攜實用,操作簡單的特點。鬧鐘,自從它發(fā)明的那天起,就成為人類的朋友。但傳統(tǒng)的鬧鈴,用戶在完成定時之后,一般放置在一個固定的位置,當(dāng)定時時間到達(dá)時,很容易被使用者關(guān)閉,而起不到實際鬧鈴的作用,從而產(chǎn)生種種不便。因此需要設(shè)計具備躲藏功能的鬧鐘,具備躲藏功能的鬧鐘小車能在鬧鈴工作前自動行走,并在相應(yīng)位置躲藏起來,然后再等鬧鈴運行響起,迫使使用者起床關(guān)閉鬧鈴,從而起到鬧鈴功能。本設(shè)計的主要功能是為了實現(xiàn)鬧鐘的自動躲藏功能,即在鬧鐘工作前能自動移動到在某個位置,實現(xiàn)鬧鐘的實際作用。系統(tǒng)由硬件部分和軟件部分組成,硬件主要由AT89S52芯片、DS1302實時時鐘芯片、LCD1602液晶顯示屏和調(diào)時按鍵電路等組成,軟件主要由時鐘程序模塊、鍵盤程序模塊、液晶顯示程序模塊以及紅外避檢測模塊等組成,最后整合所有模塊,使其實現(xiàn)本設(shè)計的完整功能。2 設(shè)計方案論證2.1 功能要求本設(shè)計首先要實現(xiàn)一般鬧鐘的功能2,即實時時間的顯示和手動校正、定時時間的設(shè)定和顯示與定時蜂鳴;還需要實現(xiàn)鬧鐘的自動躲藏功能,即在鬧鈴工作前能自動避障行進(jìn)。根據(jù)上述功能分析,系統(tǒng)的功能要求具體包括以下四點: (1)鬧鐘到點能準(zhǔn)時響起(2)鬧鐘設(shè)定完成后紅外避障能夠完成5次避障,避障距離為20cm(3)能顯示年、月、日、時、分、秒、星期、定時時間(4)能對時間和定時時間進(jìn)行手動修正2.2 方案確定2.2.1 單片機(jī)的選擇方案和論證單片機(jī)的發(fā)展主要經(jīng)歷了SCM、MCU、SoC三大階段3。早期的SCM單片機(jī)都是8位或4位的。其中最成功的是Intel的8051,8051芯片是同步式的順序邏輯系統(tǒng),整個系統(tǒng)的工作完全依賴系統(tǒng)內(nèi)部的時鐘信號,而芯片內(nèi)部并沒有石英晶體諧振器。中期的SCM階段代表芯片是MCS48系列單片機(jī),該系列單片機(jī)各部分是通過內(nèi)部的總線有機(jī)地連接起來的,片內(nèi)帶有4KB的程序存儲器。當(dāng)前的SoC是嵌入式系統(tǒng)式的獨立發(fā)展之路,代表芯片有51系列8位高檔位單片機(jī),相比48系列單片機(jī),51系列在片內(nèi)RAM容量,I/O口功能,系統(tǒng)擴(kuò)展方面都有很大的提高。在51系列中可選方案有89C51芯片和更高機(jī)種的89S52芯片。所以備選方案有如下兩種:方案一: 采用89C51芯片作為硬件核心,采用Flash ROM,內(nèi)部具有4KB ROM存儲空間,能于3V的超低壓工作,而且與MCS-51系列單片機(jī)完全兼容,但是運用于電路設(shè)計中時由于不具備ISP在線編程技術(shù), 當(dāng)在對電路進(jìn)行調(diào)試時,由于程序的錯誤修改或?qū)Τ绦虻男略龉δ苄枰獰氤绦驎r,對芯片的多次插拔會對芯片造成一定的損壞。 方案二: 采用AT89S52,片內(nèi)ROM全都采用Flash ROM;能以3V的超底壓工作;同時也與MCS-51系列單片機(jī)完全該芯片內(nèi)部存儲器為8KB ROM 存儲空間,同樣具有89C51的功能,且具有在線編程可擦除技術(shù),當(dāng)在對電路進(jìn)行調(diào)試時,由于程序的錯誤修改或?qū)Τ绦虻男略龉δ苄枰獰氤绦驎r,不需要對芯片多次拔插,所以不會對芯片造成損壞。根據(jù)以上對89C51芯片和89S52芯片的性能分析,結(jié)合所要設(shè)計的系統(tǒng)需求,本設(shè)計擬采用AT89S52作為主控制芯片。2.2.2 時鐘芯片的選擇方案和論證方案一: 直接采用單片機(jī)定時計數(shù)器提供秒信號,使用程序?qū)崿F(xiàn)年、月、日、星期、時、分、秒計數(shù)。采用此種方案雖然減少芯片的使用,節(jié)約成本,但是,實現(xiàn)的時間誤差較大。所以不采用此方案。 方案二: 采用DS1302時鐘芯片實現(xiàn)時鐘,DS1302芯片是一種高性能的時鐘芯片,可自動對秒、分、時、日、周、月、年以及閏年補(bǔ)償?shù)哪赀M(jìn)行計數(shù),而且精度高,位的RAM作為數(shù)據(jù)暫存區(qū),工作電壓2.5V5.5V范圍內(nèi),2.5V時耗電小于300nA。根據(jù)以上對兩種定時方案的優(yōu)缺點分析,本設(shè)計擬采用DS1302作為時鐘芯片。2.2.3 電路部分最終方案確定綜上各方案所述,對此次作品的方案選定:以單片機(jī)AT89S52為主控制器,時間數(shù)據(jù)是用過時鐘芯片DS1302來讀取,鬧鐘時間的設(shè)定通過小鍵盤來設(shè)置,然后通過LCD液晶顯示屏顯示出來。3 主控制器和外圍器件3.1 AT89S52單片機(jī)AT89S524是一種低功耗、高性能CMOS 8微控制器,使用ATMEL公司高密度非易失性存儲器技術(shù)制造,與工業(yè)80C51產(chǎn)品指令和引腳完全兼容。并具有以下標(biāo)準(zhǔn)功能:8k字節(jié)Flash,256字節(jié)RAM,32 位I/O 口線,看門狗定時器,2個數(shù)據(jù)指針,三個16 位定時器/計數(shù)器,一個6向量2級中斷結(jié)構(gòu),全雙工串行口,片內(nèi)晶振及時鐘電路。另外,AT89S52 可降至0Hz靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式??臻e模式下,CPU停止工作,允許RAM、定時器/計數(shù)器、串口、中斷繼續(xù)工作。掉電保護(hù)方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),單片機(jī)一切工作停止,直到下一個中斷或硬件復(fù)位為止。AT89C52的標(biāo)準(zhǔn)功能如下:4k 字節(jié)閃速存儲器,128字節(jié)內(nèi)部隨機(jī)存取存儲器, I/O 口線,兩個16位定時器,一個全雙工串行通信口,振蕩器等。不僅如此,由于AT89C51可降至0HZ,因此有節(jié)電模式,。在靜態(tài)邏輯操作中,只允許RAM,串行口和中斷,計數(shù)器繼續(xù)工作。如果掉電,RAM中的內(nèi)容將保存下來,但振蕩器及其他部件停止工作,直到下一個硬件復(fù)位。3.2 DS1302芯片介紹低功耗時鐘芯片DS1302可以對年、月、日、時、分、秒進(jìn)行計時,且具有閏年補(bǔ)償?shù)榷喾N功能5。DS1302用于數(shù)據(jù)記錄,特別是對某些具有特殊意義的數(shù)據(jù)點的記錄上,能實現(xiàn)數(shù)據(jù)與出現(xiàn)該數(shù)據(jù)的時間同時記錄。采用DS1302作為記錄測控系統(tǒng)中的數(shù)據(jù)記錄,其軟硬件設(shè)計簡單,時間記錄準(zhǔn)確,既避免了連續(xù)記錄的大工作量,又避免了定時記錄的盲目性,給連續(xù)長時間的測量、控制系統(tǒng)的正常運行及檢查都來了很大的方便,可廣泛應(yīng)用于長時間連續(xù)的測控系統(tǒng)中。在測量控制系統(tǒng)中,特別是長時間無人職守的測控系統(tǒng)中,經(jīng)常需要記錄某些具有特殊意義的數(shù)據(jù)及其出現(xiàn)的時間。記錄及分析這些特殊意義的數(shù)據(jù),對測控系統(tǒng)的性能分析及正常運行具有重要的意義。傳統(tǒng)的數(shù)據(jù)記錄方式是隔時采樣或定時采樣,沒有具體的時間記錄,因此只能記錄數(shù)據(jù)而無法準(zhǔn)確記錄其出現(xiàn)的時間;若采用單片機(jī)計時,一方面需要采用計數(shù)器,占用硬件資源,另一方面需要設(shè)置中斷、查詢等,同樣耗費單片機(jī)的資源,而且某些測控系統(tǒng)可能不允許。而在系統(tǒng)中采用DS1302則能很好地解決這個問題。3.2.1 DS1302的性能特新(1)實時時鐘,可對秒、分、時、日、周、月以及帶閏年補(bǔ)償?shù)哪赀M(jìn)行計數(shù); (2)用于高速數(shù)據(jù)暫存的318位RAM; (3)最少引腳的串行I/O; (4)2.55.5V 電壓工作范圍; (5)2.5V時耗電小于300nA; (6)用于時鐘或RAM數(shù)據(jù)讀/寫的單字節(jié)或多字節(jié)(脈沖方式)數(shù)據(jù)傳送方式; (7)簡單的3線接口; (8)可選的慢速充電(至VCC1)的能力。63.2.2 DS1302工作原理DS13027采用三線接口,并可采用突發(fā)方式一次傳送多個字節(jié)的時鐘信號或RAM數(shù)據(jù)。DS1302在任何數(shù)據(jù)傳送時必須先初始化,把RST引腳置為高電平,然后把8位地址和命令字裝入移位寄存器,數(shù)據(jù)在SCLK的上升沿被輸入。無論是讀周期還是寫周期,開始8位指定40個寄存器中哪個被訪問到。在開始8個時鐘周期,把命令字節(jié)裝入移位寄存器之后,另外的時鐘周期在讀操作時輸出數(shù)據(jù),在寫操作時寫入數(shù)據(jù)。鐘脈沖的個數(shù)在單字節(jié)方式下為8加8,在多字節(jié)方式下為8加字節(jié)數(shù),最大可達(dá)248字節(jié)數(shù)。管腳圖如圖3-1所示。圖3-1 DS1302管腳圖3.3 LCD1602液晶顯示屏介紹液晶顯示器的主要原理是以電流刺激液晶分子產(chǎn)生點、線、面并配合背部燈管構(gòu)成畫面。3.3.1 LCD1602的工作原理LCD1602中的1602表示每行顯示16個字符,一共可以顯示兩行,只能顯示ASCII碼字符。12232表示液晶顯示畫面由122列、32行組成,共有122*32個點來顯示各種圖形。每8列對應(yīng)一個字節(jié)的8位,每一個字節(jié)的內(nèi)容與顯示屏上相應(yīng)位置的暗亮對應(yīng),根據(jù)在LCD上開始顯示的行列號及每行的列數(shù)找出顯示RAM對應(yīng)的地址,設(shè)立光標(biāo),在此送上該字符對應(yīng)的代碼即可。3.3.2 LCD1602的管腳功能腳1:GND;腳2:VCC 電壓為5v;腳3:V0的功能是調(diào)整液晶的對比度,當(dāng)V0節(jié)VCC時對比對最低,接地時對比度最高;腳4:RS為寄存器選擇,高電平1時選擇數(shù)據(jù)寄存器、低電平0時選擇指令寄存器;腳5:RW是讀寫信號引腳,當(dāng)為高電平時開始讀操作,低電平時開始寫操作;腳6:E(或EN)端為使能端,高電平時讀取信息,當(dāng)有下降沿時執(zhí)行指令;腳714:D0D7為8位雙向數(shù)據(jù)端;腳1516:空腳或背燈電源。15為背光正極,16為背光負(fù)極;8LCD1602的管腳圖如圖3-2所示。圖3-2 LCD1602管腳圖3.4 E18-D80NK紅外傳感器介紹E18-D80NK這是一種集發(fā)射與接收于一體的光電傳感器,發(fā)射光經(jīng)過調(diào)制后發(fā)出,接收頭對反射光進(jìn)行解調(diào)輸出。有效的避免了可見光的干擾。檢測障礙物的距離可以根據(jù)要求通過尾部的電位器旋鈕進(jìn)行調(diào)節(jié)。實物圖如圖3-3所示。圖3-3 E18-D80NK光電傳感器實物圖3.4.1 E18-D80NK光電傳感器工作原理E18-D80NK光電傳感器是通過把光強(qiáng)度的變化轉(zhuǎn)換成電信號的變化來實現(xiàn)控制的。發(fā)送器對準(zhǔn)目標(biāo)發(fā)射光束,發(fā)射的光束一般來源于半導(dǎo)體光源,發(fā)光二極管(LED)、激光二極管及紅外發(fā)射二極管。光束不間斷地發(fā)射,或者改變脈沖寬度。接收器有光電二極管、光電三極管、光電池組成。在接收器的前面,裝有光學(xué)元件如透鏡和光圈等。在其后面是檢測電路,它能濾出有效信號和應(yīng)用該信號9。傳感器檢測到這一信號就可以確認(rèn)正前方有障礙物,并送給單片機(jī),單片機(jī)通過輸入內(nèi)部的算法,協(xié)調(diào)小車兩輪工作,從而完成躲避障礙物動作。4 硬件電路設(shè)計4.1 總體思路設(shè)計以AT89S52單片機(jī)為主控芯片完成時鐘電路、定時系統(tǒng)、紅外避障電路、液晶屏顯示、電機(jī)以及蜂鳴器的工作和組成。系統(tǒng)整體圖如下4-1所示。圖4-1 系統(tǒng)整體圖4.1.1 紅外避障電路E18-D80NK光電傳感器傳感器基本原理10:利用物體的反射性質(zhì)。在一定范圍內(nèi),如果沒有障礙物,發(fā)射出去的紅外線,因為傳播距離越遠(yuǎn)而逐漸減弱,最后消失。如果有障礙物,紅外線遇到障礙物,被反射到達(dá)傳感器接收頭。傳感器檢測到這一信號,就可以確認(rèn)正前方有障礙物,并送給單片機(jī),單片機(jī)進(jìn)行一系列的處理分析。由于protues中沒有紅外傳感器,我們用光電式耦合器來代替其功能,避障電路如圖4-2所示。圖4-2 避障電路圖4.1.2 液晶屏顯示電路LCD1602液晶模塊的讀寫操作、屏幕和光標(biāo)的操作都是通過指令編程來實現(xiàn)的,在本設(shè)計中通過函數(shù)來實現(xiàn)小鍵盤上的輸入能夠在LCD上實現(xiàn)讀寫操作和光標(biāo)的移動。顯示電路如圖4-3所示。圖4-3 LCD顯示電路4.1.3 復(fù)位電路復(fù)位操作分為手動復(fù)位和上電自動復(fù)位。上電后由于電容C1進(jìn)行充電,有電流結(jié)果R1,由于U=IR,RST被拉高,單片機(jī)開始上電復(fù)位;電容充滿后,電流消失,RST被重新拉低,單片機(jī)結(jié)束復(fù)位;也可以手動復(fù)位,S1按下后進(jìn)行復(fù)位,松開結(jié)束復(fù)位。本設(shè)計使用的是上電自動復(fù)位電路,可以節(jié)省硬件空間,減小設(shè)計體積,使其安裝時更方便。復(fù)位電路如圖4-4所示。圖4-4 復(fù)位電路圖4.1.4 晶振電路每個單片機(jī)系統(tǒng)里都有晶振,全稱叫晶體震蕩器11,在單片機(jī)系統(tǒng)里,晶振的作用非常大,他結(jié)合單片機(jī)內(nèi)部的電路,產(chǎn)生單片機(jī)所必須的時鐘頻率,單片機(jī)的一切指令的執(zhí)行都是建立在這個基礎(chǔ)上的,晶振的提供的時鐘頻率越高,那單片機(jī)的運行速度也就越快。晶振電路如圖4-5所示。圖4-5 晶振電路圖4.1.5 有源蜂鳴器電路蜂鳴器有兩種,無源蜂鳴器和有源蜂鳴器。源是指震蕩源。無源內(nèi)部不帶震蕩源,通直流信號無法令其鳴叫,而有源蜂鳴器內(nèi)部帶振蕩器,所以通電之后就會鳴叫。有源蜂鳴器程序控制方便,單片機(jī)一個高低電平就可以讓其發(fā)出聲音,所以本設(shè)計選用了有源蜂鳴器。設(shè)計的電路圖如圖4.6所示。圖4-6蜂鳴器電路圖4.1.6 供電電源電路本設(shè)計使用兩節(jié)電池為系統(tǒng)供電,電池使用方便。電源與其他硬件的連接如圖4-7所示,一個單刀單擲開關(guān)控制整個系統(tǒng)的通電與否;LED是檢測通電狀態(tài),當(dāng)燈亮的時候,電路是通的,反之則不同。圖4-7 供電電源電路4.1.7 電機(jī)驅(qū)動電路因為AT89S52單片機(jī)的I/O輸出電流難以到達(dá)驅(qū)動電機(jī),因此需要加一個驅(qū)動IC(ULN2003A),其作用是直接驅(qū)動電機(jī);排阻的作用是為了保護(hù)電路。電機(jī)驅(qū)動電路如圖4-8所示。圖4-8 電機(jī)驅(qū)動電路5 軟件的程序?qū)崿F(xiàn)5.1 開發(fā)軟件的介紹本系統(tǒng)的軟件方面程序編譯是使用了Keil系列的軟件。 Keil C51是美國Keil Software公司出品的51系列兼容單片機(jī)C語言軟件開發(fā)系統(tǒng)。Keil 軟件提供了包括的C文件編譯器、宏匯編編譯器、數(shù)據(jù)鏈接器、代碼庫管理和強(qiáng)大的仿真調(diào)試器等在內(nèi)的完整開發(fā)方案,將這些組合集成為一個強(qiáng)大的開發(fā)環(huán)境(Vision)。一般我們使用的電腦上的操作系統(tǒng),例如WINXP、WIN7、WIN8、WIN10、WIN98、NT等都可以很好的運行keil軟件。如果是使用C語言進(jìn)行編程的話,那么Keil軟件幾乎當(dāng)仁不讓,而且就算不使用C語言進(jìn)行編程而只用匯編語言進(jìn)行編程的話,keil軟件里面方便的集成開發(fā)環(huán)境和軟件的仿真調(diào)試工具等也會起到事半功倍的效果。使用Keil軟件的優(yōu)點如下:(1)Keil C51生成的目標(biāo)代碼效率特別高,所以在在開發(fā)大型軟件時更能體現(xiàn)高級語言的優(yōu)勢。 (2)C語言相對匯編語言來說要相對簡單,有著明顯的優(yōu)勢。Vision與Ishell分別是C51 for Windows 和for Dos集成的應(yīng)用開發(fā)環(huán)境(IDE),這個集成好的開發(fā)環(huán)境能夠完成代碼的編輯、代碼的編譯、芯片內(nèi)部的連接、在線調(diào)試、仿真這一系列的開發(fā)的流程。開發(fā)人員可以使用IDE本身或其他編輯器編輯文件C或匯編源文件。 51和C51分別接著編譯器編譯生成目標(biāo)文件(.obj)。最后通過各種轉(zhuǎn)換再轉(zhuǎn)換成標(biāo)準(zhǔn)的十六進(jìn)制的hex 文件,以供調(diào)試器dScope51 或tScope51利用源代碼級調(diào)試的,也可以通過直接在模擬器目標(biāo)板上調(diào)試使用,也可以直接寫程序存儲器如EPROM。本設(shè)計使用的是Keil Vision4這款軟件。Keil Vision4運行界面如圖5-1所示。圖5-1 Keil4運行界面圖5.2 程序部分模塊設(shè)計5.2.1 主函數(shù)設(shè)計將每個部分模塊化,封裝成函數(shù),在主函數(shù)進(jìn)行調(diào)用即可。首先要初始化LCD1602、DS1302 RAM區(qū)中保存鬧鐘時分的數(shù)據(jù),在while分支語句中調(diào)用函數(shù),判斷鬧鐘時間是否已到,調(diào)用蜂鳴器設(shè)定函數(shù),判斷按鍵是否有效。核心代碼如下:void main() init(); /初始化LCD GetAlarmData(); Timer0Init(); while(1) if(fen1!=fen) /flag3 為鬧鐘鈴響有效標(biāo)記位,0時有效,1時無效 flag3=0; getnum(); /從DS1302中讀取多個寄存器中的數(shù)據(jù) while(flag2=1&enter=0&shi1=shi&fen1=fen&flag3=0) /判斷鬧鐘時間是否已到 di(); delay(200); di(); delay(600); getnum(); display(); if(s1=0|s2=0|s3=0|s4=0) /判斷是否有鍵被按下,若有鍵按下則置 flag3 為1,終止鬧鐘 delay(10); flag3=1; while(s1=0|s2=0|s3=0|s4=0) ; /如有鍵被按下,且未放開,則等待 if(flag2=1)time_bz=0; enter=0; display(); keyscan(); 5.2.2 LCD1602初始化程序設(shè)計本設(shè)計中LCD1602的8位數(shù)據(jù)線都接到了P2口,“P2”參數(shù)涉及到的函數(shù)有:void write_com(uchar com)和void write_data(uchar date),分別是寫入LCD的顯示方式和向LCD1602寫入數(shù)據(jù),后面都有介紹。LCD初始化程序核心代碼如下:void init() /LCD初始化 lcden=0; / lcd信號使能端設(shè)定 lcdrw=0; /lcd讀寫選擇端設(shè)定,0為寫,1為讀 RST=0; SCLK=1; write_com(0x38); /顯示模式設(shè)置指令碼,雙列顯示,字形5*7點陣 write_com(0x0c); /開顯示,顯示光標(biāo),光標(biāo)不閃爍 write_com(0x06); / lcd光標(biāo)初始化, write_com(0x01); /清除 LCD 顯示屏 write_com(0x80); /顯示“20” write_data(time0); write_data(time1); write_com(0x84); /顯示“” write_data(time4); write_com(0x87); /顯示“” write_data(time7); write_com(0xc7); /顯示“:”, 即第二行第8個位,第二行從40開始算 write_data(time17); write_com(0xca); /顯示“:”,0xca=0x80+0x4a,即第二行第11個位 write_data(time110); 創(chuàng)建一個write_com(uchar com)函數(shù),主要功能是寫入LCD的顯示方式,其中調(diào)用了延時delay函數(shù)來減小誤差,穩(wěn)定數(shù)據(jù)。核心代碼如下:void write_com(uchar com) /寫入lcd顯示方式 rs=0; /rs=0, 表明要寫的是命令,而非數(shù)據(jù) P0=com; /命令要在 en=1 前賦給數(shù)據(jù)口,并延時一會 delay(1); /延時1ms lcden=1; /en=1 并延時一會,即把命令取走,寫給LCD delay(1); lcden=0; /en=0 關(guān)閉通訊,以便下次再置1時取走數(shù)據(jù)創(chuàng)建一個void write_data(uchar date)函數(shù),主要功能是向LCD1602寫入數(shù)據(jù),其中也調(diào)用了延時delay函數(shù)來減小誤差,穩(wěn)定數(shù)據(jù)。核心代碼如下:void write_data(uchar date) /向lcd1602寫入數(shù)據(jù) rs=1; /rs=1, 表明要寫的是數(shù)據(jù),而非命令 P0=date; /數(shù)據(jù)要在 en=1 前賦給數(shù)據(jù)口,并延時一會 delay(1); /延時1ms lcden=1; /en=1 并延時一會,即把命令取走,寫給LCD delay(1); lcden=0; /en=0 關(guān)閉通訊,以便下次再置1時取走數(shù)據(jù)5.2.3 紅避障程序與電機(jī)驅(qū)動的實現(xiàn)紅外避障是要先由紅外發(fā)射管與接收管的協(xié)調(diào)工作,即發(fā)射管發(fā)射紅外信號,然后接收管接收信號經(jīng)由單片機(jī)分析處理來判斷是否要進(jìn)行避障行進(jìn)。E18-D80NK光電傳感器在本設(shè)計中的壁障流程圖如圖5-2所示。圖5-2 避障流程圖由于紅外避障傳感器的組成,避障距離可以直接在紅外傳感器上調(diào)節(jié),所以代碼部分只需要設(shè)置避障次數(shù),本設(shè)計中為方便觀察,避障次數(shù)設(shè)置為5次。核心代碼如下:void hw_scan() /避障5次if(flag_hw=0)delay(2);if(flag_hw=0)in1=1;in2=0;in3=0;in4=0;time_bz+;delay(5000);delay(5000);delay(5000);delay(5000);delay(5000);delay(5000);else in1=1;in2=0;in3=1;in4=0;電機(jī)脈寬調(diào)制函數(shù)在定時器0函數(shù)里,轉(zhuǎn)向控制的程序?qū)懺诹吮苷虾瘮?shù)中,通過控制車輪的前進(jìn)與否,來實現(xiàn)小車的轉(zhuǎn)向功能。in1,in2,in3,in4,分別是控制車輪的工作狀態(tài),當(dāng)in1=1;in2=0;n3=0;in4=0時,小車實現(xiàn)轉(zhuǎn)向;當(dāng)in1=1;in2=0;in3=1;in4=0;時,小車直線前進(jìn)。定時器函數(shù)核心代碼如下:void Timer0Init(void)TMOD &= 0xF0;TMOD |= 0x01;TL0 = 0x50;/低五位裝入初值TH0 = 0xFB;/高八位裝入初值TF0 = 0;TR0 = 1; /啟動定時器0 ET0 = 1; /開定時器0中斷EA=0; /開關(guān)中斷void tm0_isr() interrupt 1 using 1 TL0 = 0x50; TH0 = 0xFB; count+;if(count=5) ENAB=1;else ENAB=0;if(count=20) count=0; 5.2.4 實時時間、定時時間顯示設(shè)計實時時間是通過讀取DS1302的數(shù)據(jù),處理后給相關(guān)變量、數(shù)組賦值,直接讀到的數(shù)據(jù)是BCD碼16進(jìn)制的形式,然后需要將16進(jìn)制轉(zhuǎn)化成10進(jìn)制再賦值給相關(guān)數(shù)組,最后在LCD上顯示出來。核心代碼如下:void getnum() /接收ds1302的數(shù)據(jù),處理后給相關(guān)變量、數(shù)組賦值 uchar j; for(j=0;j4)+0;/年 num6保存年的低兩位數(shù),BCD碼16進(jìn)制形式 time3=(num6&0x0f)+0; /將2位BCD碼16進(jìn)制形式分離并轉(zhuǎn)換成數(shù)字字符形式,分別賦給time2、time3 nian=(num6&0x70)4)*10+(num6&0x0f); / nian 保存年的低兩位數(shù),10進(jìn)制、數(shù)值形式 time5=(num4&0x70)4)+0;/月 time6=(num4&0x0f)+0; yue=(num4&0x70)4)*10+(num4&0x0f); time8=(num3&0x70)4)+0;/日 time9=(num3&0x0f)+0; ri=(num3&0x70)4)*10+(num3&0x0f); time13=(num5&0x0f)+0;/星期 num5保存星期的1位數(shù),BCD碼16進(jìn)制形式,轉(zhuǎn)換成數(shù)字字符形式,分別賦給time13? week=(num5&0x0f); switch(time13) /星期字符數(shù)組賦值 case 1: time12=S; time13=u; time14=n; break; case 2: time12=M; time13=o; time14=n; break; case 3: time12=T; time13=u; time14=e; break; case 4: time12=W; time13=e; time14=d; break; case 5: time12=T; time13=h; time14=u; break; case 6: time12=F; time13=r; time14=i; break; case 7: time12=S; time13=a; time14=t; break; time15=(num2&0x70)4)+0; /時 time16=(num2&0x0f)+0; time18=(num1&0x70)4)+0; /分 time19=(num1&0x0f)+0; time111=(num0&0x70)4)+0; /秒 time112=(num0&0x0f)+0; 定時時間的設(shè)置是通過小鍵盤的輸入來完成的,小鍵盤一共有4個按鍵,第一個按鍵就是設(shè)置鍵,通過按設(shè)置鍵來進(jìn)入鬧鐘設(shè)置界面,并且在進(jìn)入鬧鐘設(shè)置界面后會有鬧鐘圖標(biāo)()顯示。核心代碼如下:void display() /顯示數(shù)據(jù) uchar i; write_com(0x0c); /顯示方式設(shè)定為:無光標(biāo),且不閃爍 if(flag2=1) time10=; /鬧鐘圖標(biāo)設(shè)定 else time10= ; if(flag1=0) /flag為0時正常顯示年、月、日、時、分、秒等 write_com(0x80); /首行,第一個位 for(i=0;timei!=0;i+) /timei!=0,用結(jié)束符來判定是否已到數(shù)組未尾 write_data(timei); write_com(0xc0); /0x0c=0x80+x0x40, 即LCD第二行,第一個位 for(i=0;time1i!=0;i+) /用結(jié)束符來判定是否已到數(shù)組未尾 write_data(time1i); if(flag1=1) /flag為1時進(jìn)入鬧鐘時間設(shè)定界面 time38=fen1/10+0; time39=fen1%10+0; time35=shi1/10+0;time36=shi1%10+0; if(choice=0) time32=N;time33=O; /顯示“NO” write(0xc4, 0x00); / 保存鬧鐘開/關(guān)狀態(tài),以便下次開機(jī)時讀取 if(choice=1) time32=O; time33=K; /顯示“OK”write(0xc4, 0x01); / 保存鬧鐘開/關(guān)狀態(tài),以便下次開機(jī)時讀取 write_com(0xc0); for(i=0;time3i!=0;i+) /用結(jié)束符來判定是否已到數(shù)組未尾 write_data(time3i); 5.2.5 延時函數(shù)和蜂鳴器設(shè)定函數(shù)創(chuàng)建一個1ms的延時函數(shù),其他函數(shù)調(diào)用時只需要更改延時時間就行。延時函數(shù)主要在void hw_scan()避障函數(shù)、void di()蜂鳴器設(shè)定函數(shù)和按鍵防抖中起作用。延時1ms函數(shù)代碼如下:void delay(uint z) /1ms延時函數(shù) uint x,y; for(x=z;x0;x-) for(y=1;y0;y-);蜂鳴器設(shè)定函數(shù)void di(),只需要調(diào)用一個延時函數(shù),然后在蜂鳴器工作時,主函數(shù)調(diào)用蜂鳴器設(shè)定函數(shù)來完成鬧鐘功能。蜂鳴器設(shè)定函數(shù)代碼如下:void di() /蜂鳴設(shè)定函數(shù) beep=0; delay(800); beep=1; 6 系統(tǒng)調(diào)試和功能測試6.1 系統(tǒng)調(diào)試系統(tǒng)調(diào)試包括軟件調(diào)試和硬件調(diào)試。軟件調(diào)試是利用本系統(tǒng)的開發(fā)軟件進(jìn)行在線仿真,能發(fā)現(xiàn)和解決程序錯誤,也可以發(fā)現(xiàn)硬件故障。硬件調(diào)試是排除系統(tǒng)硬件的故障,包括電路設(shè)計錯誤、元器件連接錯誤和焊點是否牢固等。6.1.1 軟件調(diào)試Keil C52生成的目標(biāo)代碼效率非常之高,多數(shù)語句生成的匯編代碼很緊湊,容易理解。軟件調(diào)試可用模塊程序設(shè)計技術(shù),一個個子程序分別調(diào)試,通過檢測,可以發(fā)現(xiàn)程序中的語句錯誤、死循環(huán)錯誤等,找到錯誤所在位置,然后修改代碼,達(dá)到矯正程序的作用。我們將編輯好的源程序放入Keil中,通過調(diào)試發(fā)現(xiàn)錯誤,之后修改錯誤,從而讓程序編譯成功為止,通過調(diào)試讓我們的代碼達(dá)到實現(xiàn)設(shè)計的功能要求。向單片機(jī)中燒入hex文件如圖6-1所示。圖6-1 燒入hex文件6.1.2 硬件調(diào)試硬件調(diào)試時貫穿整個設(shè)計中。我們首先要確定元器件是否失效,使用萬用表等工具確定元器件的失效與否。其次我們要確定接線的錯誤,在焊接前,我們都需要認(rèn)真確認(rèn)接線的正確性,保證不能出現(xiàn)極性錯誤或是接線短路錯誤。最后在完成全部的接線工作后,使用萬用表等工具確認(rèn)整體接線無錯誤。6.2 功能測試完成所有的焊接工作后,將程序燒進(jìn)單片機(jī),開始對功能逐一測試,以確保系統(tǒng)正常運行。整體實物圖如圖6-2所示。圖 6-2 整體實物圖1.打開開關(guān),小車由兩節(jié)在小車底部的電池帶動,系統(tǒng)初始化,此時在LCD屏上顯示當(dāng)前時間和星期。測試圖(一)如圖6-3所示。圖6-3 測試圖(一)2.進(jìn)入鬧鐘設(shè)置界面,此時在LCD屏的左側(cè)有個字樣,即為進(jìn)入鬧鐘設(shè)置界面了。測試圖(二)如圖6-4所示。圖6-4 測試圖(二)3.鬧鐘設(shè)置完成后,小車前進(jìn)進(jìn)行5次避障,避障距離設(shè)置為20cm。測試圖(三)到測試圖(四)為避障完成過程,如圖6-5到圖6-6所示。圖6-5 測試圖(三)圖6-6 測試圖(四)4完成5次避障之后,等待鬧鐘到點工作。這次設(shè)置鬧鐘的時間是22:51分,鬧鐘到點后蜂鳴器準(zhǔn)時工作。測試圖(五)如圖6-7所示。圖6-7 測試圖(五)結(jié)束語在日新月異的21世紀(jì)里,家用電子產(chǎn)品得到了迅速發(fā)展。許多家電設(shè)備都趨于人性化、智能化。本設(shè)計就是一個智能化的縮影。傳統(tǒng)的鬧鐘在床頭時能隨手關(guān)閉,有時達(dá)不到鬧鐘本身的效果,而鬧鐘小車在這時就能完成鬧鐘應(yīng)有的功能,迫使人起床找到鬧鐘并關(guān)閉鬧鐘。整體設(shè)計符合家用智能的思想。在開始設(shè)計之前,需要根據(jù)理論和實際情況完成鬧鐘小車的整體預(yù)構(gòu),即需要的材料,需要設(shè)計的每個小部分,然后把每個小部分組合起來,完成整體的設(shè)計達(dá)到我們想要的功能。對于關(guān)鍵問題“刪繁就簡”。分解關(guān)鍵問題,逐一解決,然后整合。在功能實現(xiàn)時,先完成每個相關(guān)部分的功能,然后組合,實現(xiàn)整體功能。隨后進(jìn)行調(diào)試,達(dá)到鬧鐘小車應(yīng)有的功能。 在實現(xiàn)功能的過程中,可以使用網(wǎng)絡(luò)的便捷進(jìn)行搜索,學(xué)習(xí)理論知識,借鑒別人的設(shè)計思路與方法,使功能實現(xiàn)的更完善。實踐環(huán)節(jié),通過不斷地測試與調(diào)試,將軟硬件測試系統(tǒng)的整合在一起,使得實現(xiàn)功能起到輔助理論研究和檢驗理論研究的作用。通過這次設(shè)計不僅學(xué)會了如何去查找相關(guān)資料,更重要的是通過查找資料和翻閱書籍學(xué)到了不少知識,擴(kuò)大了知識面,提高了知識水平。經(jīng)過此次設(shè)計鞏固了以前所學(xué)的專業(yè)知識,讓自己真正認(rèn)識到理論聯(lián)系實際的重要性,為以后的學(xué)習(xí)和工作提供了很多有價值的經(jīng)驗。通過這次設(shè)計不僅增強(qiáng)了自己的動腦能力和動手能力,也提高了我思考問題、分析問題、解決問題的能力。 參考文獻(xiàn)1 蔣偉明. 中國智能家居的現(xiàn)狀及發(fā)展趨勢J. 科技視界, 2014 (18): 326-326.2 熊印國. 淺談智能時鐘控制系統(tǒng)設(shè)計J. 今日科苑, 2008 (24): 61-61.3 何立民. 單片機(jī)技術(shù)的現(xiàn)狀與未來J. 中國計算機(jī)報, 1995 (30) : 41-43.4 張大波. 嵌入式系統(tǒng)原理設(shè)計與應(yīng)用M. 北京: 機(jī)械工業(yè)出版社, 2005.5 黃明強(qiáng). DS1302 在單片機(jī)系統(tǒng)中的應(yīng)用J. 保定師范??茖W(xué)校學(xué)報, 2004, 17(2): 30-33.6 趙海蘭, 朱劍, 趙祥偉. DS1302 實時顯示時間的原理與應(yīng)用J. 電子技術(shù), 2004, 1: 43-45.7 孫雪梅, 范久臣. 實時時鐘芯片在單片機(jī)系統(tǒng)中的應(yīng)用J. 沈陽教育學(xué)院學(xué)報, 2005, 7(2): 132-134.8 周志敏, 周紀(jì)海, 紀(jì)愛華. LED 驅(qū)動電路設(shè)計與應(yīng)用M. 人民郵電出版社, 2006.9 田鵬, 李澤滔. 基于單片機(jī)的紅外避障系統(tǒng)設(shè)計J. 自動化與儀器儀表, 2015 (6): 40-42. 10 于連國, 李偉, 王妍瑋. 基于單片機(jī)的智能小車設(shè)計J. 林業(yè)機(jī)械與木工設(shè)備, 2011, 39(4): 39-40.11 陳立剛, 曲波, 陳立東. 一種車用智能電子鐘的設(shè)計與實現(xiàn)J. 科技創(chuàng)新導(dǎo)報, 2008 (13): 10-10.附錄1.作品原理圖2.核心源程序代碼:void di() /蜂鳴設(shè)定函數(shù) beep=0; delay(800); beep=1; void display() /顯示數(shù)據(jù) uchar i; write_com(0x0c); /顯示方式設(shè)定為:無光標(biāo),且不閃爍 if(flag2=1) time10=; /鬧鐘圖標(biāo)設(shè)定 else time10= ; if(flag1=0) /flag為0時正常顯示年、月、日、時、分、秒等 write_com(0x80); /首行,第一個位 for(i=0;timei!=0;i+) /timei!=0,用結(jié)束符來判定是否已到數(shù)組未尾 write_data(timei); write_com(0
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 文化創(chuàng)意產(chǎn)品研發(fā)資金申請2025年政策扶持與產(chǎn)業(yè)升級策略報告
- 2025年新能源汽車廢舊電池回收處理技術(shù)及案例分析報告
- 2025年生物科技行業(yè)可持續(xù)發(fā)展目標(biāo)(SDGs)實踐與產(chǎn)業(yè)融合報告
- 煤炭清潔高效燃燒技術(shù)在煤炭洗選加工中的應(yīng)用與發(fā)展報告
- 醫(yī)療器械臨床試驗質(zhì)量管理與規(guī)范化2025年發(fā)展趨勢研究報告
- 2025年建筑信息模型(BIM)在施工全過程精細(xì)化管理中的應(yīng)用策略報告
- 工業(yè)互聯(lián)網(wǎng)平臺量子密鑰分發(fā)技術(shù)在智慧醫(yī)療領(lǐng)域的應(yīng)用與挑戰(zhàn)報告
- 2025年電商平臺內(nèi)容營銷與種草經(jīng)濟(jì)產(chǎn)業(yè)鏈研究報告
- 深度解析:2025年工業(yè)互聯(lián)網(wǎng)平臺AR交互技術(shù)在制造領(lǐng)域的應(yīng)用創(chuàng)新報告
- 綠色環(huán)保產(chǎn)業(yè)資金申請政策變化與應(yīng)對策略報告2025
- 糧油倉儲管理員(高級)職業(yè)技能鑒定參考試題(附答案)
- 2024北京朝陽區(qū)四年級(下)期末語文試題及答案
- 2025年中考語文??甲魑难侯}《10個主題+15篇范文》
- 2025年新音樂節(jié)明星藝人歌手演出場費報價單
- 主要施工機(jī)械設(shè)備、勞動力、設(shè)備材料投入計劃及其保證措施
- 云南省昆明市官渡區(qū)2023-2024學(xué)年五年級下學(xué)期期末考試數(shù)學(xué)試題
- 四柱特高弟子班絕密資料——席學(xué)易
- 廣安市教育局文件材料歸檔范圍及保管期限表
- (完整版)20以內(nèi)進(jìn)位加法和退位減法練習(xí)1500題最新(精華版)
- 手術(shù)器械臺的準(zhǔn)備及注意事項
- 清華大學(xué)學(xué)報投稿模板
評論
0/150
提交評論