📄 other.c
字号:
/*****************************************
* 文件名:OTHER.C
*****************************************/
#include <REG51STC.H>
#include "CMD16887.H"
#include "externxy.h"
/******************************************
* 功能:金额取整加油
*******************************************/
void oil_intmoney(uchar gunidid) //金额取整加油
{ ulong mm;
uint aa,bb,cc;
if(gunidid==0){mm=gun1.sale;ration_mode_a=0;bbyte=dotmode[decimal_a];}
else {mm=gun2.sale;ration_mode_b=0;bbyte=dotmode[decimal_b];}
//小数点
if(a5)aa=100; //单价小数点
else if(a2)aa=1000;
else aa=1;
if(a3){bb=100;cc=mm%100;mm=mm+100-cc;cc=100-cc;} //金额小数点
else if(a0){bb=10;cc=mm%100;mm=mm+10-cc;cc=10-cc;}
else {bb=1;cc=0;mm+=50;}
if(gunidid==0)
{ ration_num_a=mm;
mm=mm*120*aa/bb/price_a-gun1.pulse-jl1s;
ration_pulse_a=mm; //定量脉冲
}
else
{ ration_num_b=mm;
mm=mm*120*aa/bb/price_b-gun2.pulse-jl2s;
ration_pulse_b=mm; //定量脉冲
}
}
/**********************************************************
* 功能:取消加油时,按退出键后清原来加油数据
**********************************************************/
void clr_exitdata_a(void)
{
//gun1.liter=0;
//gun1.sale=0;
//gun1.pulse=0;
updatea=1; //通知更新
}
/**********************************************************
* 功能:取消加油时,按退出键后清原来加油数据
**********************************************************/
void clr_exitdata_b(void)
{
//gun2.liter=0;
//gun2.sale=0;
//gun2.pulse=0;
updateb=1; //通知更新
}
/**********************************************************
* 功能:检查锁机密码a/b
***********************************************************/
bit pass_check(uchar gunidid)
{ void *pt;
uint add;
union{
uchar c[4];
ulong x;
}temp;
add=PASSSTARTADD;
pt=&temp.c[0];
if(gunidid==0)
{
readbyteseq(add,pt,4);
if(menu1==2 ||(menu1==4 && temp_mema==1))
{
if(temp.x==ration_num_a && multiple_a==10000) return(1); //密码验证
if(ration_num_a==0x5e4 && multiple_a==10000 && (menu1==4 || locknooil_a)) return(1); //修改戓被锁住时有用
else return(0);
}
else if(menu1==4 && temp_mema==3)
{
if(ration_pulse_a==ration_num_a && multiple_a==10000) return(1); //两次密码必须一致
else return(0);
}
}
else // gunidid==1 //
{ add+=4;
readbyteseq(add,pt,4);
if(menu2==2 ||(menu2==4 && temp_memb==1))
{
if(temp.x==ration_num_b && multiple_b==10000) return(1); //密码验证
if(ration_num_b==0x5e4 && multiple_b==10000 && (menu2==4 || locknooil_b)) return(1); //修改戓被锁住时有用
else return(0);
}
else if(menu2==4 && temp_memb==3)
{
if(ration_pulse_b==ration_num_b && multiple_b==10000) return(1); //两次密码必须一致
else return(0);
}
}
}
/**********************************************************
* 功能:计算定量脉冲数 number为金额限量,gunidid为工作面序号
**********************************************************/
void calculate_ration(uchar gunidid)
{ uint aa,bb,cc;
float mm,fb;
ulong nn;
if(gunidid==0)
{
bbyte=dotmode[decimal_a]; //小数点
if(a5)aa=100; //单价小数点
else if(a2)aa=1000;
else aa=1;
if(a3){bb=100;} //金额小数点
else if(a0){bb=10;}
else {bb=1;}
if(a4)cc=100;
else cc=1000;
if(!ration_mode_a)
{ //定元
mm=ration_num_a;
mm=mm*aa/bb/price_a+0.005;
fb=999999.0/cc;
if(mm>fb)
{ ration_num_a=999999;
mm=999999.0/cc+0.005;
//fb=999999.0*bb*price_a/aa/cc;
//ration_num_a=fb;
ration_mode_a=1; //定升
vip_mode_a=ration_mode_a;
multiple_a=0;
if(state1==2)k1spk_time=110;
}
mm=mm*120.0;
nn=mm;
//if(nn<120) nn=0;
ration_pulse_a=nn;
}
else
{ //定升
mm=ration_num_a;
mm=mm/cc+0.005;
fb=999999.0*aa/bb/price_a;
if(mm>fb)
{
ration_num_a=999999;
mm=999999.0*aa/bb/price_a+0.005;
//fb=999999.0*cc*aa/bb/price_a;
//ration_num_a=fb;
ration_mode_a=0; //定元
vip_mode_a=ration_mode_a;
multiple_a=0;
if(state1==2)k1spk_time=110;
}
mm=mm*120.0;
nn=mm;
//if(nn<120) nn=0;
ration_pulse_a=nn;
}
}
//--------------------------
else
{
bbyte=dotmode[decimal_b]; //小数点
if(a5)aa=100; //单价小数点
else if(a2)aa=1000;
else aa=1;
if(a3){bb=100;} //金额小数点
else if(a0){bb=10;}
else {bb=1;}
if(a4)cc=100;
else cc=1000;
if(!ration_mode_b)
{ //定元
mm=ration_num_b;
mm=mm*aa/bb/price_b+0.005;
fb=999999.0/cc;
if(mm>fb)
{ ration_num_b=999999;
mm=999999.0/cc+0.005;
//fb=999999.0*bb*price_b/aa/cc;
//ration_num_b=fb;
ration_mode_b=1; //定升
vip_mode_b=ration_mode_b;
multiple_b=0;
if(state2==2)k2spk_time=110;
}
mm=mm*120.0;
nn=mm;
//if(nn<120) nn=0;
ration_pulse_b=nn;
}
else
{ //定升
mm=ration_num_b;
mm=mm/cc+0.005;
fb=999999.0*aa/bb/price_b;
if(mm>fb)
{
ration_num_b=999999;
mm=999999.0*aa/bb/price_b+0.005;
//fb=999999.0*cc*aa/bb/price_b;
//ration_num_b=fb;
ration_mode_b=0; //定元
vip_mode_b=ration_mode_b;
multiple_b=0;
if(state2==2)k2spk_time=110;
}
mm=mm*120.0;
nn=mm;
//if(nn<120) nn=0;
ration_pulse_b=nn;
}
}
}
/**********************************************
* 功能:调时间日期
***********************************************/
void set_time(uchar number)
{
if(menu1==9)
{ temp_mema++;
switch(temp_mema)
{
case 0:
break;
case 1:
ucCurtime[0]=0xff;ucCurtime[1]=0xff;ucCurtime[2]=0xff;ucCurtime[3]=0xff;ucCurtime[4]=0xff;ucCurtime[5]=0xff;ucCurtime[6]=number*16+0xf;
break;
case 2:
ucCurtime[6]=ucCurtime[6]-ucCurtime[6]%16;ucCurtime[6]+=number;
break;
case 3:
ucCurtime[4]=number*16+0xf;
break;
case 4:
ucCurtime[4]=ucCurtime[4]-ucCurtime[4]%16;ucCurtime[4]+=number;
break;
case 5:
ucCurtime[3]=number*16+0xf;
break;
case 6:
ucCurtime[3]=ucCurtime[3]-ucCurtime[3]%16;ucCurtime[3]+=number;
break;
case 7:
ucCurtime[2]=number*16+0xf;
break;
case 8:
ucCurtime[2]=ucCurtime[2]-ucCurtime[2]%16;ucCurtime[2]+=number;
break;
case 9:
ucCurtime[1]=number*16+0xf;
break;
case 10:
ucCurtime[1]=ucCurtime[1]-ucCurtime[1]%16;ucCurtime[1]+=number;
break;
case 11:
ucCurtime[0]=number*16+0xf;
break;
case 12:
ucCurtime[0]=ucCurtime[0]-ucCurtime[0]%16;ucCurtime[0]+=number;
break;
case 13:
ucCurtime[5]=number;
break;
default:
break;
}
disp_memu1_set();
}
}
/**********************************************************
* 功能: 累计转换至列表a
**********************************************************/
void accumulative_total_list_a(void)
{ uchar m;
char i;
ulong y;
y=gun1.sum_liter;
for(i=0;i<6;i++)
{
m=y%10;y/=10;
m+=(y%10)*16;y/=10;
table_buf[i+28]=m;
}
//-------------------
y=gun1.sum_sale;
for(i=0;i<6;i++)
{
m=y%10;y/=10;
m+=(y%10)*16;y/=10;
table_buf[i+34]=m;
}
//----------------------
y=gun1.work_liter;
for(i=0;i<6;i++)
{
m=y%10;y/=10;
m+=(y%10)*16;y/=10;
table_buf[i+10]=m;
}
//-------------------
y=gun1.work_sale;
for(i=0;i<6;i++)
{
m=y%10;y/=10;
m+=(y%10)*16;y/=10;
table_buf[i+16]=m;
}
//----------------------
table_buf[52] |=0x06; //读标志
}
/**********************************************************
* 功能: 累计转换至列表b
**********************************************************/
void accumulative_total_list_b(void)
{ uchar m;
char i;
ulong y;
y=gun2.sum_liter;
for(i=0;i<6;i++)
{
m=y%10;y/=10;
m+=(y%10)*16;y/=10;
table_buf[i+28+53]=m;
}
//--------------------
y=gun2.sum_sale;
for(i=0;i<6;i++)
{
m=y%10;y/=10;
m+=(y%10)*16;y/=10;
table_buf[i+34+53]=m;
}
//-------------------
y=gun2.work_liter;
for(i=0;i<6;i++)
{
m=y%10;y/=10;
m+=(y%10)*16;y/=10;
table_buf[i+10+53]=m;
}
//--------------------
y=gun2.work_sale;
for(i=0;i<6;i++)
{
m=y%10;y/=10;
m+=(y%10)*16;y/=10;
table_buf[i+16+53]=m;
}
//-------------------
table_buf[52+53] |=0x06; //读标志
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -