📄 weight.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 + -