• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

在LCD1602显示从MPU6050中读取的数据的问题

470772643@qq.com 2017-08-13 浏览量:1608

下列程序中,请问为什么要将从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); //启始列,行,显示数组,显示长度  (实参为数组,形参为指针)
}

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 这里是这样一个意思,64等于2的6次方,除以64相当于右移六位。这样做确实相当于直接丢掉后六位数据,

    mpu6050读取的数据是16位的,但是你那个1602只能显示10位数据,所以只能这样做,不然数据就不匹配了,相对来说舍弃低位的数据比舍弃高位的数据要好,因为舍弃低位数据仅仅是那个数据的精度下降而已

    • 发布于 2017-08-14
    • 举报
    • 评论 0
    • 1
    • 0

其他答案 数量:6
  • 1602是可以輸出16個字元的

    您應該是有其他文字輸出需求會占用

    所以才取高10位後6位捨棄的作法

    以上


    • 发布于2017-08-14
    • 举报
    • 评论 0
    • 2
    • 0

  • 这个程序的确是把后六位舍弃了,value/64这个就是舍弃后六位的意思,如果楼主不想舍弃后六位的话,就把value/64注释掉就行了。

    • 发布于2017-08-13
    • 举报
    • 评论 0
    • 1
    • 0

  • 从程序上来看,第三个语句DisplayListChar(x,y,dis,4);,这里显示长度是4个长度,而十位数据的大小为最大1024,感觉像是为了兼顾显示,让其只显示4位数字,所以做了让数值小于1024的操作。

    另外value/=64等效于value除以64等效于value>>=6,在单片机中,做2的n次方乘除法运算,最好用移位运算,不要用乘除运算。

    • 发布于2017-08-14
    • 举报
    • 评论 0
    • 1
    • 0

  • 的确是舍弃了,强行把一个16位精度的传感器给当10位精度传感器用。当然这个数据用作显示,也只能是让显示的数据波动没那么厉害。
    • 发布于2017-08-14
    • 举报
    • 评论 0
    • 1
    • 0

  • 精度转换,高精度转换为低精度需要右移多的位数,低精度转换为高精度需要左移少的位数。
    • 发布于2018-01-31
    • 举报
    • 评论 1
    • 0
    • 0
电子老工程师 回复了  :0402B104K160NT FH/广东风华高科 回复

相关问题

问题达人换一批

在LCD1602显示从MPU6050中读取的数据的问题