66人参与 • 2024-08-06 • stm32
网上没有找到现成的根据别人写的改编了一个
你的库里没有mode的可以删除
效果
//显示负数、浮点数字
//x,y :起点坐标
//num :要显示的数字
//len :数字的位数
//size:字体大小
//mode:0,反色显示;1,正常显示
//@n,小数点后位数,默认为2
void oled_showfnum(u8 x,u8 y,float num,u8 len,u8 size,u8 mode)
{
u8 t,temp,i=0,m=0,n=2;
u8 enshow=0,pointshow=0;
u16 k;
len--;
if(size==8)m=2;
if(num<0)
{
num=-num;
i=1; //负数标志
}
k=num*oled_pow(10,n); //此处为显示一位小数*10转化为整数,若要显示几位就@我(自己想办法)
for(t=0;t<len;t++)
{
temp=(k/oled_pow(10,len-t-1 ))%10;
if(enshow==0&&t<(len-2))
{
if(temp==0)
{
if(((k/oled_pow(10,len-t-2)%10)!=0)&&(i==1))//判断是否为负数且在最高位前一位
{
oled_showchar(x+(size/2+m)*t,y,'-',size,mode);
i=0; //清除判断后一位的标志
}else
oled_showchar(x+(size/2+m)*t,y,'0',size,mode);//如果没到数字就显示0
continue;
}else enshow=1; //此处是判断是否要显示数字
}
if(t==len-n)//判断是否为最后一位的前一位(显示一位小数)
{
oled_showchar(x+(size/2+m)*t,y,'.',size,mode);
oled_showchar(x+(size/2+m)*(t+1),y,temp+'0',size,mode);
pointshow=1;
continue;
}
if(pointshow==1){
oled_showchar(x+(size/2+m)*(t+1),y,temp+'0',size,mode);
}else
oled_showchar(x+(size/2+m)*t,y,temp+'0',size,mode);
//一位一位显示下去
}
}
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论