📄 navigation.c
字号:
#include "global.h"
#include "util.h"
#include "navigation.h"
#include "mb90092.h"
#include "dsa.h"
void update_latitude(void);
void update_longtitude(void);
void update_satellites_used(void);
void send_latitude_longtitude(void);
extern unsigned char gps_task;
extern bit GPS_recieve_valid;
extern unsigned char xdata gps_recieve_buf[];
extern unsigned char dsa_state;
bit NAVI_on = 0;
unsigned char gwmtest=0;
unsigned char xdata gps_locate;
void GPS_servo(void)
{
unsigned char i;
if(GPS_valid){
//ES0 = 0; ES1=0;
GPS_valid = 0;
gps_locate = 0;
dsa_task = DSA_send_gps;
dsa_state = 1;
gps_task = NAVI_FLUSH; /*update lantitude,longtitude,sattelite position,etc.*/
//"$GPRMC,153638.741,A,244 6.5243,N,12100.1494,E,0 00.0,000.0,061101,,*02\r\n";
for(i=0;i<23;i++)OSD_main_symbol(3,i,CHARACTER_BLACK,1,gps_recieve_buf[i]);
for(i=23;i<46;i++)OSD_main_symbol(4,i-23,CHARACTER_BLACK,1,gps_recieve_buf[i]);
for(i=46;i<69;i++)OSD_main_symbol(5,i-46,CHARACTER_BLACK,1,gps_recieve_buf[i]);
//OSD_main_symbol(6,7,CHARACTER_BLACK,1,gps_recieve_buf[66]);
//OSD_main_symbol(6,8,CHARACTER_BLACK,1,gps_recieve_buf[67]);
//OSD_main_symbol(7,9,CHARACTER_BLACK,1,gps_recieve_buf[6]);
}
switch(gps_task)
{
case 0:
switch(main_task)
{
case Main_task_NAVI:
if((main_selected_status & Navi_selected)!=0){
if((navi_selected_status & Real_selected)!=0){
if((real_selected_status & TurnOnNavi_selected)==TurnOnNavi_selected)
{
timer2_system = 0x05;
gps_task++;
}
else if((real_selected_status & TurnOffNavi_selected)==TurnOffNavi_selected)
{
timer2_system = 0x50;
NAVI_on = 0;
gps_task=2;
}
}
}
break;
case Main_task_RADIO:
break;
case Main_task_GSM:
break;
default:
break;
}
break;
case 1:
if(timer2_system) break;
clear_main_screen(2,0);
OSD_main_string(3,6,CHARACTER_RED,1,"初始化,请稍等......");
timer2_system = 0xf0;
NAVI_on = 1;
gps_task++;
break;
case 2:
if(timer2_system) return;
clear_main_screen(0,0);
if(NAVI_on){
//OSD_main_string(2,2,CHARACTER_RED,1,"经度:");
//OSD_main_string(2,8,CHARACTER_RED,1,"纬度:");
//OSD_main_string(2,14,CHARACTER_RED,1,"速度:");
//OSD_main_string(2,20,CHARACTER_RED,1,"方向:");
gps_task++;
}else gps_task++;
break;
case NAVI_FLUSH:
update_latitude();
update_longtitude();
update_satellites_used();
//OSD_sub_char_display(0,0xa1a1);
gps_task++;
break;
default:
break;
}
}
#define LANTITUDE_LOCATE 43
#define LONGTITUDE_LOCATE 30
#define LANTITUDE_A_MSB 20
#define LANTITUDE_A_LSB 21
#define LANTITUDE_M_MSB 22
#define LANTITUDE_M_LSB 23
#define LONGTITUDE_A_MSB 32
#define LONGTITUDE_A_MB 33
#define LONGTITUDE_A_LSB 34
#define LONGTITUDE_M_MSB 35
#define LONGTITUDE_M_LSB 36
void update_latitude(void)
{
#if 1
unsigned char i,j=0;
for(i=0;i<69;i++)if(gps_recieve_buf[i]==','){
j++;
//if(j==1)OSD_ASCII_output(10,8,j);
//else if(j==2)OSD_ASCII_output(10,10,j);
//else
if(j==3){
OSD_main_symbol(1,2,CHARACTER_BLACK,1,gps_recieve_buf[i+1]);
OSD_main_symbol(1,3,CHARACTER_BLACK,1,gps_recieve_buf[i+2]);
OSD_main_string(1,4,CHARACTER_GREEN,1,"度");
OSD_main_symbol(1,5,CHARACTER_BLACK,1,gps_recieve_buf[i+3]);
OSD_main_symbol(1,6,CHARACTER_BLACK,1,gps_recieve_buf[i+4]);
OSD_main_string(1,7,CHARACTER_GREEN,1,"分");
}
else if(j==4){
/*lontitude:*/
if(gps_recieve_buf[i+1]=='N')
OSD_main_string(1,9,CHARACTER_GREEN,1,"北纬");
else
if(gps_recieve_buf[i+1]=='S')
OSD_main_string(1,9,CHARACTER_GREEN,1,"南纬");
}
else if(j==5){
/*lontitude:*/
OSD_main_symbol(1,11,CHARACTER_BLACK,1,gps_recieve_buf[i+1]);
OSD_main_symbol(1,12,CHARACTER_BLACK,1,gps_recieve_buf[i+2]);
OSD_main_symbol(1,13,CHARACTER_BLACK,1,gps_recieve_buf[i+3]);
OSD_main_string(1,14,CHARACTER_GREEN,1,"度");
OSD_main_symbol(1,15,CHARACTER_BLACK,1,gps_recieve_buf[i+4]);
OSD_main_symbol(1,16,CHARACTER_BLACK,1,gps_recieve_buf[i+5]);
OSD_main_string(1,17,CHARACTER_GREEN,1,"分");
}
else if(j==6){
/*latitude:*/
if(gps_recieve_buf[i+1]=='E')
OSD_main_string(1,0,CHARACTER_GREEN,1,"东经");
else
if(gps_recieve_buf[i+1]=='W')
OSD_main_string(1,0,CHARACTER_GREEN,1,"西经");
}
}
#if 0
if(gps_recieve_buf[i]==',')
gps_locate++;
switch(gps_locate)
{
case 1:
break;
case 2:
break;
case 3: /*latitude*/
OSD_main_symbol(1,2,CHARACTER_BLACK,1,gps_recieve_buf[i+1]);
OSD_main_symbol(1,3,CHARACTER_BLACK,1,gps_recieve_buf[i+2]);
OSD_main_string(1,4,CHARACTER_GREEN,1,"度");
OSD_main_symbol(1,5,CHARACTER_BLACK,1,gps_recieve_buf[i+3]);
OSD_main_symbol(1,6,CHARACTER_BLACK,1,gps_recieve_buf[i+4]);
OSD_main_string(1,7,CHARACTER_GREEN,1,"分");
break;
case 4:
/*latitude:*/
if(gps_recieve_buf[i+1]=='E')
OSD_main_string(1,0,CHARACTER_GREEN,1,"东经");
else
if(gps_recieve_buf[i+1]=='W')
OSD_main_string(1,0,CHARACTER_GREEN,1,"西经");
break;
case 5:
/*lontitude:*/
OSD_main_symbol(1,11,CHARACTER_BLACK,1,gps_recieve_buf[i+1]);
OSD_main_symbol(1,12,CHARACTER_BLACK,1,gps_recieve_buf[i+2]);
OSD_main_symbol(1,13,CHARACTER_BLACK,1,gps_recieve_buf[i+3]);
OSD_main_string(1,14,CHARACTER_GREEN,1,"度");
OSD_main_symbol(1,15,CHARACTER_BLACK,1,gps_recieve_buf[i+4]);
OSD_main_symbol(1,16,CHARACTER_BLACK,1,gps_recieve_buf[i+5]);
OSD_main_string(1,17,CHARACTER_GREEN,1,"分");
break;
case 6:
/*lontitude:*/
if(gps_recieve_buf[i+1]=='N')
OSD_main_string(1,9,CHARACTER_GREEN,1,"北纬");
else
if(gps_recieve_buf[i+1]=='S')
OSD_main_string(1,9,CHARACTER_GREEN,1,"南纬");
break;
default:
break;
}
}
#endif
gps_locate = 0;
#endif
}
void update_longtitude(void)
{
}
unsigned char satellites=0;
void update_satellites_used(void)
{
satellites =0x04;
OSD_ASCII_output(1,20,satellites);
}
void send_latitude_longtitude(void)
{
#if 0
unsigned char i;
for(i=0;i<20;i++){
dsa_task = 0xAB00|gps_recieve_buf[i];
DSA_servo();
}
#endif
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -