STC8a8K单片机c语言驱动彩屏,12864+gps校时+dht11+stc8a8k单片机程序,12864是7567芯片串口屏...

"该代码段涉及GPS数据的接收与解析,主要关注"GPGGA"和"GPRMC"帧数据。程序检查接收到的数据包是否符合特定格式,并从中提取时间(年、月、日、小时、分钟、秒)、日期等信息,将UTC时间转换为北京时间。同时,存在一个用于存储接收到的GPS数据的缓冲区。"
摘要由CSDN通过智能技术生成

#include "stc8.h"

#include

#include "GPS.h"

unsigned char RX_Buffer[120]={0};

unsigned char RX_Count = 0;

unsigned char Hour = 0,Min_High = 0,Min_Low = 0,Sec_High = 0,Sec_Low = 0,Min=0,Sec=0;

unsigned char Month = 0,Day = 0,Month_High = 0, Month_Low = 0,Day_Low = 0,Day_High = 0, Year_High = 0,Year_Low = 0;

unsigned int Year = 0;

bit Flag_GPS_OK = 0;

unsigned char MaxDay = 0;

bit Page = 0;

unsigned char xdata Display_GPGGA_Buffer[120]={0};

unsigned char xdata Display_GPRMC_Buffer[120]={0};

bit Flag_OV = 0;

bit Flag_Calc_GPGGA_OK = 0;

bit Flag_Calc_GPRMC_OK = 0;

void gps(void)

{

int ii;

int jj;

Flag_OV =0;

if(RX_Buffer[0]==0x24&Flag_GPS_OK==1&RX_Buffer[1]==0x47&RX_Buffer[2]==0x50&RX_Buffer[4]==0x47&RX_Buffer[5]==0x41&RX_Buffer[6]==0x2C&RX_Buffer[17]==0x2C)                        //确定是否收到"GPGGA"这一帧数据

{

Flag_GPS_OK=0;

//        Flag_OV =1;

for( ii = 0; ii < 120 ; ii++)

{

Display_GPGGA_Buffer[ii] = RX_Buffer[ii];

}

}

if(RX_Buffer[56]==0X2c&RX_Buffer[63]==0x2c&Flag_GPS_OK==1&RX_Buffer[18] == 0x41&RX_Buffer[0] == 0x24 & RX_Buffer[1] == 0x47 & RX_Buffer[2] == 0x50& RX_Buffer[3] == 0x52& RX_Buffer[4] == 0x4d& RX_Buffer[5] == 0x43)                        //确定是否收到"GPRMC"这一帧数据

{

Flag_GPS_OK=0;

Flag_OV =1;

for( jj = 0; jj < 120 ; jj++)

{

Display_GPRMC_Buffer[jj] = RX_Buffer[jj];

}

Year_High = Display_GPRMC_Buffer[61];

Year_Low = Display_GPRMC_Buffer[62];

Month_High = Display_GPRMC_Buffer[59];

Month_Low = Display_GPRMC_Buffer[60];

Day_High = Display_GPRMC_Buffer[57];

Day_Low = Display_GPRMC_Buffer[58];

Min_High = Display_GPRMC_Buffer[9];

Min_Low = Display_GPRMC_Buffer[10];

Sec_High = Display_GPRMC_Buffer[11];

Sec_Low = Display_GPRMC_Buffer[12];

// Day = (Day_High - 0x30) * 10 + (Day_Low-0x30);                //日  加一

Month = (Month_High - 0x30) * 10 + (Month_Low - 0x30);

Year =  (Year_High - 0x30) * 10 + (Year_Low - 0x30);

Hour = ((Display_GPRMC_Buffer[7]-0x30)*10+(Display_GPRMC_Buffer[8]-0x30)+8)%24;                        //UTC时间转换到北京时间                UTC+8

//0x30为ASCII转换为数字

if(Hour<=7)

{

Day = (Day_High - 0x30) * 10 + (Day_Low-0x30)+1;                //日  加一

}

else

{

Day = (Day_High - 0x30) * 10 + (Day_Low-0x30);

}

Min = (Display_GPRMC_Buffer[9]-0x30)*10+(Display_GPRMC_Buffer[10]-0x30);

Sec= (Display_GPRMC_Buffer[11]-0x30)*10+(Display_GPRMC_Buffer[12]-0x30);

}

}

void UTCDate2LocalDate(void)

{

Day = (Day_High - 0x30) * 10 + (Day_Low-0x30) + 1;                //日  加一

Month = (Month_High - 0x30) * 10 + (Month_Low - 0x30);

Year = 2000 + (Year_High - 0x30) * 10 + (Year_Low - 0x30);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值