📄 bujinmain.c
字号:
/* ******************************************************** */
#include "REG51STC.H"
#include "CMD16887.H"
#include "variable.h"
#include <ABSACC.H>
/********************************************************/
/**************************************************************************
* 功能:清除工作面A加油数据
*
***************************************************************************/
void clear_worka(void)
{ uchar i;
if(state1==0x00 || ration_pulse_a==0){ration_num_a=999999;ration_mode_a=0;calculate_ration(0);}
gun1.liter=0x00; //升
gun1.sale=0x00; //金额
gun1.pulse=0;
jl1s=0;
for(i=40;i<49;i++)
{
table_buf[i]=0;
}
//cgq1s1old=cgq1s1;
//cgq1s2old=cgq1s2;
price_a=0;
if(!cease_power)disp_lcd1(price_a,0x0);
updatea=1;
}
/**************************************************************************
* 功能:清除工作面B加油数据 [ok]
*
***************************************************************************/
void clear_workb(void)
{ uchar i;
if(state2==0x00 || ration_pulse_b==0){ration_num_b=999999;ration_mode_b=0;calculate_ration(1);}
gun2.liter=0x00; //升
gun2.sale=0x00; //金额
gun2.pulse=0;
jl2s=0;
for(i=40+53;i<49+53;i++)
{
table_buf[i]=0;
}
//cgq1s2old=cgq2s1;
//cgq2s2old=cgq2s2;
if(!cease_power)disp_lcd2(price_b,0x0);
updateb=1;
}
/*****************************************************************************
*
*功能:系统上电初始化
; BOUD=57600,由定时器1产生
*****************************************************************************/
void InitializeSystem(void)
{ uchar i;
for(i=0;i<106;i++)
{
table_buf[i]=0;
}
Get1302(); //上电读时间,便于打印
k1spk_time=0;
keyinput_a=0;
hang_cnt1=0;hang_cnt2=0;
jl1s=0;
jl2s=0;
//oil_types_a=1; //油枪a的油类别
timer_time=20;
time_seccnt=20;
prn1time=0;
prn2time=0;
TMOD&=0x0f;
TMOD|=0x12;
PCON|=0x80;
//SCON=0xf0; /* MODEL --3,REN=1,SM2=1 */
TH1=0xB1;
TL1=0xE0; //fdh--波特率19200 fah--9600,均为单倍速时 d0,e8
TR1=1;
TH0=0x05;
TL0=0x05;
isp_err=0;
RCAP2H=0xfb;
RCAP2L=0x1e;
TH2=RCAP2H;
TL2=RCAP2L;
T2CON=0x00;
TCON=0x01;
ration_a=0;
ration_b=0;
ration_mode_a=0; //1--a枪为定升加油 0--a枪为定元加油模式
ration_mode_b=0; //1--a枪为定升加油 0--a枪为定元加油模式
vip_mode_a=0;
vip_mode_b=0;
/************************/
// AUXR |=0x02;
// cmdmem=XBYTE[TQJLADD];
// AUXR &=0xfd;
/************************/
clear_worka();
clear_workb();
state1=0;state2=0;
keya_num[0]=0x7e;
keya_num[1]=0x00;
keya_num[2]=0x00;
keya_num[3]=0x00;
keya_num[4]=0x00;
keyb_num[0]=0x7e;
keyb_num[1]=0x00;
keyb_num[2]=0x00;
keyb_num[3]=0x00;
keyb_num[4]=0x00;
save_oka=0;idle_numa=0;
save_okb=0;idle_numb=0;
printformat_saveok=0;
TR2=1;
TR0=1;
TR1=1;
IE=0xAB;
EX0=1;
IP=0x00;
PT2=1;
electromotor=0;
}
/***************************************************************************
* 中断0:外部中断0
****************************************************************************/
void int_int0(void) interrupt 0 using 1
{ cease_power=1;
}
/***************************************************************************
* 功能:读计量脉冲--中断内调用
****************************************************************************/
void read_input(void)
{
uchar data mem_inn; //做堆栈用--AUXR
bit bittemp=0;
mem_inn=AUXR; //做堆栈用
AUXR |=0x02;
cmdmem=XBYTE[TQJLADD];
AUXR &=0xfd;
//--------------------------
if(cgq1s1 && !cgq1s1old)jl1s++;
cgq1s1old=cgq1s1;
if(cgq1s2 && !cgq1s2old)jl1s++;
cgq1s2old=cgq1s2;
///////////////////
if(cgq2s1old && !cgq2s1)jl2s++;
cgq2s1old=cgq2s1;
if(cgq2s2old && !cgq2s2)jl2s++;
cgq2s2old=cgq2s2;
//--------------------------------
AUXR=mem_inn; //做堆栈用 //AUXR &=0xfd;
}
/***************************************************************************
* 功能:读计量脉冲--中断内调用1
****************************************************************************/
void read_input1(void)
{
uchar data mem_inn; //做堆栈用--AUXR
bit bittemp=0;
mem_inn=AUXR; //做堆栈用
AUXR |=0x02;
cmdmem=XBYTE[TQJLADD];
AUXR &=0xfd;
//--------------------------
if(cgq1s1 && !cgq1s1old)jl1s++;
cgq1s1old=cgq1s1;
if(cgq1s2 && !cgq1s2old)jl1s++;
cgq1s2old=cgq1s2;
///////////////////
if(cgq2s1old && !cgq2s1)jl2s++;
cgq2s1old=cgq2s1;
if(cgq2s2old && !cgq2s2)jl2s++;
cgq2s2old=cgq2s2;
//--------------------------------
AUXR=mem_inn; //做堆栈用 //AUXR &=0xfd;
}
/***************************************************************************
* 中断1:定时器0 12T时2mS中断一次
****************************************************************************/
void int_timer0(void) interrupt 1 using 1
{
/*union
{
uchar c[2];
uint x;
}yy;
TR0=0;
yy.c[0]=TH0;
yy.c[1]=TL0;
yy.x+=0xfe70;
if(yy.x<0xfe70)yy.x=0xfff0;
TH0=yy.c[0];
TL0=yy.c[1];
TR0=1;*/
scanfkey=1;
read_input();
}
/***************************************************************************
* 中断3:定时器1 12M/12T时20mS中断一次
****************************************************************************/
void int_timer1(void) interrupt 3 using 1
{
uchar data mem_inn; //做堆栈用--AUXR
TH1=0x63;
TL1=0xC0;
mem_inn=AUXR;
AUXR &=0xfd;
dispkeyok=1;
disp_key();
read_input1(); //读计量脉冲
if (k1spk_time==100 || k1spk_time==50 || k1spk_time==20) k1spk=0; //打开蜂鸣器1
if (k1spk_time==60 || k1spk_time==30 || k1spk_time==0) k1spk=1; //关闭蜂鸣器1
if (k1spk_time>0) k1spk_time--;
if (k1spk_time==0) k1spk=1;
/****************************/
if (k2spk_time==110 || k2spk_time==50 || k2spk_time==20) k2spk=0; //打开蜂鸣器1
if (k2spk_time==60 || k2spk_time==30 || k2spk_time==0) k2spk=1; //关闭蜂鸣器1
if (k2spk_time>0) k2spk_time--;
if (k2spk_time==0) k2spk=1;
//-------------------
read_input1(); //读计量脉冲
//-----------------------
timesec++;
if(timesec==50)ration_mode_a=1;
if(timesec==100) //秒
{ timesec=0;dispprn_a=1;ration_mode_a=1;
if(disp_floor_level_a>(gun1.pulse+4))disp_floor_level_a-=4;
if(disp_floor_level_b>(gun2.pulse+4))disp_floor_level_b-=4;
if(prn1time>0)prn1time--;
if(state1==4 && menu1==4 && temp_mema==4) temp_mema=0;
if(state2==4 && menu2==4 && temp_memb==4) temp_memb=0;
//------------------- 临时时间继电器
//time_temp_delay--;
//if(time_temp_delay>9) time_temp_delay=9;
//if(time_temp_delay==5)dely1=1;
//if(time_temp_delay==0){dely1=0;time_temp_delay=9;}
//-------------------
}
read_input1(); //读计量脉冲
if(mcstoptime_a>0)mcstoptime_a--;
if(mcstoptime_b>0)mcstoptime_b--;
update_worka=1;update_workb=1;
if(hang_time1!=0) hang_time1--; //挂枪延时
if(hang_time2!=0) hang_time2--; //挂枪延时
AUXR=mem_inn;
}
/*****************************************************************************
* 功能:串行中断,接收上位机数据
*****************************************************************************/
void seri_int (void) interrupt 4 using 2
{ uchar data mem_inn; //做堆栈用--AUXR
//uchar data i;
//uchar data rece_data;
uchar data verify=0;
mem_inn=AUXR; //做堆栈用
AUXR &=0xfd;
AUXR=mem_inn; //做堆栈用
}
/***************************************************************************
* 中断5:定时器2 12T时:可调时间中断1次
****************************************************************************/
void int_timer2(void) interrupt 5 using 3
{ uchar data mem_inn; //做堆栈用--AUXR
TF2=0;
TXD=hlow;
if(electromotor){hlow=~hlow;}
mem_inn=AUXR;
AUXR &=0xfd;
if(runsum>0 && !hlow)runsum--;
if(runsum==0 && electromotor && !hlow)
{ runsum=400;price_a++; //price_a为圏数
//gun1.sale+=modehl_a;
if(price_a==1)
{ if(gun1.pulse>70)modehl_a=100;
if(gun2.pulse>70)modehl_b=100;
}
if(cmdstop && runf.x<63300 ){cmdstop=0;electromotor=0;} //停机 12M时为64500
if(price_a>=price_b) cmdstop=1;
}
RCAP2H=runf.c[0];
RCAP2L=runf.c[1];
if(!cmdstop && runf.x<increment_b && !hlow){runf.x++;runf.x++;} //加速
if(cmdstop && runf.x>63000 && !hlow){runf.x--;runf.x--;} //减速
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -