拿来主义并不好,我也是刚好这几天在做这个OLED(SH1106驱动)显示,然后也是上网找,书本翻,烧录上百次才理解这个函数,从不仿真,那太坑人了
//========================================================================================
void Display_oled_double(unsigned char Page,unsigned char Start_SEG,double dat) //显示一个双精度浮点数据
{
char k[12]; //这里不能加code限定符,否则计算不正确
unsigned char a;
sprintf(k,"%.2f",dat);//dat是一个浮点数,可以其它类型,unsigned char unsigned long int.......都行,无所谓的,2f是取两个小数点后面的数1.00这样
for(a=0;k[a]!='\0';a++)//这个是检测字符串有没有结束,C语言字符是以'\0'为结尾的
{
Display_oled_Shuzi_1(Page,Start_SEG,k[a]); //这是显示函数,你自己写
Start_SEG=Start_SEG+8;
}
}
sprintf实际上是把bat分解成字符串,然后分别存放在数组 k中,一个地址存放一个字符串.k的长度10个左右就差不多了
比如:bat为:12.345
那么,sprintf执行之后
K的0地址为"1"
1地址为"2"
2地址为"."
3地址为"3"
4地址为"4"
后面的"5"就没有了,因为"%.2f"指定小数点后面只有两位数,你也可以试下"%.5f"看一下是什么样子的
记住,数组里存放的是字符串,不是字符!!!!!!
所以,0地址的值实际上是1在ASCII中的值:49
这个函数会自动处理负号和小数点,最后会以'\0'结束,检测有没有'\0'就可以了
|