先上成果

现在就是ip2366实时读取到的电池电压数值。然后下面是示例代码

VBAT_LO_8=IP2366_ReadReg(0x50);         //读取VBAT寄存器高八位,IP2366需要先读取低八位再读取高八位
VBAT_HI_8=IP2366_ReadReg(0x51);         //读取VBAT寄存器高八位
VBAT_HI_8 <<= 8;                        //左移八位准备和低八位合并
READVBAT=VBAT_HI_8+VBAT_LO_8;           //最终读数
uint16_t b = READVBAT/1000;	            //转换成小数点前2位
uint16_t c = (READVBAT%1000)/10;	      //转换成小数点后两位并只保留两位小数
		
OLED_ShowNum(1,1,b,2);                  //OLED显示
OLED_ShowChar(1,3,'.');
OLED_ShowNum(1,4,c,2);

其实最后看着实现非常简单,但是我在写最后输出数据的代码的时候钻了个牛角尖,一开始读取到数据是0x5762,以后转成10进制的话就是22370,实际读出来应该就是22.370V电压,但是我一开始就走错方向了。想的是吧这个整形转换成浮点数然后让OLED直接显示浮点数。但是实际出来的数并不是我想要的。出来的数是22370.00000

然后我就想着能不能写一个函数然后把0x5762放进去然后告诉函数帝第几位和第几位之间加上小数点然后直接生成一个浮点数出来,适配OLED显示浮点数函数,但是并不行,首先反算浮点数就很麻烦,这里放两张浮点数bit定义:

先不说十六进制转换成这样的十六进制浮点数有多大的计算量,其次时这样写非常的麻烦,就算算出来了,实际精度也不高,会有些误差,我这已经是处理好的值,没必要还要算那么多。所以后来捣鼓了好久也没结果就重新思考怎么处理,其实最简单的方法我一直都忽略了,其实就是除一下然后得出除数和余数组合一下显示就好了,所以最后迎刃而解。