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

📄 weight.c

📁 RM0038红外传感器接收电视机摇控的源码
💻 C
字号:
#include "Weight.h"
#include "CS5460A.h"
#include "Math.h"

#define StateIO StateIO_4
#define m_bStabilization m_bStabilization_4
char bdata StateIO _at_ 0x20;
sbit m_bStabilization = StateIO^0;

#define COUNT_WEIGHT 30
xdata long lWeightList[COUNT_WEIGHT];
xdata uchar listi = 0;
xdata long lWeight = 0;
xdata uchar AvgCount = 0;
xdata long lCountWeight;
xdata long lTemp;
xdata float g_xScale = 30;
//上一次称重值
xdata long g_lPrvWeight = 0;
//零位值
xdata long g_lZero = 0;
//上一个真实重量值,包括零位
xdata long g_lTrueWeight = 0;
bit bZero;

long Weight(void)
{
  	static DWORD dPrvConversionTime = 0;
	uchar i;
	while((GetTickCount() - dPrvConversionTime) < 100);
	{
		dPrvConversionTime = GetTickCount();
		lWeight = GetWeight();

		lWeightList[listi] = lWeight;
		listi++;
		
		if(listi > AvgCount)
		{
			AvgCount = listi;
		}
		if(listi >= COUNT_WEIGHT)
		{
			listi = 0;
		}
		lCountWeight = 0;
		for(i = 0; i < AvgCount; i++)
		{
			lCountWeight += lWeightList[i];
		}
		
		if(AvgCount > 5)
		{
			//去掉一个最大值
			for(i = 0; i < AvgCount; i++)
			{
				if(lWeightList[i] > lTemp)
					lTemp = lWeightList[i];
			}
			if(lWeight == lTemp)//最大值是我
			{
				bZero = 0;
			}
			lCountWeight -= lTemp;
	
			//去掉一个最小值
			for(i = 0; i < AvgCount; i++)
			{
				if(lWeightList[i] < lTemp)
					lTemp = lWeightList[i];
			}
			if(lWeight == lTemp)//最小值是我
			{
				bZero = 0;
			}
			lCountWeight -= lTemp;
			lCountWeight /= (AvgCount - 2);

			m_bStabilization = 1;
		}else
		{
			m_bStabilization = 0;
			lCountWeight /= AvgCount;
		}
		
		if(AvgCount > 3)
		{
			lTemp = (lCountWeight - g_lZero)/g_xScale;
			if((labs(g_lPrvWeight - lTemp) > 5/*uLbbuf[sEprom.uLb]*/))
			{
				lWeightList[0] = lWeight;
				for(i = 1; i < COUNT_WEIGHT; i++)
				{
					lWeightList[i] = 0;
				}
				AvgCount = listi = 1;
			}
			g_lPrvWeight = lTemp;
		}
		g_lTrueWeight = lCountWeight;

		lCountWeight = lCountWeight - g_lZero;
		lCountWeight /= g_xScale;
	}
	return lCountWeight;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -