⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 do_disp.c

📁 车载GPS监控终端的完整代码,与监控中心的通讯采用GPRS.
💻 C
📖 第 1 页 / 共 2 页
字号:
/********************************************************\
*	文件名:  Do_Disp.h
*	创建时间:2004年10月20日
*	创建人:  
*	版本号:  1.00
*	功能:
*
*	修改历史:(每条详述)
\********************************************************/
#include <msp430x14x.h>
#include "General.h"
#include "Uart01.h"
#include "Define_Bit.h"
#include "Other_Define.h"
#include "Disp_Protocol.h"
#include "Sub_C.h"
#include "W_Protocol.h"
#include "SPI45DB041.h"
#include "D_Buffer.h"
#include "Do_Other.h"
#include "TA_Uart.h"
#include "Handle_Protocol.h"
#include "Do_Handle.h"
#include "M22_AT.h"
#include "Do_SRAM.h"
/*
#include "Main_Init.h"
#include "Check_GSM.h"
#include "Do_Reset.h"
#include "Do_GSM.h"
#include "Do_Handle.h"
#include "Do_GPS.h"
#include "Do_Disp.h"
#include "Msp430_Flash.h"
*/
unsigned char Check_Disp_Command(void);
void Disp_Ask_Watch_Status_Echo(void);
void Disp_Ask_Info(unsigned char nCommand,unsigned char nKey_ID,unsigned char nACK);
void Disp_Receive_Info_Echo(unsigned char nCommand,unsigned char nInfo_ID1,unsigned char nInfo_ID2,unsigned char nInfo_ID3,unsigned char nInfo_ID4,unsigned char nACK);
void Disp_Ask_Par(void);
/********************************************************\
*	函数名:Do_Disp_Module()
	作用域:外部文件调用
*	功能:
*	参数:
*	返回值:
*	创建人:
*
*	修改历史:(每条详述)
	补充说明:显示终端数据采用半双工的通讯方式,模拟串口4,不采用握手线,和手柄的通讯方式一样
\********************************************************/
void Do_Disp_Module(void)
{
    unsigned int i=0,k=0;
 	//接收处理来自显示终端的消息包
	if( (gDisp_Receive_Over>50)&&(gDisp_Buffer_R_Point>0) )
	{
		#ifdef Debug_GSM_COM1
		Send_COM1_Byte(ASCII(gDisp_Buffer_R_Point/10));
		Send_COM1_Byte(ASCII(gDisp_Buffer_R_Point%10));
		Send_COM1_Byte('[');
		Send_COM1_String(gDisp_Buffer_R,gDisp_Buffer_R_Point);
		Send_COM1_Byte(']');
		Send_COM1_Byte(0x0d);Send_COM1_Byte(0x0a);
		#endif
		k=Check_Disp_Command();
		gDisp_Buffer_R_Point=0;
		switch(k)
		{
			/********************************************************\
			1,显示终端向主控请求主控状态的命令
			\********************************************************/
			case	DISP_ASK_WATCH_STATUS_UP:
			{
				gDisp_OnLine_Timer=0;
				gInternal_Flag|=DISP_ON_F_1;
				gStatus1_Flag|=DISPLAY_ON_F_1;
				Disp_Ask_Watch_Status_Echo();
				break;
			}
			/********************************************************\
			2,接收来自显示终端的信息请求(需要上行到中心请求信息)
			\********************************************************/
			case	DISP_INFO_STATUS_UP:
			{
				gDisp_OnLine_Timer=0;
				gInternal_Flag|=DISP_ON_F_1;
				gStatus1_Flag|=DISPLAY_ON_F_1;
				SRAM_Init();
				//1,先判断是否有未处理完的信息,如果有,则返回,接收命令不成功
				i=SRAM_Read(OTHER_SMS_2);
				if(i==VAILD_2)
				{
					gPublic_Flag &=~ DISP_SEND_INFO_F_1;
					if(gDisp_Buffer_Point+7+2<=sizeof(gDisp_Buffer))
					{
						gDisp_Buffer[gDisp_Buffer_Point]=7+2;
						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]=7;
						gDisp_Buffer_Point++;
						gDisp_Buffer[gDisp_Buffer_Point]=DISP_MAIN_INFO_ECHO_DOWN;
						gDisp_Buffer_Point++;
						gDisp_Buffer[gDisp_Buffer_Point]=COMMAND_ERROR;
						gDisp_Buffer_Point++;
						gDisp_Buffer[gDisp_Buffer_Point]='$';
						gDisp_Buffer_Point++;
						gDisp_Buffer[gDisp_Buffer_Point]='&';
						gDisp_Buffer_Point++;
					}
				}
				else
				{
					Disp_Ask_Info(DISP_ASK_INFO_UP,gDisp_Buffer_R[4],0);
					gPublic_Flag |= DISP_SEND_INFO_F_1;
				}
				break;
			}
			/********************************************************\
			3,短消息预置的上报
			\********************************************************/
			case	DISP_SMS_SNED_UP:
			{
				//1,先判断是否有未处理完的信息,如果有,则返回,接收命令不成功
				gDisp_OnLine_Timer=0;
				gInternal_Flag|=DISP_ON_F_1;
				gStatus1_Flag|=DISPLAY_ON_F_1;
				SRAM_Init();
				i=SRAM_Read(OTHER_SMS_2);
				if(i==VAILD_2)
				{
					gPublic_Flag &=~ DISP_SEND_INFO_F_1;
					if(gDisp_Buffer_Point+7+2<=sizeof(gDisp_Buffer))
					{
						gDisp_Buffer[gDisp_Buffer_Point]=7+2;
						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]=7;
						gDisp_Buffer_Point++;
						gDisp_Buffer[gDisp_Buffer_Point]=DISP_MAIN_INFO_ECHO_DOWN;
						gDisp_Buffer_Point++;
						gDisp_Buffer[gDisp_Buffer_Point]=COMMAND_ERROR;
						gDisp_Buffer_Point++;
						gDisp_Buffer[gDisp_Buffer_Point]='$';
						gDisp_Buffer_Point++;
						gDisp_Buffer[gDisp_Buffer_Point]='&';
						gDisp_Buffer_Point++;
					}
				}
				else
				{
					Disp_Ask_Info(DISP_SMS_INFO_UP,gDisp_Buffer_R[4],0);
					gPublic_Flag |= DISP_SEND_INFO_F_1;
				}
				break;
			}
			/********************************************************\
			4,接收来自显示终端接收到主控发送的驾驶员信息的反馈
			\********************************************************/
			case	DISP_RECEIVE_IC_INFO_UP:
			{
				gDisp_OnLine_Timer=0;
				gInternal_Flag|=DISP_ON_F_1;
				gStatus1_Flag|=DISPLAY_ON_F_1;
				gGet_Driver_Info_Count=0;
				gDriver_Info=SEND_DRIVER_INFO_OK;
				break;
			}
			/********************************************************\
			4,接收来自显示终端接收到一个下行的信息包的ECHO,需要上行到中心请求
			\********************************************************/
			/*
			case	DISP_RECEIVE_INFO_ECHO_UP:
			{
				Disp_Receive_Info_Echo(DISP_INFO_ECHO_UP,gDisp_Buffer_R[4],gDisp_Buffer_R[5],gDisp_Buffer_R[6],gDisp_Buffer_R[7],0);
				break;
			}
			*/
			/********************************************************\
			5,接收来自显示终端接收到一个下行的响应(显示终端接收到一个每一分钟的
				的时间矫正后,则需要返回的一个响应数据包)
			\********************************************************/
			case	DISP_CLRCLESEND_ECHO_UP:
			{
				gDisp_OnLine_Timer=0;
				gInternal_Flag|=DISP_ON_F_1;
				gStatus1_Flag|=DISPLAY_ON_F_1;
				break;
			}
			/********************************************************\
			6, 接收来自显示终端和记录仪之间通讯的协议字(主控系统只负责转发)
				需要增加重复发送功能
			\********************************************************/
			case	DISP_ASK_RECORDINFO_UP:
			{
				gDisp_OnLine_Timer=0;
				gInternal_Flag|=DISP_ON_F_1;
				gStatus1_Flag|=DISPLAY_ON_F_1;
				for(k=0;k<gDisp_Buffer_R[2]-5;k++)
				{
					Send_COM1_Byte(gDisp_Buffer_R[k+4]);
				}
				break;
			}
			/********************************************************\
			7, 接收来自显示终端的响应(0xAE)
			\********************************************************/
			case	DISP_SET_ECHO_UP:
			{
				gDisp_OnLine_Timer=0;
				gInternal_Flag|=DISP_ON_F_1;
				gStatus1_Flag|=DISPLAY_ON_F_1;
				//下行文字信息的显示终端收到一屏的响应
				if(gDisp_Buffer_R[4]==DISP2_SEND_WORD_ECHO_UP)
				{
					if(gCommon_Flag&ALLOW_OUT_DISP_F_1)
					{
						gCommon_Flag|=DISP_SEND_OK_F_1;
					}
				}
				//下行文字信息全部收完后的响应0x4B
				else if(gDisp_Buffer_R[4]==DISP2_SEND_WORD_UP)
				{
					//传递参数:第二级命令字;ID(4个字节);ACK,
					Disp_Receive_Info_Echo(gDisp_Buffer_R[4],gDisp_Buffer_R[6],gDisp_Buffer_R[7],gDisp_Buffer_R[8],gDisp_Buffer_R[9],gDisp_Buffer_R[5]);
				}
				//来自中心的预先设置短消息的响应0xAE
				else if(gDisp_Buffer_R[4]==DISP2_SET_SMS_ECHO_UP)
				{
					//传递参数:第二级命令字;ID(1个字节);ACK
					Disp_Ask_Info(gDisp_Buffer_R[4],gDisp_Buffer_R[6],gDisp_Buffer_R[5]);
					gCommon_Flag|=DISP_SEND_OK_F_1;
				}
				//来自手柄端口的预先设置短消息的响应字0x04
				else if(gDisp_Buffer_R[4]==DISP2_HSET_SMS_ECHO_UP)
				{
					Send_COM3_Load(5,HANDLE_SET_SMS_ECHO,COMMAND_OK);
					gCommon_Flag|=DISP_SEND_OK_F_1;
				}
				//来自手柄端口的初始化显示终端的命令响应0x03
				else if(gDisp_Buffer_R[4]==DISP2_CLEAR_ECHO_UP)
				{
					//返回手柄一个成功信号
					Waiting_Allow_Send();
					Send_COM3_SubProgram(5,HANDLE_CLEAR_DISP_ECHO,COMMAND_OK);
				}
				break;
			}
			/********************************************************\
			8, 接收来自显示终端查询主控终端的请求(需要增加显示终端的重复发送)
			\********************************************************/
			case	DISP_ASK_PAR_UP:
			{
				gDisp_OnLine_Timer=0;
				gInternal_Flag|=DISP_ON_F_1;
				gStatus1_Flag|=DISPLAY_ON_F_1;
				Disp_Ask_Par();
				break;
			}
			/********************************************************\
			9,其他
			\********************************************************/
			default:
				break;
		}
	}
	else if(  (P6IN&DISP_TEST)
			&&((gCommon_Flag&ALLOW_SEND_DISP_F_1)==0) 	)
	{
		gCommon_Flag|=ALLOW_SEND_DISP_F_1;
	}
	//处理向显示终端发送消息包的处理
	else if ( 	(gDisp_Buffer_Point>0)				//发送缓冲区中有数据要发送
			  &&(gDisp_Buffer_R_Point==0)			//接收缓冲区的数据指针为0,表示没有接收数据
			  &&(gHandle_Receive_Over>20)   		//因为在同一个中断中,必须保证车栽电话没有向主控发送数据
			  &&(P6IN&DISP_TEST)
			  &&( (gCommon_Flag&ALLOW_R232_F_1)==0)
			  &&(gReceive1_Over_Count>20)
			  &&(gGPS_Receive_Over>20)
			  &&(gDisp_Timer>30)
			  &&(gCommon_Flag&ALLOW_SEND_DISP_F_1)	)
	{
		//1,正常的非需要响应的数据
		if(   ((gCommon_Flag&ALLOW_OUT_DISP_F_1)==0)
		    &&( (gCommon_Flag&DISP_SEND_OK_F_1)==0)		)
		{
			Send_COM4_String( gDisp_Buffer+2,gDisp_Buffer[0]-2 );
			RX4_Ready();
			gCommon_Flag&=~ALLOW_SEND_DISP_F_1;
			gDisp_Timer=0;
			if( gDisp_Buffer[5]==DISP_MAIN_WORD_DOWN )

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -