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