<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 汽車(chē)電子 > 設(shè)計(jì)應(yīng)用 > 基于GPS的高精度無(wú)誤差倒計(jì)時(shí)牌的設(shè)計(jì)

          基于GPS的高精度無(wú)誤差倒計(jì)時(shí)牌的設(shè)計(jì)

          ——
          作者: 時(shí)間:2007-01-26 來(lái)源:《國(guó)外電子元器件》 收藏

          1 引言

          gps是global positioning system的簡(jiǎn)稱(chēng),是利用導(dǎo)航衛(wèi)星進(jìn)行測(cè)時(shí)和測(cè)距的全球定位系統(tǒng)。它具有精度高、全天候和全球覆蓋能力。將gps應(yīng)用于時(shí)鐘倒計(jì)時(shí)系統(tǒng)中能實(shí)現(xiàn)高精度時(shí)間顯示功能?;趃ps的高精度、倒計(jì)時(shí)牌是衛(wèi)星測(cè)時(shí)技術(shù)、計(jì)算機(jī)技術(shù)及通信技術(shù)三者的有機(jī)結(jié)合。從功能模塊上看,整個(gè)系統(tǒng)分為gps測(cè)時(shí)接收系統(tǒng)和時(shí)鐘顯示系統(tǒng)。它主要完成以下功能:
          定時(shí)接收gps衛(wèi)星發(fā)送的數(shù)據(jù)并進(jìn)行識(shí)別和緩存;
          對(duì)gps測(cè)時(shí)數(shù)據(jù)進(jìn)行格式轉(zhuǎn)換,以使編碼格式適于接收;
          在給定時(shí)間內(nèi)刷新ds12c887型時(shí)鐘的時(shí)間;
          讀ds12c887時(shí)間,進(jìn)行倒計(jì)時(shí)換算并顯示。

          2 硬件設(shè)計(jì)

          基于gps的高精度倒計(jì)時(shí)牌的硬件結(jié)構(gòu)較為簡(jiǎn)單,包括控制模塊和顯示模塊,如圖1所示。

          本文引用地址:http://www.ex-cimer.com/article/20819.htm

          2.1 控制模塊

          89c51型單片機(jī)是整個(gè)控制系統(tǒng)的核心,完成對(duì)串行口控制器的初始化和數(shù)據(jù)讀寫(xiě),還要對(duì)接收的各種數(shù)據(jù)進(jìn)行識(shí)別、轉(zhuǎn)儲(chǔ)及顯示。

          由于日本光電公司gsv-15型oem gps接收板傳輸?shù)臄?shù)據(jù)以串行方式輸出一幀10位、波特率為4800bit,mcs-51型單片機(jī)串口輸入輸出格式匹配,所以利用單片機(jī)串行口直接從oem接收數(shù)據(jù)。

          ds12c887具有提供較高精度年、月、日、時(shí)、分、秒時(shí)間的功能,對(duì)其校準(zhǔn)后,在掉電情況下,10年之內(nèi)仍能準(zhǔn)確的進(jìn)行計(jì)時(shí),并且能與單片機(jī)直接相連。

          2.2 顯示模塊

          本系統(tǒng)利用74hc595實(shí)現(xiàn)串行方式控制數(shù)碼管顯示,占用口線少,硬件結(jié)構(gòu)簡(jiǎn)單。74hc595型串/并轉(zhuǎn)換移位寄存器具有鎖存和3態(tài)輸出功能。14腳(ser)為串行輸入端;12腳(rclr)為移位時(shí)鐘端,上升沿將14腳數(shù)據(jù)移入寄存器;11腳(srclr)為鎖存時(shí)鐘端,上升沿鎖存數(shù)據(jù);8腳(e)為3態(tài)輸出控制端,接低電平時(shí)輸出數(shù)據(jù)。

          單片機(jī)輸出數(shù)據(jù)和移位時(shí)鐘,在時(shí)鐘上升沿時(shí)將數(shù)據(jù)移入74hc595。p1.0輸出數(shù)據(jù),在移位脈沖上升沿到來(lái)時(shí)數(shù)據(jù)移出。p1.1輸出移位脈沖。p1.2輸出鎖存脈沖。數(shù)據(jù)出現(xiàn)在并行輸出端上經(jīng)74hc07驅(qū)動(dòng)數(shù)碼管顯示,由于數(shù)據(jù)已被鎖存,在傳送下一組數(shù)據(jù)時(shí),前一組數(shù)據(jù)的內(nèi)容不變,以此方式進(jìn)行數(shù)據(jù)的傳送和顯示。由于在控制模塊中已用單片機(jī)的串行口接收oem板內(nèi)容,所以在顯示模塊軟件中要將p1.0、p1.1、p1.2定義為模擬的串行口。這樣,p1.0、p1.2、p1.3就可作為串行口使用。

          3 軟件設(shè)計(jì)

          3.1 主程序

          包括對(duì)單片機(jī)自身機(jī)制的設(shè)置串行口的初始化等,如圖2所示。

          3.2 gps測(cè)時(shí)接收

          gps測(cè)時(shí)接收數(shù)據(jù)由串行口接收,由單片機(jī)對(duì)其進(jìn)行讀入、識(shí)別、轉(zhuǎn)換及存儲(chǔ)等操作,在程序開(kāi)始時(shí),首先識(shí)別接收信號(hào),看其是否是要接收的信號(hào),oem板接收的時(shí)間信號(hào)的字頭為gpzda。由于接收的時(shí)間信號(hào)是ascⅱ碼,所以要將接收數(shù)據(jù)轉(zhuǎn)化為二進(jìn)制數(shù)。由于接收的時(shí)間為格林威治時(shí)間,所以必須轉(zhuǎn)化為北京時(shí)間,然后將轉(zhuǎn)化后的時(shí)間寫(xiě)入ds12c887中。ds12c887是一種比較準(zhǔn)確的計(jì)時(shí)電路,不需要時(shí)刻接收gps信號(hào)。筆者規(guī)定1小時(shí)接收1次gps信號(hào),其流程如圖3所示。

          3.3 時(shí)鐘倒計(jì)時(shí)顯示
          在此程序中模擬串行口,讀ds12c887的數(shù)據(jù),利用74hc595對(duì)其數(shù)據(jù)進(jìn)行顯示,流程如圖4所示。

          3.4 倒計(jì)時(shí)子程序

          以計(jì)算從現(xiàn)在到2006年1月1日為例,單片機(jī)讀ds12c887的時(shí)間單元,并將其存放在以69h為起始的單元中。先讀取月份,利用查表的方法計(jì)算其下月份到預(yù)定時(shí)間的天數(shù)。然后再利用查表方式判斷其月份是31天、30天,28天或29天,然后將查表得到的天數(shù)減去讀取日期,這樣將二個(gè)天數(shù)相加就得到實(shí)際天數(shù)。進(jìn)行時(shí)、分、秒的計(jì)算時(shí),首先把2006年1月1日0點(diǎn)0時(shí)0分0秒轉(zhuǎn)化為2006年12月31日23點(diǎn)59時(shí)60秒,這樣直接利用時(shí)、分、秒相減就得到相差的時(shí)、分、秒。倒計(jì)時(shí)流程如圖5所示。

          4 結(jié)束語(yǔ)

          本文所述的基于gps的高精度、無(wú)誤差倒計(jì)時(shí)牌經(jīng)調(diào)試運(yùn)行和參數(shù)整定后,運(yùn)行穩(wěn)定可靠,連續(xù)長(zhǎng)期運(yùn)行積累的誤差為零,當(dāng)時(shí)的時(shí)間精度誤差<15ms。本系統(tǒng)的控制模塊結(jié)構(gòu)簡(jiǎn)單,便于實(shí)際開(kāi)發(fā)應(yīng)用。



          關(guān)鍵詞:

          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();