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

📄 other.c

📁 用于测试步进电机
💻 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 + -