zoukankan      html  css  js  c++  java
  • LCD浮点数显示函数的探讨

    LCD浮点数显示函数的探讨
    原创 2017年12月19日
    
    单片机开放附赠的学习资料里面很少见到显示浮点数的函数,显示浮点数的操作也相当烦坠!
    
    一般转换显示法
    
    拿STM32单片机资源,我们选取ADC采样部分函数来看显示过程
    
            adcx=Get_Adc_Average(ADC_Channel_5,20);
            LCD_ShowxNum(134,130,adcx,4,16,0);   
            temp=(float)adcx*(3.3/4096);          
            adcx=temp;                          
            LCD_ShowxNum(134,150,adcx,1,16,0);    
            temp-=adcx;                         
            temp*=1000;                           
            LCD_ShowxNum(150,150,temp,3,16,0X80); 
            LED0=!LED0;
            delay_ms(250);  
    
    
    
    分别取出整数部分和小数部分,分别显示出来
    
    调整改进
    
    void OLED_ShowFloatNum(u8 x,u8 y,double num,u8 len,u8 size)
    { 
        u32 interger=(u32)num;
        u32 fractional=(u32)((num-interger)*1000);
        u32 x_tmp;
        if(num<0)
        {
            OLED_ShowString(x,y,"Minus!",16);
        }       
        else
        {
            if(interger>=100)
            {
                    x_tmp=x;
                    OLED_ShowNum(x,y,interger,3,size);
            }
            else if(interger>=10&&interger<=99)
            {
                x_tmp=x-8;
                OLED_ShowNum(x,y,interger,2,size);
            }
            else if(interger>=1&&interger<=9)
            {
                x_tmp=x-16;
                OLED_ShowNum(x,y,interger,1,size);
            }
            else
            {
                x_tmp=x-16;
                OLED_ShowNum(x,y,0,1,size);
            }
    
            OLED_ShowChar(x_tmp+24,y,'.',size,1);
    
            if(fractional>=100)
                OLED_ShowNum(x_tmp+32,y,fractional,3,size);
            else if(fractional>=10&&fractional<=99)
            {
                OLED_ShowNum(x_tmp+40,y,fractional,2,size);
                OLED_ShowChar(x_tmp+32,y,'0',size,1);
            }
            else if(fractional>=1&&fractional<=9)
            {
                OLED_ShowNum(x_tmp+48,y,fractional,1,size);
                OLED_ShowChar(x_tmp+40,y,'0',size,1);
                OLED_ShowChar(x_tmp+32,y,'0',size,1);   
            }
            else
            {
                OLED_ShowChar(x_tmp+32,y,'0',size,1);
                OLED_ShowChar(x_tmp+40,y,'0',size,1);
                OLED_ShowChar(x_tmp+48,y,'0',size,1);
            }
        }
    } 
    
    
    
    另一种直接调用c语言函数sprintf
    
    定义buffer,这里注意添加头文件#include“stdio.h”
    
     adcx=Get_Adc_Average(ADC_Channel_0,10);
     temp=(float)adcx*(3.3/4096);
     sprintf(buffer,"%5.2f",temp);//浮点型数据转为指定格式的字符串
     LCD_ShowString(152,150,200,16,16,buffer); //直接送字符显示函数
  • 相关阅读:
    B. Sorted Adjacent Differences(思维构造)
    C. Yet Another Counting Problem(循环节规律)
    B. Phoenix and Beauty(贪心构造)
    Phoenix and Distribution(字典序贪心)
    D. Almost All Divisors(数学分解因子)
    Mongodb之简介
    web服务版智能语音对话
    图灵机器人
    人工智能之语音
    人工智能
  • 原文地址:https://www.cnblogs.com/bytebee/p/8595287.html
Copyright © 2011-2022 走看看