📄 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 startup(uint number)
{
if(!electromotor && state1==0)
{ clear_worka(); clear_workb();
if(increment_a<200) increment_a=200;
if(increment_a>500) increment_a=500;
calrev(); //根据转速计算定时器值
if(increment_b>=63036)runf.x=63036; //12M时为64286
else runf.x=increment_b;
RCAP2L=runf.x%256;
RCAP2H=runf.x/256;
runsum=400;
cmdstop=0;
if(increment_a>235)price_b=number-2; //12M时为:235
else price_b=number-1;
hlow=0;
startbujin=1;
electromotor=1;
modehl_a=60;modehl_b=60;
}
}
/**************************************************
*功能:设置转速0-9
**************************************************/
void setb_rev(uchar number)
{
if(state1==3)
{if(ration_num_a<3){save_ok=1;increment_a=increment_a*10+number;ration_num_a++;disp_rev();}}
else
{ if(number==0)number=10;
startup(number*10);
}
}
/************************************************
*功能:根据转速计算定时器值
* 步进:细分2 每输入400个脉冲转动一圏
*************************************************/
void calrev(void)
{
increment_b=300000/increment_a; //increment_a为转速 r/min 12M/6T为150000 24M/6T为:300000
increment_b=65536-increment_b;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -