sunke707 发表于 2011-12-3 14:53:45

发个适合新手的GPS制作。51单片机+串口GPS模块+1602液晶

用51单片机解析串口GPS模块发来的信息,在1602液晶显示 。电路图就不上了,用51单片机机的TXD口接GPS模块的RXD口。程序略做修改便可移植到其他的系统上。
http://cache.amobbs.com/bbs_upload782111/files_48/ourdev_701198RVLQA6.jpg
(原文件名:照片384.jpg)



   这程序是结合网络资料,自己略加修改。这是代码。ourdev_701194ZIG548.rar(文件大小:4K) (原文件名:小板,单片机2可显最大速度.rar)

xuyapple 发表于 2012-1-21 00:23:26

楼主给下具体的电路图吧~

zlj2008 发表于 2012-1-28 19:49:13

正需要,谢谢

littlepig 发表于 2012-1-28 20:02:53

support

madswan 发表于 2012-2-1 22:45:54

mark

xuyapple 发表于 2012-2-13 17:45:10

标记下~

fire 发表于 2012-2-13 18:16:01

我也来mark下./emotion/em025.gif

kelos3000 发表于 2012-2-13 19:36:32

mark

jjj2012 发表于 2012-2-13 20:16:27

马克

meirenai 发表于 2012-2-13 22:11:24

M

meirenai 发表于 2012-2-13 22:13:54

MARK

rodneyluo8 发表于 2012-2-17 01:07:57

mark

xiaojuren 发表于 2012-2-26 16:54:50

好东西

jetimchen 发表于 2012-2-26 17:45:49

mark

wkman 发表于 2012-2-26 19:43:00

嗯。支持。

2009014712 发表于 2012-3-1 19:00:05

最近想做一个GPS的东东,楼主可以发我一套资料吗?764731956
@qq.com

小亚 发表于 2012-4-12 16:07:49

程序文件一:main.c
#include"config.h"
#include<reg51.h>
#include "lcd1602.h"
#include "gps.h"


void main()
{
        lcd_init();
        Lcd_Display(1 ,0, "Lat :");
        Lcd_Display(2 ,0, "Lon :");

        Uart_Init();
        while(1)
        {
      
          if(gps_receive() == 1)
             select();       
       
       
   }


}
程序文件二:gps.c
#include<reg51.h>
#include "config.h"
#include "lcd1602.h"


uchar gpsdat =" " ;
uchar dispbuf = "no signal";

void Uart_Init()
   {
           TMOD=0x20;         //初始化串口
           TL1 =0xfa;
           TH1 =0xfa;         //4800波特率
           SCON=0x50;          //工作方式1:八位异步通信,允许接收
           PCON=0x00;            //波特率加倍关
           TR1=1;            //开启启动定时器1

       }

void shift1_data()
      {
          uchar temp_dat;
                temp_dat = dispbuf;
                dispbuf = dispbuf;
                dispbuf = temp_dat;
                temp_dat = dispbuf;
                dispbuf = dispbuf;
                dispbuf = temp_dat;
          }       

void shift2_data()
      {
          uchar temp_dat;
                temp_dat = dispbuf;
                dispbuf = dispbuf;
                dispbuf = temp_dat;
                temp_dat = dispbuf;
                dispbuf = dispbuf;
                dispbuf = temp_dat;
          }       
void select()
   {
           uchar sb = 0;
           uchar fk= 0;
           uchar *pda,*pjd;
           pda = gpsdat;
           pjd = dispbuf;
          
          for(fk=0;fk<10;fk++)          //经度数据挑选
             {
                   *pjd=*(pda+23+fk);
                   pjd++;
               }
               *pjd = '\0';
               shift2_data( );          
       Lcd_Display(2 ,6, dispbuf);

       pjd = dispbuf;
          for(sb=0;sb<9;sb++)          //维度数据挑选
             
                      {
                          *pjd=*(pda+11+sb);
                                pjd++;
                          }
                     *pjd='\0';
                        shift1_data( );
              Lcd_Display(1 ,6,dispbuf);       
       }          
          
intgps_receive()
   {
           uchar *pdat;
           uchar rec_con=0; //接收数据计数
        pdat = gpsdat;

           while(!RI);
             RI = 0;
           if(SBUF != '$')
             return 0;             
           while(!RI);
                RI = 0;
           if(SBUF != 'G')
                return 0;
                while(!RI);
               RI = 0;
                if(SBUF != 'P')
                   return 0;
                 while(!RI);
                         RI = 0;
                if(SBUF != 'G')
                      return 0;
                while(!RI);
                      RI = 0;
                if(SBUF !='G')
                      return 0;
                while(!RI);
                     RI = 0;
                if(SBUF != 'A')
                      return 0;
                     for(rec_con=0;rec_con<35;rec_con++)
                  {
                  while(!RI);
                        RI = 0;
                       *pdat= SBUF;
                        pdat++        ;
                                  }          
                  
                   *pdat= '\0';
                  return 1;   
          
        }
程序文件三:lcd1602.c
#include<reg51.h>
#include"config.h"

sbit rs=P3^5;
sbit lcden=P3^4;
sbit dula=P2^6;
sbit wela=P2^7;


void lcd_delay(uint16 x)
{
        uint16 a,b;
        for(a=x;a>0;a--)
                for(b=3;b>0;b--);
}


void write_com(uchar com)
{
        P0=com;
        rs=0;
        lcden=0;
        lcd_delay(10);
        lcden=1;
        lcd_delay(10);
        lcden=0;
       
}

void write_date(uchar date)
{
        P0=date;
        rs=1;
        lcden=0;
        lcd_delay(10);
        lcden=1;
        lcd_delay(10);
        lcden=0;
       
}

void lcd_init()
{
        dula=0;
        wela=0;
        write_com(0x38);
        lcd_delay(20);
        write_com(0x0f);
        lcd_delay(20);
        write_com(0x06);
        lcd_delay(20);
        write_com(0x01);
        lcd_delay(20);       
}

void Lcd_Display(uchar line ,uchar position,uchar *buf)
   {
                   uint8 a=0;
                uint8 counter =0;
          if(line == 1)
                   {
                     write_com(0x80+position);
                       //lcd_delay(20);
                   }
                else
                   {
                     write_com(0xc0+position);
                   }
      lcd_delay(20);
                while( ((*buf) != '\0'))
                       {
                                write_date(*buf);
                    lcd_delay(20);
                          buf++;
                                counter++;               
                        }
       }
void Lcd_Display(uchar line ,uchar position,uchar *buf);
#endif
帮我把这个程序改成只显示时分秒,急用,非常感谢

SONY85 发表于 2012-4-19 13:06:43

赞!!很牛啊!

铅笔小新 发表于 2012-4-20 17:52:18

mark{:victory:}

w_ying_qun 发表于 2012-4-23 23:22:19

这个好呀 自己也可以弄弄了{:2_27:}

2006lc 发表于 2012-4-24 16:12:57

谢谢分享

2010071024 发表于 2012-5-8 10:23:19

最近想做一个GPS的东东,楼主可以发我一套资料吗?416479641@qq.com

szy494468597 发表于 2012-5-11 17:10:49

51+1602GPS      Mark

sunke1988 发表于 2012-5-13 16:05:41

最近在搞GPS,楼主能发我一份资料吗,273889196@QQ.COM

Mifly20051011 发表于 2012-5-30 22:41:09

这个不错,正好想做个GPS测速仪,哈哈...谢了LZ

xiaoqingnian 发表于 2012-8-3 23:27:27

market   

wzh314 发表于 2012-8-4 11:22:54

真是学习的好东西

bg9gas 发表于 2012-8-5 00:07:17

mark,这个好,回家到电脑上下载来玩玩,正好配件都有,学习学习,最近刚开始学汇编。

goooogleman 发表于 2012-8-5 00:58:42

嘿嘿,不错,这个给大学生练手还是不错的。
这个论坛就不错的,就是比较好的,会很多人来开源SHOW技术的。

数控设备 发表于 2012-8-18 01:06:39

有何用处呀?

xts 发表于 2012-9-25 15:18:28

正好有个1602,呵呵,谢谢楼主,缺个GPS准备去买

chary_5 发表于 2012-9-27 21:55:49

mark               

joysun0 发表于 2012-11-12 16:03:08

马克!好资料

imgpc 发表于 2012-12-12 19:48:08

gps啥型号啊

ccfx 发表于 2013-4-21 15:22:54

我的gps模块链接电脑的时候 只有波特率设为9600时才能显示数据,前他波特率显示乱码,用楼主的程序写入单片机后链接gps模块,开机显示没有gps模块,是不是因为波特率不对呢。我用的是 89c52 11.0592

ddcchh 发表于 2013-8-26 22:51:33

正好配件都有,学习学习

kasen_wang 发表于 2013-10-14 21:25:49

一直很好奇,有时间做一做!

jsntzxh 发表于 2013-10-15 12:09:19

好东东,学习

wsgj0 发表于 2013-10-15 12:26:58

mark一下,先
页: [1]
查看完整版本: 发个适合新手的GPS制作。51单片机+串口GPS模块+1602液晶