久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4662|回復(fù): 8
收起左側(cè)

單片機(jī)GPS的GPRMC數(shù)據(jù)解析程序與Proteus仿真圖

[復(fù)制鏈接]
ID:690560 發(fā)表于 2021-9-16 00:45 | 顯示全部樓層 |閱讀模式
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.png ${@H8GDJ{26U_D70RGJ.png
$GPRMC
格式為:
$GPRMC,010101.130, A, 3606.6834, N, 12021.7778, E, 0.0, 238.3, 010807,,,A*6C
$GPRMC, <1>, <2>, <3>, <4>, <5>, <6>, <7>, <8>, <9>,

$ pos=0

<1> 當(dāng)前位置的格林尼治時(shí)間,即世界時(shí)間,與北京時(shí)間差8個(gè)小時(shí),格式為hhmmss.ms [pos+6]

<2> 狀態(tài), A 為有效位置, V為非有效接收警告,即當(dāng)前天線視野上方的衛(wèi)星個(gè)數(shù)少于3顆。 [pos+17]

注意幾點(diǎn):
1、當(dāng)GPS數(shù)據(jù)有效時(shí)第17位(一般情況下,程序里最好是找第二個(gè)逗號在取下一位判斷)為“A”,無效時(shí)為“V”;
2、GPS有效時(shí),當(dāng)速度為0時(shí)顯示0.0(兩位數(shù)),當(dāng)速度不為0時(shí)小數(shù)點(diǎn)前面數(shù)據(jù)根據(jù)情況變化,最大為三位,此處速度單位為節(jié)(海里),需要做處理才能得到我們習(xí)慣的單位(公里/小時(shí));
3、GPS無效時(shí),除了第17位顯示V以外,不輸入速度,角度數(shù)據(jù);
4、當(dāng)給GPS復(fù)位時(shí)第17位為V,不輸出速度,角度,時(shí)間數(shù)據(jù)。

d.推薦定位信息(RMC)//項(xiàng)目需要


$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh

$GPRMC,082006.000,A,3852.9276,N,11527.4283,E,0.00,0.0,261009,,*38

<1> UTC時(shí)間,hhmmss(時(shí)分秒)格式    08 時(shí)20 分06 秒
<2> 定位狀態(tài),A=有效定位,V=無效定位
<3> 緯度ddmm.mmmm(度分)格式(前面的0也將被傳輸)  北緯38 度52.9276 分
<4> 緯度半球N(北半球)或S(南半球)
<5> 經(jīng)度dddmm.mmmm(度分)格式(前面的0也將被傳輸)  東經(jīng)115 度27.4283 分
<6> 經(jīng)度半球E(東經(jīng))或W(西經(jīng))
<7> 地面速率(000.0~999.9節(jié),前面的0也將被傳輸)
<8> 地面航向(000.0~359.9度,以真北為參考基準(zhǔn),前面的0也將被傳輸)
<9> UTC日期,ddmmyy(日月年)格式    26日10月09年
<10> 磁偏角(000.0~180.0度,前面的0也將被傳輸)
<11> 磁偏角方向,E(東)或W(西)
<12> 模式指示(僅NMEA0183 3.00版本輸出,A=自主定位,D=差分,E=估算,N=數(shù)據(jù)無效)

經(jīng)緯度格式分為三種:度、度-分、度-份-秒
1.) ddd.ddddd 【度 . 度 格式】的十進(jìn)制小數(shù)部分(5位)
2.) ddd°mm.mmm’ 【度 . 分 . 分 格式】的十進(jìn)制小數(shù)部分(3位)
3.)   ddd°mm’ss’’ 【度 . 分 . 秒 格式】 Google 使用的是第三種格式  度 分’秒’’

單片機(jī)源程序如下:

  1. #include <reg51.h>
  2. #include <intrins.h>

  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. uchar dataLength = 80;
  6. uchar count=0;

  7. bit Flag1=0;
  8. bit Flag2=0;
  9. bit Flag3=0;

  10. uchar idata uartBuffer[100]={0};//串口GPS數(shù)據(jù)緩沖數(shù)組
  11. uchar uartByte;//所處幀的部分                                                   

  12. uchar idata uLatitude[14]="W00 00'00.00";//緯度//<3>        //以下為GPRMC語句信息提取//
  13. uchar idata uLongitude[14]="J000 00'00.00";//經(jīng)度//<5>
  14. uchar idata uSpeed[10]={0};//地面速度//<7>
  15. uchar idata uDate[9]="D00/00/00";//日期//<9>
  16. uchar idata hours[9]="H00/00/00";//時(shí)分//<9>
  17. sbit lcdRs=P3^5;
  18. sbit lcdRw=P3^6;
  19. sbit lcdEn=P3^7;


  20. //數(shù)碼管
  21. //共陰極

  22. unsigned char dispbitcode[6]={0x01,0x02,0x04,0x08,0x10,0x20};
  23. unsigned char dispcode[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x07,0x07,0x7F,0x6F};
  24. //0 0x3F 1 0x06 2 0x5B 3 0x4F 4 0x66 5 0x6D 6 0x7D 7 0x07 8 0x7F 9 0x6F
  25. unsigned char dispbuf[];

  26. // 延時(shí)函數(shù)
  27. void delay(unsigned int z)
  28. {
  29. unsigned int x,y;
  30. for(x=z;x>0;x--)
  31. for(y=1;y>0;y--);
  32. }


  33. // GPS時(shí)間提取函數(shù)
  34. void removehours(unsigned char temp)
  35. {           
  36.         uchar i,k=0;
  37.         for(i=temp+2;i<temp+8;i++)
  38.                 hours[k++]=uartBuffer[i];
  39. }


  40. // GPS數(shù)據(jù)處理函數(shù)
  41. void  uartBufferDeal()
  42. {
  43.         uchar i,j;
  44.         uchar comma_n=0;
  45.         for(i=0;i<10;i++)
  46.         {
  47.         if(uartBuffer[i]=='R')
  48.                 {
  49.                         comma_n=0;//逗號的個(gè)數(shù)歸零
  50.                         for(j=i;j<10;j++)
  51.                         {        
  52.                                 if(uartBuffer[j]==',')
  53.                                         comma_n+=1;
  54.                                 if(comma_n==0)
  55.                                         removehours(j);
  56.                         }
  57.                 }
  58.         }
  59. }

  60. // 經(jīng)緯度數(shù)據(jù)格式轉(zhuǎn)換函數(shù)


  61. //==============串口初始化函數(shù)==========================
  62. void uartInit()
  63. {
  64.         SCON = 0x50;      //REN=1允許串行接收狀態(tài),串口工作模式1                              
  65.         TMOD|= 0x20;      //定時(shí)器工作方式2                    
  66.         PCON|= 0;                                 //SMOD設(shè)置為0                                                         
  67.         TH1 = 0xFD;                                // 波特率9600、數(shù)據(jù)位8、停止位1。效驗(yàn)位無 (11.0592M)
  68.         TL1 = 0xFD;         
  69.         TR1  = 1;                                        //定時(shí)器T1啟動(dòng)                                                            
  70.         ES   = 1;                                 //開串口中斷                  
  71. }
  72.         int kk=0;
  73. //主函數(shù)
  74. void main (void)
  75. {
  76.         uartInit();//初始化串口
  77.         EA = 1;// 開總中斷

  78.         while(1)
  79.     {  

  80.             kk++;
  81.                 if(kk==6)kk=0;
  82.            P2=dispbitcode[5-kk];
  83.            P0=dispcode[hours[kk]-'0'];
  84.            delay(300);
  85.            P0=0x00;
  86.            delay(10);
  87.                 if(Flag1==1)
  88.                 {
  89.                         uartBufferDeal();//經(jīng)緯度數(shù)據(jù)處理
  90.                         Flag1=0;//清除標(biāo)志位
  91.                         count=0;
  92.                         
  93.                 }
  94.                 ES = 1;//開串口中斷

  95.         }
  96. }

  97. // 串口中斷函數(shù)        
  98. void SerialInt (void) interrupt 4
  99. {
  100.         if(RI == 1)        //RI接收中斷標(biāo)志
  101.         {
  102.                 uartByte=SBUF;
  103.                 if(uartByte=='R')
  104.                 {
  105.                         Flag2=1;
  106.                 }
  107.                 if(Flag2==1)
  108.                 {
  109.                         uartBuffer[count++] = uartByte;//緩沖數(shù)據(jù)存入uartBuffer[]數(shù)組
  110.                 }
  111.                 if(count>=dataLength)
  112.                 {
  113.                         ES = 0;//關(guān)閉串口中斷
  114.                         Flag1=1;//標(biāo)志位置1
  115.                         Flag2=0;//標(biāo)志位清零
  116.                 }
  117.                 RI = 0;//清除RI接收中斷標(biāo)志
  118.         }
  119. }
復(fù)制代碼

所有資料51hei附件下載:
proteus2.3.rar (112.17 KB, 下載次數(shù): 75)

評分

參與人數(shù) 1黑幣 +30 收起 理由
admin + 30 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評分

回復(fù)

使用道具 舉報(bào)

ID:262 發(fā)表于 2021-9-17 18:47 | 顯示全部樓層
數(shù)碼管顯示好像有點(diǎn)問題,是段碼弄錯(cuò)了?
回復(fù)

使用道具 舉報(bào)

ID:446113 發(fā)表于 2021-9-18 08:26 | 顯示全部樓層
proteus8.7 無法打開
回復(fù)

使用道具 舉報(bào)

ID:690560 發(fā)表于 2023-6-9 20:08 | 顯示全部樓層
heicad 發(fā)表于 2021-9-17 18:47
數(shù)碼管顯示好像有點(diǎn)問題,是段碼弄錯(cuò)了?

項(xiàng)目太久了,忘記了,不過,如果錯(cuò)了改一下顯示的字段就好了,問題不大
回復(fù)

使用道具 舉報(bào)

ID:690560 發(fā)表于 2023-6-9 20:08 | 顯示全部樓層

可能版本太低了吧
回復(fù)

使用道具 舉報(bào)

ID:44037 發(fā)表于 2023-6-10 10:43 | 顯示全部樓層
謝謝樓主分享  顯示不全  單步可以顯示完整數(shù)字
   請教  怎么修改
回復(fù)

使用道具 舉報(bào)

ID:446113 發(fā)表于 2023-6-12 12:06 | 顯示全部樓層
可否提供 LCD顯示 代碼,你附件的代碼只有數(shù)碼管顯示時(shí)間的功能,坐標(biāo)數(shù)據(jù)沒有顯示,如果可以的話,發(fā)給我,萬分感謝。
回復(fù)

使用道具 舉報(bào)

ID:690560 發(fā)表于 2023-6-20 20:59 | 顯示全部樓層
GodWorks 發(fā)表于 2023-6-12 12:06
可否提供 LCD顯示 代碼,你附件的代碼只有數(shù)碼管顯示時(shí)間的功能,坐標(biāo)數(shù)據(jù)沒有顯示,如果可以的話,發(fā)給我 ...

那個(gè)項(xiàng)目太古老了,中間電腦壞過一次,工程文件也丟了,不好意思哈
回復(fù)

使用道具 舉報(bào)

ID:1086148 發(fā)表于 2023-7-17 13:38 | 顯示全部樓層
你好! 老師! 非常感興趣對于你的“單片機(jī)GPS的GPRMC數(shù)據(jù)解析程序"  !   我想獲得你的源程序。
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 成人区精品一区二区婷婷 | 欧美成人极品 | 久草免费在线视频 | 国产精品国产三级国产专区53 | 中文字幕高清在线 | 成人9ⅰ免费影视网站 | 天天看天天爽 | 日日干夜夜爽 | 国产又粗又猛视频免费 | 一边摸一边操 | 性视频在线| 日本不卡中文字幕 | 伊人精品久久 | 日韩精品欧美 | 欧美专区第一页 | 日韩影音| 欧美在线小视频 | 欧美日韩亚洲一区二区 | 欧美一区不卡 | 一级做a爰片久久毛片潮喷 亚洲黄色天堂 | 国产免费黄色片 | 日韩伦理视频 | 亚洲手机在线 | 国产浮力第一页 | 在线免费观看av片 | 国产香蕉视频在线观看 | 国产伊人网 | 欧美视频免费在线观看 | 手机看片国产 | 国产一级在线 | 免费视频国产 | 在线看黄色片 | 亚洲国产中文字幕 | 色综合一区 | 午夜激情视频 | 日韩欧美在线视频观看 | 欧美日韩视频在线 | 久久久久久久影院 | 日韩亚洲欧美在线 | 97视频免费 | 青青草国产在线视频 |