发个适合新手的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) 楼主给下具体的电路图吧~ 正需要,谢谢 support mark 标记下~ 我也来mark下./emotion/em025.gif mark 马克 M MARK mark 好东西 mark 嗯。支持。 最近想做一个GPS的东东,楼主可以发我一套资料吗?764731956
@qq.com 程序文件一: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
帮我把这个程序改成只显示时分秒,急用,非常感谢 赞!!很牛啊! mark{:victory:} 这个好呀 自己也可以弄弄了{:2_27:} 谢谢分享 最近想做一个GPS的东东,楼主可以发我一套资料吗?416479641@qq.com 51+1602GPS Mark 最近在搞GPS,楼主能发我一份资料吗,273889196@QQ.COM
这个不错,正好想做个GPS测速仪,哈哈...谢了LZ market 真是学习的好东西 mark,这个好,回家到电脑上下载来玩玩,正好配件都有,学习学习,最近刚开始学汇编。 嘿嘿,不错,这个给大学生练手还是不错的。
这个论坛就不错的,就是比较好的,会很多人来开源SHOW技术的。 有何用处呀? 正好有个1602,呵呵,谢谢楼主,缺个GPS准备去买 mark 马克!好资料 gps啥型号啊
我的gps模块链接电脑的时候 只有波特率设为9600时才能显示数据,前他波特率显示乱码,用楼主的程序写入单片机后链接gps模块,开机显示没有gps模块,是不是因为波特率不对呢。我用的是 89c52 11.0592 正好配件都有,学习学习 一直很好奇,有时间做一做! 好东东,学习 mark一下,先
页:
[1]