weixin_46629578 2020-03-23 18:38 采纳率: 0%
浏览 256

基于单片机的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;        
    } 
}
  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-09 15:35
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

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

报告相同问题?

悬赏问题

  • ¥15 Arduino无法同时连接多个hx711模块,如何解决?
  • ¥50 需求一个up主付费课程
  • ¥20 模型在y分布之外的数据上预测能力不好如何解决
  • ¥15 processing提取音乐节奏
  • ¥15 gg加速器加速游戏时,提示不是x86架构
  • ¥15 python按要求编写程序
  • ¥15 Python输入字符串转化为列表排序具体见图,严格按照输入
  • ¥20 XP系统在重新启动后进不去桌面,一直黑屏。
  • ¥15 opencv图像处理,需要四个处理结果图
  • ¥15 无线移动边缘计算系统中的系统模型