zoukankan      html  css  js  c++  java
  • 【第3版emWin教程】第13章 emWin6.x数值显示

    教程不断更新中:http://www.armbbs.cn/forum.php?mod=viewthread&tid=98429

    第13章       emWin6.x数值显示

    本章节为大家讲解emWin的数值显示,含二进制,十进制,十六进制和浮点数值的显示,这些函数的调用相对比较容易,但是调用时,要了解这些函数的使用注意事项。

    学习本章节,务必保证已经学习了第9章或者第10章以及第11章。本章节提供的模拟器演示代码都是可以在模拟器上面运行的,使用方法是将SWIPELIST_Demo.c文件里面的所有内容删掉并将本章节提供的代码复制到SWIPELIST_Demo.c文件即可运行。

    13.1  初学者重要提示

    13.2  显示十进制数值

    13.3  显示十六进制和二进制数值

    13.4  显示浮点数值

    13.5  总结

     

     

    13.1 初学者重要提示

    •   就当前的使用经验来说,数值显示函数在项目中使用不太方便,主要是因为数值显示函数要注意的事项较多,每次使用都需要查看不同函数的不同注意事项。大部分情况下,我们都是使用C标准库中的sprintf函数将数值转换成字符串,然后通过上个章节讲解的文本显示函数来显示。这种方式简单好用,实际项目中比较推荐。
    •   数值显示的所有API函数在emWin手册中都有讲解,下图是中文版手册里面API函数的位置

     

    下图是是英文版手册里面API函数的位置:

     

    •   数值显示涉及到的函数较多,初学者不需要将这些函数都掌握,会使用几个常用的函数即可。以后项目中需要用到其它函数功能了,再查阅emWin手册并了解其用法后实际测试即可。
    •   数值显示就是一些API函数的调用,没有多深的技术需要掌握,对于这一点,初学者要明白。
    •   如果时间充裕,可以自行在模拟器上面测试几个教程中没有用到的函数练练手。

    13.2 显示十进制数值

    13.2.1   函数GUI_DispDec()

    函数原型:  

    void GUI_DispDec(I32 v,    /* 数值 */
    U8 Len)   /* 数值的位数 */

    函数描述:

    函数GUI_DispDec用于显示十进制数值。

    •   第1个参数是要显示的数值,范围是32位有符号数,最小值-2^31,最大值2^31 – 1。
    •   第2个参数是要显示数值的位数,如果是负数的话,前面的负号也算在内。

    使用这个函数要注意以下问题:

    1. 使用此函数时,数值的首位不能是0,是0的话显示会出现错误。显示负数的话,负号也要算在数值位数里面。
    2. 设置的数值位数大于实际显示的数值位数,前面会补0。
    3. 设置的数值位数小于实际显示的数值位数,会出现错误。

    使用举例:

    在emWin模拟器上面运行如下代码:

    #include "GUI.h"
    
    void MainTask(void) 
    {
        /* 初始化 */
        GUI_Init();
        
        /* 设置数值显示字体 */
        GUI_SetFont(&GUI_Font24B_ASCII);
    
        GUI_GotoXY(0, 0);
        GUI_DispDec(-123, 4); 
        
        GUI_GotoXY(0, 30);
        GUI_DispDec(012, 4); 
        
        GUI_GotoXY(0, 60);
        GUI_DispDec(1234, 7);  
        
        /* 设置的显示位数为2,小于实际的数值位数,导致错误,所以未显示 */
        GUI_GotoXY(0, 90);
        GUI_DispDec(1234, 2);
    
        while (1)
        {
            GUI_Delay(10);
        }
    }

    实际显示效果如下:

     

    13.2.2   函数GUI_DispDecAt()

    函数原型:  

    void GUI_DispDecAt(I32 v,  /* 数值 */
    I16P x, /* x坐标位置 */
    I16P y, /* y坐标位置 */
    U8 Len);/* 数值的位数 */

    函数描述:

    函数GUI_DispDecAt用于显示十进制数值,相比函数GUI_DispDec的区别就是可以设置数值的显示位置。

    •   第1个参数是要显示的数值,范围是32位有符号数,最小值-2^31,最大值2^31 – 1。
    •   第2个参数是数值显示X坐标位置。
    •   第3个参数是数值显示Y坐标位置。
    •   第4个参数是要显示数值的位数,如果是负数的话,前面的负号也算在内。

    使用这个函数要注意以下问题:

    1. 使用此函数时,数值的首位不能是0,是0的话显示会出现错误。显示负数的话,负号也要算在数值位数里面。
    2. 设置的数值位数大于实际显示的数值位数,前面会补0。
    3. 设置的数值位数小于实际显示的数值位数,会出现错误。

    使用举例:

    在emWin模拟器上面运行如下代码:

    #include "GUI.h"
    
    void MainTask(void) 
    {
        /* 初始化 */
        GUI_Init();
        
        /* 设置数值显示字体 */
        GUI_SetFont(&GUI_Font24B_ASCII);
    
        GUI_DispDecAt(-123, 0, 0,  5);                  
        GUI_DispDecAt(045,  0, 30, 3);
        GUI_DispDecAt(345,  0, 60, 5); 
    
        /* 设置的显示位数为2,小于实际的数值位数,导致错误,所以未显示 */
        GUI_DispDecAt(345,  0, 90, 2);
    
        while (1)
        {
            GUI_Delay(10);
        }
    }

    实际显示效果如下:

     

    13.2.3   函数GUI_DispDecMin()

    函数原型:  

    void GUI_DispDecMin(I32 v); /* 要显示的数值 */

    函数描述:

    函数GUI_DispDecMin用于显示十进制数值,使用时不需要指定显示的位数。

    •   第1个参数是要显示的数值,范围是32位有符号数,最小值-2^31,最大值2^31 – 1。

    使用这个函数要注意以下问题:

    1. 使用这个函数不需要指定长度,会自动的使用最少的位数显示,如果显示数值的位数不一样,使用这个函数是无法对齐显示的。
    2. 这个函数的参数首位也不可以是0,是0的话也会出现错位。

    使用举例:

    在emWin模拟器上面运行如下代码:

    #include "GUI.h"
    
    void MainTask(void) 
    {
        /* 初始化 */
        GUI_Init();
        
        /* 设置数值显示字体 */
        GUI_SetFont(&GUI_Font24B_ASCII);
    
        GUI_GotoXY(0, 0);                                                  
        GUI_DispDecMin(-33232); 
        
        GUI_GotoXY(0, 30);                                                                             
        GUI_DispDecMin(0032);
        
        GUI_GotoXY(0, 60);  
        GUI_DispDecMin(00330);    
        
        GUI_GotoXY(0, 90);                                                                             
        GUI_DispDecMin(5980);
    
        while (1)
        {
            GUI_Delay(10);
        }
    }

    实际显示效果如下:

     

    13.2.4   函数GUI_DispDecShift()

    函数原型:  

    void GUI_DispDecShift(I32 v,    /* 数值 */
    U8 Len,   /* 数值的位数 */
    U8 Shift); /* 小数点右侧显示的位数 */

    函数描述:

    函数GUI_DispDecShift用于显示十进制数值,支持带小数点显示,且小数点位置可调整。

    •   第1个参数是要显示的数值,范围是32位有符号数,最小值-2^31,最大值2^31 – 1。
    •   第2个参数是要显示数值的位数,最大可以填10。
    •   第3个参数设置小数点右侧显示的位数。

    使用这个函数要注意以下问题:

    1. 使用此函数时,数值的首位不能是0,是0的话显示会出现错误。负号和小数点都要算在数值位数内,最大可以显示9个字符出来。
    2. 设置的数值位数大于实际显示的数值位数,前面会补0。
    3. 设置的数值位数小于实际显示的数值位数,会出现错误。

    使用举例:

    在emWin模拟器上面运行如下代码:

    #include "GUI.h"
    
    void MainTask(void) 
    {
        /* 初始化 */
        GUI_Init();
        
        /* 设置数值显示字体 */
        GUI_SetFont(&GUI_Font24B_ASCII);
    
        GUI_GotoXY(0,0);
        /* 由于设置了显示位数是4,而实际的显示12.34,即5个字符,
           使用错误,导致此选项没有显示出来。
        */
        GUI_DispDecShift(1234,4,2); 
        
        GUI_GotoXY(0,30);
        GUI_DispDecShift(01234,6,2); 
        
        GUI_GotoXY(0,60);
        GUI_DispDecShift(-1234,6,2);
        
        GUI_GotoXY(0,90);
        GUI_DispDecShift(1234,5,2); 
    
        GUI_GotoXY(0,120);
        /* 由于设置了显示位数是9,而实际的显示1234567.89,即10个字符,
           使用错误,导致此选项没有显示出来。
        */
        GUI_DispDecShift(123456789,9,2);
        
        GUI_GotoXY(0,150);
        GUI_DispDecShift(12345678,9,2);
               
    
        while (1)
        {
            GUI_Delay(10);
        }
    }

    实际显示效果如下:

     

    13.2.5   函数GUI_DispSDec()

    函数原型:  

    void GUI_DispSDec(I32 v,    /* 数值 */
    U8 Len);  /* 数值的位数 */

    函数描述:

    函数GUI_DispSDec用于显示十进制数值,类似GUI_DispDec,区别是不管是正数还是负数,都带符号。

    •   第1个参数是要显示的数值,范围是32位有符号数,最小值-2^31,最大值2^31 – 1。
    •   第2个参数是要显示数值的位数,不管是正数还是负数,符号都算在内。

    使用这个函数要注意以下问题:

    1. 使用此函数时,数值的首位不能是0,是0的话显示会出现错误。
    2. 设置的数值位数大于实际显示的数值位数,前面会补0。
    3. 设置的数值位数小于实际显示的数值位数,会出现错误。

    使用举例:

    在emWin模拟器上面运行如下代码:

    #include "GUI.h"
    
    void MainTask(void) 
    {
        /* 初始化 */
        GUI_Init();
        
        /* 设置数值显示字体 */
        GUI_SetFont(&GUI_Font24B_ASCII);
    
        GUI_GotoXY(0, 0);
        GUI_DispSDec(-1234, 6);
        
        GUI_GotoXY(0, 30);
        GUI_DispSDec(1234, 5); 
        
        /* 设置的数值位数3, 小于实际显示的数值位数,导致显示错误 */
        GUI_GotoXY(0, 60);
        GUI_DispSDec(1234, 3);
    
        GUI_GotoXY(0, 90);                             
        GUI_DispSDec(0234, 5);
    
        while (1)
        {
            GUI_Delay(10);
        }
    }

    实际显示效果如下:

     

    13.2.6   函数GUI_DispSDecShift()

    函数原型:  

    void GUI_DispSDecShift(I32 v,    /* 数值 */
    U8 Len,   /* 数值的位数 */
    U8 Shift); /* 小数点右侧显示的位数 */

    函数描述:

    函数GUI_DispSDecShift用于显示十进制数值,类似GUI_DispDecShift,区别是不管是正数还是负数,都带符号。

    •   第1个参数是要显示的数值,范围是32位有符号数,最小值-2^31,最大值2^31 – 1。
    •   第2个参数是要显示数值的位数,最大可以填10。
    •   第3个参数设置小数点右侧显示的位数。

    使用这个函数要注意以下问题:

    1. 使用此函数时,数值的首位不能是0,是0的话显示会出现错误。正号,负号和小数点都要算在数值位数内,最大可以显示9个字符出来。
    2. 设置的数值位数大于实际显示的数值位数,前面会补0。
    3. 设置的数值位数小于实际显示的数值位数,会出现错误。

    使用举例:

    在emWin模拟器上面运行如下代码:

    #include "GUI.h"
    
    void MainTask(void) 
    {
        /* 初始化 */
        GUI_Init();
        
        /* 设置数值显示字体 */
        GUI_SetFont(&GUI_Font24B_ASCII);
    
        GUI_GotoXY(0, 0);
        GUI_DispSDecShift(02345, 7, 3);
        
        GUI_GotoXY(0, 30);
        GUI_DispSDecShift(345, 6, 2);
    
        /* 设置的数值位数3, 小于实际显示的数值位数,导致显示错误 */
        GUI_GotoXY(0, 60);
        GUI_DispSDecShift(12345, 3, 3);
    
        GUI_GotoXY(0, 90);
        GUI_DispSDecShift(-1234, 6, 3);
    
        while (1)
        {
            GUI_Delay(10);
        }
    }

    实际显示效果如下:

     

    13.3 显示十六进制和二进制数值

    二进制和十六进制主要有以下四个函数,相对比较简单。

    •   void GUI_DispBin(U32 v, U8 Len);

    显示二进制数值,设置的显示位数大于实际的数值位数,前面补零,小于的话,设置的位数是多少个就显示几个。

    •   void DispBinAt(U32 v, I16P y, I16P x, U8 Len);

    支持设置二进制数的显示坐标位置,设置的显示位数大于实际的数值位数,前面补零,小于的话,设置的位数是多少个就显示几个。

    •   void GUI_DispHex(U32 v, U8 Len);

    显示十六进制数值,设置的显示位数大于实际的数值位数,前面补零,小于的话,设置的位数是多少个就显示几个。

    •   void GUI_DispHexAt(U32 v, I16P x, I16P y, U8 Len);

    支持设置二进制数的显示坐标位置,设置的显示位数大于实际的数值位数,前面补零,小于的话,设置的位数是多少个就显示几个。

    ---------------------------------------------------------------------------------------------------------

    在emWin模拟器上面运行如下代码:

    #include "GUI.h"
    
    void MainTask(void) 
    {
        /* 初始化 */
        GUI_Init();
        
        /* 设置数值显示字体 */
        GUI_SetFont(&GUI_Font24B_ASCII);
    
        /* 设置显示数值 */
        GUI_GotoXY(0,140);
        GUI_DispBin(0x08,8);    
        GUI_GotoX(100);
        GUI_DispBin(0x88,9);       
        GUI_GotoX(200);
        GUI_DispBin(0x08,6);
        GUI_GotoX(300);
        GUI_DispBin(0x08,2);
    
        GUI_DispBinAt(0x55,0,160,8);
        GUI_DispBinAt(0x55,100,160,7);  
        GUI_DispBinAt(0x05,200,160,4);  
        GUI_DispBinAt(0x05,300,160,16);
    ;
        while (1)
        {
            GUI_Delay(10);
        }
    }

    实际显示效果如下:

     

    13.4 显示浮点数值

    浮点数值显示主要有以下五个函数:

    •   void GUI_DispFloat(float v, char Len);

    浮点数值显示,要显示的浮点数前面不可以是0,浮点数的小数点也要算在显示位数里面,如果要显示的浮点数是负数,负号也是要显示出来的。

    •   void GUI_DispFloatFix (float v, char Len, char Decs);

    浮点数值显示,与函数GUI_DispFloat的区别是支持设置小数点后面数值的位数,其余相同。

    •   void GUI_DispFloatMin(float f, char Fract);

    浮点数值显示,与函数GUI_DispFloat的区别是支持设置显示最少的字符数,其余相同。

    •   void GUI_DispSFloatFix(float v, char Len, char Decs);

    浮点数值显示,与函数GUI_DispFloat的区别是支持设置小数点后面数值的位数,且不管是显示正数还是显示负数,都带符号位,其余相同。

    •   void GUI_DispSFloatMin(float f, char Fract);

    浮点数值显示,与函数GUI_DispFloat的区别是支持设置显示最少的字符数,且不管是显示正数还是显示负数,都带符号位,其余相同。

    ---------------------------------------------------------------------------------------------------------

    在emWin模拟器上面运行如下代码:

    #include "GUI.h"
    
    void MainTask(void) 
    {
        float f = 123.45678f; 
    
        /* 初始化 */
        GUI_Init();
        
        /* 设置数值显示字体 */
        GUI_SetFont(&GUI_Font8x8);
    
        /* 设置显示数值 */
        GUI_Clear();
        GUI_DispStringAt("GUI_DispFloat:
    ",0,0);
    
        GUI_DispFloat (f,9);
        GUI_GotoX(100);
        GUI_DispFloat (-f,9);
        GUI_DispStringAt("GUI_DispFloatFix:
    ",0,20);
        GUI_DispFloatFix (f,9,2);
        GUI_GotoX(100);
        GUI_DispFloatFix (-f,9,2);
        GUI_DispStringAt("GUI_DispSFloatFix:
    ",0,40);
        GUI_DispSFloatFix (f,9,2);
        GUI_GotoX(100);
        GUI_DispSFloatFix (-f,9,2);
        GUI_DispStringAt("GUI_DispFloatMin:
    ",0,60);
        GUI_DispFloatMin (f,3);
        GUI_GotoX(100);
        GUI_DispFloatMin (-f,3);
        GUI_DispStringAt("GUI_DispSFloatMin:
    ",0,80);
        GUI_DispSFloatMin (f,3);
        GUI_GotoX(100);
        GUI_DispSFloatMin (-f,3);
        GUI_SetFont(&GUI_Font6x8);
        GUI_DispStringAt("Press any key",0, 240-8);
        ;
        while (1)
        {
            GUI_Delay(10);
        }
    }

    实际显示效果如下:

     

    13.5 总结

    数值显示就为大家讲解这么多,数值显示属于emWin的基本功能,初学者要多练练这些相关的函数,实践出真知。如果觉得这些函数用起来不顺手,就使用sprintf函数配合文本函数显示即可,简单好用。

    微信公众号:armfly_com 安富莱论坛:www.armbbs.cn 安富莱淘宝:https://armfly.taobao.com
  • 相关阅读:
    ubuntu 安装 redis desktop manager
    ubuntu 升级内核
    Ubuntu 内核升级,导致无法正常启动
    spring mvc 上传文件,但是接收到文件后发现文件变大,且文件打不开(multipartfile)
    angular5 open modal
    POJ 1426 Find the Multiple(二维DP)
    POJ 3093 Margritas
    POJ 3260 The Fewest Coins
    POJ 1837 Balance(二维DP)
    POJ 1337 A Lazy Worker
  • 原文地址:https://www.cnblogs.com/armfly/p/14923239.html
Copyright © 2011-2022 走看看