论坛风格切换切换到宽版
  • 67543阅读
  • 338回复

GPS OEM板+单片机+液晶显示 [复制链接]

上一主题 下一主题
离线BG4UVR
发帖
11287
只看该作者 220楼 发表于: 2007-03-17
公布我的GPS源代码
.net论坛的gps气氛挺浓,决定公开最后一版的gps程序源代码。原来没打算公布的原因是,本程序仍然存在不少不足。现在本人已经转向avr了,不打算再搞51了。现在把我的源代码公布出来,希望对用到的人有些帮助。也希望其他朋友能够完善他,并公布给大家使用。

另外建议,如果需要对程序进行更改,希望先仔细理解我的程序的思路,以尽量少走弯路。

对应的电路图、hex文件、和说明文件,见附件的pdf。

本程序的主程序,全部是本人原创完成。4bit的1602驱动,修改于网上的程序,见作者已经不详。

主程序:
  1. /*************************************
  2.      gps解码1602显示程序
  3.      作者:bg4uvr
  4. 最后更新:
  5. 2007.01.27
  6.      1.2版,改时间由rmc语句解码,取消日期显示
  7. 2007.01.25
  8.      1.1版,修正定位后页面不能转换的bug。
  9.      1.0版,基本功能。
  10. ***************************************/
  11. #include <reg2051.h>
  12. #include "1602.h"
  13. sbit gps_spd=p1^1;
  14. sbit spd_type=p1^0;
  15. sbit key1=p3^7;
  16. /*
  17. sbit gps_spd=p1^4;
  18. sbit key1=p1^6;
  19. sbit spd_type=p1^5;
  20. */
  21. //各位见笑了,加密存储开机版权信息。免得被人改目标代码 :d
  22. unsigned char code info[]={      'd'^0xab,'e'^0xab,'s'^0xab,'i'^0xab,'g'^0xab,'n'^0xab,' '^0xab,'b'^0xab,
  23.                                          'y'^0xab,' '^0xab,'b'^0xab,'g'^0xab,Ɗ'^0xab,'u'^0xab,'v'^0xab,'r'^0xab,};
  24. char code time_area= 8;                  //时区
  25. //gps数据存储数组
  26. unsigned char jd[10];                  //经度
  27. unsigned char jd_a;                  //经度方向
  28. unsigned char wd[9];                  //纬度
  29. unsigned char wd_a;                  //纬度方向
  30. unsigned char time[6];            //时间
  31. unsigned char speed[5];            //速度
  32. unsigned char high[6];            //高度
  33. unsigned char angle[5];            //方位角
  34. unsigned char use_sat[2];            //使用的卫星数
  35. unsigned char total_sat[2];      //天空中总卫星数
  36. unsigned char lock;                  //定位状态
  37. //串口中断需要的变量
  38. unsigned char seg_count;            //逗号计数器
  39. unsigned char dot_count;            //小数点计数器
  40. unsigned char byte_count;            //位数计数器
  41. unsigned char cmd_number;            //命令类型
  42. unsigned char mode;                        //0:结束模式,1:命令模式,2:数据模式
  43. unsigned char buf_full;                  //1:整句接收完成,相应数据有效。0:缓存数据无效。
  44. unsigned char cmd[5];                  //命令类型存储数组
  45. //显示需要的变量
  46. unsigned int dsp_count;            //刷新次数计数器
  47. unsigned char time_count;
  48. bit page;
  49. bit spd_type;
  50. void sys_init(void);
  51. bit chk_key(void);
  52. main()
  53. {
  54.      unsigned char i;
  55.      char bhour;
  56.      unsigned int knots;
  57.      sys_init();
  58.      while(1){
  59.            if(buf_full==0)                        //无gps信号时
  60.            {
  61.                  dsp_count++;
  62.                  if(dsp_count>=65000){
  63.                        lcd_cls();                  //清屏
  64.                        lcd_write_string(0,0,"no gps connect..");
  65.                        while(buf_full==0);
  66.                        lcd_cls();      
  67.                        dsp_count=0;
  68.                  }
  69.            }
  70.            else{                                    //有gps信号时
  71.                  if(chk_key()){                        //检测到按键切换显示
  72.                        page=!page;
  73.                        lcd_cls();
  74.                  }
  75.                  if(!page){                                    //页面1
  76.                        if(buf_full|0x01){                        //gga语句
  77.                              if(lock==Ɔ'){                              //如果未定位
  78.                                    lcd_write_string(0,0,"*---.--.---- ");
  79.                                    lcd_write_string(0,1,"* --.--.---- ");                              
  80.                              }else{                                          //如果已定位
  81.                                    lcd_write_char(0,0,jd_a);                  //显示经度
  82.                                    for(i=0;i<3;i++){
  83.                                          lcd_write_char(i+1,0,jd[i]);
  84.                                    }
  85.                                    lcd_write_char(4,0,'.');
  86.                                    for(i=3;i<10;i++){
  87.                                          lcd_write_char(i+2,0,jd[i]);
  88.                                    }
  89.                                    lcd_write_char(0,1,wd_a);                  //显示纬度
  90.                                    lcd_write_char(1,1,' ');
  91.                                    for(i=0;i<2;i++){
  92.                                          lcd_write_char(i+2,1,wd[i]);
  93.                                    }                  
  94.                                    lcd_write_char(4,1,'.');
  95.                                    for(i=2;i<9;i++){
  96.                                          lcd_write_char(i+3,1,wd[i]);
  97.                                    }                                          }
  98.                              lcd_write_char(14,0,use_sat[0]);            //显示接收卫星数
  99.                              lcd_write_char(15,0,use_sat[1]);
  100.                              buf_full&=~0x01;
  101.                              dsp_count=0;
  102.                        }
  103.                        if(buf_full|0x02){                        //gsv语句
  104.                              lcd_write_char(14,1,total_sat[0]);
  105.                              lcd_write_char(15,1,total_sat[1]);
  106.                              buf_full&=~0x02;
  107.                              dsp_count=0;
  108.                        }
  109.                        if(buf_full|0x04){
  110.                              buf_full&=~0x04;
  111.                              dsp_count=0;
  112.                        }
  113.                  }
  114.                  else{                                          //页面2
  115.                        if(buf_full|0x01){                        //gga语句
  116.                              buf_full&=~0x01;
  117.                              dsp_count=0;
  118.                        }
  119.                        if(buf_full|0x02){
  120.                              buf_full&=~0x02;
  121.                              dsp_count=0;
  122.                        }
  123.                        if(buf_full|0x04){                        //rmc语句
  124.                              bhour=((time[0]-0x30)*10+time[1]-0x30)+time_area;
  125.                              if(bhour>=24){
  126.                                    bhour-=24;
  127.                              }else if(bhour<0){
  128.                                    bhour+=24;
  129.                              }
  130.                              lcd_write_string(2,1,"bjt ");
  131.                              lcd_write_char(6,1,bhour/10+0x30);
  132.                              lcd_write_char(7,1,bhour%10+0x30);
  133.                              lcd_write_char(8,1,':');
  134.                              lcd_write_char(9,1,time[2]);
  135.                              lcd_write_char(10,1,time[3]);
  136.                              lcd_write_char(11,1,':');
  137.                              lcd_write_char(12,1,time[4]);
  138.                              lcd_write_char(13,1,time[5]);
  139.                              if(spd_type){
  140.                                    lcd_write_string(5,0,"km/h a");
  141.                              }else{
  142.                                    lcd_write_string(5,0,"knot a");
  143.                              }
  144.                              if(lock==Ɔ'){                              //如果未定位
  145.                                    lcd_write_string(0,0,"---.-");
  146.                                    lcd_write_string(11,0,"---.-");
  147.                              }else{                                          //已经定位
  148.                                    if(spd_type){                              //km/h显示
  149.                                          for(i=0;i<5;i++){
  150.                                                lcd_write_char(i,0,speed[i]);
  151.                                          }
  152.                                    }else{                                          //knot显示
  153.                                          knots=      (((speed[0]-0x30)*1000
  154.                                                      +(speed[1]-0x30)*100
  155.                                                      +(speed[2]-0x30)*10
  156.                                                      +(speed[4]-0x30))*1000)/1852;
  157.                                          lcd_write_char(0,0,knots/1000+0x30);
  158.                                          lcd_write_char(1,0,(knots%1000)/100+0x30);
  159.                                          lcd_write_char(2,0,(knots%100)/10+0x30);
  160.                                          lcd_write_char(3,0,'.');
  161.                                          lcd_write_char(4,0,knots%10+0x30);
  162.                                    }
  163.                                    for(i=0;i<5;i++){
  164.                                          lcd_write_char(11+i,0,angle[i]);
  165.                                    }
  166.                              }
  167.                              buf_full&=~0x04;
  168.                              dsp_count=0;
  169.                        }
  170.                  }
  171.            }
  172.      }
  173. }
  174. bit chk_key(void)
  175. {
  176.      if(!key1){
  177.            delayms(10);
  178.            if(!key1){
  179.                  while(!key1);
  180.                  delayms(10);
  181.                  return(1);
  182.            }
  183.      }
  184.      return(0);
  185. }
  186. //系统初始化
  187. void sys_init() {
  188.      unsigned char i;
  189.      scon = 0x50;      /* scon: mode 1, 8-bit uart, enable rcvr */
  190.      tmod = 0x21;      /* tmod: timer 1, mode 2, 8-bit reload */
  191.      if(gps_spd){
  192.            th1 = 0xfd;            /* th1: reload value for 9600 baud @ 11.059mhz */
  193.      }else{
  194.            th1 = 0xfa;                  /* th1: reload value for 4800 baud @ 11.059mhz */
  195.      }
  196.      if(spd_type){
  197.            spd_type=1;                  //速度单位km/h
  198.      }else{
  199.            spd_type=0;                  //速度单位knot
  200.      }
  201.      tr1 = 1;            /* tr1: timer 1 run */
  202.      lcd_init();            //初始化lcd
  203.      lcd_write_string(0,0,"gps monitor v1.2");
  204.      for(i=0;i<16;i++){                                                //显示版权信息
  205.            lcd_write_char(i,1,info[i]^0xab);
  206.      }
  207.      for(i=1;i<4;i++){
  208.            delayms(250);
  209.      }
  210.      lcd_cls();
  211.      ie=0x90;                  //开总中断、串口中断
  212. }
  213. //串口接收中断
  214. void uart(void) interrupt 4
  215. {
  216.      unsigned char tmp;
  217.      if(ri){
  218.            tmp=sbuf;
  219.            switch(tmp){
  220.                  case '$':
  221.                        cmd_number=0;            //命令类型清空
  222.                        mode=1;                        //接收命令模式
  223.                        byte_count=0;            //接收位数清空
  224.                        break;
  225.                  case ',':
  226.                        seg_count++;            //逗号计数加1
  227.                        byte_count=0;
  228.                        break;
  229.                  case '*':
  230.                        switch(cmd_number){
  231.                              case 1:
  232.                                    buf_full|=0x01;
  233.                                    break;
  234.                              case 2:
  235.                                    buf_full|=0x02;
  236.                                    break;
  237.                              case 3:
  238.                                    buf_full|=0x04;
  239.                                    break;
  240.                        }
  241.                        mode=0;
  242.                        break;
  243.                  default:
  244.                        if(mode==1){
  245.                              //命令种类判断
  246.                              cmd[byte_count]=tmp;                  //接收字符放入类型缓存
  247.                              if(byte_count>=4){                        //如果类型数据接收完毕,判断类型
  248.                                    if(cmd[0]=='g'){
  249.                                          if(cmd[1]=='p'){
  250.                                                if(cmd[2]=='g'){
  251.                                                      if(cmd[3]=='g'){
  252.                                                            if(cmd[4]=='a'){
  253.                                                                  cmd_number=1;
  254.                                                                  mode=2;
  255.                                                                  seg_count=0;
  256.                                                                  byte_count=0;
  257.                                                            }
  258.                                                      }
  259.                                                      else if(cmd[3]=='s'){
  260.                                                            if(cmd[4]=='v'){
  261.                                                                  cmd_number=2;
  262.                                                                  mode=2;
  263.                                                                  seg_count=0;
  264.                                                                  byte_count=0;
  265.                                                            }
  266.                                                      }
  267.                                                }
  268.                                                else if(cmd[2]=='r'){
  269.                                                      if(cmd[3]=='m'){
  270.                                                            if(cmd[4]=='c'){
  271.                                                                  cmd_number=3;
  272.                                                                  mode=2;
  273.                                                                  seg_count=0;
  274.                                                                  byte_count=0;
  275.                                                            }
  276.                                                      }
  277.                                                }
  278.                                          }
  279.                                    }
  280.                              }
  281.                        }
  282.                        else if(mode==2){
  283.                              //接收数据处理
  284.                              switch (cmd_number){
  285.                                    case 1:                        //类型1数据接收。gpgga
  286.                                          switch(seg_count){
  287.                                                case 2:                                                //纬度处理
  288.                                                      if(byte_count<9){
  289.                                                            wd[byte_count]=tmp;
  290.                                                      }
  291.                                                      break;
  292.                                                case 3:                                                //纬度方向处理
  293.                                                      if(byte_count<1){
  294.                                                            wd_a=tmp;
  295.                                                      }
  296.                                                      break;
  297.                                                case 4:                                                //经度处理
  298.                                                      if(byte_count<10){
  299.                                                            jd[byte_count]=tmp;
  300.                                                      }
  301.                                                      break;
  302.                                                case 5:                                                //经度方向处理
  303.                                                      if(byte_count<1){
  304.                                                            jd_a=tmp;
  305.                                                      }
  306.                                                      break;
  307.                                                case 6:                                                //定位判断
  308.                                                      if(byte_count<1){
  309.                                                            lock=tmp;
  310.                                                      }
  311.                                                      break;
  312.                                                case 7:                                                //定位使用的卫星数
  313.                                                      if(byte_count<2){
  314.                                                            use_sat[byte_count]=tmp;
  315.                                                      }
  316.                                                      break;
  317.                                                case 9:                                                //高度处理
  318.                                                      if(byte_count<6){
  319.                                                            high[byte_count]=tmp;
  320.                                                      }
  321.                                                      break;
  322.                                          }
  323.                                          break;
  324.                                    case 2:                        //类型2数据接收。gpgsv
  325.                                          switch(seg_count){
  326.                                                case 3:                                                //天空中的卫星总数
  327.                                                      if(byte_count<2){
  328.                                                            total_sat[byte_count]=tmp;
  329.                                                      }
  330.                                                      break;
  331.                                          }
  332.                                          break;
  333.                                    case 3:                        //类型3数据接收。gprmc
  334.                                          switch(seg_count){
  335.                                                case 1:
  336.                                                      if(byte_count<6){                        //时间处理
  337.                                                            time[byte_count]=tmp;      
  338.                                                      }
  339.                                                      break;
  340.                                                case 7:                                                //速度处理
  341.                                                      if(byte_count<5){
  342.                                                            speed[byte_count]=tmp;
  343.                                                      }
  344.                                                      break;
  345.                                                case 8:                                                //方位角处理
  346.                                                      if(byte_count<5){
  347.                                                            angle[byte_count]=tmp;
  348.                                                      }
  349.                                                      break;
  350.                                          }
  351.                                          break;
  352.                              }
  353.                        }
  354.                        byte_count++;            //接收数位加1
  355.                        break;
  356.            }
  357.      }
  358.      ri=0;
  359. }
  360. /*
  361. $gpgga,024518.00,3153.7225,n,12111.9951,e,1,04,1.48,-00009,m,007,m,,*4c
  362. $gpgll,3153.7225,n,12111.9951,e,024518.00,a,a*63
  363. $gpvtg,000.0,t,004.7,m,000.0,n,000.0,k,a*20
  364. $gpgsa,a,2,04,08,17,20,,,,,,,,,1.48,1.48,0.03*08
  365. $gpgsv,2,1,08,04,15,231,38,08,29,218,42,11,49,043,,19,09,082,*76
  366. $gpgsv,2,2,08,27,14,198,29,28,71,316,,17,32,300,36,20,45,124,43*70
  367. $gprmc,024518.00,a,3153.7225,n,12111.9951,e,000.0,000.0,280107,04.7,w,a*12
  368. $gpzda,024519.45,28,01,2007,,*62
  369. $gpgga,024519.00,3153.7225,n,12111.9951,e,1,04,1.48,-00009,m,007,m,,*4d
  370. $gpgll,3153.7225,n,12111.9951,e,024519.00,a,a*62
  371. $gpvtg,000.0,t,004.7,m,000.0,n,000.0,k,a*20
  372. $gpgsa,a,2,04,08,17,20,,,,,,,,,1.48,1.48,0.03*08
  373. $gpgsv,2,1,08,04,15,231,38,08,29,218,42,11,49,043,,19,09,082,*76
  374. $gpgsv,2,2,08,27,14,198,29,28,71,316,,17,32,300,36,20,45,124,43*70
  375. $gprmc,024519.00,a,3153.7225,n,12111.9951,e,000.0,000.0,280107,04.7,w,a*13
  376. $gpzda,024520.49,28,01,2007,,*64
  377. $gpgga,024520.00,3153.7225,n,12111.9951,e,1,04,1.48,-00009,m,007,m,,*47
  378. $gpgll,3153.7225,n,12111.9951,e,024520.00,a,a*68
  379. $gpvtg,000.0,t,004.7,m,000.0,n,000.0,k,a*20
  380. $gpgsa,a,2,04,08,17,20,,,,,,,,,1.48,1.48,0.03*08
  381. $gpgsv,2,1,08,04,15,231,38,08,29,218,42,11,49,043,,19,09,082,*76
  382. $gpgsv,2,2,08,27,14,198,,28,71,316,,17,32,300,36,20,45,124,43*7b
  383. $gprmc,024520.00,a,3153.7225,n,12111.9951,e,000.0,000.0,280107,04.7,w,a*19
  384. $gpzda,024521.45,28,01,2007,,*69
  385. */


1602的驱动程序
  1. /*
  2. sbit lcd_db4= p0^4;
  3. sbit lcd_db5= p0^5;
  4. sbit lcd_db6= p0^6;
  5. sbit lcd_db7= p0^7;
  6. sbit lcd1602_rs=p2^0;  
  7. sbit lcd1602_rw=p2^1;//实际上没有读lcm,rw脚可以直接接地  
  8. sbit lcd1602_en=p2^2;
  9. */
  10. sbit lcd_db4= p1^4;
  11. sbit lcd_db5= p1^5;
  12. sbit lcd_db6= p1^6;
  13. sbit lcd_db7= p1^7;
  14. sbit lcd1602_rs=p1^3;  
  15. //sbit lcd1602_rw=0;//实际上没有读lcm,rw脚可以直接接地  
  16. sbit lcd1602_en=p1^2;
  17. void lcd_write_char( unsigned x,unsigned char y,unsigned char dat);      //在指定位置显示字符
  18. void lcd_write_string(unsigned char x,unsigned char y,unsigned char *s);//在指定位置显示字符串
  19. void lcd_cls(void);//清屏
  20. void lcd_en_command(unsigned char command);
  21. void lcd_en_dat(unsigned char temp);
  22. void lcd_set_xy( unsigned char x, unsigned char y );
  23. void lcd_init(void);
  24. void set_lcd(unsigned char io_temp);
  25. void delayms(unsigned char ms);
  26. void lcddelay(void);
  27. unsigned char lcdio;
  28. void lcd_cls(void)
  29. {
  30.      lcd_en_command(0x01);      
  31.   delayms(2);
  32. }
  33. void lcd_en_command(unsigned char command)
  34. {
  35.      lcd1602_rs=0;  
  36. //      lcd1602_rw=0;
  37.      lcd1602_en=0;
  38.      lcdio=(command & 0xf0);
  39.      set_lcd(lcdio);
  40.      lcd1602_en=1;
  41.      lcddelay();
  42.      lcd1602_en=0;
  43.      lcdio=(command & 0x0f)<<4;
  44.      set_lcd(lcdio);
  45.      lcd1602_en=1;
  46.      lcddelay();
  47.      lcd1602_en=0;
  48. }
  49. void set_lcd(unsigned char io_temp)
  50. {  
  51.      lcd_db7=io_temp&0x80;
  52.      lcd_db6=io_temp&0x40;
  53.      lcd_db5=io_temp&0x20;
  54.      lcd_db4=io_temp&0x10;
  55. }
  56. void lcd_en_dat(unsigned char dat)
  57. {
  58.      lcd1602_rs=1;
  59. //      lcd1602_rw=0;
  60.      lcd1602_en=0;
  61.      lcdio=(dat & 0xf0);
  62.      set_lcd(lcdio);
  63.      lcd1602_en=1;
  64.      lcddelay();
  65.      lcd1602_en=0;
  66.      lcdio=(dat & 0x0f)<<4;
  67.      set_lcd(lcdio);
  68.      lcd1602_en=1;
  69.      lcddelay();
  70.      lcd1602_en=0;
  71. }
  72. void lcd_set_xy( unsigned char x, unsigned char y )
  73. {
  74.      unsigned char address;
  75.      if (y ==0)
  76.            address = 0x80 + x;
  77.      else
  78.            address = 0xc0 + x;
  79.            lcd_en_command(address);
  80. }
  81. void lcd_write_char( unsigned x,unsigned char y,unsigned char dat)
  82. {
  83.      lcd_set_xy( x, y );
  84.      lcd_en_dat(dat);
  85. }
  86. void lcd_write_string(unsigned char x,unsigned char y,unsigned char *s)
  87. {
  88.   lcd_set_xy( x, y );   //set address
  89.   while (*s)     // write character
  90.   {
  91.            lcdio=*s;
  92.            set_lcd(lcdio);
  93.            lcd_en_dat(*s);  
  94.            s ++;
  95.   }
  96. }
  97. void lcd_init(void)
  98. {
  99.      lcd_en_command(0x33);
  100.      delayms(20);
  101.      lcd_en_command(0x32);
  102.      delayms(20);
  103.      lcd_en_command(0x08);
  104.      delayms(5);
  105.      lcd_en_command(0x01);
  106.      delayms(5);
  107.      lcd_en_command(0x06);
  108.      delayms(5);
  109.      lcd_en_command(0x0c);
  110.      delayms(5);
  111. }
  112. void delayms(unsigned char ms)      
  113. {
  114.      unsigned char i;
  115.      while(ms--)
  116.      {
  117.            for(i = 0; i < 115; i++);
  118.      }
  119. }
  120. void lcddelay(void)      
  121. {
  122.      unsigned char i;
  123.      for(i = 0; i < 2; i++);
  124. }
附件: 89C2051解码NEMA0183格式GPS数据.pdf (0 K) 下载次数:510
离线bd7rf
发帖
10148
只看该作者 221楼 发表于: 2007-03-17
好人uvr,以后还要多提携我们奔向avr.谢谢了.
离线dzyj
发帖
2277
只看该作者 222楼 发表于: 2007-03-17
请教一下,用fna送的板子,2接正,3接负,8接2051的2吗?怎么不行呀,都研究两天了,总显示:no gps connect,用了长天的213,也不行呀,不知道是怎么回事,另外,fna的板子,用软件怎么改呀,不懂英文呀。
离线xiongjunfeng
发帖
1220
只看该作者 223楼 发表于: 2007-03-17
'
请教一下,用fna送的板子,2接正,3接负,8接2051的2吗?怎么不行呀,都研究两天了,总显示:no gps connect,用了长天的213,也不行呀,不知道是怎么回事,另外,fna的板子,用软件怎么改呀,不懂英文呀。
'
不急,我也在搞这个板子,因为天线没到;不好测试。
我试过了,这个板子正常状态输出的是摩托罗拉的二进制,用摩托罗拉的软件可以使他输出nema0183格式
离线dzyj
发帖
2277
只看该作者 224楼 发表于: 2007-03-18
'
不急,我也在搞这个板子,因为天线没到;不好测试。
我试过了,这个板子正常状态输出的是摩托罗拉的二进制,用摩托罗拉的软件可以使他输出nema0183格式
'
我现在不知道是不是我的电路接的有问题,我用其它的gps,ttl输出的,也显示没有gps,另外,那个摩托的板子,你知道是怎么设置吗?软件能看懂一点儿,我的现在跟电脑就没有连上,不知道是什么原因。
离线bd7rf
发帖
10148
只看该作者 225楼 发表于: 2007-03-18
'
不急,我也在搞这个板子,因为天线没到;不好测试。
我试过了,这个板子正常状态输出的是摩托罗拉的二进制,用摩托罗拉的软件可以使他输出nema0183格式
'
你的天线在哪里买的?
或者谁能帮我弄一根这种天线?费用我出.
因为我不知道该用哪种天线,也不好买.
离线BD5FNA
发帖
2159
只看该作者 226楼 发表于: 2007-03-18
'
我现在不知道是不是我的电路接的有问题,我用其它的gps,ttl输出的,也显示没有gps,另外,那个摩托的板子,你知道是怎么设置吗?软件能看懂一点儿,我的现在跟电脑就没有连上,不知道是什么原因。
'gps输出要接一个232再到电脑.另rx和tx都要接上.
离线BA5AC
发帖
1640
只看该作者 227楼 发表于: 2007-03-18
'
你的天线在哪里买的?
或者谁能帮我弄一根这种天线?费用我出.
因为我不知道该用哪种天线,也不好买.
'

淘宝上面很多,我买了一个是石坚高端的天线,20元一个,还是邮费贵,哈哈~~不过效果很好,比我买的蓝牙gps内置天线灵敏度高多了,建议你买体积稍微大点的gps天线~~

地址

http://auction1.taobao.com/auction/26-50000624-50005110/item_detail-0db2-3ba944a8cdc2d48bf43fb6996d6afa8b.jhtml
离线dzyj
发帖
2277
只看该作者 228楼 发表于: 2007-03-18
'
gps输出要接一个232再到电脑.另rx和tx都要接上.
'
都接上了,还是不行呀,帮我看一下我接的对吗?第一张是原图,原来我做过,可能我的电脑串口供电不足,所以我直接供电,不再串口取电了,第二张图是我做的,16脚接正极。
离线dzyj
发帖
2277
只看该作者 229楼 发表于: 2007-03-19
才疏学浅,再请教一下,如果不接gps,用串口调试程序,显示可以收发,是不是就证明,我搭的这个max232电路工作就是正常的呀?可是如果接上gps,用串口调试程序能收发,但是如果要是给max232供电,5v的,max232芯片发热严重,已经烫手,不知道是哪里的问题。
离线dzyj
发帖
2277
只看该作者 230楼 发表于: 2007-03-19
是不是我的图用错啦,看其它的串口转换电路,用的都是1uf的电容,这个图用的是10uf的电容,是不是有问题呀。
离线ding
发帖
3488
只看该作者 231楼 发表于: 2007-03-19
'
是不是我的图用错啦,看其它的串口转换电路,用的都是1uf的电容,这个图用的是10uf的电容,是不是有问题呀。
'
有的要上大电压的232正常.你查232的资料可得知.
离线dzyj
发帖
2277
只看该作者 232楼 发表于: 2007-03-20
'
有的要上大电压的232正常.你查232的资料可得知.
'
我要是直接给电,在4,5脚上加12v可以吗?
离线xiongjunfeng
发帖
1220
只看该作者 233楼 发表于: 2007-03-22
今天天线收到,接上试了下fna兄送的板子,信号不好。最好时只能收到2颗星的信号,无法定位。只能给出当前时间。不知是什么原因?是天线不行还是板子灵敏度不够?
离线dzyj
发帖
2277
只看该作者 234楼 发表于: 2007-03-22
'
今天天线收到,接上试了下fna兄送的板子,信号不好。最好时只能收到2颗星的信号,无法定位。只能给出当前时间。不知是什么原因?是天线不行还是板子灵敏度不够?
'
gps板是怎么接的线。
离线xiongjunfeng
发帖
1220
只看该作者 235楼 发表于: 2007-03-22
'
gps板是怎么接的线。
'
前面我发的有一个图,5v供电的那个就是
离线dzyj
发帖
2277
只看该作者 236楼 发表于: 2007-03-22
'
前面我发的有一个图,5v供电的那个就是
'
是呀,就是照着你的做的,2接+5v,3接地,8接c2051的第二脚,可是总是显示没有gps.我这样接,对吗?另外,那块gps板改输出格式,你是怎么改的,我用那个软件,不知道怎么弄.
离线xiongjunfeng
发帖
1220
只看该作者 237楼 发表于: 2007-03-22
winoncore12可以改输出格式,我是直接用串口调试工具看的结果
还有1脚接备用电源,也把他接到5v电源上
离线BG4UVR
发帖
11287
只看该作者 238楼 发表于: 2007-03-25
我已把219楼的gps解码项目,移植到了avr系统下。

现在基本功能已经调试完成,已增加以下项目:
  1、增加软件系统设置功能(包括gps速率、速度显示单位、时间取出语句(zda或rmc)。
  2、增加分页显示数,恢复日期信息的显示。增加星期几计算和显示。

准备完善如下项目:
  1、增加按键。改进键扫描算法,以解决按键不灵的感觉。
  2、改进高度、方位角、速度值的取值算法,解决显示错位的bug(消除黑块)。

准备增加如下项目:
  1、增加简单的存点和返航功能(使用内部eeprom)。

由于全部是在业余时间写的,所以最后完成的时间可能会比较长。敬请期待。
离线hxx-bcl
发帖
225
只看该作者 239楼 发表于: 2007-03-25
各位知道哪里还可以搞到GPS OEM板
最好是一百多的,ttl输出