⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bujinmain.c

📁 用于测试步进电机
💻 C
📖 第 1 页 / 共 2 页
字号:
/*  ********************************************************  */
#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 + -