找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1568|回复: 5
收起左侧

单片机GPS授时程序不能按秒显示需要隔一段时间才会更新秒

[复制链接]
ID:447439 发表于 2022-2-5 21:38 | 显示全部楼层 |阅读模式
设计制作实时时间显示、日期显示和位置显示,但是程序设计编译好后发现时间中的秒不能按秒刷新。其余的到没发现问题。请大家帮忙看下我的程序因为什么地方导致的不能按秒进行刷新。
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
回复

使用道具 举报

ID:447439 发表于 2022-2-5 21:40 | 显示全部楼层
标记秒的图
51hei图片编辑_20170205214011.jpg
回复

使用道具 举报

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

使用道具 举报

ID:827243 发表于 2022-2-6 00:39 | 显示全部楼层
GPS一般采样间隔是30秒,是用来授时,接收到后,应该对时然后用自己的时钟走秒表。 看应用多长时间授时一次,比如半天一次就可以了。
回复

使用道具 举报

ID:401564 发表于 2022-2-16 17:51 | 显示全部楼层
GPS时间一般不用实时显示的
楼上也说,几十秒或者一天授时校正一次就行了,其它的时间可以用单片机时钟走,或者是用时钟芯片走就行
回复

使用道具 举报

ID:311903 发表于 2022-2-16 19:33 | 显示全部楼层
减少不必要的显示内容一次在刷新,对于有变化的内容,有变化才刷新
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表