📄 main.c
字号:
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 + -