畢業(yè)設(shè)計---單片機控制的gps定位系統(tǒng)設(shè)計_第1頁
已閱讀1頁,還剩35頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p> ?。兀兀兀兀兀?本 科 畢 業(yè) 設(shè) 計(論文)</p><p>  單片機控制的GPS定位系統(tǒng)設(shè)計</p><p>  The Design of GPS Positioning System ControlLCD By Single-Chip Microprocessor</p><p>  學(xué) 院(系): 計算機科學(xué)與技術(shù)系

2、 </p><p>  專 業(yè): 通信工程 </p><p>  學(xué) 生 姓 名: XXX </p><p>  學(xué) 號: xxxxxx </p><p>  指 導(dǎo) 教 師(職稱

3、): XXX(教授) </p><p>  評 閱 教 師: </p><p>  完 成 日 期: 2011年3月 </p><p><b> ?。兀兀兀兀兀?lt;/b></p><p> ?。兀兀兀兀兀兀ㄓ⑽?/p>

4、)</p><p>  單片機控制的GPS定位系統(tǒng)設(shè)計</p><p>  通信工程專業(yè) XXX</p><p>  [摘 要]GPS技術(shù)在軍事、通訊、氣象、勘探、導(dǎo)航、遙感、大地測量、地球動力以及天文等眾多學(xué)科領(lǐng)域得到極其廣泛的應(yīng)用,推動了科學(xué)技術(shù)的迅猛發(fā)展,也豐富了人類的科學(xué)文化生活?,F(xiàn)在,GPS的外型設(shè)計已經(jīng)轉(zhuǎn)向便攜式發(fā)展,逐步踏入尋常百姓的生活中。所以,對G

5、PS的研究具有十分重要的意義。 論文主要研究GPS的定位原理與技術(shù),單片機的編程及其應(yīng)用,液晶屏的功能及其實現(xiàn)方法。制作了一套設(shè)計方案,以軟、硬件相結(jié)合的方式完成整個GPS數(shù)據(jù)接收和顯示的過程。完成了一臺液晶顯示的手持式GPS定位接收設(shè)備,并依次顯示實時時間及所在地的經(jīng)緯度。該定位系統(tǒng)完成后,定位精度能達到15m,所以該裝置在測控領(lǐng)域的應(yīng)用開發(fā)中具有一定的實用價值和借鑒價值。</p><p>  [關(guān)鍵

6、詞]AT89C52單片機;GPS;串口通信;LCD顯示</p><p>  The Design of GPS Positioning System ControlLCD By Single-Chip Microprocessor</p><p>  Abstract: Global Positioning System technology get extremely comprehen

7、sive application at military,communications,meterology,exploration,navigation,remote sensing,earth survey, earth mover ,astronomy and other numerous subject field;let technology rapide development,also it makes human sc

8、ience culture life plentiful。 Now, Assistant Global Positioning System exterior design already change of direction to portable type,step by step enter comman people’s daily life。 Therefore, researching Assistan</p>

9、<p>  Paper main research GPS position theory and technique,program and application of singlechip,the function and implement way。Make a set of design proposal,with soft to link hardware accomplish whole GPS inform

10、ation acceptance and evincive process。Accomplish one handheld GPS position receiving machine with Liquid crystal display,and display real time period and the location of latitude and longitude one by one。With the positio

11、n system complete,the position precision can reach fifteen meters, so the</p><p>  Key words: AT89C52 SCM;GPS;Serial Port Communication; LCD display</p><p><b>  目 錄</b></p>&

12、lt;p><b>  1 前言1</b></p><p>  1.1 GPS前景1</p><p>  1.2 GPS概述1</p><p>  1.2.1 控制任務(wù)2</p><p>  1.2.2 數(shù)據(jù)采集方案2</p><p><b>  2 硬件設(shè)計3<

13、;/b></p><p>  2.1 整版設(shè)計3</p><p>  2.2 電源模塊設(shè)計4</p><p>  2.3 顯示模塊設(shè)計5</p><p>  2.4 GPS數(shù)據(jù)模塊設(shè)計5</p><p><b>  3 軟件設(shè)計7</b></p><p>

14、  3.1 主程序設(shè)計7</p><p>  3.2 顯示驅(qū)動程序9</p><p>  3.3 硬件連接設(shè)置10</p><p>  3.4 LCD顯示工作模式10</p><p>  3.5 系統(tǒng)主程序10</p><p>  3.6 數(shù)據(jù)接收程序11</p><p>  4

15、調(diào)試及性能分析13</p><p>  4.1 軟件調(diào)試14</p><p>  4.1.1 目標程序糾錯14</p><p>  4.1.2 子程序功能調(diào)試14</p><p>  4.1.3 整體程序綜合調(diào)試16</p><p>  4.2 硬件調(diào)試18</p><p><

16、b>  結(jié)束語21</b></p><p><b>  參考文獻21</b></p><p>  附錄一:(電路圖)22</p><p>  附錄二:(程序列表)23</p><p><b>  致謝32</b></p><p><b>

17、  1 前言</b></p><p>  1.1 GPS前景 </p><p>  由于GPS技術(shù)所具有的全天候、高精度和自動測量的特點,作為先進的測量手段和新的生產(chǎn)力,已經(jīng)融入了國民經(jīng)濟建設(shè)、國防建設(shè)和社會發(fā)展的各個應(yīng)用領(lǐng)域。隨著冷戰(zhàn)結(jié)束和全球經(jīng)濟的蓬勃發(fā)展,美國政府宣布2000年至2006年期間,在保證美國國家安全不受威脅的前提下,取消SA政策,GPS民用信號精度在全球范圍

18、內(nèi)得到改善,利用C/A碼進行單點定位的精度由100米提高到20米,這將進一步推動GPS技術(shù)的應(yīng)用,提高生產(chǎn)力、作業(yè)效率、科學(xué)水平以及人們的生活質(zhì)量,刺激GPS市場的增長。據(jù)有關(guān)專家預(yù)測,在美國,單單是汽車GPS導(dǎo)航系統(tǒng),2000年后的市場將達到30億美元,而在我國,汽車導(dǎo)航的市場也將達到50億元人民幣??梢?,GPS技術(shù)市場的應(yīng)用前景非??捎^。</p><p><b>  1.2 GPS概述</b&

19、gt;</p><p>  廣義的GPS,包括美國GPS、歐洲伽利略、俄羅斯GLONASS、中國北斗等全球衛(wèi)星定位系統(tǒng),也稱GNSS。</p><p>  狹義的GPS,即指美國的全球定位系統(tǒng) Global Positioning System,簡稱GPS。</p><p>  公眾常稱的GPS,通常是指GPS系統(tǒng)的接收設(shè)備,如手持式GPS、汽車導(dǎo)航儀等。</

20、p><p>  即全球定位系統(tǒng)(Global Positioning System)。簡單地說,這是一個由覆蓋全球的24顆衛(wèi)星組成的衛(wèi)星系統(tǒng)。這個系統(tǒng)可以保證在任意時刻,地球上任意一點都可以同時觀測到4顆衛(wèi)星,以保證衛(wèi)星可以采集到該觀測點的經(jīng)緯度和高度,以便實現(xiàn)導(dǎo)航、定位、授時等功能。這項技術(shù)可以用來引導(dǎo)飛機、船舶、車輛以及個人,安全、準確地沿著選定的路線,準時到達目的地。</p><p> 

21、 全球定位系統(tǒng)(GPS)是20世紀70年代由美國陸??杖娐?lián)合研制的新一代空間衛(wèi)星導(dǎo)航定位系統(tǒng) 。其主要目的是為陸、海、空三大領(lǐng)域提供實時、 全天候和全球性的導(dǎo)航服務(wù),并用于情報收集、核爆監(jiān)測和應(yīng)急通訊等一些軍事目的,是美國獨霸全球戰(zhàn)略的重要組成。經(jīng)過20余年的研究實驗,耗資300億美元,到1994年3月,全球覆蓋率高達98%的24顆GPS衛(wèi)星星座己布設(shè)完成。 </p><p>  GPS全球衛(wèi)星定位系統(tǒng)由三部分

22、組成:空間部分———GPS星座;地面控制部分———地面監(jiān)控系統(tǒng);用戶設(shè)備部分———GPS 信號接收機。</p><p>  GPS定位技術(shù)具有高精度、高效率和低成本的優(yōu)點,使其在各類大地測量控制網(wǎng)的加強改造和建立以及在公路工程測量和大型構(gòu)造物的變形測量中得到了較為廣泛的應(yīng)用。</p><p>  本設(shè)計是一個LCD1602電子液晶顯示屏顯示動畫的設(shè)計。整機以ATMEL 公司生產(chǎn)的40腳單片

23、機AT89C52為核心,介紹了以它為控制系統(tǒng)的LCD電子液晶顯示屏的動態(tài)設(shè)計和開發(fā)過程。該電子顯示屏內(nèi)部自帶了ASCII碼識別顯示控制電路部分,如果需要顯示一個西文字符,只需要讓單片機給他輸入這個西文字符的ASCII碼即可。文中詳細介紹了LCD顯示的硬件設(shè)計思路、硬件電路各個部分的功能及原理、相應(yīng)軟件的程序設(shè)計。</p><p>  1.2.1 控制任務(wù)</p><p>  本設(shè)計采用AT

24、89C52單片機為核心控制芯片,控制任務(wù)包括兩個部分:數(shù)據(jù)接受控制和顯示控制。</p><p>  ①:數(shù)據(jù)接收控制:51單片機內(nèi)部集成了串行口通信電路,本設(shè)計應(yīng)用這個電路接收外部數(shù)據(jù),其數(shù)據(jù)格式為八位數(shù)據(jù)+1位停止位。把接收到的數(shù)據(jù)存儲到數(shù)據(jù)緩沖區(qū)。</p><p> ?、冢猴@示控制:利用51單片機的I/O端口控制LCD1602液晶顯示器顯示相應(yīng)信息;顯示之前先從緩沖區(qū)取出數(shù)據(jù),經(jīng)過CP

25、U處理過后,送到LCD1620顯示需要信息。</p><p>  1.2.2 數(shù)據(jù)采集方案</p><p>  為了減少接收出錯的問題,采集數(shù)據(jù)時使用串行口中斷數(shù)據(jù)接收方式。</p><p>  方案①:直接接收,不論接收到的數(shù)據(jù)是什么,先把串行口發(fā)送過來的數(shù)據(jù)接收到數(shù)據(jù)緩沖區(qū)過后,再對數(shù)據(jù)進行處理。GPS模塊為一種智能模塊,它每秒鐘會發(fā)出幾種數(shù)據(jù),包括:$GPGG

26、A、$GPRMC、$PGRMV、$PGRMO、$PGRMC等數(shù)據(jù)格式。每個數(shù)據(jù)為15~36個字節(jié)數(shù)據(jù),如果把每個數(shù)據(jù)都接收到單片機的緩沖區(qū),那么單片機就需要很大的數(shù)據(jù)存儲器RAM,這樣單片機內(nèi)部的RAM是不夠用的,更何況還有程序處理。所以這種數(shù)據(jù)采集的方案是不行的。</p><p>  方案②:選擇接收,先判斷接收到的數(shù)據(jù)的格式,然后選擇需要的格式中的一些數(shù)據(jù)進行存儲。這樣就大大的節(jié)余了RAM,解決RAM不夠用的

27、問題。例如:接收$GPGGA格式數(shù)據(jù)的時間:前五次數(shù)據(jù)接收的時候先判斷數(shù)句格式(依次判斷接收到的數(shù)據(jù)是否先后為’$’、’G’、’P’、’G’、’G’、’A’),如果是,然后判斷接下來的逗號(’,’)是第幾個逗號。如果是第一個,說明接下來的數(shù)據(jù)是時間,如果是第二個,說明接下來的數(shù)據(jù)是緯度,依此類推。本設(shè)計采用這種方案接收數(shù)據(jù)。</p><p>  方案比較:前者數(shù)據(jù)接收的方案雖然接收的方法簡單,接收程序編寫很容易,

28、但是學(xué)要很大的RAM空間,設(shè)計時需要外加存儲器,程序編寫時就得多寫上數(shù)據(jù)存儲處理程序。這樣就大大的增加了開發(fā)的諸多問題,包括成本,開發(fā)時間,試調(diào)難度等。后者數(shù)據(jù)接收方案比起前者來說節(jié)約了不少的RAM,而且再數(shù)據(jù)接收前只需要先簡單判斷接收到的數(shù)據(jù)格式即可;而且減少了中斷處理的時間,讓給其它進程工作。減少了開發(fā)的成本和開發(fā)時間,以及電路的復(fù)雜程度。所以本設(shè)計采用第二種數(shù)據(jù)接收的方案。</p><p><b>

29、;  2 硬件設(shè)計</b></p><p>  系統(tǒng)硬件部分電路大致上可以分成穩(wěn)壓電源、單片機小系統(tǒng)及外圍電路和LCD顯示屏電路三部分。</p><p>  電路為單片機89C52控制的GPS器件,實現(xiàn)定位系統(tǒng)數(shù)據(jù)的采集和現(xiàn)實。其中所使用的器件主要是3個,打片機89C52、GPS模塊GARMIN GPS25以及LCD顯示模塊MGLS-12032A。在這里僅列出單片機和LCD接口

30、部分電路的器件名稱和相關(guān)的主要功能。</p><p>  89C52:LCD的控制器,控制字符的發(fā)送和點陣顯示的時序。</p><p>  MAX202:TTL電平和RS-232電平的轉(zhuǎn)換芯片。</p><p>  LCD:液晶顯示模塊。在單片機的 控制下,按照要求的格式顯示接受到的數(shù)據(jù)。</p><p><b>  2.1 整版設(shè)

31、計</b></p><p><b>  設(shè)計原理圖:</b></p><p>  以單片機為核心將GPS數(shù)據(jù)發(fā)送模塊,LCD1602顯示模塊系統(tǒng)的結(jié)合在一起形成一個整體,實現(xiàn)特定功能。</p><p>  2.2 電源模塊設(shè)計</p><p>  各個模塊的電源供電電壓均為5V,所以只需要設(shè)計5V單電源供電即

32、可。</p><p>  設(shè)計采用穩(wěn)壓芯片LM7805做電源穩(wěn)壓核心。電路圖如下所示,輸入電壓為220v交流電,經(jīng)過變壓器降壓為9V交流電,再運用二極管的單向?qū)щ娦詫?V交流電整流,使用二級管連接成整流槽,使電壓負電壓整流成正電壓。電容C1為濾波電容,讓電壓波紋幅度減小,然后由LM7805集成穩(wěn)壓芯片將輸入電壓整流為5V穩(wěn)壓源。小電容C3,、C4為高頻信號濾除電容,改善負載的瞬態(tài)響應(yīng)。</p>&l

33、t;p>  圖2-1 電源模塊電路圖</p><p>  2.3 顯示模塊設(shè)計</p><p>  由與本設(shè)計顯示需要顯示相應(yīng)的數(shù)據(jù)信息,包括相應(yīng)的西文字符,所以不采用數(shù)碼管顯示,采用帶西文字庫的LCD1602做顯示器,顯示電路如下</p><p>  圖2-2 液晶顯示電路圖</p><p>  電路中的可變電阻RV2最大阻值為1K,

34、其作用為調(diào)節(jié)VEE輸入引腳的電壓,實現(xiàn)對LCD1602對比度的調(diào)節(jié)。</p><p>  LCD的數(shù)據(jù)端口的工作方式有兩種,一種為8數(shù)據(jù)線工作方式,另一種為4數(shù)據(jù)線工作方式。為了節(jié)余端口,本設(shè)計采用4數(shù)據(jù)線工作方式。每次向LCD寫8為數(shù)據(jù)分兩次寫,先高位后低位。</p><p>  2.4 GPS數(shù)據(jù)模塊</p><p>  GPS數(shù)據(jù)模塊不需要自己設(shè)計,采用成品電

35、路模塊做數(shù)據(jù)傳送。我們只需要設(shè)計GPS數(shù)據(jù)通行部分即可。GPGGA數(shù)據(jù)格式:</p><p>  $GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,M,<10>,M,<11>,<12>*xx<CR><LF><

36、;/p><p>  $GPGGA:起始引導(dǎo)符及語句格式說明(本句為GPS定位數(shù)據(jù));</p><p>  <1> :UTC時間,格式為hhmmss.ss;</p><p>  <2> :緯度,格式為ddmm.mmm(第一位是零也將傳送);</p><p>  <3> :緯度半球,N或S(北緯或南緯)</p

37、><p>  <4> :經(jīng)度,格式為dddmm.mmm(第一位零也將傳送);</p><p>  <5> :經(jīng)度半球,E或W(東經(jīng)或西經(jīng));</p><p>  <6> :定位質(zhì)量指示,A 為有效位置, V為非有效接收警告,即當前天線視野上方的衛(wèi)星個數(shù)少于3顆;</p><p>  <7> :使用衛(wèi)

38、星數(shù)量,從00到12(第一個零也將傳送);</p><p>  <8> :水平精確度,0.0到99.9;</p><p>  <9> :天線離海平面的高度,-9999.9到9999.9米;</p><p><b>  M :指單位米</b></p><p>  <10>:大地水準面高

39、度,-9999.9到9999.9米;</p><p><b>  M :指單位米</b></p><p>  <11>:差分GPS數(shù)據(jù)期限(RTCM SC-104),最后設(shè)立RTCM傳送的秒數(shù)量;</p><p>  <12>:差分參考基站標號,從0000到1023(首位0也將傳送)。</p><p

40、>  * : 語句結(jié)束標志符。</p><p>  xx : 從$開始到*之間的所有ASCII碼的異或校驗和。</p><p><b>  <CR>: 回車。</b></p><p><b>  <LF>: 換行。</b></p><p>  GPS數(shù)據(jù)通信為232串

41、口通信,在通信過程中就需要數(shù)據(jù)電平轉(zhuǎn)換,應(yīng)用到232通信電平轉(zhuǎn)換芯片MAX232,電路如下:</p><p>  圖2-3 MAX232電路</p><p>  在單片機串口收到信息后,先判別是否為語句引導(dǎo)頭“$”,然后再接收信息內(nèi)容,在收到“*”字符ASCⅡ碼后再接收二個字節(jié)結(jié)束接收,然后根據(jù)語句標識區(qū)分出信息類別以對收到ASCⅡ碼進行處理顯示。注意在處理北京時間時應(yīng)在UTC時間上加上8

42、小時才是準確的北京時,在超出24小時時應(yīng)作減24小時處理。</p><p><b>  3 軟件設(shè)計</b></p><p>  本設(shè)計的主要功能是接收GPS模塊傳送的數(shù)據(jù),并顯示出相應(yīng)的數(shù)據(jù)信息,包括當?shù)貢r間、緯度、經(jīng)度以及高度。</p><p>  數(shù)據(jù)接收部分,采用串行口中斷接收數(shù)據(jù)。顯示部分就采用一個I/O口控制LCD1602顯示相應(yīng)的

43、信息。</p><p><b>  3.1 主程序設(shè)計</b></p><p>  系統(tǒng)主程序的總體結(jié)構(gòu)如圖3-1所示。系統(tǒng)的主程序開始以后,首先是對系統(tǒng)環(huán)境初始化,包括設(shè)置串口、定時器、中斷,LCD1602初始化;然后LCD顯示屏進入開機狀態(tài),顯示開機信息(LCD_log),轉(zhuǎn)入正常的顯示,并接收數(shù)據(jù),每次顯示兩串字符。接著由于單片機沒有停機指令,所以可以設(shè)置系統(tǒng)程

44、序不斷地循環(huán)執(zhí)行數(shù)據(jù)信息顯示。</p><p>  系統(tǒng)程序結(jié)構(gòu)屬中斷方式,絕大多數(shù)功能在中斷服務(wù)子程序中完成。根據(jù)總體結(jié)構(gòu),可將程序劃分為幾個功能化模塊:串行口中斷服務(wù)程序、顯示子程序、掃描程序。各個模塊可進行獨立設(shè)計、調(diào)試和查錯,最終再連接成一個整體。</p><p>  圖3-1 系統(tǒng)主程序的總體結(jié)構(gòu)</p><p>  系統(tǒng)主程序的總體結(jié)構(gòu)如圖3-1所示,

45、首先是系統(tǒng)初始化,然后是顯示開機信息,最后根據(jù)系統(tǒng)接收到的信息綜合處理,得到數(shù)據(jù)顯示到顯示屏上。</p><p>  圖3-2 數(shù)據(jù)接收程序流程圖</p><p>  3.2 顯示驅(qū)動程序</p><p>  void LCD_check_busy(void); //忙檢查</p><p>  void LCD_cls(void); //清屏

46、</p><p>  void LCD_write_data(unsigned char); //寫數(shù)據(jù)</p><p>  void LCD_write_instruction(unsigned char); //寫指令</p><p>  void LCD_set_position(unsigned char); //設(shè)置光標位置</p><

47、p>  void LCD_initial(void); //LCD1602初始化</p><p>  void LCD_printc(unsigned char); //輸出單個字符</p><p>  void LCD_prints(unsigned char *);//輸出字符串</p><p>  void LCD_log(void);//開機信息顯示&

48、lt;/p><p>  void LCD_show(void);//信息顯示 </p><p>  void delay(unsigned char);//延時</p><p>  3.3 硬件連接設(shè)置</p><p>  #define LCD_DATA P2 //LCD的數(shù)據(jù)口</p><p>  #defi

49、ne LCD_BUSY LCD_DATA^7; //LCD忙信號位</p><p>  sbit LCD_RS=P2^0; //LCD寄存器選擇</p><p>  sbit LCD_RW=P2^1; //LCD讀寫控制</p><p>  sbit LCD_EN=P2^2; //LCD使能信號</p&

50、gt;<p>  寄存器選擇位RS,當RS=1時選擇數(shù)據(jù)寄存器DDRAM。</p><p>  當RS=0時選擇指令寄存器CDRAM。</p><p>  讀寫選擇位RW,當RS=1時讀數(shù)據(jù)寄存器。</p><p>  當RS=0時寫數(shù)據(jù)或指令到寄存器。</p><p>  讀寫使能信號EN,當EN=1時讀取數(shù)據(jù)。</p&

51、gt;<p>  當EN為下降沿是為寫數(shù)據(jù)或指令。</p><p>  檢測LCD是否在處理其它數(shù)據(jù)而處于忙狀態(tài)時,則讀取忙狀態(tài)信號位,當RS=0,RW=1,E=1時,LCD會輸出八位數(shù)據(jù),其中最高位DB7為忙狀態(tài)位(LCD_busy_flag),若為1,表示LCD處于忙狀態(tài),為0表示LCD空閑。</p><p>  3.4 LCD顯示工作方式</p><

52、p>  /******* 初始化LCD ********/</p><p>  void LCD_initial(void) </p><p>  { LCD_write_instruction(LCD_DISPLAY_DOUBLE_LINE); //單行顯示,4數(shù)據(jù)線</p><p>  LCD_write_instruction(LCD_AC_AU

53、TO_INCREMENT | LCD_MOVE_DISENABLE); </p><p>  //光標自動+1,關(guān)閉自動移動顯示</p><p>  LCD_write_instruction(LCD_DISPLAY_ON | LCD_CURSOR_OFF | LCD_CURSOR_BLINK_OFF);//顯示開、光標顯示關(guān)、光標閃爍關(guān) </p><p>  LC

54、D_cls( );//清屏</p><p><b>  }</b></p><p><b>  3.5 系統(tǒng)主程序</b></p><p>  /************************************/</p><p>  void main()</p><p&

55、gt;  {TMOD=0x20;//初始化串口</p><p>  TL1 =0xfa;</p><p>  TH1 =0xfa;//4800波特率</p><p>  SCON=0x50;//工作方式1:八位異步通信,允許接收</p><p>  PCON=0x00;//波特率加倍關(guān)</p><p>  IE=0x

56、90;//打開總中斷EA,和串行口中斷ES</p><p>  TR1=1;//開啟啟動定時器1</p><p>  LCD_initial( );//LCD1602初始化</p><p>  LCD_log( );//顯示開機信息</p><p><b>  while(1)</b></p><p&

57、gt;<b>  {</b></p><p>  LCD_show( );</p><p>  }//除了數(shù)據(jù)接收狀態(tài),一直處理顯示</p><p><b>  }</b></p><p>  在串口通信中需要設(shè)置串口通信的數(shù)據(jù)傳輸速度,及波特率,設(shè)置定時器的溢出率即可,晶振為11。0592MHz,

58、當TL1 =0xfa;,TH1 =0xfa時為4800kbps波特率。計算公式為:</p><p><b>  T0初值X=2-</b></p><p>  TMOD特殊功能寄存器為定時器計數(shù)器工作方式寄存器,前四位控制定時器1,后四位控制定時器0;本設(shè)計采用定時器1,工作方式2(八位自動重裝載,N=8),</p><p>  SCON為串行口

59、數(shù)據(jù)通信控制特殊寄存器,高三位為工作方式控制位,本設(shè)計采用工作方式1,8位數(shù)據(jù)異步通信。D4位為接收允許控制位,本設(shè)計要采用串行口中斷接收GPGGA數(shù)據(jù),所以該為置1。</p><p>  IE為中斷允許控制特殊寄存器,本設(shè)計要打開串行口中斷和總中斷。</p><p>  3.6 數(shù)據(jù)接收程序</p><p>  /*****************串行口中斷子程序

60、**************************/</p><p>  RI=0;//軟件清除中斷標志位,串行口中斷需要軟件清零,去除中斷標志</p><p>  進入中斷過后要先判斷接收數(shù)據(jù)的格式,否則會出現(xiàn)亂接收數(shù)據(jù),出現(xiàn)接收到的數(shù)據(jù)不對的問題,先判斷是否接收到GPGGA格式語句的第一個字符“$”,其ASCII碼為0x24,收到后,繼續(xù)判斷格式是不是為GPGGA,分五次中斷判斷,如

61、果是,開始記錄數(shù)據(jù)并設(shè)置記錄標志(read_start),否則退出數(shù)據(jù)接收中斷,程序設(shè)計如下:</p><p>  if(SBUF=='$')//判斷是不是'$'符號</p><p><b>  {</b></p><p>  flag1=1;//接收到’$’,起始字符</p><p>

62、  igps=0;//記錄緯度數(shù)據(jù)字符數(shù)量的變量</p><p>  Num_comma=0;//記錄逗號數(shù)量的變量</p><p><b>  }</b></p><p>  else flag1=0;</p><p>  if((SBUF=='G')&(flag1==1))flag2=1;&

63、lt;/p><p>  else flag2=0;</p><p>  if((SBUF=='P')&(flag2==1))flag3=1;</p><p>  else flag3=0;</p><p>  if((SBUF=='G')&(flag3==1))flag4=1;</p>

64、<p>  else flag4=0;</p><p>  if((SBUF=='G')&(flag4==1))flag5=1;</p><p>  else flag5=0;</p><p>  if((SBUF=='A')&(flag5==1))read_start=1;//開始接收數(shù)據(jù)</p&g

65、t;<p>  else read_start=0</p><p>  通過上述格式判斷后,說明接下來的數(shù)據(jù)就是所需要的GPGGA格式數(shù)據(jù),然后選擇所需要的數(shù)據(jù)接收并存到緩存區(qū),每個數(shù)據(jù)都是以逗號隔開的,我們只需要判斷該逗號是第幾個逗號就可以知道后面來的數(shù)據(jù)是表示說明含義。程序設(shè)計如下</p><p>  if(read_start==1)//開始接收GPGGA中的數(shù)據(jù)信息,

66、</p><p><b>  {</b></p><p>  (SBUF==',')//利用GPRMC數(shù)據(jù)中的逗號間隔,區(qū)分接收到</p><p>  //的數(shù)據(jù)表示的信息</p><p><b>  {</b></p><p>  Num_comma+

67、+;</p><p>  }//記錄逗號個數(shù),標志數(shù)據(jù)的意義</p><p>  if(Num_comma==1)//接收時間,時分秒格式</p><p><b>  {</b></p><p>  data_temp[igps]=SBUF;</p><p><b>  igps++;

68、</b></p><p>  }//接收到的數(shù)據(jù)個數(shù)加1</p><p>  if(Num_comma==2)//接收接收緯度,ddmm.mmm格式</p><p><b>  {</b></p><p>  data_temp[igps]=SBUF;</p><p><b>

69、;  igps++;</b></p><p><b>  }</b></p><p>  if(Num_comma==4)//接收經(jīng)度,ddmm.mmm格式</p><p><b>  {</b></p><p>  data_temp[igps]=SBUF;</p>&l

70、t;p><b>  igps++;</b></p><p><b>  }</b></p><p>  if(Num_comma==10)//海拔高度:0—99999.9</p><p><b>  {</b></p><p>  if(SBUF!='M'

71、)//為節(jié)約RAM空間,不接收’M’字符</p><p>  data_temp[igps]=SBUF;</p><p><b>  igps++;</b></p><p><b>  }</b></p><p>  判斷這一幀數(shù)據(jù)是否接收完畢,每一個數(shù)據(jù)格式都是以 * 符號結(jié)束的,當接收到 *

72、號時表示這一幀數(shù)據(jù)已經(jīng)發(fā)送完畢。程序設(shè)計如下:</p><p>  if(SBUF==’*’)//判斷是否收到GPRMC格式語句的字符“*”,</p><p>  //如果是,則表示接收完畢,開始處理</p><p><b>  {</b></p><p>  for(i=0;i<igps;i++)</p&g

73、t;<p><b>  {</b></p><p>  data_temp[igps]=dis_temp[igps];</p><p>  }//數(shù)據(jù)放到顯示緩沖區(qū)</p><p>  //返回初值;標識結(jié)束一次接收完畢</p><p>  read_start=0;</p><p>

74、;  Num_comma=0;</p><p><b>  igps=0;</b></p><p><b>  }</b></p><p><b>  4 調(diào)試及性能分析</b></p><p>  一個單片機系統(tǒng)經(jīng)過總體設(shè)計,在允許的條件下,根據(jù)本設(shè)計系統(tǒng)的需求性首先采用在P

75、C機上用模擬開發(fā)軟件進行檢測和調(diào)試,再進行硬件的組裝與調(diào)試。</p><p><b>  4.1 軟件調(diào)試</b></p><p>  軟件調(diào)試采用Proteus 7.1、操作系統(tǒng)Windows xp,在PC機上對目標電路原理圖和程序進行檢測和調(diào)試。</p><p>  4。1。1 目標程序糾錯</p><p>  圖4

76、-1目標程序調(diào)試</p><p>  4.1.2 子程序功能調(diào)試</p><p>  程序設(shè)計通常采用模塊程序設(shè)計,調(diào)試時可對一個個子程序分別進行調(diào)試,設(shè)置好入口條件,然后采用單步運行或斷點運行方式,檢查系統(tǒng)CPU現(xiàn)場、RAM和I/O口狀態(tài),看程序執(zhí)行結(jié)果符合設(shè)計要求。</p><p>  圖4-2 子程序功能調(diào)試</p><p>  分步編

77、譯C51程序,通過一系列的調(diào)試,驗證各個子程序的正確性。并從項目工程的角度綜合調(diào)試,調(diào)試整個項目,如圖4-3所示:</p><p>  圖4-3 生成HEX文件</p><p>  在調(diào)試成功順利編譯之后,通過一系列設(shè)置,生成HEX目標文件,4-4所示:</p><p>  圖4-4 生成HEX文件</p><p>  4.1.3 整體程序綜

78、合調(diào)試</p><p>  即把各子程序整體連起來進入到綜合電路調(diào)試,能實現(xiàn)預(yù)計的功能顯示。</p><p><b>  圖4-5整體測試</b></p><p>  用軟件仿真調(diào)試和修改完畢,下一步焊接硬件進行硬調(diào)試。</p><p>  圖4-6 運行仿真電路</p><p><b>

79、;  4.2硬件調(diào)試</b></p><p>  焊接硬件,檢查線路連接正確無誤。</p><p>  硬件調(diào)試環(huán)境,電源輸入220V交流電,輸出4。98V直流電,給電路板接通4。98V直流電源。調(diào)試過程如以下幾圖所示。</p><p>  在7號樓6樓的計算機硬件實驗室里,借助實驗板等設(shè)備仿真與調(diào)試,由于是第一次啟動,所以系統(tǒng)整體反應(yīng)較慢,如圖4-7:

80、</p><p>  圖4-7 冷啟動界面</p><p>  待系統(tǒng)運行一段時間之后,單片機與GPS模塊之間進行數(shù)據(jù)的處理,把處理所得的信息按照預(yù)定格式顯示在數(shù)據(jù)窗口內(nèi),如圖4-8所示:</p><p>  圖4-8 啟動一段時間之后</p><p>  待系統(tǒng)運行穩(wěn)定后,各個預(yù)定數(shù)據(jù)正常顯示,如圖4-9所示,界面顯示搜索接收到9顆衛(wèi)星所發(fā)

81、出的GPS信號,并顯示當前日期為2011/04/08,時間為11:35:21,經(jīng)緯度為東經(jīng):112’32’37,南緯32’58’10等信息,基本上滿足預(yù)先設(shè)計的結(jié)果。</p><p>  圖4-9 仿真運行界面信息</p><p>  通過不斷的調(diào)試、排錯,系統(tǒng)處于穩(wěn)定正常接收出路數(shù)據(jù)狀態(tài),如圖4-10所示,整體接收界面良好,系統(tǒng)運行穩(wěn)定,每隔1秒數(shù)據(jù)窗口連續(xù)滾動實時顯示GPS接收到的數(shù)據(jù)

82、信息。</p><p>  圖4-10 整體仿真運行效果</p><p><b>  結(jié)束語</b></p><p>  以上僅對LCD顯示屏的結(jié)構(gòu)和驅(qū)動、顯示電路原理作一詳細介紹和分析。由于自己知識水平的局限和時間的倉促,設(shè)計中或還存在著一些不足,我真誠的接受老師們的批評和指正。。</p><p>  從課題選擇、方案

83、論證到具體設(shè)計,每一步對我來說無疑是巨大的嘗試和挑戰(zhàn),我不斷地給自己提出新的問題,然后去論證、推翻,在這個往復(fù)的過程中,我這篇稚嫩的設(shè)計日趨完善。每一次改進我都收獲良多,雖然我的設(shè)計作品不是很成熟,而且借鑒了前人的很多資料,但我仍然心里有一種莫大的幸福感,因為我實實在在地走過了一個完整的設(shè)計所應(yīng)該走的每一個過程,并且享受了每一個過程,更重要的是這個設(shè)計中我加入了自己鮮活的思想。</p><p>  在做這次畢業(yè)設(shè)

84、計過程中使我學(xué)到了很多,加深了對單片機、集成模塊、LCD液晶顯示屏和C語言的理解,驗證了所學(xué)理論知識,提高了基本的解決實際問題的能力,并增加了對電子設(shè)計方面的興趣。希望這次的經(jīng)歷能讓我在以后的工作和生活中不斷成長與進步。</p><p><b>  參考文獻</b></p><p>  [1] 周國運。單片機原理及應(yīng)用(C語言版)。北京:中國水利水電出版社,2010&

85、lt;/p><p>  [2] 邱致和,王萬義。 GPS原理與應(yīng)用。北京:電子工業(yè)出版社,2001 </p><p>  [3] 51單片機接收GPS數(shù)據(jù)的算法與實現(xiàn)。 淮安:淮安信息職業(yè)技術(shù)學(xué)院,2008</p><p>  [4] 王丙祥,李建海。 基于89C52的GPS板電路設(shè)計與實現(xiàn)。西安文理學(xué)院學(xué)報(自然科學(xué)版),2007</p><p&g

86、t;  [5] 衛(wèi)星接收模組使用手冊。長天科技股份有限公司</p><p>  [6] 聶榮。實例解析PCB設(shè)計技巧--基于Protel DXP。 北京:機械工業(yè)出版社, 2006</p><p>  [7] 王惠南。 GPS導(dǎo)航原理與應(yīng)用。北京:科學(xué)出版社,2003</p><p>  [8] 洪大永。GPS全球定位系統(tǒng)技術(shù)及其應(yīng)用。廈門:廈門大學(xué)出版社,1998

87、</p><p>  [9] 李征航??臻g定位技術(shù)及應(yīng)用。武漢:武漢大學(xué)出版社,2003</p><p>  [10] 李洪濤,許國昌,薛鴻印。GPS應(yīng)用程序設(shè)計。 北京:科學(xué)出版社,1999</p><p>  [11] 錢天爵,翟學(xué)林。GPS全球定位系統(tǒng)及其應(yīng)用。北京:海潮出版社,1994</p><p>  [12] 王廣運,郭秉義,李

88、洪濤。差分GPS定位技術(shù)與應(yīng)用。北京:電子工業(yè)出版社,1996</p><p><b>  附錄一:(電路圖)</b></p><p><b>  系統(tǒng)電路圖</b></p><p>  附錄二:(程序列表)</p><p><b>  程序清單:</b></p>

89、<p>  程序文件一:GPSrecive.c</p><p>  #include<header.h></p><p>  unsigned char Num_comma=0;//逗號紀錄數(shù)</p><p>  bit read_start=0;//開始接收數(shù)據(jù)標志位</p><p>  unsigned char

90、 *data_temp=" ";//數(shù)據(jù)緩存區(qū)</p><p>  unsigned char *dis_temp="0139250056.25680014.256901203.5";//顯數(shù)據(jù)</p><p>  unsigned char i,igps=0;//igps紀錄接收次數(shù),以表示存儲在數(shù)

91、組中的位置</p><p>  bit flag1=0,flag2=0,flag3=0,flag4=0,flag5=0;//接收標志位:GPGGA</p><p>  #define START'$'//字符串開始</p><p>  #define END'*'//字符串結(jié)束</p><p>  voi

92、d LCD_show( )</p><p>  {unsigned char i;</p><p>  LCD_set_position(0);</p><p>  LCD_prints("Time-> ");</p><p>  for(i=0;i<2;i++) LCD_printc(dis_temp[i

93、]);</p><p>  LCD_printc(':');</p><p>  for(i=2;i<4;i++) LCD_printc(dis_temp[i]);</p><p>  LCD_printc(':');</p><p>  for(i=4;i<6;i++) LCD_printc(di

94、s_temp[i]);</p><p>  LCD_set_position(0x40);</p><p>  LCD_prints("Latit:");</p><p>  for(i=6;i<15;i++) LCD_printc(dis_temp[i]);</p><p>  LCD_printc('*&

95、#39;);</p><p>  delay(200);delay(200);</p><p>  LCD_cls();</p><p>  LCD_set_position(0);</p><p>  LCD_prints("Longi:");</p><p>  for(i=15;i<24

96、;i++) LCD_printc(dis_temp[i]);</p><p>  LCD_printc('*');</p><p>  LCD_set_position(0x40);</p><p>  LCD_prints("High : ");</p><p>  for(i=24;i<31;i

97、++) LCD_printc(dis_temp[i]);</p><p>  LCD_prints("M");</p><p>  delay(255);delay(200);</p><p><b>  }</b></p><p>  /*****************串行口中斷子程序******

98、********************/</p><p>  void serial() interrupt 4</p><p><b>  {</b></p><p>  RI=0;//軟件清除中斷標志位</p><p>  //判斷是否接收到字符“$”,ASCII碼為0x24,收到后開始繼續(xù)數(shù)據(jù)并置標志//reco

99、rd=1;</p><p>  if(SBUF=='$')//判斷是不是'$'符號</p><p>  {flag1=1;</p><p>  //開始接收數(shù)據(jù),計數(shù)變量初始化(清零);</p><p>  igps=0;//記錄緯度數(shù)據(jù)字符數(shù)量的變量</p><p>  Num_co

100、mma=0;//記錄逗號數(shù)量的變量</p><p><b>  }</b></p><p>  else flag1=0;</p><p>  //判斷讀取格式是不是GPGGA格式</p><p>  if((SBUF=='G')&(flag1==1))flag2=1;</p>&

101、lt;p>  else flag2=0;</p><p>  if((SBUF=='P')&(flag2==1))flag3=1;</p><p>  else flag3=0;</p><p>  if((SBUF=='G')&(flag3==1))flag4=1;</p><p>  

102、else flag4=0;</p><p>  if((SBUF=='G')&(flag4==1))flag5=1;</p><p>  else flag5=0;</p><p>  if((SBUF=='A')&(flag5==1))read_start=1;</p><p>  else

103、read_start=0;</p><p>  if(read_start==1)//開始處理GPRMC中的數(shù)據(jù)信息,</p><p><b>  {</b></p><p>  if(SBUF==',')//利用GPGGA數(shù)據(jù)中的逗號間隔,判斷數(shù)據(jù)信息</p><p><b>  {

104、</b></p><p>  Num_comma++;//記錄逗號個數(shù),標志數(shù)據(jù)的意義</p><p><b>  }</b></p><p>  if(Num_comma==1)//接收時間,時分秒格式</p><p><b>  {</b></p><p>

105、  data_temp[igps]=SBUF;//將字符放入字符串</p><p>  //“data_temp”中</p><p><b>  igps++;</b></p><p><b>  }</b></p><p>  if(Num_comma==2)//接收接收緯度,ddmm.mmmm格

106、式</p><p>  {data_temp[igps]=SBUF;</p><p><b>  igps++;</b></p><p><b>  }</b></p><p>  if(Num_comma==4)//接收精度,ddmm.mmmm格式</p><p><

107、;b>  {</b></p><p>  data_temp[igps]=SBUF;</p><p><b>  igps++;</b></p><p><b>  }</b></p><p>  if(Num_comma==10)//海拔高度:0—99999.9</p&g

108、t;<p><b>  {</b></p><p>  if(SBUF!='M')//不接受M單位數(shù)據(jù),節(jié)省資源</p><p>  data_temp[igps]=SBUF;</p><p><b>  igps++;</b></p><p><b>  

109、}</b></p><p>  if(SBUF=='*')//判斷是否收到字符“*”,是,則結(jié)束接收,//開始處理</p><p><b>  {</b></p><p>  for(i=0;i<igps;i++)</p><p><b>  {</b></

110、p><p>  data_temp[igps]=dis_temp[igps];</p><p><b>  }</b></p><p>  //返回初值;標識結(jié)束一次接收完畢</p><p>  Num_comma=0;</p><p>  read_start=0;</p><p

111、><b>  igps=0;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  /***********************************

112、*/</p><p>  void main()</p><p><b>  {</b></p><p>  TMOD=0x20;//初始化串口</p><p>  TL1 =0xfd;</p><p>  TH1 =0xfd;//4800波特率</p><p>  SCO

113、N=0x50;//工作方式1:八位異步通信,允許接收</p><p>  PCON=0x00;//波特率加倍關(guān)</p><p>  IE=0x90;//打開總中斷EA,和串行口中斷ES</p><p>  TR1=1;//開啟啟動定時器1</p><p>  LCD_initial();</p><p>  LCD_l

114、og();//開機顯示信息</p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  LCD_show();</p><p><b>  }</b></p><p><b>  }<

115、/b></p><p>  程序文件二:LCD1602.c</p><p>  #include "header.h"</p><p>  void LCD_check_busy(void) </p><p><b>  {</b></p><p>  UCHAR D

116、H;//高字節(jié)</p><p><b>  do{ </b></p><p>  //分兩次寫,每次寫四位,先高位后低位 </p><p><b>  LCD_RS=0;</b></p><p><b>  LCD_RW=1;</b></p

117、><p>  LCD_EN=0; </p><p><b>  LCD_EN=1;</b></p><p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p>  DH = L

118、CD_DATA & 0xF0;</p><p><b>  LCD_EN=0;</b></p><p><b>  LCD_RW=0;</b></p><p><b>  LCD_RW=1;</b></p><p><b>  LCD_EN=1;</b&

119、gt;</p><p>  _nop_(); _nop_();</p><p><b>  LCD_EN=0;</b></p><p>  }while (DH & 0x80);</p><p><b>  }</b></p><p>  void LCD_write

120、_instruction(unsigned char LCD_instruction) </p><p><b>  { </b></p><p>  LCD_DATA&= 0x0F;</p><p>  LCD_DATA|= (LCD_instruction & 0xF0);</p><p><

121、;b>  LCD_RS=0;</b></p><p><b>  LCD_RW=0;</b></p><p><b>  LCD_EN=0;</b></p><p>  LCD_EN=1;_nop_();_nop_();LCD_EN=0;</p><p>  LCD_DATA&am

122、p;= 0x0F;</p><p>  LCD_DATA|= (LCD_instruction << 4);</p><p>  LCD_EN=1;_nop_();_nop_();LCD_EN=0;</p><p>  LCD_check_busy();</p><p><b>  }</b></p&g

123、t;<p>  /******* 輸出一個字節(jié)數(shù)據(jù)到LCD ********/</p><p>  void LCD_write_data(unsigned char LCD_data) </p><p><b>  {</b></p><p>  LCD_DATA&= 0x0F;</p><

124、p>  LCD_DATA|= (LCD_data & 0xF0);// Get the most significant nibble first。 </p><p>  LCD_RS=1;LCD_RW=0;</p><p>  LCD_EN=0; // Specify a data1 write operation。</p><p>  LCD_

125、EN=1; _nop_();_nop_();LCD_EN=0;</p><p>  LCD_DATA&= 0x0F;</p><p>  LCD_DATA|= (LCD_data << 4); // Repeat for least significant nibble。</p><p><b>  LCD_EN=0;</b&g

126、t;</p><p>  LCD_EN=1;_nop_();_nop_();LCD_EN=0;</p><p>  LCD_check_busy();</p><p><b>  }</b></p><p>  /******** LCD清屏 ********/</p><p>  void LC

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論