|
我用的开发板,进行的测试,对GPS信息的获取进行了简化,仅进行时间的获取更好理解。
在调试程序的时候要注意晶振的选择。需要用11.0592MZ的。12MZ的需要更换。或者对GPS和单片机都进行比特率的调节。
单片机源程序如下:
- #include "main.h"
- #include "LCD1602.h"
- #include "GPS.h"
- unsigned char KEY_NUM = 0;
- bit Page = 0;
- unsigned char xdata Display_GPGGA_Buffer[68];
- bit Flag_OV = 0;
- bit Flag_Calc_GPGGA_OK = 0;
- bit Flag_Calc_GPRMC_OK = 0;
- //****************************************************
- //Ö÷oˉêy
- //****************************************************
- void main()
- {
- unsigned char i = 0;
- Init_LCD1602();
- LCD1602_write_com(0x80);
- LCD1602_write_word("Welcome to use!");
- Delay_ms(100);
- Uart_Init();
- while(1)
- {
- //Scan_Key();
- if(Flag_GPS_OK == 1 && RX_Buffer[4] == 'G' && RX_Buffer[6] == ',' && RX_Buffer[13] == '.') //è·¶¨êÇ·ñêÕμ½"GPGGA"Õaò»Ö¡êy¾Y
- {
- for( i = 0; i < 68 ; i++)
- {
- Display_GPGGA_Buffer[i] = RX_Buffer[i];
- }
- Hour = (Display_GPGGA_Buffer[7]-0x30)*10+(Display_GPGGA_Buffer[8]-0x30)+8;
- if( Hour >= 24)
- {
- Hour %= 24;
- Flag_OV = 1;
- }
- else
- {
- Flag_OV = 0;
- }
- Min_High = Display_GPGGA_Buffer[9];
- Min_Low = Display_GPGGA_Buffer[10];
-
- Sec_High = Display_GPGGA_Buffer[11];
- Sec_Low = Display_GPGGA_Buffer[12];
- Flag_Calc_GPGGA_OK = 1;
- }
- if(Page == 0 && Flag_Calc_GPGGA_OK == 1)
- {
- LED1 = ~LED1;
- Flag_Calc_GPGGA_OK = 0;
- LCD1602_write_com(0x01);
- LCD1602_write_com(0x80);
- LCD1602_write_data(Hour/10+0x30);
- LCD1602_write_data(Hour%10+0x30);
- LCD1602_write_data(':');
- LCD1602_write_data(Min_High);
- LCD1602_write_data(Min_Low);
- LCD1602_write_data(':');
-
- LCD1602_write_data(Sec_High);
- LCD1602_write_data(Sec_Low);}
- }
- }
- //****************************************************
- //MSÑóê±oˉêy(12M¾§ÕñÏÂ2aêÔ)
- //****************************************************
- void Delay_ms(unsigned int n)
- {
- unsigned int i,j;
- for(i=0;i<n;i++)
- for(j=0;j<123;j++);
- }
复制代码
|
|