基于单片机的GPS数据解析,LCD1602proteus仿真时出现一部分黑块待解决

GPS数据解析,LCD1602上黑块较多,而且数据无论怎么变,LCD1602的显示都不变
图片说明图片说明

while(1)
{
        Scan_Key();
        if(Flag_GPS_OK == 1 && RX_Buffer[4] == 'G' && RX_Buffer[6] == ',' && RX_Buffer[13] == '.')          //确定是否收到"GNGGA"这一帧数据
        {
            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;          //UTC时间转换到北京时间        UTC+8
                                                                                                //0x30为ASCII转换为数字
            if( Hour >= 24)             //溢出
            {
                Hour %= 24;             //获取当前Hour
                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(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);

            LCD1602_write_word("  ");

            LCD1602_write_data(Display_GPGGA_Buffer[54]);   
            LCD1602_write_data(Display_GPGGA_Buffer[55]);   
            LCD1602_write_data(Display_GPGGA_Buffer[56]);   
            LCD1602_write_data(Display_GPGGA_Buffer[57]);
            LCD1602_write_word("m");

            LCD1602_write_com(0x80+0x40);           //设置指针

            LCD1602_write_data(Display_GPGGA_Buffer[28]);           //N 或者 S

            LCD1602_write_data(Display_GPGGA_Buffer[17]);           //纬度
            LCD1602_write_data(Display_GPGGA_Buffer[18]);           //纬度
            LCD1602_write_data(0xdf);                               //度
            LCD1602_write_data(Display_GPGGA_Buffer[19]);           //纬度
            LCD1602_write_data(Display_GPGGA_Buffer[20]);           //纬度
            LCD1602_write_word("'");                                //秒

            LCD1602_write_data(Display_GPGGA_Buffer[42]);           //E 或者 W

            LCD1602_write_data(Display_GPGGA_Buffer[30]);           //经度
            LCD1602_write_data(Display_GPGGA_Buffer[31]);   
            LCD1602_write_data(Display_GPGGA_Buffer[32]);   
            LCD1602_write_data(0xdf);                               
            LCD1602_write_data(Display_GPGGA_Buffer[33]);           
            LCD1602_write_data(Display_GPGGA_Buffer[34]);       
            LCD1602_write_word("'");


}

通信的代码

void RECEIVE_DATA(void) interrupt 4         
{ 
    unsigned char temp;
    temp = SBUF;
    RI = 0;                      //清除发送完成标志位
    //LED1 = ~LED1;
    SBUF=temp;//将接收到的数据放入到发送寄存器
    while(!TI);          //等待发送数据完成
    TI=0;
    if(temp == '$')
    {
        RX_Count = 0;
        Flag_GPS_OK = 0;        
    }

    RX_Buffer[RX_Count++] = temp;

    if(RX_Count >= 68)
    {
        RX_Count = 68;
        Flag_GPS_OK = 1;        
    } 
}
不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 以帮助更多的人 ^-^