与8051单片机的GPS接口

与8051单片机的GPS接口,gps,microcontroller,8051,mikroc,Gps,Microcontroller,8051,Mikroc,我正在尝试提取GPS模块发送到8051uC的Lat和Long数据 GPS接收到的数据如下所示: $GPRMC,062637.000,A,2253.49272,N,07258.83129,E,,,270212,,,A*6970212,0.1,W,A*12 我需要在液晶显示器上写上LAT和LONG 我是由MikriC编译器从一个示例开始编写代码的,但听起来它还不完整 char uart_rd; sbit LCD_RS at P2_0_bit; sbit LCD_EN at P2_1_bit

我正在尝试提取GPS模块发送到8051uC的Lat和Long数据

GPS接收到的数据如下所示:

$GPRMC,062637.000,A,2253.49272,N,07258.83129,E,,,270212,,,A*6970212,0.1,W,A*12

我需要在液晶显示器上写上LAT和LONG

我是由MikriC编译器从一个示例开始编写代码的,但听起来它还不完整


char uart_rd;  
sbit LCD_RS at P2_0_bit;  
sbit LCD_EN at P2_1_bit;  

sbit LCD_D4 at P2_2_bit;  
sbit LCD_D5 at P2_3_bit;  
sbit LCD_D6 at P2_4_bit;  
sbit LCD_D7 at P2_5_bit;  

char idata info[70];  
char test[]="$GPGGA";  
unsigned int check=0,i;  
unsigned char a;  
int j;  
void main() {  
  Lcd_Init();  

  UART1_Init(4800);               // Initialize UART module at 4800 bps,  
                                  // receiver enabled  
                                  //frame size 8 bits  
                                  //1 STOP bit  
                                   //parity mode disabled  
                                   //disabled automatic address recognition  

  Delay_ms(100);                  // Wait for UART module to stabilize  


  while (1) {  

    if (UART1_Data_Ready() == 1) { // if data is received  
    UART1_Read_Text(info, "$GPGGA", 10); // reads text until '$GPRMC' is found  
      LCD_Out(1,1,info);  
    }  Delay_ms(1000);  
  }  
}


使用状态机并遍历句子,不要把它看作一个字符串。或者从$中收集一个字符串,直到找到另一个,然后检查校验和/crc,然后解析它。我一直使用状态机来实现这一点,这使它变得非常简单。IIRC字符串末尾将有“\r\n”,因此您可能希望使用/实现某种
get()
。注意:
gets()
被认为是不安全的,最好使用
fgets()
作为模板。