找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 960|回复: 0
打印 上一主题 下一主题
收起左侧

单片机+GPS显示的纬度为什么不对?附程序

[复制链接]
跳转到指定楼层
楼主
源程序   http://www.51hei.com/bbs/dpj-183505-1.html
图中经纬度上面是计算后的  下面是没计算的  
经度显示结果正常  纬度错误  纬度除以60后得到的数不对   正常结果应该是 474643除以60等于791071   在电脑用软件看  获得的数除以60等于显示的纬度正常     474519除以60等于790865

程序有什么问题吗怎么修改   计算部分我没改 只改成了同时显示四行


  1. //包含头文件
  2. #include <REG52.h>
  3. #include "uart.c"

  4. //宏定义
  5. #define LCM_Data  P0                  //将P0口定义为LCM_Data
  6. #define uchar unsigned char
  7. #define uint  unsigned int

  8. //1602的控制脚
  9. sbit lcd1602_rs=P2^5;
  10. sbit lcd1602_rw=P2^6;
  11. sbit lcd1602_en=P2^7;

  12. #define RsBuf_N                800

  13. unsigned char xdata RsBuf[RsBuf_N];        //定义串口接收数据缓冲区
  14. uchar code sousuo[]="GPS Searching...";
  15. uint RsPoint;
  16. bit dis_flag=0;
  17. unsigned long weidunum=0;
  18. unsigned long jingdunum=0;
  19. //==================================================================================================
  20. //=======================================LCD1602====================================================
  21. //==================================================================================================
  22. //----------------延时函数,后面经常调用----------------------
  23. void delay(uint xms)//延时函数,有参函数
  24. {
  25.         uint x,y;
  26.         for(x=xms;x>0;x--)
  27.          for(y=10;y>0;y--);
  28. }

  29. //--------------------------写指令---------------------------
  30. void write_1602com(uchar com)//****液晶写入指令函数****
  31. {
  32.         lcd1602_rs=0;//数据/指令选择置为指令
  33.         lcd1602_rw=0; //读写选择置为写
  34.         P0=com;//送入数据
  35.         delay(1);
  36.         lcd1602_en=1;//拉高使能端,为制造有效的下降沿做准备
  37.         delay(1);
  38.         lcd1602_en=0;//en由高变低,产生下降沿,液晶执行命令
  39. }

  40. //-------------------------写数据-----------------------------
  41. void write_1602dat(uchar dat)//***液晶写入数据函数****
  42. {
  43.         lcd1602_rs=1;//数据/指令选择置为数据
  44.         lcd1602_rw=0; //读写选择置为写
  45.         P0=dat;//送入数据
  46.         delay(1);
  47.         lcd1602_en=1; //en置高电平,为制造下降沿做准备
  48.         delay(1);
  49.         lcd1602_en=0; //en由高变低,产生下降沿,液晶执行命令
  50. }

  51. //-------------------------初始化-------------------------
  52. void lcd_init(void)
  53. {
  54.         uchar i;
  55.         write_1602com(0x38);//设置液晶工作模式,意思:16*2行显示,5*7点阵,8位数据
  56.         write_1602com(0x0c);//开显示不显示光标
  57.         write_1602com(0x06);//整屏不移动,光标自动右移
  58.         write_1602com(0x01);//清显示
  59.         delay(1000);
  60.         write_1602com(0x80);
  61.         for(i=0;i<16;i++)
  62.         write_1602dat(sousuo[i]);
  63. }

  64. //  通讯中断接收程序   中断函数无返回值
  65.   void uart_rx(void)  interrupt 4        using 3         
  66. {
  67.          EA=0;
  68.            if((RsPoint<RsBuf_N)&&RI) //必须判断RI是否为1

  69.     {
  70.             RI=0;
  71.                 if(SBUF=='


  72. )
  73.                 RsPoint=0;
  74.             RsBuf[RsPoint++]=SBUF;
  75.     }
  76.         EA=1;
  77. }
  78. //==============================主函数===============================
  79. void main(void)
  80. {
  81.          uint i;

  82.          lcd_init();
  83.         Uart_init();
  84.         for(i=0;i<RsBuf_N;i++)
  85.         RsBuf[i]='0';
  86.         while(1)
  87.         {
  88.                    if(RsBuf[0]=='


  89. &&RsBuf[1]=='G'&&RsBuf[2]=='P'&&RsBuf[3]=='G'&&RsBuf[4]=='G'&&RsBuf[5]=='A'&&RsBuf[44]!='0')
  90.                    {
  91.                         if(RI==0&&((RsBuf[30]-48)*100+(RsBuf[31]-48)*10+(RsBuf[32]-48))>=0&&((RsBuf[30]-48)*100+(RsBuf[31]-48)*10+(RsBuf[32]-48))<=180)
  92.                         {
  93.                                 
  94.                                         weidunum=        ((RsBuf[17]-48)*10000000+(RsBuf[18]-48)*1000000)
  95.                                                                 +(((((RsBuf[19]-48)*10)+(RsBuf[20]-48))*100000)/6)
  96.                                                                 +(((((RsBuf[22]-48)*1000)+((RsBuf[23]-48)*100)+((RsBuf[24]-48)*10)+(RsBuf[25]-48))*10)/6);         
  97.                                         write_1602com(0x80);
  98.                                         write_1602dat('W');
  99.                                         write_1602dat('D');
  100.                                         write_1602dat(':');
  101.                                         write_1602dat(' ');
  102.                                         write_1602dat(weidunum/10000000+0x30);
  103.                                         write_1602dat(weidunum%10000000/1000000+0x30);
  104.                                         write_1602dat('.');
  105.                                         write_1602dat(weidunum%1000000/100000+0x30);
  106.                                         write_1602dat(weidunum%100000/10000+0x30);
  107.                                         write_1602dat(weidunum%10000/1000+0x30);
  108.                                         write_1602dat(weidunum%1000/100+0x30);
  109.                                         write_1602dat(weidunum%100/10+0x30);
  110.                                         write_1602dat(weidunum%10+0x30);        
  111.                                         write_1602dat(RsBuf[28]);
  112.                                         write_1602dat(' ');
  113.                                         write_1602dat(' ');

  114.                                         write_1602com(0xC0);
  115.                                         write_1602dat('W');
  116.                                         write_1602dat('D');
  117.                                         write_1602dat(':');
  118.                                         write_1602dat(' ');
  119.                                         write_1602dat(RsBuf[17]);
  120.                                         write_1602dat(RsBuf[18]);
  121.                                         write_1602dat(RsBuf[21]);
  122.                                         write_1602dat(RsBuf[19]);
  123.                                         write_1602dat(RsBuf[20]);        
  124.                                         write_1602dat(RsBuf[22]);
  125.                                         write_1602dat(RsBuf[23]);
  126.                                         write_1602dat(RsBuf[24]);
  127.                                         write_1602dat(RsBuf[25]);
  128.                                         write_1602dat(RsBuf[26]);
  129.                                         write_1602dat(RsBuf[28]);
  130.                                         write_1602dat(' ');
  131.                                         write_1602dat(' ');


  132.                
  133.                
  134.                                         jingdunum=        (((RsBuf[30]-48)*100000000)+((RsBuf[31]-48)*10000000)+((RsBuf[32]-48)*1000000))
  135.                                                                 +(((((RsBuf[33]-48)*10)+(RsBuf[34]-48))*100000)/6)
  136.                                                                 +(((((RsBuf[36]-48)*1000)+((RsBuf[37]-48)*100)+((RsBuf[38]-48)*10)+(RsBuf[39]-48))*10)/6);           
  137.                                         write_1602com(0x94);
  138.                                         write_1602dat('J');
  139.                                         write_1602dat('D');
  140.                                         write_1602dat(':');
  141.                                         write_1602dat(jingdunum/100000000+0x30);
  142.                                         write_1602dat(jingdunum%100000000/10000000+0x30);
  143.                                         write_1602dat(jingdunum%10000000/1000000+0x30);
  144.                                         write_1602dat('.');
  145.                                         write_1602dat(jingdunum%1000000/100000+0x30);
  146.                                         write_1602dat(jingdunum%100000/10000+0x30);
  147.                                         write_1602dat(jingdunum%10000/1000+0x30);
  148.                                         write_1602dat(jingdunum%1000/100+0x30);
  149.                                         write_1602dat(jingdunum%100/10+0x30);
  150.                                         write_1602dat(jingdunum%10+0x30);               
  151.                                         write_1602dat(RsBuf[42]);
  152.                                         write_1602dat(' ');
  153.                                         write_1602dat(' ');


  154.                                         write_1602com(0xD4);
  155.                                         write_1602dat('J');
  156.                                         write_1602dat('D');
  157.                                         write_1602dat(':');
  158.                                         write_1602dat(RsBuf[30]);
  159.                                         write_1602dat(RsBuf[31]);
  160.                                         write_1602dat(RsBuf[32]);
  161.                                         write_1602dat(RsBuf[35]);
  162.                                         write_1602dat(RsBuf[33]);
  163.                                         write_1602dat(RsBuf[34]);
  164.                                         write_1602dat(RsBuf[36]);
  165.                                         write_1602dat(RsBuf[37]);
  166.                                         write_1602dat(RsBuf[38]);
  167.                                         write_1602dat(RsBuf[39]);
  168.                                         write_1602dat(RsBuf[40]);
  169.                                         write_1602dat(RsBuf[42]);
  170.                         }
  171.                 }
  172.         }
  173. }
  174. void T0_time() interrupt 1
  175. {
  176.         uchar mm;
  177.         TH0=0x4b;
  178.         TL0=0xff;
  179.         mm++;
  180.         if(mm>=60)
  181.         {
  182.                 mm=0;
  183.                 dis_flag=!dis_flag;
  184.         }
  185. }
复制代码



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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