BasicMath.c 2.17 KB
#include "includes.h"
#include "hardware.h"
#include "all_value.h"




void VaIndexB_W(u8 * VA,u8 Index,u8 TF)//单字节置位函数
{
	if (TF){*VA|=(1<<Index);} else{*VA&=~(1<<Index);}
 }

u8 VaIndexB_R(u8 * VA,u8 Index)//单字节读取某位函数
{
	return (*VA>>Index)&0x01;
 }

void VaIndexDW_W(int * VA,u8 Index,u8 TF)//4字节置位函数
{
	if (TF){*VA|=(1<<Index);} else{*VA&=~(1<<Index);}
 }

u8 VaIndexDW_R(int * VA,u8 Index)//4字节读取某位函数
{
	return (*VA>>Index)&0x01;
 }

 
u8 Sum_Crc(u8*Addr,u8 Leng,u8 SumInit)//求数组和
{ 
	u8 i;
	u8 Sum;
	Sum=SumInit;
	for(i=0;i<Leng;i++)Sum+=Addr[i];
	return Sum;
}

u8 XOR_Crc(u8*Buffer,u8 Leng,u8 CrcInit)//数据异或
{
	u8 Crc=0;
	u8 i;
	Crc=CrcInit;
	for(i=0;i<Leng;i++)
	{
		Crc^=Buffer[i];
	}
	return Crc;
}

u8 NOT(u8 Va)//0-1取反函数
{ 
	if (Va)return 0;
	else return 1;
}

u8 UnSame_Campare(u8*Buf1,u8*Buf2,u8 Leng)//比较是否有不相同,有返回1
{
	u8 i;
	u8 End=0;
	for(i=0;i<Leng;i++)
	{
		if( (*(Buf1+i)) != (*(Buf2+i)) )//
		{ End=1;
			break;
		 }
	}
	return End;
}

void AngDeal(float*Ang)//角度过滤处理
{
		if( (*Ang)>=360)*Ang-=360.0f;
		else if( (*Ang)<0)*Ang+=360.0f;	
}


/*********************************************************************************
函数名:Flash 
功能:闪烁
参数:
返回:0/1。
实现方法:
编程:pcy
日期:2021-12-07
*********************************************************************************/

 u8 TIM4_Flash1Nums;//同周期性闪烁定时变量
 u8 TIM4_Flash2Nums;//闪烁几次定时计时变量
 u8 TIM4_Flash3Nums;
 u8 TIM4_Flash4Nums;
 u8 Out_Flash3=0;//快闪烁
 u8 Out_Flash4=0;//慢闪烁
u8 Flash(u8 Tms)//同周期性闪烁
{
	static u8 Q=0;
	if (TIM4_Flash1Nums>=Tms){Q=~Q;TIM4_Flash1Nums=0;}		
	if (TIM4_Flash3Nums>=35){Out_Flash3=~Out_Flash3;TIM4_Flash3Nums=0;}	
	if (TIM4_Flash4Nums>=80){Out_Flash4=~Out_Flash4;TIM4_Flash4Nums=0;}	
	

	return Q;
}

u8 Flash2(u8 ClkNums,u8 Tms)//闪烁函数2
{
	static u8 Q=0;	
	static u8 WaitEn=0;	
	static u8 Qold=0;
	static u8 TNums=0;

	if (TIM4_Flash2Nums>=Tms&&WaitEn==0){Q=~Q;TIM4_Flash2Nums=0;}
	if (ClkNums>0) 
	{ if (Q<Qold){TNums++;}
		Qold=Q;
		if (TNums>=ClkNums){TNums=0;WaitEn=1;Q=0;} 
		if (TIM4_Flash2Nums>=150&&WaitEn==1){WaitEn=0;Q=0;TIM4_Flash2Nums=0;}
	}
	else{WaitEn=0;TNums=0;Qold=0;}
		
	return Q;
}