湖州師范學院信息工程學院 潘泉 成新民
設計一個基于單片機的經緯度定位顯示系統,系統通過單片機串行數據通信實現GPS 定位信息的接收及信息的顯示。本文詳細介紹了系統的硬件設計和系統軟件設計的方法。通過測試,系統工作性能較為穩定,抗干擾能力強,功耗低,定位精度較精準,在測控定位領域的應用開發中具有一定的應用價值。
GPS(Global Positioning System,全球定位系統)是一個以接收導航衛星信號為基礎的無線電空間定位系統,它可以利用衛星采集到觀測點的經緯度、高度和時間定位信息,地球表面和上方任何地點可以無源方式同時接收用于定位系統。GPS 在民用領域中發現其在定位、導航和計時等方面的價值,現廣泛運用于運輸、公共資源管理、精確測繪、公共安全等領域[1]。目前GPS 的外觀類型設計已逐漸向便攜化發展,因此本項目針對相關特種設備,采用高精度的GPS、MCU 處理器采集設備的地理信息,計算顯示出實時的所配備裝置的經緯度信息,該系統可以有效地應用于特定車輛設備的定位。
所設計的系統以51 單片機為核心,由GPS 模塊NEO-6M 通過天線獲取當前地理位置信息、時間日期等數據,經串行口輸入到51 單片機,經51 單片機處理后,換算成經緯度數據再傳至液晶顯示屏,由LCD12864 液晶顯示屏顯示出GPS 模塊所獲取的地理位置信息。系統設計了USB 輸出接口,可用于定位位置數據的導出,同時數據可以實時上傳云服務器以供上位機使用,系統能夠顯示與云服務器連接的指示提醒。硬件結構框圖如圖1所示。

圖1 硬件結構框圖Fig.1 Hardware structure block diagram
主控電路采用89C51 單片機為主控芯片,89C51 單片機是一種低功耗、高性能的CMOS8 位微控制器。在本系統設計的控制任務單片機主要需要用于數據接收控制和顯示控制。主控電路如圖2所示。

圖2 主控電路圖Fig.2 Main control circuit diagram
在數據接收控制中51 單片機內部將集成串行口通信電路,此電路可以接收其他模塊傳送進來的數據信息,并將接收到的數據信息存儲至數據緩沖區中等待處理。
顯示控制將利用89C51 單片機的I/O 端口控制LCD 12864 液晶顯示器顯示相應信息,顯示之前會先從數據緩沖區取出數據信息進行處理,然后送到LCD12864 液晶顯示器中進行所顯示需要的信息。
顯示模塊采用12864 中文圖形點陣液晶顯示模塊,可顯示漢字及圖形,內置8192 個中文漢字(16×16 點陣)、128 個字符(8×16 點陣)及64×256 點陣顯示RAM(GDRAM)[2]。顯示模組背部自帶10K3×3 硬封可調電位器,可以調到顯示理想對比度;LED 背光極性可調,JP4 為液晶背光正負反接處,此模組背光為4 顆LED 燈,非普通背光;模組自帶防靜電電容,抗干擾性更強。
其中12864 的3 腳為背光調節的引腳,當3 腳的電壓不同時,背光的亮度就不同,因此設計了一個電路來調節3 腳的電壓,就是利用一個滑動變阻器,一個腳接電源電壓,一個腳接地,調節滑動變阻器就可以改變中間引腳的電壓,我們只需將中間引腳和12864 的3 腳相連接即可。液晶顯示電路如圖3所示。

圖3 液晶顯示電路Fig.3 Liquid crystal display circuit
定位模塊選用UBLOX-6MGPS 模塊。該模塊具有高靈敏度、低功耗、便捷化等特點,適用于車載、手持設備,如車輛監控、手機、攝像機及其他移動定位系統的應用[3]。
系統中的定位模塊與單片機連接,由于定位模塊波特率的原因,使用11.0952 晶振,可以使單片機順利地解析出數據包進行計算。GPS 通過接收衛星信號,可以準確地定出其所在的位置,位置誤差小于10m。同時GPS 還可以接收衛星發下來的時間信息,利用單片機控制12864 顯示出當前時間,用戶可以很方便地了解時間。所設計的電路如圖4所示。

圖4 定位模塊電路圖Fig.4 Circuit diagram of positioning module
本系統的所有程序均采用C 語言編寫,程序定義了多個子程序來分別管理各個模塊,通過對各個子程序的操作,來構建整個程序框架。各個子程序即可單獨提取出作為獨立的一個郵寄代碼,大大增加了項目的獨立性、靈活性。
系統開機后,液晶顯示屏和單片機進行初始化,然后開始接收從GPS 模塊傳遞過來的地理數據信息,并在此進行一次判斷處理,判斷接收到的數據是否真實卻有效,如果有效則開始接收該信息中的內容,并送至語句標識區進行篩選,提取其中以“$GPRMC”開頭的語句[4];若沒有接收到數據則繼續等待。系統接收完數據后,通過51 單片機設定好的程序自動進行數據格式轉換處理。然后對液晶顯示屏進行清屏處理,并且將轉化格式后的數據傳到液晶顯示屏中并顯示該一系列信息。同時單片機通過每秒刷新一次RAM 頻率,從而可使得LCD12864 液晶顯示器實時地顯示當前GPS 地理信息和時間日期信息。系統主程序流程圖如圖5所示。

圖5 主程序流程圖Fig.5 Main program flow chart
系統開機并初始化結束后,開始接收地理數據信息,如果數據無效,則繼續接收,如果有效則開始轉換日期和時間成字符串形式進行顯示,對接收到的經緯度數據信息,先判斷經緯度方向,北緯還是南緯,東經還是西經,并用“E、S、W、N”字母進行表示,開始分析計算經緯度數據,只有正常顯示緯度,才可以接下來顯示緯分,同理只有顯示出緯分,才可以緯秒,否則其中一塊數據出現錯誤會導致所有顯示數據的錯亂。最后設置所需顯示的整數部分和小數部分以及小數點的位置。顯示子程序流程圖如圖6所示。

圖6 顯示子程序流程圖Fig.6 Display subroutine flow chart
在定位子程序中,需要對接收到的有效信息進行提取、判斷和計算等處理,從而篩選出系統所需要的數據信息并將其轉換成相應格式輸出。在該子程序中需要先判斷接收到的數據格式是否為“$GPRMC”,如果不是則返回繼續接收,如果數據正確則開始分離經緯度、時間、日期并進行格式轉換,對數據進行分析計算同時轉化成ASCII 碼從而進行顯示。其中系統的解碼是單片機接收到以“$GPRMC”開頭格式的信息,然后篩選掉其他無效信息,提取出其中的經緯度、時間、日期定位狀態等信息,具體實現則是在程序中設置一個標識數,當標識數為1 時提取出的則是時間的定位信息并將其保存起來,當標識數為2 時提取出的則是定位狀態的信息,從而以此類推就可以將GPS 的數據解碼并將其全部存取下來。這樣的數據接收方式可以節約不少RAM,而且在數據接收之前只需要進行簡單地判斷數據格式即可,由此可以節省很多計算時間,讓給其他進程工作,從而大大減少了開發的時間成本以及定位電路的計算復雜程度。定位子程序流程圖如圖7所示。

圖7 定位子程序流程圖Fig.7 Positioning subroutine flow chart
該系統設計制作完成后,可實時定位跟蹤各種移動設備,當移動設備行動路線超過事先所規定的范圍時,可以通過后臺及時觀察并進行提醒或采取其他特殊措施進行制止;同時用戶自己持有該系統時,可以實時通過讀取12864 所顯示內容,了解自己的位置以及當前時間。且本設備電路簡單、性能穩定、可靠性高、硬件成本低、運算速度快、易于擴展。因此在一些特種設備中配備此裝置尤為必要,對于特種車輛的智慧監管具有重要的現實意義,在測控領域的應用開發中具有一定的實用價值。