标题:
不知道这个单片机代码的含义,烦大佬解答
[打印本页]
作者:
嘻嘻哈123
时间:
2020-6-14 10:08
标题:
不知道这个单片机代码的含义,烦大佬解答
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);
if(14<getdata<243) //当压力值介于15kpa到115kpa之间时,遵循线性变换
{
int vary=getdata; //y=(115-15)/(243-13)*X+15kpa
press=((10.0/23.0)*vary)+9.3; //测试时补偿值为9.3
temp=(int)(press*10); //放大10倍,便于后面的计算
if(temp != ppress)
{
ppress = temp;
OverFlg = 1;
}
dispbuf[3]=temp/1000; //取压力值百位
dispbuf[2]=(temp%1000)/100; //取压力值十位
dispbuf[1]=((temp%1000)%100)/10; //取压力值个位
dispbuf[0]=((temp%1000)%100)%10; //取压力值十分位
display();
if (temp > 100)
{
if(OverFlg == 1) //如果是新的一辆车通过
{
OverCounter++;
WIICByte(W24C04ADD,0x01,(OverCounter/0xff)); //低位
WIICByte(W24C04ADD,0x02,(OverCounter%0xff)); //高位
// ptemp = printf("%f\n",OverCounter);
OverFlg = 0; //清除标志
}
}
}
}
}
是个小白,不能再白了,请大佬帮看看,讲解下代码含义,谢谢啦
作者:
左眼
时间:
2020-6-14 17:36
用了模数转换模块,建议你从基础学,不要贪快,早晚你都会的。
作者:
larrychen
时间:
2020-6-14 22:13
你用了ADC0832 D/A转换芯片,
作者:
幻剑心
时间:
2020-6-15 00:09
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);//这个是一个函数。这个是写内存函数。应该能在主函数外或者include包含的文件里找到实现。应该是从A/D转换器得到数据,然后赋值给getdata
if(14<getdata<243) //当压力值介于15kpa到115kpa之间时,遵循线性变换
{
//下面三行是根据y=(115-15)/(243-13)*X+15kpa 这个公式处理数据。本来补偿值是15,后来应该是实测的时候为9.3 。得到的值应该是车的重量
int vary=getdata; //y=(115-15)/(243-13)*X+15kpa
press=((10.0/23.0)*vary)+9.3; //测试时补偿值为9.3
temp=(int)(press*10); //放大10倍,便于后面的计算
if(temp != ppress)//如果本次测到的数值和上一个数值不一致(这里的车应该都是不同重量的),则OverFlg置1,表示有一辆新车开到测量仪器上(可能是地磅之类的)
{
ppress = temp;
OverFlg = 1;
}
//下面5行是进行数值处理,然后显示。显示值为三位数+以为小数
dispbuf[3]=temp/1000; //取压力值百位
dispbuf[2]=(temp%1000)/100; //取压力值十位
dispbuf[1]=((temp%1000)%100)/10; //取压力值个位
dispbuf[0]=((temp%1000)%100)%10; //取压力值十分位
display();//显示函数。这个是写内存函数。应该能在主函数外或者include包含的文件里找到实现。
//以下为判断是否为车通过。(上面的实际重量press乘以10)也就是如果重量大于10(单位就要以实际为准了),并且本次称重和上一次称重有变化(就是上面的OverFlg=1),
//那么就判断通过的是车,然后累计总共过去了几辆车OverCounter,并将累计数写入到存储器W24C04ADD里面。
if (temp > 100)
{
if(OverFlg == 1) //如果是新的一辆车通过
{
OverCounter++;
WIICByte(W24C04ADD,0x01,(OverCounter/0xff)); //低位 //写入内存低位(一个位应该是8bit的) 这个是写内存函数。应该能在主函数外或者include包含的文件里找到实现。
WIICByte(W24C04ADD,0x02,(OverCounter%0xff)); //高位 //写入内存高位(一个位应该是8bit的)
// ptemp = printf("%f\n",OverCounter);
OverFlg = 0; //清除标志 //累计后OverFlg重置。
}
}
}
}
}
作者:
xieyebao1995
时间:
2020-6-15 08:53
数模转换,学一下模电的基础部分。
作者:
f556
时间:
2020-6-15 09:01
Adc0832测压力,显示,IIC写24C04eeprom
作者:
wufeng391
时间:
2020-6-17 22:15
怎么说呢,你飞的有点快,我学到AD用了大概半年的时间,中间还有好多不明白,重来了好多回,现在也只是知道有这么个概念,具体程序也写不出来,还是得慢慢来。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1