新人小白一枚,C语音不是很懂,这样修改原子哥的GPS显示程序(红色字体本小白改的),不知有没有错,望论坛里的各位大神指点迷津,小弟在此谢过!
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "oled.h"
#include "usart1.h"
#include "gps.h"
#include "string.h"
#include "key.h"
//ALIENTEK Mini STM32开发板扩展实验12
//ATK-NEO-6M GPS模块实验-库函数版本
//技术支持:www.openedv.com
//广州市星翼电子科技有限公司
nmea_msg gpsx; //GPS信息
__align(4) u8 dtbuf[50]; //打印缓存器
const u8*fixmode_tbl[4]={"Fail","Fail"," 2D "," 3D "}; //fix mode字符串
//显示GPS定位信息
void Gps_Msg_Show(void)
{
float tp;
tp=gpsx.longitude;
//得到经度字符串
OLED_ShowNum(63,22,(gpsx.longitude),3,12);
tp=gpsx.latitude;
//得到纬度字符串
OLED_ShowNum(57,12,(gpsx.latitude),3,12);
tp=gpsx.altitude;
//得到高度字符串
OLED_ShowNum(87,42(gpsx.altitude),4,12);
tp=gpsx.speed;
//得到速度字符串
OLED_ShowNum(75,32,(gpsx.speed),3,12);
if(gpsx.fixmode<=3)//定位状态
{ //gpsx.fixmode
OLED_ShowNum(30,130,(gpsx.fixmode));
}
//gpsx.posslnum
OLED_ShowNum(69,0,(gpsx.posslnum),2,12); //用于定位的卫星数
//gpsx.svnum
OLED_ShowNum(69,0,(gpsx.svnum),3,12); //可见卫星数
//gpsx.utc.year,gpsx.utc.month,gpsx.utc.date
OLED_ShowNum(3,0,(gpsx.utc.year,gpsx.utc.month,gpsx.utc.date ),4,12); //显示UTC日期
//gpsx.utc.hour,gpsx.utc.min,gpsx.utc.sec //显示UTC时间
OLED_ShowNum(3,0,(gpsx.utc.hour,gpsx.utc.min,gpsx.utc.sec),4,12);
}
//暂存数组
u8 TEMP_BUF[USART1_MAX_RECV_LEN];
int main(void)
{
u16 i,rxlen;
u16 lenx;
u8 key;
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
USART1_Init(38400); //初始化串口1
LED_Init(); //初始化与LED连接的硬件接口
OLED_Init(); //初始化OLED
/*OLED_DrawPoint(27,8,1);//第一行显示框架
OLED_DrawPoint(41,8,1);
OLED_DrawPoint(115,7,1);
OLED_DrawPoint(115,4,1);
OLED_DrawPoint(101,7,1);
OLED_DrawPoint(101,4,1);
OLED_Fill(61,2,67,2,1); //天线标志
OLED_DrawPoint(62,3,1);
OLED_DrawPoint(66,3,1);
OLED_Fill(63,4,65,4,1);
OLED_Fill(64,5,64,9,1);*/
if(Ublox_Cfg_Rate(1000,1)!=0) //设置定位信息更新速度为1000ms,顺便判断GPS模块是否在位.
{
OLED_ShowString(30,120,200,16,16,"NEO-6M Setting...");
while((Ublox_Cfg_Rate(1000,1)!=0)&&key) //持续判断,直到可以检查到NEO-6M,且数据保存成功
{
USART1_Init(9600); //初始化串口1波特率为9600(EEPROM没有保存数据的时候,波特率为9600.)
Ublox_Cfg_Prt(38400); //重新设置模块的波特率为38400
USART1_Init(38400); //初始化串口1波特率为38400
Ublox_Cfg_Tp(1000000,100000,1); //设置PPS为1秒钟输出1次,脉冲宽度为100ms
key=Ublox_Cfg_Cfg_Save(); //保存配置
}
OLED_ShowString(30,120,200,16,16,"NEO-6M Set Done!!");
delay_ms(500);
OLED_Fill(30,120,30+200,120+16,WHITE);//清除显示
}
while(1)
{
delay_ms(1);
if(USART1_RX_STA&0X8000) //接收到一次数据了
{
rxlen=USART1_RX_STA&0X7FFF; //得到数据长度
for(i=0;i<rxlen;i++)TEMP_BUF=USART1_RX_BUF;
USART1_RX_STA=0; //启动下一次接收
TEMP_BUF=0; //自动添加结束符
GPS_Analysis(&gpsx,(u8*)TEMP_BUF);//分析字符串
Gps_Msg_Show(); //显示信息
}
if((lenx%500)==0)LED0=!LED0;
lenx++;
}
}
|