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

📄 19264cv0_1.c.bak

📁 C51 LCD 显示程序非常具有参考价值
💻 BAK
📖 第 1 页 / 共 5 页
字号:
			if(RxMain_data[15]==0x10)//如果是调度信息
				ScheduleInforProcess(p);//GPRS发送的调度信息处理

		}
		//for GPRS SMS DEBUG END
		//FOR SMS DEBUG START
		if(RxMain_data[2]==0x51)
		{
			BEEPtime=0;
			BLtime=0;
			BEEP=0;
			BLIGHT=0;
			p1tune(RAMCS);
	 		CommSMSProcess(p);//短信存储
			ReturnOK(0x51);
		
		}

		//FOR SMS DEBUG END
		if(RxMain_data[q]==checksum) //校验OK?因仿真器不支持所以拆成以上四个表达式
		{
			//Dispchar(2,2,0x38,1);// for test
			//return;// for test
			i=RxMain_data[1];
			if(0x61==i||0x62==i)
			{
				i=RxMain_data[2];
				switch(i)
				{	//应答主机部分。。。。。。。。
					case 0x38://主机要求液显屏自检//
						//需要添加实际的自检代码
	 					ReturnOK(0x38);
						break;		
					case 0x62://主机发送GSM信号强度值“无须应答”//
						OldAntennaVal=antenna;
						antenna=RxMain_data[5];//
						break;
					case 0x41://主机发送GSM、GPRS状态值到外设
						ReturnOK(0x41);
						
						if(RxMain_data[5]==0x03||RxMain_data[5]==0x04)//电话接通
						{	
							//displayline(2,&nochardis[0],0);
							//displayline(4,&nochardis[0],0);
							disromdata(0xD5,0xFD); 	// 正 
							disdatatune();
							Dispchin(2,2,0);
						
							disromdata(0xD4,0xDA); 	// 在 
							disdatatune();
							Dispchin(2,4,0);			
					
							disromdata(0xCD,0xA8); 	// 通 
							disdatatune();
							Dispchin(2,6,0);
						
							disromdata(0xBB,0xB0); 	// 话
							disdatatune();
							Dispchin(2,8,0);

							disromdata(0xa1,0xad); 	// ...
							disdatatune();
							Dispchin(2,10,0);
							Dispchar(4,MainFaceNumPtr,0x20,0);
							
							MainFaceNumPtr=2;
							Dispchar(6,MainFaceNumPtr,0x20,1);
							CallStatus=0x03;
							
						}
						if(RxMain_data[5]>0x05&&RxMain_data[5]<=0x0a)//拨打不成功
						{	ComeTelBuf[0]=0x2a;//
							displayline(2,&nochardis[0],0);
							displayline(4,&nochardis[0],0);
							TxCommandBuf[0]=0x39;
							TxCommandBuf[1]=0xff;
							TxCommandBuf[2]=0x17;
							TxCommandBuf[3]=0x0d;
							TxCmdCnt=0x03;
							TxCommand();//发送挂断命令

							p1tune(RAMCS);
							i=RxMain_data[5];
							if(i==0x06)//对方忙
							{
								disromdata(0xB6,0xD4); 	// 对
								disdatatune();
								Dispchin(3,8,0);
							
								disromdata(0xB7,0xBD); 	// 方  
								disdatatune();
								Dispchin(3,10,0);			
						
								disromdata(0xC3,0xA6); 	// 忙 
								disdatatune();
								Dispchin(3,12,0);
							
								disromdata(0xa3,0xa1); 	// !
								disdatatune();
								Dispchin(3,14,0);
	
								
							
							}
							else
							{
								if(i==0x09)//无人接听
								{
									
									if(CallStatus==0x03)//如果在通话状态
									{
										disromdata(0xCD,0xA8); 	// 通
										disdatatune();
										Dispchin(3,8,0);
									
										disromdata(0xBB,0xB0); 	// 话  
										disdatatune();
										Dispchin(3,10,0);
										
										disromdata(0xBD,0xE1); 	// 结  
										disdatatune();
										Dispchin(3,12,0);
													
										//
										disromdata(0xCA,0xF8); 	// 束 
										disdatatune();
										Dispchin(3,14,0);
									
										disromdata(0xa3,0xa1); 	// !
										disdatatune();
										Dispchin(3,16,0);
									
									
									
									}
									else
									{	disromdata(0xCE,0xB4); 	// 未 
										disdatatune();
										Dispchin(3,8,0);
									
										disromdata(0xBD,0xD3); 	// 接 
										disdatatune();
										Dispchin(3,10,0);			
										//
										disromdata(0xC0,0xB4); 	// 来  
										disdatatune();
										Dispchin(3,12,0);
	
										disromdata(0xB5,0xE7); 	//电
										disdatatune();
										Dispchin(3,14,0);
											
										disromdata(0xa3,0xa1); 	// !
										disdatatune();
										Dispchin(3,16,0);
									}
																	
								}
								else
								{
								 	disromdata(0xBA,0xF4); 	// 呼 
									disdatatune();
									Dispchin(3,8,0);
								
									disromdata(0xBD,0xD0); 	// 叫 
									disdatatune();
									Dispchin(3,10,0);			
							
									disromdata(0xCA,0xA7); 	// 失 
									disdatatune();
									Dispchin(3,12,0);
								
									disromdata(0xB0,0xDC); 	// 败
									disdatatune();
									Dispchin(3,14,0);
		
									disromdata(0xa3,0xa1); 	// !
									disdatatune();
									Dispchin(3,16,0);
								
								
								}
								  
							}	
							
							
							dispnewsnumb();// 显示接收信息的条数、以及未读信息的条数
							CallStatus=0x00;//待机状态
																		
						
						}	
						 			     						
						break;
						
					case 0x42://收到中心下的发信息
						ReturnOK(0x42);
						BEEPtime=0;
						BLtime=0;
						BEEP=0;
						BLIGHT=0;
						//p1tune(RAMCS);
	 					//if(RxMain_data[13]==0x00)//如果是公共信息
						//	CommProcess(p);//GPRS发送的公共信息处理
						/*{
							for(j=0;j<10;j++)//查找未使用的内存空间
							{
								if(!(CommInfor[j].ReadFlag))//如果已废弃
								break;						
							}	
							if(j==9)// 如果已经存满10条
							{  	j=0;//覆盖第一条
								CommInfor[0].InforNumber=10;//置为未读标志
							}
							else
							{	
								CommCounter++;//公共信息计数器+1
								CommTotal++;//总的公共信息计数器+1
								InforTotal++;//总的信息计数器+1
								CommInfor[j].InforNumber=CommCounter-1;							
							}
						       	CommInfor[j].ReadFlag=0x10;//未读标志
						    	//存日期时间数据//可以直接送显							
							CommInfor[j].Text[0]=(RxMain_data[11]&0x0f)>>4+0x30;
							CommInfor[j].Text[1]=(RxMain_data[11]&0xf0)+0x30;
							CommInfor[j].Text[2]=0x2d;//月后加“-”
							CommInfor[j].Text[3]=(RxMain_data[12]&0x0f)>>4+0x30;
							CommInfor[j].Text[4]=(RxMain_data[12]&0xf0)+0x30;
							CommInfor[j].Text[5]=0x20;//
							CommInfor[j].Text[6]=(RxMain_data[13]&0x0f)>>4+0x30;
							CommInfor[j].Text[7]=(RxMain_data[13]&0xf0)+0x30;
							CommInfor[j].Text[8]=0x3a;//小时后加“:”
							CommInfor[j].Text[9]=(RxMain_data[14]&0x0f)>>4+0x30;
							CommInfor[j].Text[10]=(RxMain_data[14]&0xf0)+0x30;
							
							CommInfor[j].TextLenth=11;
							r=11;
							if(RxMain_data[5]==0xf0)//如果是内码								
								for(q=20;q<p;q++)//存文本数据
								{
									CommInfor[j].Text[r]=RxMain_data[q];
									q++;
									r++;
									CommInfor[j].TextLenth++;							
								}
							else
							{
								for(q=20;q<p;q++)//存文本数据
								{
									
									i=RxMain_data[q];
									q++;
									k=RxMain_data[q];
									q++;
									
									untogb(i,k);
									CommInfor[j].Text[r]=hi_gb;
									r++;
									CommInfor[j].TextLenth++;				      
									CommInfor[j].Text[r]=low_gb;
									r++;
									CommInfor[j].TextLenth++;	
									
									
															
								}
														
							}
																								
						}*/
						//if(RxMain_data[19]==0x31&&RxMain_data[20]==0x30)//如果是调度信息
								
						//ReturnOK(0x42);
						break;
						
					case 0x60://主机发送电话号码或者功能键值
						//用于主机发送手柄的键值到手柄供手柄LCD显示
							 					
						//ReturnOK(0x60);
						break;		

					case 0x51:////主机发送文本信息
						//p1tune(RAMCS);
	 					//CommSMSProcess(p);//短信存储
						//ReturnOK(0x51);
						break;

					 //以下为对接收的主机应答液显屏数据的处理

					case 0x30://发送标志码后主机的应答。收到主机的应答后
						  //才可以开始。。。
						if(RxMain_data[5]==0x00)
							COMM_OK=1;
						else
						 	COMM_OK=0;
						 RxMain_end=FALSE;
						 break;
					case 0x31:
						KEYVAL_OK=RxMain_data[5];
						break;
					case 0x39://发送键值后主机的回应。
					 	 
						 RxMain_end=FALSE;
						 break;
					 case 0x43://发送短语或者业务代码后主机的回应。
					 	 if(RxMain_data[5]==0x00)
						 	KEYVAL_OK=1;
						 else
						 	KEYVAL_OK=0;
						 RxMain_end=FALSE;
						 //Dispchar(0,0,0x38,1);//for debug
						 break;
					 case 0x63://收到主机发送的热线、短信中心、报警、号码
					 	p1tune(RAMCS);
						if(RxMain_data[5]==0x00&&RxMain_data[6]==0x00&&RxMain_data[7]==0x01)//是否是热线号码
						{
							for(i=0;i<6;i++)
							{
								for(j=0,k=9;j<24;j++,k++)
								{	//如果收到结束符或者超出接收数组的实际长度
									p1tune(RAMCS);
									if(RxMain_data[k]==0x22||RxMain_data[k]==0x2c)
									{	HotLineNum[i][j]=0x0d;
										break;
									}
									HotLineNum[i][j]=RxMain_data[k];																
																
								}
								if(RxMain_data[k]==0x22)
								{	i++;
									HotLineCnt=i;
									break;
								}		
							}
						      	KEYVAL_OK=1;
							break;		
						
						}
						else
						{	
							if(RxMain_data[5]==0x00&&RxMain_data[6]==0x00&&RxMain_data[7]==0x05)
								
								goto LabSMS;
							else
							{	KEYVAL_OK=0;
								//取热线电话。。。
								TxCommandBuf[0]=0x63;
								TxCommandBuf[1]=0x00;
								TxCommandBuf[2]=0x01;
								TxCommandBuf[3]=0x0d;
								TxCmdCnt=0x03;
								TxCommand();//发送取热线号码命令
							}
						}		
						////接收短信中心号码
						LabSMS:
						p1tune(RAMCS);
						if(RxMain_data[5]==0x00&&RxMain_data[6]==0x00&&RxMain_data[7]==0x05)
						{	//是否是短信中心号码
							
							
								for(j=0,k=9;j<24;j++,k++)
								{	//如果收到结束符或者超出接收数组的实际长度
									p1tune(RAMCS);
									if(RxMain_data[k]==0x22||RxMain_data[k]==0x2c)
									{	SMS_CenterTel[j]=0x0d;
										break;
									}
									SMS_CenterTel[j]=RxMain_data[k];																
																
								}
								if(RxMain_data[k]==0x22)
								{	i++;
									HotLineCnt=i;
									
								}		
							
						      	KEYVAL_OK=1;
							break;		
						
						}
						else
						{	KEYVAL_OK=0;
							//取热线电话。。。
							/*TxCommandBuf[0]=0x63;
							TxCommandBuf[1]=0x00;
							TxCommandBuf[2]=0x05;
							TxCommandBuf[3]=0x0d;
							TxCmdCnt=0x03;
							TxCommand();*///发送取热线号码命令
						}		
						break;
						 
					 case 0x64://主机发送来电号码到外设
					 	 p1tune(RAMCS);
						 ReturnOK(0x64);

						 p1tune(RAMCS);
						 
						 if(ComeTelCnt>=20) 
						 {	 
						 	ComeTelCnt=20;													
							for(i=ComeTelCnt-1;i>0;i--)
							{
								ComeTel[i]=ComeTel[i-1];
								ComeTel[i].ComeTelNumber=i+1;
								
							}
							//记录移动结束
							j=0;
							ComeTel[0].ComeTelNumber=1;
							 	
						 }
						 else
						 {
						 	if(ComeTelCnt>0)
						  	{
								for(i=ComeTelCnt;i>0;i--)
								{
									ComeTel[i]=ComeTel[i-1];
									ComeTel[i].ComeTelNumber=i+1;
								
								}
												
							}

							j=0;
						 	ComeTelCnt++;
							ComeTel[0].ComeTelNumber=1; 												
						 
						 }
						 for(i=4,j=5;j<p;j++)//存电话号码
						 {	if(i<48) 
							{ 	ComeTelBuf[i]=RxMain_data[j];	
							 	i++;
							}
							else	break;			 
						 }
						 for(;i<24;i++)
						  	ComeTelBuf[i]=0x20;
						
						 for(j=0;i<47;i++)
						 {	if(j>13) ComeTelBuf[i]=0x20; 
						 	else
							{	
								ComeTelBuf[i]=yymmtt[j];
								j++;
							}				 
						 	
						 }
						 
						 ComeTel[0].TalkFlag=0x2a;//标志:未接、未存。“*”
						 
						 for(i=0,j=4;i<22;i++,j++)//存号码
						 {
						 	ComeTel[0].ComeTel[i]=ComeTelBuf[j];	
						 							 
						 }
						 for(i=0,j=0;i<24;i++,j++)//存当前日期时间
						 {
						 	if(i>13)
								ComeTel[0].ComeTelDate[i]=0x20;
							else
								ComeTel[0].ComeTelDate[i]=yymmtt[j];		
						 
						 
						 }

						 ComeTelTimer=0;//启动来电超时定时器//40S
						 comeingtelep=1;//新来电标志
						 dispteleph=1;
						 CallStatus=0x04;//来电状态		
						 break;													 	
					default:
						RxMain_end=FALSE;
						break;
				
				
				}
					
			}

		}
		else
		{
			//CONRX=DGPS_COMM;
		i++;	//flag_main_dgps=DGPS_COMM;
		
		}
			
	}
	
	else
	{
		//CONRX=DGPS_COMM;
	i++;	//flag_main_dgps=DGPS_COMM;	
	
	}   
		//ES=1;
	RxMain_end=0;

}

void p1tune(uchar temp)//向P1口送片选信号函数。
{
	
	switch(temp)
	{
		case 0:
			P12=0;
			P13=0;
			P14=0;
			//mcsbak=0x00;
			break;
		case 1:
				
			P12=1;

⌨️ 快捷键说明

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