找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 10815|回复: 20
收起左侧

51单片机+gps定位+1602 源程序

  [复制链接]
ID:116260 发表于 2016-4-24 02:55 | 显示全部楼层 |阅读模式
很好的GPS  for51

0.png

下面是部分程序预览(完整版本请下载本帖附件):
  1. /******************************************************************************
  2. Copyright 2007
  3. All rights reserved.

  4. 文件名        :gps1602.c
  5. 模块名称:
  6. 功能概要:

  7. 取代版本:0.0.1
  8. 修改人        :pulan
  9. 完成日期:2007.07.27
  10. 升级说明:create
  11. cpu:stc89c58    晶振频率:11.0592Mhz
  12. 硬件连接:
  13. ---------------------------------------------------------------
  14. |DB0-----P0.0 | DB4-----P0.4 | WR-------P2.2 | A0--------P2.1 |
  15. |DB1-----P0.1 | DB5-----P0.5 | RD-------P2.4 | Vo悬空 |
  16. |DB2-----P0.2 | DB6-----P0.6 | CS-------P2.5 |
  17. |DB3-----P0.3 | DB7-----P0.7 | RST-------P2.3 |                        
  18. ---------------------------------------------------------------
  19. ******************************************************************************/

  20. #include <reg52.h>
  21. #include <string.h>

  22. #define LCM_Data P0
  23. #define Busy 0x80   //用于检测LCM状态字中的Busy标识
  24. sbit LCM_RW = P2^5;  //1602定义引脚
  25. sbit LCM_RS = P2^4;
  26. sbit LCM_E = P2^6;

  27. //sbit GPS_SPD=P1^2;
  28. //sbit SPD_TYPE=P1^3;
  29. sbit KEY1=P1^1;


  30. char code TIME_AREA= 8;            //时区

  31. //GPS数据存储数组
  32. unsigned char JD[10];            //经度
  33. unsigned char JD_a;            //经度方向
  34. unsigned char WD[9];            //纬度
  35. unsigned char WD_a;            //纬度方向
  36. unsigned char time[6];        //时间
  37. unsigned char speed[5];        //速度
  38. unsigned char high[6];        //高度
  39. unsigned char angle[5];        //方位角
  40. unsigned char use_sat[2];        //使用的卫星数
  41. unsigned char total_sat[2];    //天空中总卫星数
  42. unsigned char lock;            //定位状态

  43. //串口中断需要的变量
  44. unsigned char seg_count;        //逗号计数器
  45. unsigned char dot_count;        //小数点计数器
  46. unsigned char byte_count;        //位数计数器
  47. unsigned char cmd_number;        //命令类型
  48. unsigned char mode;                //0:结束模式,1:命令模式,2:数据模式
  49. unsigned char buf_full;            //1:整句接收完成,相应数据有效。0:缓存数据无效。
  50. unsigned char cmd[5];            //命令类型存储数组

  51. //显示需要的变量
  52. unsigned int dsp_count;        //刷新次数计数器
  53. unsigned char time_count;
  54. bit page;
  55. bit spd_type;

  56. void sys_init(void);
  57. bit chk_key(void);

  58. void WriteDataLCM(unsigned char WDLCM);
  59. void WriteCommandLCM(unsigned char WCLCM,BuysC);
  60. unsigned char ReadDataLCM(void);
  61. unsigned char ReadStatusLCM(void);
  62. void LCMInit(void);
  63. void LCD_cls(void);
  64. void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);
  65. void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData);
  66. void Delay5Ms(void);
  67. void Delay400Ms(void);
  68. /******************************************************************************************
  69. * 函数名称    :
  70. * 功能描述    :
  71. * 参数        :  参数名称:        输入/输出?        类型                描述
  72. *
  73. * 返回值      :
  74. * 作者        :
  75. * 创建日期    :2006-12-19
  76. * 全局变量    :
  77. * 全局静态变量:
  78. * 局部静态变量:
  79. *----------------------------------------修改历史------------------------------------------
  80. * 当前版本    :                          修改人:                  修改日期:
  81. * 修改说明    :
  82. ******************************************************************************************/
  83. main()
  84. {
  85.     unsigned char i;
  86.     char Bhour;
  87.     unsigned int Knots;
  88.     sys_init();

  89.     while(1)
  90.     {
  91.         if(buf_full==0)                //无GPS信号时
  92.         {
  93.             dsp_count++;
  94.             if(dsp_count>=65000)
  95.                     {
  96.                 LCD_cls();            //清屏
  97.                 DisplayListChar(0,0,"No GPS connect..");
  98.                 while(buf_full==0);
  99.                 LCD_cls();   
  100.                 dsp_count=0;
  101.                     }
  102.         }
  103.         else
  104.                 {                        //有GPS信号时
  105.             if(chk_key())
  106.                     {                //检测到按键切换显示
  107.                 page=!page;
  108.                 LCD_cls();
  109.                     }

  110.             if(!page)
  111.                     {                        //页面1
  112.                 if(buf_full|0x01)
  113.                         {                //GGA语句
  114.                     if(lock=='0')
  115.                             {                    //如果未定位
  116.                         DisplayListChar(0,0,"*---.--.----  ");
  117.                         DisplayListChar(0,1,"* --.--.----  ");                    
  118.                             }
  119.                     else
  120.                             {                            //如果已定位
  121.                         DisplayOneChar(0,0,JD_a);            //显示经度
  122.                         for(i=0;i<3;i++)
  123.                                 {
  124.                             DisplayOneChar(i+1,0,JD[i]);
  125.                                 }
  126.                         DisplayOneChar(4,0,'.');
  127.                         for(i=3;i<10;i++)
  128.                                 {
  129.                             DisplayOneChar(i+2,0,JD[i]);
  130.                                 }

  131.                         DisplayOneChar(0,1,WD_a);            //显示纬度
  132.                         DisplayOneChar(1,1,' ');
  133.                         for(i=0;i<2;i++)
  134.                                 {
  135.                             DisplayOneChar(i+2,1,WD[i]);
  136.                                 }            
  137.                         DisplayOneChar(4,1,'.');
  138.                         for(i=2;i<9;i++)
  139.                                 {
  140.                             DisplayOneChar(i+3,1,WD[i]);
  141.                                 }                           
  142.                       }
  143.                     DisplayOneChar(14,0,use_sat[0]);        //显示接收卫星数
  144.                     DisplayOneChar(15,0,use_sat[1]);
  145.                     buf_full&=~0x01;
  146.                     dsp_count=0;
  147.                 }
  148.                 if(buf_full|0x02){                //GSV语句
  149.                     DisplayOneChar(14,1,total_sat[0]);
  150.                     DisplayOneChar(15,1,total_sat[1]);
  151.                     buf_full&=~0x02;
  152.                     dsp_count=0;
  153.                 }
  154.                 if(buf_full|0x04)
  155.                         {
  156.                     buf_full&=~0x04;
  157.                     dsp_count=0;
  158.                         }
  159.             }
  160.             else
  161.                     {                            //页面2
  162.                 if(buf_full|0x01)
  163.                         {                //GGA语句
  164.                     buf_full&=~0x01;
  165.                     dsp_count=0;
  166.                         }
  167.                 if(buf_full|0x02)
  168.                         {
  169.                     buf_full&=~0x02;
  170.                     dsp_count=0;
  171.                         }
  172.                 if(buf_full|0x04)
  173.                                 {                //RMC语句
  174.                     Bhour=((time[0]-0x30)*10+time[1]-0x30)+TIME_AREA;
  175.                     if(Bhour>=24)
  176.                             {
  177.                         Bhour-=24;
  178.                             }
  179.                     else if(Bhour<0)
  180.                             {
  181.                         Bhour+=24;
  182.                             }
  183.                     DisplayListChar(2,1,"BJT ");
  184.                     DisplayOneChar(6,1,Bhour/10+0x30);
  185.                     DisplayOneChar(7,1,Bhour%10+0x30);
  186.                     DisplayOneChar(8,1,':');
  187.                     DisplayOneChar(9,1,time[2]);
  188.                     DisplayOneChar(10,1,time[3]);
  189.                     DisplayOneChar(11,1,':');
  190.                     DisplayOneChar(12,1,time[4]);
  191.                     DisplayOneChar(13,1,time[5]);
  192.                     if(spd_type)
  193.                             {
  194.                         DisplayListChar(5,0,"km/h A");
  195.                             }
  196.                     else
  197.                             {
  198.                         DisplayListChar(5,0,"knot A");
  199.                             }
  200.                     if(lock=='0')
  201.                             {                    //如果未定位
  202.                         DisplayListChar(0,0,"---.-");
  203.                         DisplayListChar(11,0,"---.-");
  204.                             }
  205.                     else
  206.                             {                            //已经定位
  207.                         if(spd_type)
  208.                                 {                    //km/h显示
  209.                             for(i=0;i<5;i++)
  210.                             {
  211.                                 DisplayOneChar(i,0,speed[i]);
  212.                             }
  213.                                 }
  214.                         else
  215.                                 {                            //knot显示
  216.                             Knots=    (((speed[0]-0x30)*1000
  217.                                     +(speed[1]-0x30)*100
  218.                                     +(speed[2]-0x30)*10
  219.                                     +(speed[4]-0x30))*1000)/1852;
  220.                             DisplayOneChar(0,0,Knots/1000+0x30);
  221.                             DisplayOneChar(1,0,(Knots%1000)/100+0x30);
  222.                             DisplayOneChar(2,0,(Knots%100)/10+0x30);
  223.                             DisplayOneChar(3,0,'.');
  224.                             DisplayOneChar(4,0,Knots%10+0x30);
  225.                                 }
  226.                         for(i=0;i<5;i++)
  227.                         {
  228.                             DisplayOneChar(11+i,0,angle[i]);
  229.                         }
  230.                     }
  231.                     buf_full&=~0x04;
  232.                     dsp_count=0;
  233.                 }
  234.             }
  235.         }
  236.     }
  237. }
  238. /******************************************************************************************
  239. * 函数名称    :
  240. * 功能描述    :
  241. * 参数        :  参数名称:        输入/输出?        类型                描述
  242. *
  243. * 返回值      :
  244. * 作者        :
  245. * 创建日期    :2006-12-19
  246. * 全局变量    :
  247. * 全局静态变量:
  248. * 局部静态变量:
  249. *----------------------------------------修改历史------------------------------------------
  250. * 当前版本    :                          修改人:                  修改日期:
  251. * 修改说明    :
  252. ******************************************************************************************/
  253. bit chk_key(void)
  254. {
  255.     if(!KEY1)
  256.             {
  257.         Delay5Ms();
  258.         Delay5Ms();
  259.         if(!KEY1)
  260.                 {
  261.             while(!KEY1);
  262.             Delay5Ms();
  263.             Delay5Ms();
  264.             return(1);
  265.                 }
  266.             }
  267.     return(0);
  268. }

  269. /******************************************************************************************
  270. * 函数名称    :sys_init
  271. * 功能描述    :系统初始化
  272. * 参数        :  参数名称:        输入/输出?        类型                描述
  273. *
  274. * 返回值      :
  275. * 作者        :
  276. * 创建日期    :2006-12-19
  277. * 全局变量    :
  278. * 全局静态变量:
  279. * 局部静态变量:
  280. *----------------------------------------修改历史------------------------------------------
  281. * 当前版本    :                          修改人:                  修改日期:
  282. * 修改说明    :
  283. ******************************************************************************************/
  284. void sys_init()
  285. {
  286.                 PCON |= 0x80;
  287.     SCON |= 0x50;     /* SCON: mode 1, 8-bit UART, enable rcvr */
  288.     TMOD = 0x21;     /* TMOD: timer 1, mode 2, 8-bit reload */
  289.     TH1 = 0xfd;            /* TH1: reload value for 4800 baud @ 11.059MHz */

  290.    
  291.     spd_type=1;            //速度单位km/h
  292.    
  293.     TR1 = 1;         /* TR1: timer 1 run */
  294.     LCMInit();        //初始化LCD
  295.     DisplayListChar(0,0,"GPS Monitor V1.2");
  296.     Delay400Ms();
  297.     LCD_cls();
  298.     IE=0x90;            //开总中断、串口中断
  299. }

  300. /******************************************************************************************
  301. * 函数名称    :WriteDataLCM
  302. * 功能描述    :写数据
  303. * 参数        :  参数名称:        输入/输出?        类型                描述
  304. *
  305. * 返回值      :
  306. * 作者        :
  307. * 创建日期    :2006-12-19
  308. * 全局变量    :
  309. * 全局静态变量:
  310. * 局部静态变量:
  311. *----------------------------------------修改历史------------------------------------------
  312. * 当前版本    :                          修改人:                  修改日期:
  313. * 修改说明    :
  314. ******************************************************************************************/
  315. void WriteDataLCM(unsigned char WDLCM)
  316. {
  317.                 ReadStatusLCM(); //检测忙
  318.                 LCM_Data = WDLCM;
  319.                 LCM_RS = 1;
  320.                 LCM_RW = 0;
  321.                 LCM_E = 0; //若晶振速度太高可以在这后加小的延时
  322.                 LCM_E = 0; //延时
  323.                 LCM_E = 1;
  324. }

  325. /******************************************************************************************
  326. * 函数名称    :WriteCommandLCM
  327. * 功能描述    :写指令
  328. * 参数        :  参数名称:        输入/输出?        类型                描述
  329. *
  330. * 返回值      :
  331. * 作者        :
  332. * 创建日期    :2006-12-19
  333. * 全局变量    :
  334. * 全局静态变量:
  335. * 局部静态变量:
  336. *----------------------------------------修改历史------------------------------------------
  337. * 当前版本    :                          修改人:                  修改日期:
  338. * 修改说明    :
  339. ******************************************************************************************/
  340. void WriteCommandLCM(unsigned char WCLCM,BuysC) //BuysC为0时忽略忙检测
  341. {
  342.                 if (BuysC)
  343.                 ReadStatusLCM(); //根据需要检测忙
  344.                 LCM_Data = WCLCM;
  345.                 LCM_RS = 0;
  346.                 LCM_RW = 0;
  347.                 LCM_E = 0;
  348.                 LCM_E = 0;
  349.                 LCM_E = 1;
  350. }

  351. /******************************************************************************************
  352. * 函数名称    :ReadStatusLCM
  353. * 功能描述    :读状态
  354. * 参数        :  参数名称:        输入/输出?        类型                描述
  355. *
  356. * 返回值      :
  357. * 作者        :
  358. * 创建日期    :2006-12-19
  359. * 全局变量    :
  360. * 全局静态变量:
  361. * 局部静态变量:
  362. *----------------------------------------修改历史------------------------------------------
  363. * 当前版本    :                          修改人:                  修改日期:
  364. * 修改说明    :
  365. ******************************************************************************************/
  366. unsigned char ReadStatusLCM(void)
  367. {
  368.                 LCM_Data = 0xFF;
  369.                 LCM_RS = 0;
  370.                 LCM_RW = 1;
  371.                 LCM_E = 0;
  372.                 LCM_E = 0;
  373.                 LCM_E = 1;
  374.                 while (LCM_Data & Busy); //检测忙信号
  375.                 return(LCM_Data);
  376. }
  377. /******************************************************************************************
  378. * 函数名称    :LCMInit
  379. * 功能描述    :LCM初始化
  380. * 参数        :  参数名称:        输入/输出?        类型                描述
  381. *
  382. * 返回值      :
  383. * 作者        :
  384. * 创建日期    :2006-12-19
  385. * 全局变量    :
  386. * 全局静态变量:
  387. * 局部静态变量:
  388. *----------------------------------------修改历史------------------------------------------
  389. * 当前版本    :                          修改人:                  修改日期:
  390. * 修改说明    :
  391. ******************************************************************************************/
  392. void LCMInit(void)
  393. {
  394.                 LCM_Data = 0;
  395.                 WriteCommandLCM(0x38,0); //三次显示模式设置,不检测忙信号
  396.                 Delay5Ms();
  397.                 WriteCommandLCM(0x38,0);
  398.                 Delay5Ms();
  399.                 WriteCommandLCM(0x38,0);
  400.                 Delay5Ms();

  401.                 WriteCommandLCM(0x38,1); //显示模式设置,开始要求每次检测忙信号
  402.                 WriteCommandLCM(0x08,1); //关闭显示
  403.                 WriteCommandLCM(0x01,1); //显示清屏
  404.                 WriteCommandLCM(0x06,1); // 显示光标移动设置
  405.                 WriteCommandLCM(0x0C,1); // 显示开及光标设置
  406. }
  407. /******************************************************************************************
  408. * 函数名称    :LCMInit
  409. * 功能描述    :LCM初始化
  410. * 参数        :  参数名称:        输入/输出?        类型                描述
  411. *
  412. * 返回值      :
  413. * 作者        :
  414. * 创建日期    :2006-12-19
  415. * 全局变量    :
  416. * 全局静态变量:
  417. * 局部静态变量:
  418. *----------------------------------------修改历史------------------------------------------
  419. * 当前版本    :                          修改人:                  修改日期:
  420. * 修改说明    :
  421. ******************************************************************************************/
  422. void LCD_cls(void)
  423. {
  424.                 WriteCommandLCM(0x01,0);
  425.                 Delay5Ms();
  426. }
  427. /******************************************************************************************
  428. * 函数名称    :DisplayOneChar
  429. * 功能描述    :按指定位置显示一个字符
  430. * 参数        :  参数名称:        输入/输出?        类型                描述
  431. *
  432. * 返回值      :
  433. * 作者        :
  434. * 创建日期    :2006-12-19
  435. * 全局变量    :
  436. * 全局静态变量:
  437. * 局部静态变量:
  438. *----------------------------------------修改历史------------------------------------------
  439. * 当前版本    :                          修改人:                  修改日期:
  440. * 修改说明    :
  441. ******************************************************************************************/
  442. void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
  443. {
  444.                 Y &= 0x1;
  445.                 X &= 0xF; //限制X不能大于15,Y不能大于1
  446.                 if (Y) X |= 0x40; //当要显示第二行时地址码+0x40;
  447.                 X |= 0x80; //算出指令码
  448.                 WriteCommandLCM(X, 0); //这里不检测忙信号,发送地址码
  449.                 WriteDataLCM(DData);
  450. }
  451. /******************************************************************************************
  452. * 函数名称    :DisplayListChar
  453. * 功能描述    :按指定位置显示一串字符  ***原来的遇到空格0x20就不显示***
  454. * 参数        :  参数名称:        输入/输出?        类型                描述
  455. *
  456. * 返回值      :
  457. * 作者        :
  458. * 创建日期    :2006-12-19
  459. * 全局变量    :
  460. * 全局静态变量:
  461. * 局部静态变量:
  462. *----------------------------------------修改历史------------------------------------------
  463. * 当前版本    :                          修改人:                  修改日期:
  464. * 修改说明    :
  465. ******************************************************************************************/
  466. void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)
  467. {
  468.           unsigned char ListLength,j;
  469.           ListLength = strlen(DData);
  470.           Y &= 0x1;
  471.           X &= 0xF; //限制X不能大于15,Y不能大于1
  472.     if (X <= 0xF) //X坐标应小于0xF
  473.       {
  474.                     for(j=0;j<ListLength;j++)
  475.                       {
  476.              DisplayOneChar(X, Y, DData[j]); //显示单个字符
  477.              X++;
  478.           }
  479.        }
  480. }

  481. /******************************************************************************************
  482. * 函数名称    :Delay5M
  483. * 功能描述    :5ms延时
  484. * 参数        :  参数名称:        输入/输出?        类型                描述
  485. *
  486. * 返回值      :
  487. * 作者        :
  488. * 创建日期    :2006-12-19
  489. * 全局变量    :
  490. * 全局静态变量:
  491. * 局部静态变量:
  492. *----------------------------------------修改历史------------------------------------------
  493. * 当前版本    :                          修改人:                  修改日期:
  494. * 修改说明    :
  495. ******************************************************************************************/
  496. void Delay5Ms(void)
  497. {
  498.                  unsigned int TempCyc = 5552;
  499.                  while(TempCyc--);
  500. }
  501. /******************************************************************************************
  502. * 函数名称    :Delay400Ms
  503. * 功能描述    :400ms延时
  504. * 参数        :  参数名称:        输入/输出?        类型                描述
  505. *
  506. * 返回值      :
  507. * 作者        :
  508. * 创建日期    :2006-12-19
  509. * 全局变量    :
  510. * 全局静态变量:
  511. * 局部静态变量:
  512. *----------------------------------------修改历史------------------------------------------
  513. * 当前版本    :                          修改人:                  修改日期:
  514. * 修改说明    :
  515. ******************************************************************************************/
  516. void Delay400Ms(void)
  517. {
  518.                  unsigned char TempCycA = 5;
  519.                  unsigned int TempCycB;
  520.                  while(TempCycA--)
  521.                 {
  522.                         TempCycB=7269;
  523.                         while(TempCycB--);
  524.                 };
  525. }

  526. /******************************************************************************************
  527. * 函数名称    :uart
  528. * 功能描述    :串口接收中断
  529. * 参数        :  参数名称:        输入/输出?        类型                描述
  530. *
  531. * 返回值      :
  532. * 作者        :
  533. * 创建日期    :2006-12-19
  534. * 全局变量    :
  535. * 全局静态变量:
  536. * 局部静态变量:
  537. *----------------------------------------修改历史------------------------------------------
  538. * 当前版本    :                          修改人:                  修改日期:
  539. * 修改说明    :
  540. ******************************************************************************************/
  541. void uart(void) interrupt 4
  542. {
  543.     unsigned char tmp;
  544.     if(RI)
  545.             {
  546.         tmp=SBUF;
  547.         switch(tmp)
  548.         {
  549.             case '

  550. :
  551.                 cmd_number=0;        //命令类型清空
  552.                 mode=1;                //接收命令模式
  553.                 byte_count=0;        //接收位数清空
  554.                 break;
  555.             case ',':
  556.                 seg_count++;        //逗号计数加1
  557.                 byte_count=0;
  558.                 break;
  559.             case '*':
  560.                 switch(cmd_number)
  561.                 {
  562.                     case 1:
  563.                         buf_full|=0x01;
  564.                         break;
  565.                     case 2:
  566.                         buf_full|=0x02;
  567.                         break;
  568.                     case 3:
  569.                         buf_full|=0x04;
  570.                         break;
  571.                 }
  572.                 mode=0;
  573.                 break;
  574.             default:
  575.                 if(mode==1)
  576.                         {
  577.                     //命令种类判断
  578.                     cmd[byte_count]=tmp;            //接收字符放入类型缓存
  579.                     if(byte_count>=4)
  580.                             {                //如果类型数据接收完毕,判断类型
  581.                         if(cmd[0]=='G')
  582.                                 {
  583.                             if(cmd[1]=='P')
  584.                                     {
  585.                                 if(cmd[2]=='G')
  586.                                         {
  587.                                     if(cmd[3]=='G')
  588.                                             {
  589.                                         if(cmd[4]=='A')
  590.                                                 {
  591.                                             cmd_number=1;
  592.                                             mode=2;
  593.                                             seg_count=0;
  594.                                             byte_count=0;
  595.                                                 }
  596.                                             }
  597.                                     else if(cmd[3]=='S')
  598.                                             {
  599.                                         if(cmd[4]=='V')
  600.                                                 {
  601.                                             cmd_number=2;
  602.                                             mode=2;
  603.                                             seg_count=0;
  604.                                             byte_count=0;
  605.                                                 }
  606.                                             }
  607.                                         }
  608.                                 else if(cmd[2]=='R')
  609.                                         {
  610.                                     if(cmd[3]=='M')
  611.                                             {
  612.                                         if(cmd[4]=='C')
  613.                                                 {
  614.                                             cmd_number=3;
  615.                                             mode=2;
  616.                                             seg_count=0;
  617.                                             byte_count=0;
  618.                                                 }
  619.                                             }
  620.                                         }
  621.                             }
  622.                         }
  623.                     }
  624.                 }
  625.                 else if(mode==2)
  626.                         {
  627.                     //接收数据处理
  628.                     switch (cmd_number)
  629.                     {
  630.                         case 1:                //类型1数据接收。GPGGA
  631.                             switch(seg_count)
  632.                             {
  633.                                 case 2:                                //纬度处理
  634.                                     if(byte_count<9)
  635.                                             {
  636.                                         WD[byte_count]=tmp;
  637.                                             }
  638.                                     break;
  639.                                 case 3:                                //纬度方向处理
  640.                                     if(byte_count<1)
  641.                                             {
  642.                                         WD_a=tmp;
  643.                                             }
  644.                                     break;
  645.                                 case 4:                                //经度处理
  646.                                     if(byte_count<10)
  647.                                             {
  648.                                         JD[byte_count]=tmp;
  649.                                             }
  650.                                     break;
  651.                                 case 5:                                //经度方向处理
  652.                                     if(byte_count<1)
  653.                                             {
  654.                                         JD_a=tmp;
  655.                                             }
  656.                                     break;
  657.                                 case 6:                                //定位判断
  658.                                     if(byte_count<1)
  659.                                             {
  660.                                         lock=tmp;
  661.                                             }
  662.                                     break;
  663.                                 case 7:                                //定位使用的卫星数
  664.                                     if(byte_count<2)
  665.                                             {
  666.                                         use_sat[byte_count]=tmp;
  667.                                             }
  668.                                     break;
  669.                                 case 9:                                //高度处理
  670.                                     if(byte_count<6)
  671.                                             {
  672.                                         high[byte_count]=tmp;
  673.                                             }
  674.                                     break;
  675.                             }
  676.                             break;
  677.                         case 2:                //类型2数据接收。GPGSV
  678.                             switch(seg_count)
  679.                             {
  680.                                 case 3:                                //天空中的卫星总数
  681.                                     if(byte_count<2)
  682.                                             {
  683.                                         total_sat[byte_count]=tmp;
  684.                                             }
  685.                                     break;
  686.                             }
  687.                             break;
  688.                         case 3:                //类型3数据接收。GPRMC
  689.                             switch(seg_count)
  690.                             {
  691.                                 case 1:
  692.                                     if(byte_count<6)
  693.                                             {                //时间处理
  694.                                         time[byte_count]=tmp;   
  695.                                             }
  696.                                     break;
  697.                                 case 7:                                //速度处理
  698.                                     if(byte_count<5)
  699.                                             {
  700.                                         speed[byte_count]=tmp;
  701.                                             }
  702.                                     break;
  703.                                 case 8:                                //方位角处理
  704.                                     if(byte_count<5)
  705.                                             {
  706.                                         angle[byte_count]=tmp;
  707.                                             }
  708.                                     break;
  709.                             }
  710.                             break;
  711.                     }
  712.                 }
  713.                 byte_count++;        //接收数位加1
  714.                 break;
  715.         }
  716.     }
  717.     RI=0;
  718. }
复制代码


gps 1602.rar

57.94 KB, 下载次数: 315, 下载积分: 黑币 -5

51GPS定位

评分

参与人数 6黑币 +74 收起 理由
WUHONE + 4 很给力!
user240217 + 5 很给力!
czc + 5
ledaswan + 5 赞一个!
朝颜2016 + 5 赞一个!
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:98275 发表于 2016-5-5 14:49 来自手机 | 显示全部楼层
不行,当真都不行
回复

使用道具 举报

ID:130538 发表于 2016-8-19 10:24 | 显示全部楼层
不错学习一下
回复

使用道具 举报

ID:140652 发表于 2016-9-27 16:54 | 显示全部楼层
我试试
回复

使用道具 举报

ID:145543 发表于 2016-11-1 17:12 | 显示全部楼层
u-center这个软件怎么用啊
回复

使用道具 举报

ID:143706 发表于 2016-11-5 10:12 | 显示全部楼层
请问这个gps芯片是什么型号?
回复

使用道具 举报

ID:150528 发表于 2016-11-27 14:01 | 显示全部楼层
好好学习一下
回复

使用道具 举报

ID:151444 发表于 2016-12-4 11:31 | 显示全部楼层
正好需要,,参考一下
回复

使用道具 举报

ID:190395 发表于 2017-4-17 13:18 | 显示全部楼层
这个直接可以用吗
回复

使用道具 举报

ID:213966 发表于 2017-6-23 15:34 | 显示全部楼层
看不懂
回复

使用道具 举报

ID:68429 发表于 2017-12-5 10:12 来自手机 | 显示全部楼层
学习一下
回复

使用道具 举报

ID:353874 发表于 2018-6-18 21:06 | 显示全部楼层
真是不错,认真的学习了。
回复

使用道具 举报

ID:423051 发表于 2018-12-5 18:40 | 显示全部楼层
GPS是通用的吗
回复

使用道具 举报

ID:676888 发表于 2020-3-28 11:24 | 显示全部楼层

GPS用法大同小异,根据协议 你想采用那个格式你自己把数据提出来就好了
回复

使用道具 举报

ID:726307 发表于 2020-4-14 00:24 来自手机 | 显示全部楼层
下载之后找不到了
回复

使用道具 举报

ID:688367 发表于 2020-5-22 03:58 来自手机 | 显示全部楼层
可以学习下,不错
回复

使用道具 举报

ID:1051332 发表于 2022-12-4 01:23 | 显示全部楼层
请问我连接我的GPS模块后,LCD上显示NO GPS Connect 怎么回事,没有GPS连接
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表