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

📄 main.c

📁 HT1621液晶控制测试
💻 C
📖 第 1 页 / 共 3 页
字号:
				answer_b();  //应答a
				break;
			case 0x09:  //定量金额加油
				table_buf[49+53]=rece_buf[5];
				table_buf[50+53]=rece_buf[4];
				table_buf[51+53]=rece_buf[3];
				ration_mode_b=0;
				command_b=3;
				answer_b();  //应答a
				break;
			case 0x0a:  //定量千克加油
				answer_b();  //应答a
				break;
			case 0x0b:  //定量升加油
				table_buf[49+53]=rece_buf[5];
				table_buf[50+53]=rece_buf[4];
				table_buf[51+53]=rece_buf[3];
				ration_mode_b=1;
				command_b=4;
				answer_b();  //应答a
				break;
			case 0x0c:  //读密度、单价
				table_buf[0+53]=0x00;
				table_buf[1+53]=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+53];
				chkdata+=send_buf[1];
				for(i=0;i<4;i++)
				{
					send_buf[i+2]=table_buf[i+0+53];
					chkdata+=send_buf[i+2];
				}
				chkdata=~chkdata+1;
				send_buf[i+2]=chkdata;
				send_unm=0;   //发送計数
				table_buf[52+53] &=0xfe;   //清读单价标志
				SBUF=send_buf[0]; 
 			   
				break;
			case 0x0d:  //读班累
				send_buf[0]=21;
				chkdata=21;
				table_buf[52+53] &=0xfd;   //清读标志
				send_buf[1]=table_buf[52+53];
				chkdata+=send_buf[1];
				for(i=0;i<18;i++)
				{
					send_buf[i+2]=table_buf[i+4+53];
					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+53] &=0xfb;   //清读标志
				send_buf[1]=table_buf[52+53];
				chkdata+=send_buf[1];
				for(i=0;i<18;i++)
				{
					send_buf[i+2]=table_buf[i+22+53];
					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+53];
				chkdata+=send_buf[1];
				for(i=0;i<9;i++)
				{
					send_buf[i+2]=table_buf[i+40+53];
					chkdata+=send_buf[i+2];
				}
				chkdata=~chkdata+1;
				send_buf[i+2]=chkdata;
				send_unm=0;   //发送計数
				SBUF=send_buf[0];   
				break;
			case 0x10:  //停机
				command_b=5;
				answer_b();  //应答a
				break;
			case 0x15:  //lock机
				command_b=6;
				answer_b();  //应答a
				break;
			case 0x14:  //unlock机
				command_b=7;
				answer_b();  //应答a
				break;
			default:
				break;
		}
	}

}	
/**************************************************************************
*功能://通讯命令
**************************************************************************/
void uart_command(void)  
{  ulong y;	
   switch(command_a)
	{	void *pt;
		case 1:  //清班累
			command_a=0;
			gun1.work_sale=0;gun1.work_liter=0;
			gun1.liter=0x00;   //123456
  			gun1.sale=0x00;
			gun1.pulse=0x00;
			
			pt=&gun1;
			writebyteseq(0x01,pt,37);  //写EEPROM
			accumulative_total_list_a();  //累计转换至列表a
			break;
		case 2:  //非定量加油
			command_a=0;
			if((state1==0x00 || state1==0x02 || state1==0x06) && k1key  && mcstoptime_a==0) 
			{ 	disp_floor_level_a=increment_a;
				clear_worka();  //如定量加油须换算相应的脉冲数	
			  	if(ration_pulse_a!=0){mc1=0;DCFX1=0;DCFD1=0;state1=0x01;}
				else {state1=0;prn1time=1;disp_return_a();}
			}
			break;
		case 3:  //定量金额
			command_a=0;
			if((state1==0x00 || state1==0x02 || state1==0x06) && k1key  && mcstoptime_a==0) 
			{ 
				y=table_buf[51]%16;
				y+=table_buf[51]/16*10;
				y+=table_buf[50]%16*100;
				y+=table_buf[50]/16*1000;
				y+=table_buf[49]%16*10000;
				y+=table_buf[49]/16*100000;
				ration_num_a=y;
				bbyte=dotmode[decimal_a];   //小数点
				if(a3)
				{	if(y%10)multiple_a=0;
					else if(y%100)multiple_a=1;
					else multiple_a=100;
				}  //金额小数点
				else if(a0){multiple_a=0; }
				else {multiple_a=0;}
				 //小数点的处理
				state1=0x02;
				disp_vip_a();				
				disp_floor_level_a=increment_a;
				clear_worka();  //如定量加油须换算相应的脉冲数	
				updatea=0;
			  	if(ration_pulse_a!=0){mc1=0;DCFX1=0;DCFD1=0;state1=0x01;}
				else {state1=0;prn1time=1;disp_return_a();}
			}
			break;
		case 4:  //定量升
			command_a=0;
			if((state1==0x00 || state1==0x02 || state1==0x06) && k1key  && mcstoptime_a==0) 
			{
				y=table_buf[51]%16;
				y+=table_buf[51]/16*10;
				y+=table_buf[50]%16*100;
				y+=table_buf[50]/16*1000;
				y+=table_buf[49]%16*10000;
				y+=table_buf[49]/16*100000;
				ration_num_a=y;
				state1=0x02;
				disp_vip_a();
				
			 	disp_floor_level_a=increment_a;
				clear_worka();  //如定量加油须换算相应的脉冲数
				updatea=0;
			  	if(ration_pulse_a!=0){mc1=0;DCFX1=0;DCFD1=0;state1=0x01;}
				else {state1=0;prn1time=1;disp_return_a();}
			}
			break;
		case 5:  //停机
			command_a=0;
			if(state1==0x01)
			{	state1=0x0;
				DCFX1=1;DCFD1=1;
				disp_key_clear_a();
				dcespk_out();    //电磁阀及蜂鸣器输出
				updatea=1;
			}
			break;
		case 6:  //锁机
			command_a=0;
			state1=4;menu1=2;
			locknooil_a=1;multiple_a=1;ration_num_a=0;disp_lock_a();
			break;
		case 7:  //解锁
			command_a=0;
			if(state1==4  && menu1==2  &&	locknooil_a==1)
			{state1=0;locknooil_a=0;prn1time=1;disp_return_a();}
			break;
		case 8:  //设置单价
			command_a=0;
			{uint x;
			x=(table_buf[2])/16*1000;
			x+=(table_buf[2])%16*100;
			x+=(table_buf[3])/16*10;
			x+=(table_buf[3])%16;
			price_a=x;
			}
			messagesave_ok=1;   ////1--上位机已设置参数标志
			break;
		default:
			break;
	}
	
	//-----------------
	switch(command_b)
	{void *pt;
		case 1:  //清班累
			command_b=0;
			gun2.work_sale=0;gun2.work_liter=0;
			gun2.liter=0x00;   //123456
  			gun2.sale=0x00;
			gun2.pulse=0x00;
			
			pt=&gun2;
			writebyteseq(38,pt,37);  //写EEPROM
			accumulative_total_list_b();  //累计转换至列表b
			break;
		case 2:  //非定量加油
			command_b=0;
			if((state2==0x00 || state2==0x02 || state2==0x06) && k2key  && mcstoptime_b==0) 
			{ 	disp_floor_level_b=increment_b;
				clear_workb();  //如定量加油须换算相应的脉冲数	
			  	if(ration_pulse_b!=0){mc2=0;DCFX2=0;DCFD2=0;state2=0x01;}
				else {state2=0;prn2time=1;disp_return_b();}
			}
			break;
		case 3:  //定量金额
			command_b=0;
			if((state2==0x00 || state2==0x02 || state2==0x06) && k2key  && mcstoptime_b==0) 
			{
				y=table_buf[51+53]%16;
				y+=table_buf[51+53]/16*10;
				y+=table_buf[50+53]%16*100;
				y+=table_buf[50+53]/16*1000;
				y+=table_buf[49+53]%16*10000;
				y+=table_buf[49+53]/16*100000;
				ration_num_b=y;
				bbyte=dotmode[decimal_b];   //小数点
				if(a3)
				{	if(y%10)multiple_b=0;
					else if(y%100)multiple_b=1;
					else multiple_b=100;
				}  //金额小数点
				else if(a0){multiple_b=0; }
				else {multiple_b=0;}
				 //小数点的处理
				state2=0x02;
				disp_vip_b();
			 	disp_floor_level_b=increment_b;
				clear_workb();  //如定量加油须换算相应的脉冲数	
				updateb=0;
			  	if(ration_pulse_b!=0){mc2=0;DCFX2=0;DCFD2=0;state2=0x01;}
				else {state2=0;prn2time=1;disp_return_b();}
			}
			break;
		case 4:  //定量升
			command_b=0;
			y=table_buf[51+53]%16;
			y+=table_buf[51+53]/16*10;
			y+=table_buf[50+53]%16*100;
			y+=table_buf[50+53]/16*1000;
			y+=table_buf[49+53]%16*10000;
			y+=table_buf[49+53]/16*100000;
			ration_num_b=y;
			state2=0x02;
			disp_vip_b();
			if((state2==0x00 || state2==0x02 || state2==0x06) && k2key  && mcstoptime_b==0) 
			{ 	disp_floor_level_b=increment_b;
				clear_workb();  //如定量加油须换算相应的脉冲数
				updateb=0;
			  	if(ration_pulse_b!=0){mc2=0;DCFX2=0;DCFD2=0;state2=0x01;}
				else {state2=0;prn2time=1;disp_return_b();}
			}
			break;
		case 5:  //停机
			command_b=0;
			if(state2==0x01)
			{	state2=0x0;
				DCFX2=1;DCFD2=1;
				disp_key_clear_b();
				dcespk_out();    //电磁阀及蜂鸣器输出
				updateb=1;
			}
			break;
		case 6:  //锁机
			command_b=0;
			state2=4;menu2=2;
			locknooil_b=1;multiple_b=1;ration_num_b=0;disp_lock_b();
			break;
		case 7:  //解锁
			command_b=0;
			if(state2==4  && menu2==2  &&	locknooil_b==1)
			{state2=0;locknooil_b=0;prn2time=1;disp_return_b();}
			break;
		case 8:  //设置单价
			command_b=0;
			{uint x;
			x=(table_buf[2+53])/16*1000;
			x+=(table_buf[2+53])%16*100;
			x+=(table_buf[3+53])/16*10;
			x+=(table_buf[3+53])%16;
			price_b=x;
			}
			messagesave_ok=1;   ////1--上位机已设置参数标志
			break;
		default:
			break;
	}
			  
} 
/***************************************************************************
*    CMD16887加油机主控程序---打印机 
*    程序设计:JiangMaoZHou
*    创建:2006-04-01
*    修改:2006-07-08    VER:  1.0.1
****************************************************************************/
void main(void)
{  while(!INT0)
	{
		wdt=!wdt;   //WDT
		WDT_CONTR=0x34;   //WDT 
	}
	messagesave_ok=0;
	disp_floor_level_a=increment_a;
   disp_floor_level_b=increment_b;
   cease_power=0;   
	alarm=0x3f;
	jsq1out=0;
 	jsq2out=0;
	k1spk=1;
	k2spk=1;
    dropt_a=0;dropt_b=0;
 	  //WDT_CONTR=0x34;
     DCFD1=1;DCFX1=1;mc1=1;
	  DCFD2=1;DCFX2=1;mc2=1;
     InitializeSystem();   //初始化
	  k1spk=1;
	  k2spk=1;
	  
	  updatea=1;
	  updateb=1;
	  DCFD1=1;DCFX1=1;mc1=0;
	  DCFD2=1;DCFX2=1;mc2=0;
	  read_eeprom();   //读EEPROM	 
 	  renew_sysdata(); //数据恢复
	  if(decimal_a>4 || decimal_b>4 || price_a==0 ||price_b==0 ||price_a>9999 || price_b>9999)
	  {
	  	eeprom_ipl();  //EEPROM初始化程序
	  }
	  renew_printer_format();
	   cgq1s1old=cgq1s1;
		cgq1s2old=cgq1s2;
		cgq2s1old=cgq2s1;
		cgq2s2old=cgq2s2;
		//---------------------------------------------
	  k1spk_time=25;  //启动短音
	  k2spk_time=25;  //启动短音
	  print_ipl();   //打印机初始化
	  disp_key_clear_a();
	  disp_key_clear_b();
	  accumulative_total_list_a();  //累计转换至列表a
	  accumulative_total_list_b();  //累计转换至列表b
	  mcstoptime_a=300;mcstoptime_b=300;
	  disp_lcd1(price_a,0x0);
	  table_buf[52] |=0x01; //通讯读单价
	  disp_lcd2(price_b,0x0);
	  table_buf[52+53] |=0x01; //通讯读单价
	  //--------------------------------
     while(1) 
	  {	if(!cease_power)scout();   //事件处理
	  		if(!cease_power)pickup();  //提枪/挂枪检测
	  		wdt=!wdt;   //WDT
			WDT_CONTR=0x34;   //WDT  xxxxxxxxxxxxxxxxxxxxxxxxxxx	
			if(state1==4 && menu1==4 && temp_mema==0){state1=0;disp_return_a();}
			if((k1key && (state1==3 || state1==7)) ||(!k1key && (state1==4 || state1==6)) && !locknooil_a) {if(save_ok){save_ok=0;backup_sysdata();}state1=0;disp_return_a();}
			if(!k1key && state1==0){ keya_num[0]=keynumdata[27];keya_num[3]=keynumdata[27];keya_num[1]=keynumdata[27];keya_num[2]=keynumdata[27];keya_num[4]=0x02;}
			else if(k1key && state1==0){if(keya_num[0]==keynumdata[27])disp_key_clear_a();}
	     //----------------------------
			if(state2==4 && menu2==4 && temp_memb==0){state2=0;disp_return_b();}
			if((k2key && (state2==3 || state2==7)) ||(!k2key && (state2==4 || state2==6)) && !locknooil_b) {if(save_ok){save_ok=0;backup_sysdata();}state2=0;disp_return_b();}
			if(!k2key && state2==0){ keyb_num[0]=keynumdata[27];keyb_num[3]=keynumdata[27];keyb_num[1]=keynumdata[27];keyb_num[2]=keynumdata[27];keyb_num[4]=0x02;}
			else if(k2key && state2==0){if(keyb_num[0]==keynumdata[27])disp_key_clear_b();}
			//---------------------------
			if((!INT0) )
			{	void *pi;cease_power=0;
				if(save_oka){save_oka=0;sum_a();}  //累計
				if(save_okb){save_okb=0;sum_b();}  //累計
				pi=&gun1;writebyteseq(0x01,pi,74); 
				while(1){;} 
			} 
			//-----------------------------
			if(printformat_saveok)
			{  
				printformat_saveok=0;
				backup_printer_format();   //备份打印格式
			}
			//-----------------------------
			uart_command();  //通讯命令
 		   //-----------------------------
			
			if(state1==1){mcstoptime_a=300;table_buf[52] |=0x08;}
			else table_buf[52] &=0x37;
			if(state2==1){mcstoptime_b=300;table_buf[52+53] |=0x08;}
			else table_buf[52+53] &=0x37;
			if(locknooil_a)table_buf[52] |=0x10;
			else  table_buf[52] &=0x2f;
			if(locknooil_b)table_buf[52+53] |=0x10;
			else  table_buf[52+53] &=0x2f;
			//----------------------------------------------------------------
			if(messagesave_ok){messagesave_ok=0;disp_lcd1(price_a,0x0);disp_lcd2(price_b,0x0);backup_sysdata();}  //因通讯改变要更新
			//---------------------------
			#if  GUNJLMODE==1
				if(state1!=1 && state2!=1) {mc1=1;mc2=1;}
			#else
				if(state1!=1) {mc1=1;}
				if(state2!=1) {mc2=1;}
			#endif
	  }
	  
}
/***********************************************************
******************END---->END------->END*******************
***********************************************************/


⌨️ 快捷键说明

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