标题: 单片机GPS授时程序不能按秒显示需要隔一段时间才会更新秒 [打印本页]

作者: 小丑only    时间: 2022-2-5 21:38
标题: 单片机GPS授时程序不能按秒显示需要隔一段时间才会更新秒
设计制作实时时间显示、日期显示和位置显示,但是程序设计编译好后发现时间中的秒不能按秒刷新。其余的到没发现问题。请大家帮忙看下我的程序因为什么地方导致的不能按秒进行刷新。
Uart_Init();

        while(1)
        {
               
                if(Flag_GPS_OK == 1 && RX_Buffer[4] == 'G' && RX_Buffer[6] == ',' && RX_Buffer[13] == '.')                        //确定是否收到"GPGGA"这一帧数据
                {
                        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;
                        Delay_ms(5);
                }
                  
                        LCD12864_NoWaitIdle_COM_Write(0x80);                        //设置指针
                        LCD12864_write_word("★");                                //显示内容
                        LCD12864_Data_Write(Hour/10+0x30);
                        LCD12864_Data_Write(Hour%10+0x30);
                        LCD12864_write_word("时");
        
                        LCD12864_Data_Write(Min_High);
                        LCD12864_Data_Write(Min_Low);
                        LCD12864_write_word("分");
        
                        LCD12864_Data_Write(Sec_High);
                        LCD12864_Data_Write(Sec_Low);
                        LCD12864_write_word("秒");
                        LCD12864_write_word("★");
        
        
                        LCD12864_NoWaitIdle_COM_Write(0x98);                        //设置指针
                        LCD12864_write_word("纬度:");                                //显示内容
                        
                        LCD12864_Data_Write(Display_GPGGA_Buffer[28]);                        //N 或者 S
                        LCD12864_Data_Write(' ');

                        LCD12864_Data_Write(Display_GPGGA_Buffer[17]);                        //纬度
                        LCD12864_Data_Write(Display_GPGGA_Buffer[18]);                        //纬度
                        LCD12864_write_word("°");
                        LCD12864_Data_Write(Display_GPGGA_Buffer[19]);                        //纬度
                        LCD12864_Data_Write(Display_GPGGA_Buffer[20]);                        //纬度
                        LCD12864_write_word("' ");


                        LCD12864_NoWaitIdle_COM_Write(0x88);                        //设置指针
                        LCD12864_write_word("经度:");                                //显示内容
                        
                        LCD12864_Data_Write(Display_GPGGA_Buffer[42]);                        //E 或者 W

                        LCD12864_Data_Write(Display_GPGGA_Buffer[30]);                        //经度
                        LCD12864_Data_Write(Display_GPGGA_Buffer[31]);        
                        LCD12864_Data_Write(Display_GPGGA_Buffer[32]);        
                        LCD12864_write_word("°");
                  LCD12864_Data_Write(Display_GPGGA_Buffer[33]);                        
                        LCD12864_Data_Write(Display_GPGGA_Buffer[34]);               
                        LCD12864_write_word("' ");


                if(Flag_GPS_OK == 1 && RX_Buffer[4] == 'M' && RX_Buffer[52] == ',' && RX_Buffer[59] == ',')                        //确定是否收到"GPRMC"这一帧数据
                {
                        for( i = 0; i < 68 ; i++)
                        {
                                Display_GPRMC_Buffer[ i] = RX_Buffer[ i];        
                        }

                        Year_High = Display_GPRMC_Buffer[57];
                        Year_Low = Display_GPRMC_Buffer[58];

                        Month_High = Display_GPRMC_Buffer[55];
                        Month_Low = Display_GPRMC_Buffer[56];

                        Day_High = Display_GPRMC_Buffer[53];
                        Day_Low = Display_GPRMC_Buffer[54];


                        if(Flag_OV == 1)                        //有进位
                        {
                                UTCDate2LocalDate();                        //UTC日期转换为北京时间               
                        }

                        Flag_Calc_GPRMC_OK = 1;
                        Delay_ms(5);
                }

                        
                        LCD12864_NoWaitIdle_COM_Write(0x90);                        //设置指针
                        LCD12864_write_word("20");
                        LCD12864_Data_Write(Year_High);
                        LCD12864_Data_Write(Year_Low);
                        LCD12864_write_word("年");
        
                        LCD12864_Data_Write(Month_High);
                        LCD12864_Data_Write(Month_Low);
                        LCD12864_write_word("月");
        
                        LCD12864_Data_Write(Day_High);
                        LCD12864_Data_Write(Day_Low);
                        LCD12864_write_word("日");
                        
                }               
        }
}

51hei图片_20170205213459.jpg (2.12 MB, 下载次数: 55)

51hei图片_20170205213459.jpg

作者: 小丑only    时间: 2022-2-5 21:40
标记秒的图

51hei图片编辑_20170205214011.jpg (538.59 KB, 下载次数: 47)

51hei图片编辑_20170205214011.jpg

作者: lkc8210    时间: 2022-2-6 00:09
会不会是LCD12864的写函数太多太久引致更新不及时?
其实年月日时分秒不用每次收到信号都更新显示
尝试加一些变数来计下旧值
如果收到的GPS年月日时分秒经纬有变化才更新显示
节省一些运算时间

作者: daemondong    时间: 2022-2-6 00:39
GPS一般采样间隔是30秒,是用来授时,接收到后,应该对时然后用自己的时钟走秒表。 看应用多长时间授时一次,比如半天一次就可以了。
作者: Y_G_G    时间: 2022-2-16 17:51
GPS时间一般不用实时显示的
楼上也说,几十秒或者一天授时校正一次就行了,其它的时间可以用单片机时钟走,或者是用时钟芯片走就行
作者: xws245925587    时间: 2022-2-16 19:33
减少不必要的显示内容一次在刷新,对于有变化的内容,有变化才刷新




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1