OLED网上的驱动代码还是很多的,但是显示小数的没找着。这里编写了一段可显示3位整数4位小数有符号的代码(以正点原子代码为基础)
//显示9位字符,最高位正负,三位整数,第五位小数点,后四位小数部分
//x,y :起点坐标
//len :数字的位数
//size:字体大小
void OLED_Showdecimal(u8 x,u8 y,float num,u8 len,u8 size2)
{
u8 t,temp,len1,temp1;
float temp2;
u8 enshow=0;
if(num < 0)
{
OLED_ShowChar(x,y,'0'- 3,size2);
num =fabs(num);
}
else
OLED_ShowChar(x,y,' ',size2);//第一位显示符号
temp1 = (int)temp;
temp2 = num - temp1;
len1 = len - 6;//len1为整数部分位数,若显示数位需要扩展,修改该行
OLED_ShowChar(x + size2/2*4,y,'0'- 2,size2);//浮点数的第5位显示小数点
x = x + size2/2;
for(t=0;t<len1;t++)//整数部分的显示
{
temp=(int)((num/oled_pow(10,len1-t-1)))%10;
if(enshow==0&&t<(len1-1))
{
if(temp==0)
{
OLED_ShowChar(x+(size2/2)*t,y,' ',size2);
continue;
}else enshow=1;
}
OLED_ShowChar(x+(size2/2)*t,y,temp+'0',size2);
}
OLED_ShowChar(x+(size2/2)*4,y,((int)(temp2*10)%10) + '0',size2); //小数第一位
OLED_ShowChar(x+(size2/2)*5,y,((int)(temp2*100)%10) + '0',size2); //小数第2位
OLED_ShowChar(x+(size2/2)*6,y,((int)(temp2*1000)%10) + '0',size2); //小数第3位
OLED_ShowChar(x+(size2/2)*7,y,((int)(temp2*10000)%10) + '0',size2); //小数第4位
}
这里提一下
设置列地址高四位的地址,是0,0,0,1,X3,X2,X1,X0..上面图片中是错误的。。。
下面是我截屏的SSD1306官方数据手册里可以得到,D4为1