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

📄 mdt.c

📁 这是一个C51做的GPS终端 CPU:89S52 语言: Keil C51 主要是RS232通信
💻 C
📖 第 1 页 / 共 4 页
字号:
			Write_S6b0741_Reg(SET_COLUMN_LSB+col_lsb);
			for(j=0;j<97;++j) Write_S6b0741_Data(0x00);
			++i;
		}
return;
}


//============================================================
//清除存储区状态栏数据
//============================================================
void Clr_Status_Buff()
{
unsigned char i=0,j=0;
	for(i=0;i<16;++i)
		for(j=0;j<12;++j) Buff_Page[i].Column[j]=0;
return;
}

//============================================================
//清除消息缓存区数据
//============================================================
void Clr_Message_Buff()
{
unsigned int i=0,j=0;
	for(i=0;i<16;++i)
		for(j=12;j<(Total_Line+1)*12+8;++j) Buff_Page[i].Column[j]=0;
//		for(j=12;j<Buff_Line;++j) Buff_Page[i].Column[j]=0;
return;
}


//============================================================
//读取接收存储区数据
//============================================================
unsigned char Read_Rx()
{
unsigned char buff_data;

	if(P_Rx==P_Rd) {P_Rd=0; P_Rx=0;}
	while(P_Rx==0) {Key_Scan();Stand_By();}
	buff_data=Recieve_Buff[P_Rd];
	if(P_Rd<P_Rx) ++P_Rd;
	return buff_data;
}

void Stand_Message()
{  
    unsigned char ch,char_no,baknum;

    S2_Flag=1;
	char_no=0;
	ch=Read_Rx();
	while(ch!='^'){ch=Read_Rx();}
	while(ch!='H'){ch=Read_Rx();}
	while(ch!='^'){
		ch=Read_Rx();
	    heading[char_no]=ch;
		++char_no;
	}
	char_no--;
	heading[char_no]='\0';
	char_no=0;
	while(ch!='S'){ch=Read_Rx();}
	while(ch!='^'){
	    speed[char_no]=ch;
		++char_no;
		ch=Read_Rx();
	}
	speed[char_no]='\0';
	char_no=0;
	while(ch!='D'){ch=Read_Rx();}
	while(ch!='^'){
	    date[char_no]=ch;
		++char_no;
		ch=Read_Rx();
	}
	date[char_no]='\0';
	char_no=0;
	while(ch!='T'){ch=Read_Rx();}
	while(ch!='N'){
	    time[char_no]=ch;
		++char_no;
		ch=Read_Rx();
	}
	time[char_no]='\0';
	baknum=char_no;
	char_no=0;
	while(ch!='}'){
	    newmail[char_no]=ch;
		++char_no;
		ch=Read_Rx();
	}
	newmail[char_no]='\0';
	if(speed[1]!='-')
		OverSpeed_Flag=0;
	if(char_no<6)
	{
		Stand_Flag=1;
	}
	else if(pretime!=time[4])
	{
	    Stand_Flag=1;
//		Update_Flag=1;
		pretime=time[4];
	}
    if(onetime!=time[6])
	{
//	   Update_Flag=1;
	   Stand_Flag=1;
	   onetime=time[6];
	}
	if(newmail[1]=='1')
    {
	    NewMail_Flag=1;
		OverSpeed_Flag=0;
		StandBy_Flag=0;		
		CurKey_Flag=0;
    }
	else if(newmail[1]=='0')
        NewMail_Flag=0;
}
void Save_News(void)
{
    unsigned char ch,char_no;
	Clr_Mess_Buff();
	Clr_Message_Buff();

	Active_Line=0;
    Start_Line=0;
	Total_Line=0;
	char_no=0;
		
    S2_Flag=0;
    Roll_En=1;
	ch=Read_Rx();
	while(ch!='^'){ch=Read_Rx();}
	while(ch!='T'){ch=Read_Rx();}
	while(ch!='+'){ch=Read_Rx();}
//	Line_Tab=M_TAB;

	ch=Read_Rx();

	while(ch!='^'){
		Message_Buff[Total_Line].page_line[char_no]=ch;
		++char_no;
		ch=Read_Rx();
	}
	Check_Enter();
	Check_System();
	Check_OverSpeed();
//	Line_Tab=T_TAB;
	++Total_Line;
	char_no=0;
	ch=Read_Rx();

   	while(ch!='L')ch=Read_Rx();
	ch=Read_Rx();
	while(Check_Element(ch)){
	ch=Read_Rx();
	}
	if(Key_Type){
		if(Reverse_Flag)Message_Buff[Total_Line].high_light=1;
		Reverse_Flag=0;
	}
	else{
		if(Sel_Flag){
			 Active_Line=Total_Line-1;
			Sel_Flag=0;
		}
	}
	while(ch!='}'){
		while(ch!='|'){
			if(ch=='}'){
				if(Enter_En==0) Message_Buff[Total_Line].page_line[20]=0;
				if(Sys_Status_Flag==1){
			        Message_Buff[3].page_line[19]=0;
			        Message_Buff[4].page_line[19]=0;
				}
				++Total_Line;
				return;
			}
			Message_Buff[Total_Line].page_line[char_no]=ch;
			++char_no;
			ch=Read_Rx();
		}
		if(Enter_En==0) Message_Buff[Total_Line].page_line[20]=0;
	    Total_Line++;
		char_no=0;
		

		ch=Read_Rx();
		while(Check_Element(ch)){
			ch=Read_Rx();
		}
		if(Key_Type){
			if(Reverse_Flag)Message_Buff[Total_Line].high_light=1;
			Reverse_Flag=0;
		}
		else{
			if(Sel_Flag){
				 Active_Line=Total_Line-1;
				Sel_Flag=0;
			}
		}
	}
	if(Sys_Status_Flag==1){
        Message_Buff[3].page_line[19]=0;
        Message_Buff[4].page_line[19]=0;
	}

}
//============================================================
//存储显示缓存区数据
//============================================================
void Store_Vram()
{
unsigned char i,j=0;
	Line_Tab=T_TAB;
	Set_XY(6,1);
	Print_Line(Message_Buff[0].page_line);
	Line_Tab=M_TAB;
	Next_Line();
	
	for(i=1;i<Total_Line;++i){
	    Print_Line(Message_Buff[i].page_line);
		if(Key_Type){if(Message_Buff[i].high_light==1) Reverse_Line(i-1);}
		Next_Line();
	}
    if(Sys_Status_Flag==1){
	    Total_Line++;
        Print_SN();
    }
    
	if(Key_Type==0){
	    Reverse_Line(Active_Line);
    }     
	return;
}

//============================================================
//存储消息代码数据
//============================================================
void Store_Message()
{
unsigned char ch;
	ch=Read_Rx();
	if(ch=='2')
		Stand_Message();
	else
	{
		if(ch=='1') Key_Type=0;
		else if(ch=='6') Key_Type=1;
		StandBy_Flag=0;
		Save_News();
		Store_Vram(); Disp_Title(); Disp_Message();
  }
return;
}



//============================================================
//液晶显示标题内容
//============================================================
void Disp_Title()
{
unsigned char col_msb,col_lsb;
unsigned char com_n;
unsigned char i=0,j=0;

		Clr_Title();

		Line_Tab=T_TAB;
		com_n=12*1+Line_Tab;
		col_lsb=com_n&0x0f;
		col_msb=com_n>>4;

		while(i<16){
			Write_S6b0741_Reg(SET_PAGE+i);
			Write_S6b0741_Reg(SET_COLUMN_MSB+col_msb);
			Write_S6b0741_Reg(SET_COLUMN_LSB+col_lsb);
			for(j=0;j<12+8;++j){
				Write_S6b0741_Data(Buff_Page[i].Column[j+com_n]);
			}
			++i;
		}
return;
}

//============================================================
//液晶显示消息内容
//============================================================
void Disp_Message()
{
unsigned char col_msb,col_lsb;
unsigned char com_n;
unsigned char i=0,j=0;
unsigned int line_pt;

		Clr_Message();

		Line_Tab=M_TAB;
		com_n=2*12+Line_Tab;
		col_lsb=com_n&0x0f;
		col_msb=com_n>>4;
		line_pt=(Start_Line+2)*12+Line_Tab;

		while(i<16){
			Write_S6b0741_Reg(SET_PAGE+i);
			Write_S6b0741_Reg(SET_COLUMN_MSB+col_msb);
			Write_S6b0741_Reg(SET_COLUMN_LSB+col_lsb);
			for(j=0;j<96;++j){
				Write_S6b0741_Data(Buff_Page[i].Column[j+line_pt]);
			}
			++i;
		}
return;
}
void Disp_OverSpeed(void)
{
        if(OverSpeed_Flag==1)
		{
/*
			if(First_Flag==1)
			{
//				Store_Vram(); Disp_Title(); Disp_Message();
				First_Flag=0;
			}
*/
			if(HoldOver_Flag==1)
			{
				Write_S6b0741_Reg(REV_DISP_ON);
				DelayFlash(15000);
				Write_S6b0741_Reg(REV_DISP_OFF);
				DelayFlash(15000);
			}
			else
			{
				CurKey_Flag=0;
				OverSpeed_Flag=0;
			}
		}
}
void Disp_StandMessage()
{
unsigned char col_msb,col_lsb;
unsigned char com_n;
unsigned char i=0,j=0;
unsigned int line_pt;

		Line_Tab=M_TAB;
		com_n=1*12+Line_Tab-4;
		col_lsb=com_n&0x0f;
		col_msb=com_n>>4;
		line_pt=Stand_Line;

		while(i<16){
			Write_S6b0741_Reg(SET_PAGE+i);
			Write_S6b0741_Reg(SET_COLUMN_MSB+col_msb);
			Write_S6b0741_Reg(SET_COLUMN_LSB+col_lsb);
			for(j=0;j<112;++j){
				Write_S6b0741_Data(Buff_Page[i].Column[j+line_pt]);
			}
			++i;
		}
}
void Clr_StandMessage()
{
unsigned char i=0,j=0;
unsigned int line_pt;
		line_pt=Stand_Line;
		while(i<16){
			for(j=0;j<112;++j){
				Buff_Page[i].Column[j+line_pt]=0x00;
			}
			++i;
		}
}
void Print_Heading(void)
{
unsigned char By_Line;
	   By_Line=71;
	   Set_XY(10,By_Line+1);
       Print_Line("北");
	   Set_XY(6,By_Line+3);
       Print_Line("西");
	   Set_XY(14,By_Line+3);
       Print_Line("东");
	   Set_XY(10,By_Line+5);
       Print_Line("南");
	   Print_Box(36,4,0,circle);	   
}
void Disp_NewMail(void)
{
    unsigned char Bak_LineTab,By_Line;
    By_Line=71;
	Bak_LineTab=Line_Tab;
	Line_Tab=5;
	Clr_StandMessage();
	Set_XY(4,By_Line+5);
	Print_Line("收到新消息");
	Disp_StandMessage();
	Line_Tab=Bak_LineTab;
	Shock_Flag=1;
	do{
		Write_S6b0741_Reg(REV_DISP_ON);
		DelayFlash(15000);
		Write_S6b0741_Reg(REV_DISP_OFF);
		DelayFlash(15000);
		Key_Scan();
	}while(CurKey_Flag==0);
//
	Resume_StandBy();
    NewMail_Flag=0;
	Line_Tab=Bak_LineTab;
}

void Disp_Stand(void)
{
    unsigned char Bak_LineTab,By_Line,i,j;
    int xx;
    By_Line=71;
	Bak_LineTab=Line_Tab;
	Line_Tab=5;
	Clr_StandMessage();
	//显示方向
	if((heading[1]=='-')&&(heading[2]=='1'))
	{
	   Set_XY(2,By_Line+2);
       Print_Line("方向未知");
    }
    else
    {
	    for(i=0;;i++)
	    {
		   if(heading[i]=='\0') break;      
	    }
        xx=0;
		for(j=i;j>0;j--)
		{
	        xx=xx*10+(heading[i-j]-'0');
	    }
	    if((xx<23)||((xx>338)&&(xx<359)))
	    	Print_Box(18,2,8,up);	   
        else if((xx>=23)&&(xx<68))
			Print_Box(18,2,8,ru);	   
        else if ((xx>=68)&&(xx<113))
			Print_Box(18,2,8,right);	   
        else if ((xx>=113)&&(xx<158))
			Print_Box(18,2,8,rd);	   
		else if ((xx>=158)&&(xx<203))
			Print_Box(18,2,8,down);	   
		else if ((xx>=203)&&(xx<248))
			Print_Box(18,2,8,ld);	    
		else if ((xx>=248)&&(xx<293))
			Print_Box(18,2,8,left);	   
		else if ((xx>=293)&&(xx<338))
			Print_Box(18,2,8,lu);	   
		Print_Heading();
    }

    //
	if(speed[1]!='-')
	{
	   speed[0]=speed[1];
	   speed[1]=speed[2];
	   speed[2]=speed[3];
	   speed[3]=speed[4];

	   Set_XY(2,By_Line+6);
	   Print_Line(speed);
	   Print_Line("km/h");
	}
	else if(speed[2]=='1')
	{
	   Set_XY(2,By_Line+6);
	   Print_Line("速度未知");		   
	}

	if(date[1]!='-')
	{  
	   date[0]=date[1];
	   date[1]=date[2];
	   date[2]=date[3];
	   date[3]=date[4];
	   date[4]='-';
	   date[9]=date[8];
	   date[8]=date[7];
	   date[7]='-';
	   date[10]='\0';
	   Set_XY(0,By_Line+8);
	   Print_Line(date);
	}
	else if(date[2]=='1')
	{
	   Set_XY(2,By_Line+8);
	   Print_Line("日期未知");
   	}
	if(time[1]!='-')
	{
	   time[0]=time[1];
	   time[1]=time[2];

⌨️ 快捷键说明

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