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

📄 disp.c

📁 液晶静态显示程序,有使用都可提供原理图
💻 C
📖 第 1 页 / 共 3 页
字号:
*  功能:显示TOTAL数据b
************************************************************************/
void disp_total_b(void)
{	uchar  i;
xdata	uchar  dispmem[16],tt[12];
	uchar dotdata;
	ulong  ma;
	uchar *ptr;
	#if  GUNJLMODE>2//单计量时
		gun2.sum_sale=gun1.sum_sale;
		gun2.sum_liter=gun1.sum_liter;
		gun2.work_sale=gun1.work_sale;
		gun2.work_liter=gun1.work_liter;
	#endif		
	for(i=0;i<16;i++)
	{
		dispmem[i]=0x0f;
	}
   if((menu2==1 && state2==6) ||state2==8)
	{  
		if(!ration_mode_b)
		{	
			dotdata=dotb_data[6];
			
#if DISPMODE==886
	dispmem[7]=0x0c;dispmem[6]=0x0c;  //PP
#else			
	dispmem[5]=0x0c;dispmem[4]=0x0c;  //PP
#endif

			if(state2!=8 || ration_num_b==0) ma=gun2.sum_sale;   //总累--锁售额  PP
			else	ma=ration_num_b;
			if(state2!=8)
			{
				keyb_num[0]=0x1f;keyb_num[1]=0x01;keyb_num[2]=0x48;keyb_num[3]=0x48;
				keyb_num[4]=0x02;
			}
			else
			{
				keyb_num[0]=keynumdata[27];
				keyb_num[1]=keynumdata[27];
				keyb_num[2]=keynumdata[23];
				keyb_num[3]=keynumdata[23];  //"PP--"
				keyb_num[4]=0x02;
			}			
		}
		else  //升
		{	dotdata=dotb_data[5];
#if DISPMODE==886
	dispmem[7]=0x0a;dispmem[6]=0x0a;  
#else			
	dispmem[5]=0x0a;dispmem[4]=0x0a;  
#endif  //LL

		   if(state2!=8 || ration_num_b==0)	ma=gun2.sum_liter;   //总累--升  LL
			else ma=ration_num_b;
			if(state2!=8)
			{
				keyb_num[0]=0x32;keyb_num[1]=0x01;keyb_num[2]=0x48;keyb_num[3]=0x48;
				keyb_num[4]=0x02;
			}
			else
			{
				keyb_num[0]=keynumdata[27];
				keyb_num[1]=keynumdata[27];
				keyb_num[2]=keynumdata[19];
				keyb_num[3]=keynumdata[19];  //"LL--"
				keyb_num[4]=0x02;
			}
			
		}
	}
	else   //班累
	{
		if(!ration_mode_b)
		{	dotdata=dotb_data[6];
#if DISPMODE==886
	dispmem[7]=0x0c;dispmem[6]=0x0f; 
#else			
	dispmem[5]=0x0c;dispmem[4]=0x0f;  
#endif   //P
			
		   ma=gun2.work_sale;   //班累--锁售额   P
			keyb_num[0]=0x1f;keyb_num[1]=0x01;keyb_num[2]=0x3d;keyb_num[3]=0x48;
			keyb_num[4]=0x02;
		}
		else
		{	dotdata=dotb_data[5];
#if DISPMODE==886
	dispmem[7]=0x0a;dispmem[6]=0x0f;  
#else			
	dispmem[5]=0x0a;dispmem[4]=0x0f; 
#endif  //L

		   ma=gun2.work_liter;   //班累--升  L
			keyb_num[0]=0x32;keyb_num[1]=0x01;keyb_num[2]=0x3d;keyb_num[3]=0x48;
			keyb_num[4]=0x02;
		}
	} 
	//****************************
	for(i=0;i<12;i++)
	{
		tt[i]=ma%10;ma/=10;
	}
	for(i=11;i>0;i--)
	{  if(i==dotdata) break;
		if(tt[i]==0) tt[i]=0x0f;   //去前导零
		else break;

	}
	
	//------------------------
#if DISPMODE==664
	if(dotdata==1)  //如果是1位小数
	{
		for(i=0;i<3;i++)
		{
			dispmem[i]=tt[i+9];
		}
		for(i=0;i<6;i++)
		{
			dispmem[i+8]=tt[i+3];
		}
		ptr=&dispmem;
		disp_out(0,ptr,8);
		//--------------------------
		for(i=0;i<16;i++)
		{
			dispmem[i]=0x0f;
		}
	
		if(dotdata==3)dispmem[0+8]=0xfc;  //3位
		else if(dotdata==0)dispmem[0+8]=0xff; //0位
		else dispmem[0+8]=0xcf;  //1,2位都只能显示第二位小数		
		
		for(i=1;i<4;i++)
		{
			dispmem[i]=tt[i-1];
		}
		//dispmem[10]=dotmem[dotdata];
	} 
	else    //不是一位小数时
	{
		for(i=0;i<2;i++)
		{
			dispmem[i]=tt[i+10];
		}
		for(i=0;i<6;i++)
		{
			dispmem[i+8]=tt[i+4];
		}
		ptr=&dispmem;
		disp_out(1,ptr,8);
		//--------------------------
		for(i=0;i<16;i++)
		{
			dispmem[i]=0x0f;
		}
	
		if(dotdata==3)dispmem[0+8]=0xfc;  //3位
		else if(dotdata==0)dispmem[0+8]=0xff; //0位
		else dispmem[0+8]=0xcf;  //1,2位都只能显示第二位小数		
		
		for(i=0;i<4;i++)
		{
			dispmem[i]=tt[i];
		}
		//dispmem[10]=dotmem[dotdata];
	}
	ptr=&dispmem;
	disp_out(1,ptr,6);
#else  //*******886***666***********
	for(i=6;i<10;i++)
	{
		dispmem[i+2]=tt[i];
	}
	
	ptr=&dispmem;
	disp_out(1,ptr,8);
	//--------------------------
	for(i=6;i<16;i++)
	{
		dispmem[i]=0x0f;
	}
	for(i=0;i<6;i++)
	{
		dispmem[i]=tt[i];
	}
	dispmem[10]=dotmem[dotdata];
	ptr=&dispmem;
	disp_out(1,ptr,6);
#endif	
}
/**********************************************************
*  功能:查询及菜单返回的显示界面a
**********************************************************/
void  disp_return_a(void)
{  
	disp_key_clear_a();
	if(!cease_power)disp_dot(price_a,0);//LCD1单价、小数点
	state1=0;
	updatea=1;
	if(temp_mema>0){Get1302();temp_mema=0;}
	#if  GUNJLMODE>2//单计量时
	    //gun_busy=0xff;
	#endif
	update_lcd1();
}
/**********************************************************
*  功能:查询及菜单返回的显示界面b
**********************************************************/
void  disp_return_b(void)
{  
	disp_key_clear_b();
		
	if(!cease_power)disp_dot(price_b,1);//LCD2单价、小数点
	state2=0;
	updateb=1;
	#if  GUNJLMODE>2//单计量时
	    //gun_busy=0xff;
	#endif
	update_lcd2();
}
/************************************************************
*  功能:显示枪1/2历史加油记录
*************************************************************/
void disp_eeprom_history(uchar gunid,uchar sequence)
{	void  *pt;
	union{
		uchar c[4];
		ulong x;
		ulong  y;
   }temp;
	ulong  mz;
	uint add;
	char dypass;
   pt=&temp.c[0];
   if(gunid==0)
	{
		keya_num[0]=keynumdata[sequence];keya_num[1]=keynumdata[27];keya_num[2]=keynumdata[0];keya_num[3]=keynumdata[1];
		keya_num[4]=0x02;
	}
	else
	{
		keyb_num[0]=keynumdata[sequence];keyb_num[1]=keynumdata[27];keyb_num[2]=keynumdata[0];keyb_num[3]=keynumdata[1];
		keyb_num[4]=0x02;
	}
	#if  GUNJLMODE>2//单计量时
       gunid=0x00;			 
	#endif
	dypass=readbyte(gunid*300)-sequence;  //枪0在0000H; 枪1在0300;
	if(dypass<0) dypass+=10;
	if(dypass>9) dypass=0;
	add=dypass*12+200*gunid+101;
	readbyteseq(add,pt,4); 

   mz=temp.x;
	//pt=&temp.c[0];
	dypass=readbyte(gunid*300)-sequence;  //枪0在0000H; 枪1在0300;
	if(dypass<0) dypass+=10;
	//add=dypass*10+256*gunid+105;
	add+=4;
	readbyteseq(add,pt,4);

   disp_lcd(temp.x,mz,gunid);  //公升

	add+=4;
	readbyteseq(add,pt,4);

	disp_dot(temp.y,gunid);  //该次单价  
}
/***************************************************************
*  功能:显示锁机a
*  输入密码过程中是从右到左,即第1个输入的在最右边--个位。
***************************************************************/
void disp_lock_a(void)
{	void  *ptr;
	uchar i,j;
	uchar  dispmem[16];
	//disp_lcd_clear(0);
	if(menu1==4) 
	{
		if(temp_mema!=4)
		{
			keya_num[0]=keynumdata[temp_mema];
			keya_num[1]=keynumdata[27];
			keya_num[2]=keynumdata[4];
			keya_num[3]=keynumdata[0];
		}
		else
		{  ptr=&ration_num_a;
			writebyteseq(PASSSTARTADD,ptr,4);
			#if  GUNJLMODE>2//单计量时
				ration_num_b=ration_num_a;
				ptr=&ration_num_b; //锁机密码b
				writebyteseq(PASSSTARTADD+4,ptr,4);
			#endif
			keya_num[0]=keynumdata[3];
			keya_num[1]=keynumdata[3];
			keya_num[2]=keynumdata[3];
			keya_num[3]=keynumdata[3];
		}
	}
	else 
	{
		keya_num[0]=keynumdata[19];
		keya_num[1]=keynumdata[27];
		keya_num[2]=keynumdata[3];
		keya_num[3]=keynumdata[0];
	}
	if(locknooil_a) keya_num[4]=0x01;
	else keya_num[4]=0x02;
   //-------------------
   if(state1==4)
	{
		for(i=0;i<16;i++)
		{
			dispmem[i]=0x0f;
		}
		ptr=&dispmem;
		disp_out(0,ptr,8);
		//---------------------
		if(multiple_a==1)j=0;
		else if(multiple_a==10)j=1;
		else if(multiple_a==100)j=2;
		else if(multiple_a==1000)j=3;
		else j=4;
		for(i=0;i<j;i++)
		{
			dispmem[i]=0x0e;  //'-'
		}
		for(i=j;i<16;i++)
		{
			dispmem[i]=0x0f;
		}
		
		dispmem[0+8]=0x0ff;  //没有小数点
		ptr=&dispmem;
		disp_out(0,ptr,6);
	}
}
/**************************************************************
*  功能:显示时钟a/b
**************************************************************/
void disp_time(uchar  gunidid)
{   uchar  dispmem[16];
	uchar i;
	uchar *ptr;
	if(gunidid==0)
	{	
		keya_num[0]=keynumdata[14];
		keya_num[1]=keynumdata[27];
		if(state1==4)
		{
			keya_num[2]=keynumdata[02];
			keya_num[3]=keynumdata[00];  //"02-d"
		}
		else
		{
			keya_num[2]=keynumdata[27];
			keya_num[3]=keynumdata[05];  //"5--d"
		}
		keya_num[4]=0x02;
	}
	else
	{
		keyb_num[0]=keynumdata[14];
		keyb_num[1]=keynumdata[27];
		if(state2==4)
		{
			keyb_num[2]=keynumdata[02];
			keyb_num[3]=keynumdata[00];  //"02-d"
		}
		else
		{
			keyb_num[2]=keynumdata[27];
			keyb_num[3]=keynumdata[05];  //"5--d"
		}
		keyb_num[4]=0x02;
	}
	dispmem[7]=0x02;
	dispmem[6]=0x00;
	dispmem[5]=ucCurtime[6]/16;
	dispmem[4]=ucCurtime[6]%16;   //年

	dispmem[3]=ucCurtime[4]/16;
	dispmem[2]=ucCurtime[4]%16;  //月

	dispmem[1]=ucCurtime[3]/16;
	dispmem[0]=ucCurtime[3]%16;  //日
   //---------------------------------
	dispmem[15]=0x0f;
	dispmem[14]=0x0f;
	dispmem[13]=ucCurtime[2]/16;
	dispmem[12]=ucCurtime[2]%16;  //时

	dispmem[11]=ucCurtime[1]/16;
	dispmem[10]=ucCurtime[1]%16;  //分

	dispmem[9]=ucCurtime[0]/16;;
	dispmem[8]=ucCurtime[0]%16;;  //秒	
   
	ptr=&dispmem;
	disp_out(gunidid,ptr,8);
	//------------------------
	for(i=1;i<16;i++)
	{
		dispmem[i]=0x0f;
	}
	dispmem[0]=ucCurtime[5]%16;

   #if DISPMODE==886
		if(!(state1==3 && menu1==9 && temp_mema>0))
		{
		   dispmem[9]=0x02;
			dispmem[11]=0x0a;
			dispmem[12]=0x0a;    //因为666没有第位小数,加上设置时也不需要小数
		}
   #endif
	dispmem[0+8]=0x0ff;  //664时钟没有小数点
	ptr=&dispmem;
	disp_out(gunidid,ptr,6);
}
/**************************************************************
*  功能:显示版本号a/b
**************************************************************/
void disp_ver(uchar  gunidid)
{  
	disp_lcd_clear(gunidid);
	if(gunidid==0)  //枪0
	{	
		keya_num[0]=keynumdata[ver_num[1]%10];keya_num[1]=keynumdata[ver_num[1]/10];keya_num[2]=keynumdata[ver_num[0]%10];keya_num[3]=keynumdata[26];  //"U123"
		keya_num[4]=0x02;
	}
	else
	{
		keyb_num[0]=keynumdata[ver_num[1]%10];keyb_num[1]=keynumdata[ver_num[1]/10];keyb_num[2]=keynumdata[ver_num[0]%10];keyb_num[3]=keynumdata[26];  //"U123"
		keyb_num[4]=0x02;
	}
}
/***************************************************************
*  功能:显示提前关阀量---流量控制
***************************************************************/
void  disp_velocity_control(uchar  gunidid)
{
	if(gunidid==0)  //枪0
	{	
		keya_num[0]=keynumdata[residue_a%10];
		keya_num[1]=keynumdata[residue_a/10];
		keya_num[2]=keynumdata[27];
		keya_num[3]=keynumdata[6];  //"6-30"
		keya_num[4]=0x02;
	}
	else
	{
		keyb_num[0]=keynumdata[residue_b%10];
		keyb_num[1]=keynumdata[residue_b/10];
		keyb_num[2]=keynumdata[27];
		keyb_num[3]=keynumdata[6];  //"6-30"
		keyb_num[4]=0x02;
	}
}
/***************************************************************
*  功能:显示中控地址
***************************************************************/
void  disp_address(uchar  gunidid)
{
	if(gunidid==0)  //枪0
	{	
		keya_num[0]=keynumdata[gunadd_a%10];
		keya_num[1]=keynumdata[gunadd_a/10];
		keya_num[2]=keynumdata[0x0e];
		keya_num[3]=keynumdata[0x0a];  //"Ad30"
		keya_num[4]=0x02;
	}
	else
	{
		keyb_num[0]=keynumdata[gunadd_b%10];
		keyb_num[1]=keynumdata[gunadd_b/10];
		keyb_num[2]=keynumdata[0x0e];
		keyb_num[3]=keynumdata[0x0a];  //"Ad30"
		keyb_num[4]=0x02;
	}
}
/***************************************************************
*  功能:显示小数点
***************************************************************/
void  disp_setdot(uchar  gunidid)
{  find_dot();
	if(gunidid==0)  //枪0
	{	
		keya_num[0]=keynumdata[decimal_a];
		keya_num[1]=keynumdata[27];
		keya_num[2]=keynumdata[27];
		keya_num[3]=keynumdata[8];  //"8--2"
		keya_num[4]=0x02;			
	}
	else
	{
		keyb_num[0]=keynumdata[decimal_b];
		keyb_num[1]=keynumdata[27];
		keyb_num[2]=keynumdata[27];
		keyb_num[3]=keynumdata[8];  //"8--2"
		keyb_num[4]=0x02;		
	}
	disp_lcd(0,0,gunidid);
   disp_dot(0,gunidid);
}
/***************************************************************
*  功能:显示每秒增量--由于膨胀
***************************************************************/
void  disp_dilate(uchar  gunidid)
{
	if(gunidid==0)  //枪0
	{	
		keya_num[0]=keynumdata[increment_a%10];
		keya_num[1]=keynumdata[increment_a/10];
		keya_num[2]=keynumdata[27];
		keya_num[3]=keynumdata[0x9];  //"09-3"
		keya_num[4]=0x02;
		
	}
	else
	{
		keyb_num[0]=keynumdata[increment_b%10];
		keyb_num[1]=keynumdata[increment_b/10];
		keyb_num[2]=keynumdata[27];
		keyb_num[3]=keynumdata[9];  //"09-3"
		keyb_num[4]=0x02;
	}
}
/***************************************************************
*  功能:显示打印机工作方式  00--自动 01--手动
***************************************************************/
void  disp_printer_mode(uchar  gunidid)
{
	if(gunidid==0)  //枪0
	{	if(printermode_a==0)
		{
			keya_num[0]=keynumdata[10]; //"Auto"			
		}
		else
		{
			keya_num[0]=keynumdata[17];//"Hand"			 
		}
		keya_num[1]=keynumdata[27];
		if(state1==4)
		{
			keya_num[2]=keynumdata[6];
			keya_num[3]=keynumdata[0]; //06-H
		}
		else
		{
			keya_num[2]=keynumdata[27];
			keya_num[3]=keynumdata[3];  //3--H
		}
		keya_num[4]=0x02;
		
	}
	else  //gunidid==0
	{  if(printermode_b==0)
		{
			keyb_num[0]=keynumdata[10];//"Auto"			
		}

⌨️ 快捷键说明

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