搜索
bottom↓
回复: 38

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

[复制链接]

出0入0汤圆

发表于 2011-12-3 14:53:45 | 显示全部楼层 |阅读模式
用51单片机解析串口GPS模块发来的信息,在1602液晶显示 。电路图就不上了,用51单片机机的  TXD口接GPS模块的RXD口。程序略做修改便可移植到其他的系统上。

(原文件名:照片384.jpg)



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

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出90入0汤圆

发表于 2012-1-21 00:23:26 | 显示全部楼层
楼主给下具体的电路图吧~

出0入0汤圆

发表于 2012-1-28 19:49:13 | 显示全部楼层
正需要,谢谢

出0入0汤圆

发表于 2012-1-28 20:02:53 | 显示全部楼层
support

出0入0汤圆

发表于 2012-2-1 22:45:54 | 显示全部楼层
mark

出90入0汤圆

发表于 2012-2-13 17:45:10 | 显示全部楼层
标记下~

出0入0汤圆

发表于 2012-2-13 18:16:01 | 显示全部楼层
我也来mark下

出0入0汤圆

发表于 2012-2-13 19:36:32 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-2-13 20:16:27 | 显示全部楼层
马克

出0入0汤圆

发表于 2012-2-13 22:11:24 | 显示全部楼层
M

出0入0汤圆

发表于 2012-2-13 22:13:54 | 显示全部楼层
MARK

出0入0汤圆

发表于 2012-2-17 01:07:57 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-2-26 16:54:50 | 显示全部楼层
好东西

出0入0汤圆

发表于 2012-2-26 17:45:49 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-2-26 19:43:00 | 显示全部楼层
嗯。支持。

出0入0汤圆

发表于 2012-3-1 19:00:05 | 显示全部楼层
最近想做一个GPS的东东,楼主可以发我一套资料吗?764731956
@qq.com

出0入0汤圆

发表于 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[36] =" " ;
uchar dispbuf[10] = "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[3];
                dispbuf[3] = dispbuf[4];
                dispbuf[4] = temp_dat;
                temp_dat = dispbuf[2];
                dispbuf[2] = dispbuf[3];
                dispbuf[3] = temp_dat;
          }       

void shift2_data()
      {
            uchar temp_dat;
                temp_dat = dispbuf[4];
                dispbuf[4] = dispbuf[5];
                dispbuf[5] = temp_dat;
                temp_dat = dispbuf[3];
                dispbuf[3] = dispbuf[4];
                dispbuf[4] = 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);       
         }          
          
int  gps_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
帮我把这个程序改成只显示时分秒,急用,非常感谢

出0入0汤圆

发表于 2012-4-19 13:06:43 | 显示全部楼层
赞!!很牛啊!

出0入0汤圆

发表于 2012-4-20 17:52:18 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-4-23 23:22:19 | 显示全部楼层
这个好呀 自己也可以弄弄了

出0入0汤圆

发表于 2012-4-24 16:12:57 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2012-5-8 10:23:19 | 显示全部楼层
最近想做一个GPS的东东,楼主可以发我一套资料吗?416479641@qq.com

出0入0汤圆

发表于 2012-5-11 17:10:49 | 显示全部楼层
51+1602  GPS      Mark

出0入0汤圆

发表于 2012-5-13 16:05:41 | 显示全部楼层
最近在搞GPS,楼主能发我一份资料吗,273889196@QQ.COM

出0入0汤圆

发表于 2012-5-30 22:41:09 | 显示全部楼层
这个不错,正好想做个GPS测速仪,哈哈...谢了LZ

出0入0汤圆

发表于 2012-8-3 23:27:27 | 显示全部楼层
market     

出0入0汤圆

发表于 2012-8-4 11:22:54 | 显示全部楼层
真是学习的好东西

出0入0汤圆

发表于 2012-8-5 00:07:17 来自手机 | 显示全部楼层
mark,这个好,回家到电脑上下载来玩玩,正好配件都有,学习学习,最近刚开始学汇编。

出0入0汤圆

发表于 2012-8-5 00:58:42 | 显示全部楼层
嘿嘿,不错,这个给大学生练手还是不错的。
这个论坛就不错的,就是比较好的,会很多人来开源SHOW技术的。

出0入0汤圆

发表于 2012-8-18 01:06:39 | 显示全部楼层
有何用处呀?

出0入0汤圆

发表于 2012-9-25 15:18:28 | 显示全部楼层
正好有个1602,呵呵,谢谢楼主,缺个GPS准备去买

出0入0汤圆

发表于 2012-9-27 21:55:49 | 显示全部楼层
mark               

出0入0汤圆

发表于 2012-11-12 16:03:08 | 显示全部楼层
马克!好资料

出0入0汤圆

发表于 2012-12-12 19:48:08 | 显示全部楼层
gps啥型号啊

出0入0汤圆

发表于 2013-4-21 15:22:54 | 显示全部楼层
我的gps模块链接电脑的时候 只有波特率设为9600时才能显示数据,前他波特率显示乱码,用楼主的程序写入单片机后链接gps模块,开机显示没有gps模块,是不是因为波特率不对呢。我用的是 89c52 11.0592

出0入0汤圆

发表于 2013-8-26 22:51:33 | 显示全部楼层
正好配件都有,学习学习

出0入0汤圆

发表于 2013-10-14 21:25:49 | 显示全部楼层
一直很好奇,有时间做一做!

出200入0汤圆

发表于 2013-10-15 12:09:19 来自手机 | 显示全部楼层
好东东,学习

出0入0汤圆

发表于 2013-10-15 12:26:58 | 显示全部楼层
mark一下,先
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 05:23

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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