下列程序中,请问为什么要将从MPU6050中读取的16位数据变成10位?这样不是将后6位数据都丢失了吗?
//在1602上显示10位数据//**************************************void Display10BitData(int value,uchar x,uchar y){ value/=64; //转换为10位数据 lcd_printf(dis, value); //转换数据显示 DisplayListChar(x,y,dis,4); //启始列,行,显示数组,显示长度 (实参为数组,形参为指针)}
这里是这样一个意思,64等于2的6次方,除以64相当于右移六位。这样做确实相当于直接丢掉后六位数据,
mpu6050读取的数据是16位的,但是你那个1602只能显示10位数据,所以只能这样做,不然数据就不匹配了,相对来说舍弃低位的数据比舍弃高位的数据要好,因为舍弃低位数据仅仅是那个数据的精度下降而已
1602是可以輸出16個字元的
您應該是有其他文字輸出需求會占用
所以才取高10位後6位捨棄的作法
以上
从程序上来看,第三个语句DisplayListChar(x,y,dis,4);,这里显示长度是4个长度,而十位数据的大小为最大1024,感觉像是为了兼顾显示,让其只显示4位数字,所以做了让数值小于1024的操作。
另外value/=64等效于value除以64等效于value>>=6,在单片机中,做2的n次方乘除法运算,最好用移位运算,不要用乘除运算。