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

📄 main.c

📁 HT1621液晶控制测试
💻 C
📖 第 1 页 / 共 3 页
字号:
{  if(update_workb)
	{	update_workb=0;
		if(jl2s>0)     
		{
			while  (jl2s>0)
			{  gun2.pulse+=1;
				jl2s--;
				gun2.pulse_jsq++;
			   if (gun2.pulse_jsq==120) {	gun2.pulse_jsq=0;jsq2out=1;} //通知计数器
				updateb=1;save_okb=1;idle_numb=0;
			}
		}
		else
		{
			if(state2!=1 || !INT0)  //if(state2==0 || !INT0)   2006-07-11
			{
				if(idle_numb<20)idle_numb++;
				if(ration_b  && (idle_numb>3))  //定量加油完毕
				{  ration_b=0;
					save_okb=1;idle_numb=20;
					if(ration_mode_b)gun2.liter=ration_num_b;
					else gun2.sale=ration_num_b;
					disp_key_clear_b();
					updateb=1;
				}
				if(idle_numb==20 && save_okb){save_okb=0;sum_b();}  //累計
			}
			else idle_numb=0;
		}
		
	}	
}
/***************************************************************************
*   功能:计算a
****************************************************************************/
void  maths_a(void)
{
	float  m;
	ulong  n;
	ulong  aa;
	if(idle_numa<15)
	{
		m=gun1.pulse;
		bbyte=dotmode[decimal_a];   //小数点
	
		if(a1){m=m*8.33333333333+0.5;aa=1000;}  //if(a1){m=m*8.33333333333+0.5;aa=1000;}    //每个脉冲->8.33毫升,显示最小10mL
		else {m=m*0.8333333333333+0.5;aa=100;}  //else {m=m*0.8333333333333+0.5;aa=100;}
		n=m;
		gun1.liter=n;   //升
		if(ration_a)  //定量加油完毕
		{  if(ration_mode_a){gun1.liter=ration_num_a;n=ration_num_a;}}
	
		n*=price_a;	
	
		if(a5) {aa*=100;}  //处理单价小数点
		else if(a2) {aa*=1000;}
	
		if(a0) {aa/=10;}  //处理金额小数点
		else if(a3) {aa/=100;}
		//n+=aa/2;   //四舍五入
	
	   gun1.sale=n/aa;   //金额
	}
	
}
/***************************************************************************
*   功能:计算b   [ok]
****************************************************************************/
void  maths_b(void)
{
	float  m;
	ulong  n;
	ulong  aa;
	if(idle_numb<15)
	{
		m=gun2.pulse;
		bbyte=dotmode[decimal_b];   //小数点
	
		if(a1){m=m*8.33333333333+0.5;aa=1000;}   //if(a1){m=m*8.33333333333+0.5;aa=1000;}  //每个脉冲->8.33毫升,显示最小10mL
		else {m=m*0.8333333333333+0.5;aa=100;}  //else {m=m*0.8333333333333+0.5;aa=100;}
		n=m;
		gun2.liter=n;   //升
		if(ration_b)  //定量加油完毕
		{  if(ration_mode_b){gun2.liter=ration_num_b;n=ration_num_b;}}
	
		n*=price_b;	
	
		if(a5) {aa*=100;}  //处理单价小数点
		else if(a2) {aa*=1000;}
	
		if(a0) {aa/=10;}  //处理金额小数点
		else if(a3) {aa/=100;}
		//n+=aa/2;   //四舍五入
	
	   gun2.sale=n/aa;   //金额
	}
	

}
/***************************************************************************
*   功能:读出EEPROM保存数据
*   JiangMaoZHou
***************************************************************************/
void  read_eeprom(void)
{  
   void  *pt;
	
	pt=&gun1;	
	readbyteseq(0x01,pt,37);   //读EEPROM
	
	wdt=!wdt;   //WDT
	WDT_CONTR=0x34;

	pt=&gun2;	
	readbyteseq(38,pt,37);   //读EEPROM

	pt=&(price_a); 
	readbyteseq(502,pt,2);//单价a
	pt=&(price_b);  
	readbyteseq(504,pt,2);//单价b
    

	oil_types_a=readbyte(78);  //油品
	oil_types_b=readbyte(79);  //油品
	residue_a=readbyte(87); //提前量
	residue_b=readbyte(87+7); //提前量
	close_num_a=readbyte(88);    //提前关机量
	close_num_b=readbyte(88+7);    //提前关机量
    gunadd_a=readbyte(89);   //中控地址
 	gunadd_b=readbyte(89+7);   //中控地址
	decimal_a=readbyte(90);   //读小数点a
	
	decimal_b=readbyte(90+7);   //读小数点b
 
	increment_a=readbyte(91);  //每秒增量1--3
	increment_b=readbyte(91+7);  //每秒增量1--3
	printermode_a=readbyte(92);  //打印机工作方式
	printermode_b=readbyte(92+7);  //打印机工作方式	
    pirnt_select_a=readbyte(93);  //选择的打印机
	pirnt_select_b=readbyte(93+7);  //选择的打印机 
	
	
}
/***************************************************************************
*   功能:事件处理
*   JiangMaoZHou
***************************************************************************/
void scout(void)
{	
	if(!cease_power)workajl();   //工作面A计量处理
	if(!cease_power)workaj2();   //工作面B计量处理
	if (scanfkey)
	{
		scanfkey=0;
		if(!cease_power)read_key();  //扫描键盘
		if(!cease_power)keya_solve();
		if(!cease_power)keyb_solve();
		if(!cease_power)printstate=XBYTE[READPRINT];  //读打印机状态
	}
	//------------------------------------------------
	if (updatea)
	{	updatea=0;
		if(!cease_power){if(save_oka) maths_a();}  //上电没有新计量不计算		
		if(gun1.pulse>disp_floor_level_a)
		{			
			if(!cease_power)disp_lcd1(gun1.sale,0x04);
			if(!cease_power)disp_dot1(decimal_a);   //LCD1小数点
			if(!cease_power)disp_lcd1(gun1.liter,0x0a);  //公升
		}
		else
		{		
			if(!cease_power)disp_lcd1(0,0x04);
			if(!cease_power)disp_dot1(decimal_a);   //LCD1小数点
			if(!cease_power)disp_lcd1(0,0x0a);  //公升
		}
		
		
		
	}
	//-------------------------------------------------
	
	if (updateb)
	{	updateb=0;
		if(!cease_power){if(save_okb)maths_b();}
		if(gun2.pulse>disp_floor_level_b)
		{
			if(!cease_power)disp_lcd2(gun2.sale,0x04);
		   if(!cease_power)disp_dot2(decimal_b);   //LCD2小数点
			if(!cease_power)disp_lcd2(gun2.liter,0x0a);  //公升			
		}
		else
		{
			if(!cease_power)disp_lcd2(0,0x04);	
	  	   if(!cease_power)disp_dot2(decimal_b);   //LCD2小数点
			if(!cease_power)disp_lcd2(0,0x0a);  //公升	
		}
		
		
	}	
	//------------------------------------
	dcespk_out();    //电磁阀及蜂鸣器输出
	if (sr1) {DCFD1=1;DCFX1=1;}   //传感器未插好,则关阀门及油泵
	if (sr2) {DCFD2=1;DCFX2=1;}   //传感器未插好,则关阀门及油泵
	if(state1!=0 ) prn1time=180;  //3分钟
}
/**************************************************************************
*  功能:提枪/挂枪检测
*  设计: JiangMaoZHou
***************************************************************************/
void  pickup(void)
{
	if (!tq1)  hang_cnt1++;
	else if(hang_cnt1!=0) hang_cnt1--;
	if(hang_cnt1>2000) {hang_cnt1=2000;}
   if(hang_cnt1==0)dropt_a=1;
	if (!spear1_state &&  hang_cnt1==2000)  //!tq1
	{ 
		  if(state1==0x01)spear1_state=1;
		  if((state1==0x00 || state1==0x02 ||state1==6 || (state1==4 && (menu1!=2 && menu1!=4))) && k1key && dropt_a && mcstoptime_a==0 && !locknooil_a) 
		  {	spear1_state=1;
		  		disp_floor_level_a=increment_a;
				if(state1==6 || state1==4) disp_return_a();
		  		clear_worka();  //如定量加油须换算相应的脉冲数
				
		  		if(ration_pulse_a>119){mc1=0;DCFX1=0;DCFD1=0;state1=0x01;}  //
				else {state1=0;disp_return_a();}
		  }		
	}
	else  if(spear1_state && hang_cnt1==0 )
	{  spear1_state=0;
		DCFX1=1;DCFD1=1;
      if(state1==0x01){state1=0x00;disp_key_clear_a();}
	}
	//------------------------------------------------------
	if (!tq2)  hang_cnt2++;
	else if(hang_cnt2!=0) hang_cnt2--;
	if(hang_cnt2>2000) {hang_cnt2=2000;}
	if(hang_cnt2==0)dropt_b=1;
	if (!spear2_state &&  hang_cnt2==2000)  //!tq2
	{ 
		  if(state2==0x01)spear2_state=1;
		  if((state2==0x00 || state2==0x02 ||state2==6 ||(state2==4 && (menu2!=2 && menu2!=4))) && k2key  && dropt_b && mcstoptime_b==0 && !locknooil_b) 
		  {	spear2_state=1;
		  		disp_floor_level_b=increment_b;
				if(state2==6 || state2==4) disp_return_b();
		  		clear_workb();  //如定量加油须换算相应的脉冲数
				
		  		if(ration_pulse_b>119){mc2=0;DCFX2=0;DCFD2=0;state2=0x01;}  //
				else {state2=0;disp_return_b();}
		  }		
	}
	else  if(spear2_state && hang_cnt2==0 )
	{  spear2_state=0;
	   DCFX2=1;DCFD2=1;
       if(state2==0x01){state2=0x00;disp_key_clear_b();}
	}
}
/**********************************************************************
*  功能://应答a
**********************************************************************/
void answer_a(void) 
{  uchar chkdata;
	send_buf[0]=0x03;
	chkdata=0x03;
	send_buf[1]=table_buf[52];
	chkdata+=send_buf[1];
	chkdata=~chkdata+1;
	send_buf[2]=chkdata;
	send_unm=0;   //发送計数
	SBUF=send_buf[0];
	
}
/**********************************************************************
*  功能://应答b
**********************************************************************/
void answer_b(void) 
{  uchar chkdata;
	send_buf[0]=0x03;
	chkdata=0x03;
	send_buf[1]=table_buf[52+53];
	chkdata+=send_buf[1];
	chkdata=~chkdata+1;
	send_buf[2]=chkdata;
	send_unm=0;   //发送計数
	SBUF=send_buf[0];
}
/***************************************************************************
*  功能: 通讯处理
****************************************************************************/
void  rece_command(void)  	
{ 	uchar i,chkdata;
	if(rece_buf[0]==gunadd_a || (rece_buf[0]==0 && rece_buf[2]==0x20))   //1#
	{
		switch(rece_buf[2])
		{
			case 0x00:  //设置单价
				table_buf[2]=rece_buf[4];
				table_buf[3]=rece_buf[3];
				command_a=8;
				table_buf[52] |=0x01;
				answer_a();  //应答a
				break;
			case 0x01:  //设置密度
				answer_a();  //应答a
				break;
			case 0x04:  //清除班累
				command_a=1;
				answer_a();  //应答a
				break;
			case 0x08:  //非定量加油
				command_a=2;
				answer_a();  //应答a
				break;
			case 0x09:  //定量金额加油
				table_buf[49]=rece_buf[5];
				table_buf[50]=rece_buf[4];
				table_buf[51]=rece_buf[3];
				ration_mode_a=0;
				command_a=3;
				answer_a();  //应答a
				break;
			case 0x0a:  //定量千克加油
				answer_a();  //应答a
				break;
			case 0x0b:  //定量升加油
				table_buf[49]=rece_buf[5];
				table_buf[50]=rece_buf[4];
				table_buf[51]=rece_buf[3];
				ration_mode_a=1;
				command_a=4;
				answer_a();  //应答a
				break;
			case 0x0c:  //读密度、单价
				table_buf[0]=0x00;
				table_buf[1]=0x00;
				send_buf[0]=7;
				chkdata=7;
				//if(state1==1) send_buf[1]=0x08;
				//else send_buf[1]=0x00;
				send_buf[1]=table_buf[52];
				chkdata+=send_buf[1];
				for(i=0;i<4;i++)
				{
					send_buf[i+2]=table_buf[i+0];
					chkdata+=send_buf[i+2];
				}
				chkdata=~chkdata+1;
				send_buf[i+2]=chkdata;
				send_unm=0;   //发送計数
				table_buf[52] &=0xfe;   //清读单价标志
				SBUF=send_buf[0]; 
 			   
				break;
			case 0x0d:  //读班累
				send_buf[0]=21;
				chkdata=21;
				table_buf[52] &=0xfd;   //清读标志
				send_buf[1]=table_buf[52];
				chkdata+=send_buf[1];
				for(i=0;i<18;i++)
				{
					send_buf[i+2]=table_buf[i+4];
					chkdata+=send_buf[i+2];
				}
				chkdata=~chkdata+1;
				send_buf[i+2]=chkdata;
				send_unm=0;   //发送計数
				
				SBUF=send_buf[0]; 
				
				break;
			case 0x0e:  //读总累
				send_buf[0]=21;
				chkdata=21;
				table_buf[52] &=0xfb;   //清读标志
				send_buf[1]=table_buf[52];
				chkdata+=send_buf[1];
				for(i=0;i<18;i++)
				{
					send_buf[i+2]=table_buf[i+22];
					chkdata+=send_buf[i+2];
				}
				chkdata=~chkdata+1;
				send_buf[i+2]=chkdata;
				send_unm=0;   //发送計数
				
				SBUF=send_buf[0]; 
				
				break;
			case 0x0f:  //读加油量
				send_buf[0]=12;
				chkdata=12;
				send_buf[1]=table_buf[52];
				chkdata+=send_buf[1];
				for(i=0;i<9;i++)
				{
					send_buf[i+2]=table_buf[i+40];
					chkdata+=send_buf[i+2];
				}
				chkdata=~chkdata+1;
				send_buf[i+2]=chkdata;
				send_unm=0;   //发送計数
				SBUF=send_buf[0];   
				break;
			case 0x10:  //停机
				command_a=5;
				answer_a();  //应答a
				break;
			case 0x15:  //lock机
				command_a=6;
				answer_a();  //应答a
				break;
			case 0x14:  //unlock机
				command_a=7;
				answer_a();  //应答a
				break;
			case 0x20:
				for(i=0;i<150;i++)
				{
					print_format[i]=rece_buf[i+3];
				}
				printformat_saveok=1;
				break;
			default:
				break;
		}
	}
	else  //2#
	{
		switch(rece_buf[2])
		{
			case 0x00:  //设置单价
				table_buf[2+53]=rece_buf[4];
				table_buf[3+53]=rece_buf[3];
				command_b=8;
				table_buf[52+53] |=0x01;
				answer_b();  //应答a
				break;
			case 0x01:  //设置密度
				answer_b();  //应答a
				break;
			case 0x04:  //清除班累
				command_b=1;
				answer_b();  //应答a
				break;
			case 0x08:  //非定量加油
				command_b=2;

⌨️ 快捷键说明

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