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

📄 19264cv0_1.c

📁 C51 LCD 显示程序非常具有参考价值
💻 C
📖 第 1 页 / 共 5 页
字号:
			//if(keytabindex==0)
			//dtest();//for test在LCD上显示从主机接收到的前7位

			//for debug start
			//byte_write(0,0x01,0x03);
			//x5045data=byte_read(0,0x01);
			
			
			/*
			Dispchar(2,5,(number_ascii(RxMain_data[2])),1);
			Dispchar(2,4,(number_ascii(((RxMain_data[2])>>4))),1);
			
			Dispchar(2,7,(number_ascii(RxMain_data[3])),1);
			Dispchar(2,6,(number_ascii((RxMain_data[3]>>4))),1);
			Dispchar(2,9,(number_ascii(RxMain_data[4])),1);
			Dispchar(2,8,(number_ascii((RxMain_data[4]>>4))),1);
			Dispchar(2,11,(number_ascii(RxMain_data[5])),1);
			Dispchar(2,10,(number_ascii((RxMain_data[5]>>4))),1);
			Dispchar(2,13,(number_ascii(RxMain_data[6])),1);
			Dispchar(2,12,(number_ascii((RxMain_data[6]>>4))),1);
			*/
			/*
			Dispchar(2,0,(RxMain_data[0]),1);
			Dispchar(2,1,(RxMain_data[1]),1);
			Dispchar(2,2,(RxMain_data[2]),1);
			Dispchar(2,4,(number_ascii(RxMain_data[3])),1);
			Dispchar(2,3,(number_ascii(((RxMain_data[3])>>4))),1);

			Dispchar(2,6,(number_ascii(RxMain_data[4])),1);
			Dispchar(2,5,(number_ascii((RxMain_data[4]>>4))),1);
			Dispchar(2,8,(number_ascii(RxMain_data[5])),1);
			Dispchar(2,7,(number_ascii((RxMain_data[5]>>4))),1);

			Dispchar(2,10,(number_ascii(RxMain_data[6])),1);
			Dispchar(2,9,(number_ascii((RxMain_data[6]>>4))),1);

			Dispchar(2,12,(RxMain_data[7]),1);
			Dispchar(2,11,(RxMain_data[8]),1);
			Dispchar(2,13,(RxMain_data[9]),1);
			Dispchar(2,14,(RxMain_data[10]),1);
			Dispchar(2,15,(RxMain_data[11]),1);
			Dispchar(2,16,(RxMain_data[12]),1);
			Dispchar(2,17,(RxMain_data[13]),1);
			Dispchar(2,18,(RxMain_data[14]),1);
			Dispchar(2,19,(KEYVAL_OK|0x30),1);
			Dispchar(2,20,(RxMain_end|0x30),1);
			*/
			//for debug end
			//p1tune(RAMCS);
			//i=E_ConveneRec[0].Timer;
			i=SP;
			Dispchar(6,1,(number_ascii(i)),1);
			Dispchar(6,0,(number_ascii((i>>4))),1);

			//Dispchar(6,2,(RxMain_data[0]),0);
			//Dispchar(6,4,(RxMain_data[1]),0);
			//Dispchar(6,6,(RxMain_data[2]),0);
			//Dispchar(6,8,(RxMain_data[3]),0);		
			RefushFace();//刷新主界面//for  
			
			//||OldInforCnt!=NewInforCnt
			//如果有来电而且未显示来电号码。或者在非主界面显示超时或者即时显示新信息超时
			if((comeingtelep&&dispteleph)||WaitingOver||((BLtime>=6100)&&((InforType&0x0f)>0)))
			{	
				keytabindex=0;
				mainface();
				pic_temp=0;
				if((InforType&0x0f)>0)//清除新信息显示标志
					InforType=0;	
			
			} 
			if(testkey())
			{
				
				KeyCaller=0x10;
				keytune();
				
		    	}
			IRKeyVal=HandleIR();
			if(IRKeyVal!=0xff)
			{	
				
				KeyCaller=0x20;
				keytune();
				
			}			 			
			
			if(gps_rec_end)
			{	
			       	seridatatune();//GPS信号处理
				gps_star = 0;
				gps_rec_end = 0;
				
			}			

			rxdatatune();//处理主机发送来的数据*/
			
			if(MainRecBusy_flag&&MainRecBusyTime>110)//接受主机数据完后延迟一秒
			{
				MainRecBusy_flag=0;
				MainRecBusyTime=0;
				CONRX=DGPS_COMM;
				flag_main_dgps=DGPS_COMM;
				EX1=1;//开外部中断1,检测主机串行信号
			
			}
			
			if(MainRecTimer>250)//从接受主机数据开始延迟2.5秒后断开
			{
				flag_main_dgps=DGPS_COMM;
				CONRX=DGPS_COMM;
				MainRecTimer=0;
				EX1=1;//开外部中断1,检测主机串行信号	
			
			}	
				
					
	    } 
  	      
 
}

////////////////主函数结束///////////////////////////////////////////////
 
void untogb(uchar hi_unicode,uchar low_unicode)//unicode 转换成 GB2312内码
{						//查表后所得到的是区位码+0x2020
					//加0x8080转化为内码送入缓冲
				//如果以后RAM不够用可采用返回参数方式
			//!!不可显示字符转换会出乱码!!!//不转换ASCII的UNICODE
	uint16 data unicode;
	/*if(hi_unicode==0&&low_unicode<0xa4)//如果是ASCII字符
	{
	}*/		
	p1tune(ROMCS);
	A18=1;
	A17=0;//非常重要!!!!!
	LCDRWIO=1;
	LCDDIIO=1;
	//P1=ROMCS;							
	unicode=hi_unicode;
	//CY=0;
	unicode=unicode<<8;
	//k=low_unicode;
	unicode+=(uint16)(low_unicode);

	if(unicode>=0x80a4)//判断是在第一还是第二个64K范围
	{		
		//unicode=unicode-0x80a4;
		unicode-=0x80a4;     //减去0x8000
		A16=1;
		//unicode-=0x00a4;
	}
	else
	{	
		A16=0;
		unicode-=0x00a4;
	}
	//CY=0;
		
	unicode=unicode<<1;
	
	if(unicode<0x0400)//STC89C512RD+有1024BYTE XRAM如用此IC 0X400以内地址需屏蔽
	{	FlagXram=1;//读取点阵时使用XDATA 0x0000--0x02ff标志。1:使用 0:未使用
		AUXR|=0x02;//屏蔽内部XRAM
	}
	
	hi_gb=XBYTE[unicode];
	
	unicode++;
	low_gb=XBYTE[unicode];
	FlagXram=0;//读取点阵时使用XDATA 0x0000--0x02ff标志。1:使用 0:未使用
	AUXR&=0xfd;//使能内部XRAM
	
	/*if((hi_gb<0x21)||(low_gb<0x21))//for debug
	{
		hi_gb=0x21;low_gb=0x32;


	} //for debug

	//P1=j;
	 if((hi_gb>0x77)||(low_gb>0x7e))//for debug
	{
		hi_gb=0x21;low_gb=0x24;


	} //for debug*/ 
	hi_gb=hi_gb|0x80;
	low_gb=low_gb|0x80;

	A18=0;
       

}



void rxdatatune(void)//接收主机数据处理
{										 
	uchar data i,j,k,checksum;
	
	uint16 idata p,q,r;
	
	p=q=r=0;
	i=j=k=checksum=0;
	//while(TxNum!=0||TxPos!=0);
	//ES=0;
	Feedingdog();
	LCDRWIO=1;
	LCDDIIO=1;
	p1tune(RAMCS);
		
	if(RxMain_end)
	{			
		
		p=RxMain_data[3];
		p=(p<<8);
		p+=RxMain_data[4];
		p+=5;//加上$+设备字+命令字+2数据长度字节
		checksum=RxMain_data[3];		
		for(q=4;q<p;q++)			      
		{
			checksum^=RxMain_data[q];		
		}//算校验和

		//for GPRS SMS DEBUG STAR
		if(RxMain_data[2]==0x43)//发送短语或者业务代码后主机的回应。
		{
		 	 if(RxMain_data[5]==0x00)
			 	KEYVAL_OK=1;
			 else
			 	KEYVAL_OK=0;
			 RxMain_end=FALSE;
		}
		if(RxMain_data[2]==0x42)//for test
		{	ReturnOK(0x42);	 //for test
			BEEPtime=0;					
			BLtime=0;
			BEEP=0;
			BLIGHT=0;
			if(RxMain_data[15]==0x00)//如果是公共信息
				CommProcess(p);//GPRS发送的公共信息处理
			if(RxMain_data[15]==0x10)//如果是调度信息
				ScheduleInforProcess(p);//GPRS发送的调度信息处理
				//电召存储
			if(RxMain_data[15]>=0x20&&RxMain_data[15]<0x30) 
				ConveneInforProcess(p);//电召信息存储
			if(RxMain_data[15]==0x30)//如果是定制短语
				CenterCstmWordsProcess(p);
			if(RxMain_data[15]==0x40)//登陆密码恢复出厂设置
			{
				reginit();//登录初始化
			}

			ReturnOK(0x42);
			if(keytabindex==115)//如果正在及时显示新信息状态
				InforType|=1;

				
		}
		//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?因仿真器不支持所以拆成以上四个表达式
		{				
			i=RxMain_data[1];//取设备关键字
			if(0x62==i||0x61==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]==0x00)
						{
							bGSM_GPRS=1;//0:GSM状态 1:GPRS状态
						}
						else
							bGSM_GPRS=0;//0:GSM状态 1:GPRS状态
						if(RxMain_data[5]==0x03||RxMain_data[5]==0x04)//电话接通
						{	
							//displayline(2,&nochardis[0],0);
							//displayline(4,&nochardis[0],0);
							displayline(2,&Zzth[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;//
							displayline3(2);
							displayline3(4);
							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&&keytabindex==0)//如果在通话状态
									{
										displayline(3,&Thjs[0],0);//“通话结束”
										/*
										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
									{	
										displayline(3,&Wjld[0],0);//汉字“未接来电!”
										/*
										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
								{
								 	displayline(3,&Hjsb[0],0);//汉字“呼叫失败!”
									/*
									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;
											
						break;
						
					case 0x60://主机发送电话号码或者功能键值
						//用于主机发送手柄的键值到手柄供手柄LCD显示
							 					
						//ReturnOK(0x60);
						break;		

					case 0x51:////主机发送文本信息
						//p1tune(RAMCS);

⌨️ 快捷键说明

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