标题:
STC12单片机GPRS通信 GPS新修改,增加判断gps是否定位功能
[打印本页]
作者:
woshihaha
时间:
2017-7-24 20:59
标题:
STC12单片机GPRS通信 GPS新修改,增加判断gps是否定位功能
有需要的朋友可以加我
0.png
(53.36 KB, 下载次数: 55)
下载附件
2017-7-25 00:26 上传
单片机源程序如下:
#include"stc.h"
#include"GPS.h"
#define uchar unsigned char
#define uint unsigned int
//GPS数据存储数组
uchar JD[10]; //经度
uchar JD_a; //经度方向
uchar WD[9]; //纬度
uchar WD_a; //纬度方向
uchar time[6]; //时间
uchar speed[5]; //速度
uchar high[6]; //高度
uchar angle[5]; //方位角
uchar use_sat[2]; //使用的卫星数
uchar total_sat[2]; //天空中总卫星数
uchar lock; //定位状态
uchar date[6]; //日期
//串口中断需要的变量
uchar seg_count; //逗号计数器
uchar dot_count; //小数点计数器
uchar byte_count; //位数计数器
uchar cmd_number; //命令类型
uchar mode; //0:结束模式,1:命令模式,2:数据模式
uchar buf_full; //1:整句接收完成,相应数据有效。0:缓存数据无效。
uchar cmd[5]; //命令类型存储数组
void uart2_init()
{
S2CON=0x50;//串行口2工作方式1,允许接收
BRT=0xfd; //11.0592下波特率为4800
IE2=0x01; //开启串口2通讯中断
AUXR|=0x11;
}
void uart() interrupt 8
{
uchar k;
uchar temp;
k=S2CON&0x01; //读取串口2的S2RI位状态
if(k==1)
{
temp=S2BUF;
switch(temp)
{
case ' $ ' :
cmd_number=0; //类型命令清空
mode=1; //接收命令模式
byte_count=0; //接收位数清空
break;
case ',':
seg_count++; //逗号累计加1
byte_count=0; //出现逗号则进去另一字段
break;
case '*':
switch(cmd_number)
{
case 1:buf_full|=0x01;break; //有效接收GPGGA数据
case 2:buf_full|=0x02;break; //有效接收GPGSV数据
case 3:buf_full|=0x04;break; //有效接收GPRMC数据
}
mode=0;
break;
default:
if(mode==1) //接收命令
{
cmd[byte_count]=temp; //接收命令字符保存于cmd
if(byte_count>=4)
{
if(cmd[0]=='G')
{
if(cmd[1]=='P')
{
if(cmd[2]=='G')
{
if(cmd[3]=='G')
{
if(cmd[4]=='A')
{
cmd_number=1; //接收到GPGGA类型
mode=2;
seg_count=0;
byte_count=0;
}
}
else
if(cmd[3]=='S')
{
if(cmd[4]=='V')
{
cmd_number=2; //接收到GPGSV类型
mode=2;
seg_count=0;
byte_count=0;
}
}
}
else
if(cmd[2]=='R')
{
if(cmd[3]=='M')
{
if(cmd[4]=='C')
{
cmd_number=3; //接收到GPRMC类型
mode=2;
seg_count=0;
byte_count=0;
}
}
}
}
}
}
}
else
if(mode==2) //数据命令
{
switch(cmd_number)
{
case 1: //GPGGA类型
switch(seg_count)
{
case 2: //接收字段2纬度信息
if(byte_count<9)
{
WD[byte_count]=temp;
}
break;
case 3: //接收字段3纬度方向
if(byte_count<1)
{
WD_a=temp;
}
break;
case 4: //接收字段4经度信息
if(byte_count<10)
{
JD[byte_count]=temp;
}
break;
case 5: //接收字段5经度方向
if(byte_count<1)
{
JD_a=temp;
}
break;
case 6: //GPS状态 0=未定位 1\2=已定位
if(byte_count<1)
{
lock=temp;
}
break;
case 7: //接收字段7定位使用的卫星数信息
if(byte_count<2)
{
use_sat[byte_count]=temp;
}
break;
case 9: //接收字段9海拔高度信息
if(byte_count<6)
{
high[byte_count]=temp;
}
break;
}
break;
case 2: //GPGSV类型
switch(seg_count)
{
case 3: //接收字段3天空中的卫星总数信息
if(byte_count<2)
{
total_sat[byte_count]=temp;
}
break;
}
break;
case 3: //GPRMC类型
switch(seg_count)
{
case 1: //接收字段1时间信息
if(byte_count<6)
{
time[byte_count]=temp;
}
break;
case 7: //接收字段7速度信息 单位节 Knots
if(byte_count<5)
{
speed[byte_count]=temp;
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
STC12 GPRS GPS新修改,增加判断gps是否定位功能.rar
(57.66 KB, 下载次数: 48)
2017-7-24 21:03 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1