|
void main(void)
{
unsigned int OverCounter = 0;
unsigned char ptemp;
bit OverFlg = 0;
unsigned int temp,ppress = 0;
float press;
while(1)
{
getdata=Adc0832(0);//這個(gè)是一個(gè)函數(shù)。這個(gè)是寫內(nèi)存函數(shù)。應(yīng)該能在主函數(shù)外或者include包含的文件里找到實(shí)現(xiàn)。應(yīng)該是從A/D轉(zhuǎn)換器得到數(shù)據(jù),然后賦值給getdata
if(14<getdata<243) //當(dāng)壓力值介于15kpa到115kpa之間時(shí),遵循線性變換
{
//下面三行是根據(jù)y=(115-15)/(243-13)*X+15kpa 這個(gè)公式處理數(shù)據(jù)。本來(lái)補(bǔ)償值是15,后來(lái)應(yīng)該是實(shí)測(cè)的時(shí)候?yàn)?.3 。得到的值應(yīng)該是車的重量
int vary=getdata; //y=(115-15)/(243-13)*X+15kpa
press=((10.0/23.0)*vary)+9.3; //測(cè)試時(shí)補(bǔ)償值為9.3
temp=(int)(press*10); //放大10倍,便于后面的計(jì)算
if(temp != ppress)//如果本次測(cè)到的數(shù)值和上一個(gè)數(shù)值不一致(這里的車應(yīng)該都是不同重量的),則OverFlg置1,表示有一輛新車開到測(cè)量?jī)x器上(可能是地磅之類的)
{
ppress = temp;
OverFlg = 1;
}
//下面5行是進(jìn)行數(shù)值處理,然后顯示。顯示值為三位數(shù)+以為小數(shù)
dispbuf[3]=temp/1000; //取壓力值百位
dispbuf[2]=(temp%1000)/100; //取壓力值十位
dispbuf[1]=((temp%1000)%100)/10; //取壓力值個(gè)位
dispbuf[0]=((temp%1000)%100)%10; //取壓力值十分位
display();//顯示函數(shù)。這個(gè)是寫內(nèi)存函數(shù)。應(yīng)該能在主函數(shù)外或者include包含的文件里找到實(shí)現(xiàn)。
//以下為判斷是否為車通過(guò)。(上面的實(shí)際重量press乘以10)也就是如果重量大于10(單位就要以實(shí)際為準(zhǔn)了),并且本次稱重和上一次稱重有變化(就是上面的OverFlg=1),
//那么就判斷通過(guò)的是車,然后累計(jì)總共過(guò)去了幾輛車OverCounter,并將累計(jì)數(shù)寫入到存儲(chǔ)器W24C04ADD里面。
if (temp > 100)
{
if(OverFlg == 1) //如果是新的一輛車通過(guò)
{
OverCounter++;
WIICByte(W24C04ADD,0x01,(OverCounter/0xff)); //低位 //寫入內(nèi)存低位(一個(gè)位應(yīng)該是8bit的) 這個(gè)是寫內(nèi)存函數(shù)。應(yīng)該能在主函數(shù)外或者include包含的文件里找到實(shí)現(xiàn)。
WIICByte(W24C04ADD,0x02,(OverCounter%0xff)); //高位 //寫入內(nèi)存高位(一個(gè)位應(yīng)該是8bit的)
// ptemp = printf("%f\n",OverCounter);
OverFlg = 0; //清除標(biāo)志 //累計(jì)后OverFlg重置。
}
}
}
}
} |
評(píng)分
-
查看全部評(píng)分
|