与8051单片机的GPS接口
我正在尝试提取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编译器从一个示例开始编写代码的,但听起来它还不完整与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
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()
作为模板。