📄 do_gps.c
字号:
gDisp_Buffer[gDisp_Buffer_Point]=14;
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]=0;
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]='@';
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]='%';
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]=12;
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]=DISP_MAIN_STATUS_DOWN;
gDisp_Buffer_Point++;
if(gGeneral_Flag&GPS_VALID_F_1)
{
gDisp_Buffer[gDisp_Buffer_Point]=CYear;
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]=CMonth;
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]=CDate;
}
else
{
gDisp_Buffer[gDisp_Buffer_Point]=0x05;
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]=0x01;
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]=0x01;
}
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]=CHour;
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]=CMinute;
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]=CSecond;
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]='$';
gDisp_Buffer_Point++;
gDisp_Buffer[gDisp_Buffer_Point]='&';
gDisp_Buffer_Point++;
}
}
/********************************************************\
3,如果GPS数据有效,则进行的有关处理
\********************************************************/
if(gGeneral_Flag&GPS_VALID_F_1)
{
/*
//显示当前GPS的经,纬度值
Send_COM1_Byte('O');Send_COM1_Byte('[');
Send_COM1_Byte(ASCII((gLongitude/0x1000000)/0x10));
Send_COM1_Byte(ASCII((gLongitude/0x1000000)%0x10));
Send_COM1_Byte(ASCII((gLongitude%0x1000000/0x10000)/0x10));
Send_COM1_Byte(ASCII((gLongitude%0x1000000/0x10000)%0x10));
Send_COM1_Byte(ASCII((gLongitude%0x10000/0x100)/0x10));
Send_COM1_Byte(ASCII((gLongitude%0x10000/0x100)%0x10));
Send_COM1_Byte(ASCII((gLongitude%0x100)/0x10));
Send_COM1_Byte(ASCII((gLongitude%0x100)%0x10));
Send_COM1_Byte(']');
Send_COM1_Byte('A');Send_COM1_Byte('[');
Send_COM1_Byte(ASCII((gLatitude/0x1000000)/0x10));
Send_COM1_Byte(ASCII((gLatitude/0x1000000)%0x10));
Send_COM1_Byte(ASCII((gLatitude%0x1000000/0x10000)/0x10));
Send_COM1_Byte(ASCII((gLatitude%0x1000000/0x10000)%0x10));
Send_COM1_Byte(ASCII((gLatitude%0x10000/0x100)/0x10));
Send_COM1_Byte(ASCII((gLatitude%0x10000/0x100)%0x10));
Send_COM1_Byte(ASCII((gLatitude%0x100)/0x10));
Send_COM1_Byte(ASCII((gLatitude%0x100)%0x10));
Send_COM1_Byte(']');
Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
*/
/////////////////////////////////////////
gYear=CYear;
gMonth=CMonth;
gDate=CDate;
gHour=CHour;
gMinute = CMinute;
gSecond=CSecond;
gGPS_Invaild_Timer=0;
gGps_Null_Count=0;
gPublic_Flag &=~ GPS_NULL_F_1;
//判断是否满足条件,进行记录仪的时间矫正设置的命令
if( (gPublic_Flag&SET_RECORD_TIME_F_1)
&&(gSecond==0)
&&(gStatus==NORMAL_TYPE)
&&((gPublic_Flag&CHECK_TIME_F_1)==0) )
{
Send_COM1_String( (unsigned char *)CHECK_TIME,sizeof(CHECK_TIME) );
Send_COM1_Byte(gStatus);
Check_Record = gStatus;
Send_COM1_Byte(0xAA);
Check_Record ^= 0xAA;
Send_COM1_Byte(0x75);
Check_Record ^= 0x75;
Send_COM1_Byte(G_SET_TIME); //命令字
Check_Record ^= G_SET_TIME;
Send_COM1_Byte(0);
Check_Record ^= 0;
Send_COM1_Byte(6); //长度6
Check_Record ^= 6;
Send_COM1_Byte(0x00);
Check_Record ^= 0x00; //保留字节
Send_COM1_Byte(gYear);
Check_Record ^= gYear;
Send_COM1_Byte(gMonth);
Check_Record ^= gMonth;
Send_COM1_Byte(gDate);
Check_Record ^= gDate;
Send_COM1_Byte(gHour);
Check_Record ^= gHour;
Send_COM1_Byte(gMinute);
Check_Record ^= gMinute;
Send_COM1_Byte(gSecond);
Check_Record ^= gSecond;
Send_COM1_Byte(Check_Record); //校验核
Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a); //包尾
}
/*
//D:存储一分钟一个点的历史轨迹
if( (CMinute!=CMinute_Temp)&&(gCycle_Send_Status!=PASS_DATA) )
{
gPassTrack_Store_Item++;
//将指向下一个历史点的存储位置,如果判断已经到了页尾,则需要从新开始下一个页的存储
if( ( gPassTrack_Store_Item>=16 )||( gPassTrack_Store_Item<=0 ) )
{
gPassTrack_Store_Item=1;
//1,判断是否到了规定存储历史轨迹区域的最后一个扇区
if((gPassTrack_Store_Sector>=FLASH_PASTDATA_E_2)||(gPassTrack_Store_Sector<FLASH_PASTDATA_S_2) )
{
gPassTrack_Store_Sector=FLASH_PASTDATA_S_2;
}
else gPassTrack_Store_Sector++;
//2,将下一个扇区的内容写成记忆页
OperateSPIEnd();
WriteOneByteToBuffer2(0xFF,0xaa);
OperateSPIEnd();
WriteBuffer2ToPage(gPassTrack_Store_Sector+1);
gTimer=0;Clear_Exter_WatchDog();
while(gTimer<500){}
Clear_Exter_WatchDog();
OperateSPIEnd();
}
OperateSPIEnd();
//读对应gPassTrack_Store_Sector扇区中的数据到buffer2.
ReadOnePageToBuffer2(gPassTrack_Store_Sector);
//计算在这个扇区需要存到的下一个位置
i=(gPassTrack_Store_Item-1)*17;
OperateSPIEnd();
//long int gLatitude gLongitude 四个字节
WriteOneByteToBuffer2( (i+0),gLongitude/0x1000000);
WriteNextByteToBuffer2( gLongitude%0x1000000/0x10000 );
WriteNextByteToBuffer2( gLongitude%0x10000/0x100 );
WriteNextByteToBuffer2( gLongitude%0x100 );
WriteNextByteToBuffer2( gLatitude/0x1000000 );
WriteNextByteToBuffer2( gLatitude%0x1000000/0x10000 );
WriteNextByteToBuffer2( gLatitude%0x10000/0x100 );
WriteNextByteToBuffer2( gLatitude%0x100 );
WriteNextByteToBuffer2( gSpeed );
WriteNextByteToBuffer2( gAzimuth );
WriteNextByteToBuffer2( nFlag|FLAG_GPSVAILD_1 );
WriteNextByteToBuffer2( gYear );
WriteNextByteToBuffer2( gMonth );
WriteNextByteToBuffer2( gDate );
WriteNextByteToBuffer2( gHour );
WriteNextByteToBuffer2( gMinute );
WriteNextByteToBuffer2( gSecond );
OperateSPIEnd();
//写已经存储的条数
WriteOneByteToBuffer2( 0xFF,gPassTrack_Store_Item );
//后面存储的是里程统计数据
WriteNextByteToBuffer2( gALL_Distance/0x1000000 );
WriteNextByteToBuffer2( gALL_Distance%0x1000000/0x10000 );
WriteNextByteToBuffer2( gALL_Distance%0x10000/0x100 );
WriteNextByteToBuffer2( gALL_Distance%0x100 );
OperateSPIEnd();
//将buffer2中的数据写入相应的Flash的区域中
if( (gPassTrack_Store_Sector>=FLASH_PASTDATA_S_2)&&(gPassTrack_Store_Sector<=FLASH_PASTDATA_E_2) )
{
WriteBuffer2ToPage(gPassTrack_Store_Sector);
gTimer=0;Clear_Exter_WatchDog();
while(gTimer<500){}
Clear_Exter_WatchDog();
}
OperateSPIEnd();
CMinute_Temp=CMinute;
}
*/
}
/********************************************************\
4,如果GPS数据无效,则进行相关的处理
\********************************************************/
else
{
gGPS_Invaild_Timer++;
//如果超过1800秒持续无效点,则重新掉电处理GPS模块
if(gGPS_Invaild_Timer>GPS_INVALID_COUNT)
{
gGPS_Invaild_Timer=0;
gGeneral_Flag|=OFF_GPS_F_1;
gOFF_Power_S=1;
}
}
}
GPS_Buffer_Point=0;
gGPS_Receive_Over=0;
for(i=0;i<sizeof(GPS_Buffer);i++) GPS_Buffer[i]=0;
}
TAUARTCTL|=TAUARTIE; //比较器A的中断允许
}
/********************************************************\
* 函数名:Receive_COM2(中断子程序)
作用域:本地文件调用
* 功能: 利用比较器A的中断向量,进行模拟串口2的接收处理,处理接收GPS的数据
* 参数:
* 返回值:
* 创建人:
*
* 修改历史:(每条详述)
\********************************************************/
interrupt [TAUART_VECTOR] void Receive_COM2(void)
{
TAUARTCTL&=~TAUARTIFG; //清除比较器A的中断标志位
if(RTI2&RECEIVE_FLAG) //表示接收到一个字节完成
{
GPS_Buffer[GPS_Buffer_Point]=SBUFIN2;
GPS_Buffer_Point++;
if(GPS_Buffer_Point>=sizeof(GPS_Buffer)) GPS_Buffer_Point=0;
gGPS_Receive_Over=0;
RX2_Ready();
}
}
/********************************************************\
* 函数名:Disp_Ask_Info()
作用域:本地文件调用
* 功能: 接收到来自显示终端的按键请求信息,需要将这些信息上行给中心
* 参数:
* 返回值:
* 创建人:
*
* 修改历史:(每条详述
Dim Instring As String
Dim Buffer(10) As Byte
Dim IObuffer(14) As Byte
Dim InBuffer(10) As Byte
Dim Savebuffer(5) As Byte
Dim I
Buffer(0) = &H10
Buffer(1) = &H7A
Buffer(2) = &H0
Buffer(3) = &H1
Buffer(4) = &H0
Buffer(5) = &H0
Buffer(6) = &H1 ' RMC
Buffer(7) = &H0
'buffer(7)=&H1C 在设置GSA,GSV,VTG,时,buffer(7)=&H1C
Buffer(8) = &H10
Buffer(9) = &H3
IObuffer(0) = &H10
IObuffer(1) = &HBC
IObuffer(2) = &H0
IObuffer(3) = &H7
IObuffer(4) = &H7
IObuffer(5) = &H3
IObuffer(6) = &H0
IObuffer(7) = &H0
IObuffer(8) = &H0
IObuffer(9) = &H2
IObuffer(10) = &H4
IObuffer(11) = &H0
IObuffer(12) = &H10
IObuffer(13) = &H3
Savebuffer(0) = &H10
Savebuffer(1) = &H8E
Savebuffer(2) = &H26
Savebuffer(3) = &H10
Savebuffer(4) = &H3
' 使用 COM1。
MSComm1.CommPort = 1
' 9600 波特,无奇偶校验,8 位数据,一个停止位。
MSComm1.Settings = "9600,O,8,1"
' 当输入占用时,
' 告诉控件读入整个缓冲区。
MSComm1.InputLen = 0
' 打开端口。
MSComm1.PortOpen = True
' 将 attention 命令送到调制解调器。
MSComm1.Output = Buffer ' "ATV1Q0" & Chr$(13) ' 确保
MSComm1.Output = IObuffer
'MSComm1.Output = Savebuffer
MSComm1.PortOpen = False
''''''''''''''
MSComm1.CommPort = 1
' 9600 波特,无奇偶校验,8 位数据,一个停止位。
MSComm1.Settings = "9600,N,8,1"
' 当输入占用时,
' 告诉控件读入整个缓冲区。
MSComm1.InputLen = 0
' 打开端口。
MSComm1.PortOpen = True
' 将 attention 命令送到调制解调器。
MSComm1.Output = Savebuffer
MSComm1.PortOpen = False
\********************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -