你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【安富莱STemWin教程】第7章 STemWin数值显示

[复制链接]
baiyongbin2009 发布时间:2015-1-12 10:56
本帖最后由 baiyongbin2009 于 2015-1-12 11:08 编辑

特别说明:完整STemWin的1-60期教程和配套实例下载地址:链接
第7章      STemWin数值显示

    本期主要讲数值的显示,整体来说比较的简单,但很适合初学者看,有些数值显示函数在使用上要特别注意,刚学的时候最容易在这些函数上犯错误。
    当然,我们可以使用字符串和标准C库的函数来显示数值。然而,有时候这会是件困难的事。通常,较为容易(也更为有效)的是调用一个例程显示所需结构的数值。emWin支持各种十进制、十六进制和二进制输出。本章将对这些例程进行逐一描述。所有函数不需要使用浮点库,并对速度和大小进行了优化,当然“Sprintf”可以用于任何系统。使用本章介绍的例程,有时可以简化操作,节省ROM空间和执行时间。
    7. 1  显示十进制数值
    7. 2  显示十六进制和二进制
    7. 3  显示浮点数值
    7. 4  实验总结
7.1  显示十进制数值

7.1.1      函数GUI_DispDec()
    这个要注意的是首位不能是0,是0的话显示会出现错误。显示负数的话,负号也要算在No. of digits(看英文手册的说明,它的意思是整个数字的个数,包括正负号,如果有小数点的话,还要包括小数点)里面,切记,要不也会出错。
        设置的No.of digits比实际要显示的字符串大的话,前面会补0。
        设置的No.of digits比实际要显示的字符串小的话,会出现错位。
    在STemWin5.24模拟器上面跑如下代码:
  1. #include "GUI.h"

  2. void MainTask(void)
  3. {
  4.      /* 初始化 */
  5.      GUI_Init();
  6.    
  7.      /* 设置数值显示字体 */
  8.      GUI_SetFont(&GUI_Font24B_ASCII);

  9.      /* 设置显示数值 */
  10.      GUI_GotoXY(0,0);
  11.      GUI_DispDec(-123,4);                        
  12.      GUI_GotoXY(100,0);
  13.      GUI_DispDec(012,4);                                 
  14.      GUI_GotoXY(200,0);
  15.      GUI_DispDec(1234,7);                        
  16.      GUI_GotoXY(300,0);
  17.      GUI_DispDec(1234,2);

  18.     while (1)
  19.     {
  20.         GUI_Delay(10);
  21.     }
  22. }
复制代码
实际显示效果如下:
7.1.png

7.1.2      函数GUI_DispDecAt()
    这个的显示类似上面,只是多了个可以设置显示的坐标。
    在STemWin5.24模拟器上面跑如下代码:
  1. #include "GUI.h"

  2. void MainTask(void)
  3. {
  4.      /* 初始化 */
  5.      GUI_Init();
  6.    
  7.      /* 设置数值显示字体 */
  8.      GUI_SetFont(&GUI_Font24B_ASCII);

  9.      /* 设置显示数值 */
  10.      GUI_GotoXY(0,0);
  11.      GUI_DispDecAt(-123,0,20,5);                 
  12.      GUI_DispDecAt(045 ,100,20,3);
  13.      GUI_DispDecAt(345 ,200,20,5);                  
  14.      GUI_DispDecAt(345 ,300,20,2);
  15. ;

  16.     while (1)
  17.     {
  18.         GUI_Delay(10);
  19.     }
  20. }
复制代码
实际显示效果如下:
7.2.png

7.1.3      函数GUI_DispDecMin()
    使用这个函数不需要指定长度,会自动的使用最少的字符显示,如果需要对其方式且显示的个数不一样,这个函数不合适。这个函数的首位也不可以是0,是0的话也会出现错位。
    在STemWin5.24模拟器上面跑如下代码:
  1. #include "GUI.h"

  2. void MainTask(void)
  3. {
  4.      /* 初始化 */
  5.      GUI_Init();
  6.    
  7.      /* 设置数值显示字体 */
  8.      GUI_SetFont(&GUI_Font24B_ASCII);

  9.      /* 设置显示数值 */
  10.      GUI_GotoXY(0,40);                                                
  11.      GUI_DispDecMin(-33232);                                 
  12.      GUI_GotoX(100);                                                                           
  13.      GUI_DispDecMin(0032);                  
  14.      GUI_GotoX(200);                                                                           
  15.      GUI_DispDecMin(00330);               
  16.      GUI_GotoX(260);                                                                           
  17.      GUI_DispDecMin(5980);
  18. ;

  19.     while (1)
  20.     {
  21.         GUI_Delay(10);
  22.     }
  23. }
复制代码
实际显示效果如下:
7.3.png

7.1.4      函数GUI_DispDecShift()
    首位也不可以是0。负号和小数点都要算在No.of digits,最大支持9位。No. of digits设置的大了的话前面要补0。
    在STemWin5.24模拟器上面跑如下代码:
  1. #include "GUI.h"

  2. void MainTask(void)
  3. {
  4.      /* 初始化 */
  5.      GUI_Init();
  6.    
  7.      /* 设置数值显示字体 */
  8.      GUI_SetFont(&GUI_Font24B_ASCII);

  9.      /* 设置显示数值 */
  10.      GUI_GotoXY(0,60);
  11.      GUI_DispDecShift(1234,4,2);               
  12.      GUI_GotoX(100);
  13.      GUI_DispDecShift(01234,6,2);      
  14.      GUI_GotoX(200);
  15.      GUI_DispDecShift(-1234,6,2);      
  16.      GUI_GotoX(300);
  17.      GUI_DispDecShift(1234,5,2);
  18.      GUI_GotoXY(0,80);
  19.      GUI_DispDecShift(123456789,9,2);      
  20.      GUI_GotoX(200);
  21.      GUI_DispDecShift(12345678,9,2);
  22. ;
  23.     while (1)
  24.     {
  25.         GUI_Delay(10);
  26.     }
  27. }
复制代码
实际显示效果如下:
7.4.png

7.1.5      函数GUI_DispSDec()
    类似于GUI_DispDec(),不支持首位是0,不管是正的,还是负的,都要显示负号,而且这个正负号也要算在No. of digits里面。
    在STemWin5.24模拟器上面跑如下代码:
  1. #include "GUI.h"

  2. void MainTask(void)
  3. {
  4.      /* 初始化 */
  5.      GUI_Init();
  6.    
  7.      /* 设置数值显示字体 */
  8.      GUI_SetFont(&GUI_Font24B_ASCII);

  9.      /* 设置显示数值 */
  10.      GUI_GotoXY(0,100);
  11.      GUI_DispSDec(-1234,5);                 
  12.      GUI_GotoX(100);
  13.      GUI_DispSDec(1234,5);                        
  14.      GUI_GotoX(200);
  15.      GUI_DispSDec(1234,3);
  16.      GUI_GotoX(300);                             
  17.      GUI_DispSDec(0234,5);
  18.      GUI_GotoXY(0,120);
  19. ;
  20.     while (1)
  21.     {
  22.         GUI_Delay(10);
  23.     }
  24. }
复制代码
实际显示效果如下:
7.5.png

7.1.6      函数GUI_DispSDecShift()
    这个函数是GUI_DispSDec()和GUI_DispDecShift()的合并版,只要注意No. of digits里面要包括正号负号还有小数点。
    在STemWin5.24模拟器上面跑如下代码:
  1. #include "GUI.h"

  2. void MainTask(void)
  3. {
  4.      /* 初始化 */
  5.      GUI_Init();
  6.    
  7.      /* 设置数值显示字体 */
  8.      GUI_SetFont(&GUI_Font24B_ASCII);

  9.      /* 设置显示数值 */
  10.      GUI_DispSDecShift(02345,7,3);      
  11.      GUI_GotoX(100);
  12.      GUI_DispSDecShift(345,6,2);
  13.      GUI_GotoX(200);
  14.      GUI_DispSDecShift(12345,3,3);
  15.      GUI_GotoX(300);
  16.      GUI_DispSDecShift(-1234,6,3);
  17. ;
  18.     while (1)
  19.     {
  20.         GUI_Delay(10);
  21.     }
  22. }
复制代码
实际显示效果如下:
7.6.png

    总结:用时一定要保证自己设置的No. ofdigits要大于等于自己实际要显示的。多了的话前面会补零,少了的话就会出错的,显示一堆9。



收藏 1 评论4 发布时间:2015-1-12 10:56

举报

4个回答
baiyongbin2009 回答时间:2015-1-12 10:58:35
7.2  显示十六进制数值和二进制
        GUI_DispBin()
        GUI_DispBinAt()
        GUI_DispHex()
        GUI_DispHexAt()
    这四个差不多,第一个最大支持32位的显示,后面三个中最大支持16位,No. of digits设置的多了的话前面会补零,少了的话有几个显示几个。
    在STemWin5.24模拟器上面跑如下代码:
  1. #include "GUI.h"

  2. void MainTask(void)
  3. {
  4.      /* 初始化 */
  5.      GUI_Init();
  6.    
  7.      /* 设置数值显示字体 */
  8.      GUI_SetFont(&GUI_Font24B_ASCII);

  9.      /* 设置显示数值 */
  10.      GUI_GotoXY(0,140);
  11.      GUI_DispBin(0x08,8);   
  12.      GUI_GotoX(100);
  13.      GUI_DispBin(0x88,9);      
  14.      GUI_GotoX(200);
  15.      GUI_DispBin(0x08,6);
  16.      GUI_GotoX(300);
  17.      GUI_DispBin(0x08,2);

  18.      GUI_DispBinAt(0x55,0,160,8);
  19.      GUI_DispBinAt(0x55,100,160,7);
  20.      GUI_DispBinAt(0x05,200,160,4);
  21.      GUI_DispBinAt(0x05,300,160,16);
  22. ;
  23.     while (1)
  24.     {
  25.         GUI_Delay(10);
  26.     }
  27. }
复制代码
实际显示效果如下:
7.7.png


baiyongbin2009 回答时间:2015-1-12 11:00:27
7.3  显示浮点数值
    关于浮点的ucGUI里面有个很好的说明的例子。
    在STemWin5.24模拟器上面跑如下代码:
  1. #include "GUI.h"

  2. void MainTask(void)
  3. {
  4.      float f = 123.45678f;

  5.      /* 初始化 */
  6.      GUI_Init();
  7.    
  8.      /* 设置数值显示字体 */
  9.      GUI_SetFont(&GUI_Font8x8);

  10.      /* 设置显示数值 */
  11.      GUI_Clear();
  12.      GUI_DispStringAt("GUI_DispFloat:\n",0,0);

  13.      GUI_DispFloat (f,9);
  14.      GUI_GotoX(100);
  15.      GUI_DispFloat (-f,9);
  16.      GUI_DispStringAt("GUI_DispFloatFix:\n",0,20);
  17.      GUI_DispFloatFix (f,9,2);
  18.      GUI_GotoX(100);
  19.      GUI_DispFloatFix (-f,9,2);
  20.      GUI_DispStringAt("GUI_DispSFloatFix:\n",0,40);
  21.      GUI_DispSFloatFix (f,9,2);
  22.      GUI_GotoX(100);
  23.      GUI_DispSFloatFix (-f,9,2);
  24.      GUI_DispStringAt("GUI_DispFloatMin:\n",0,60);
  25.      GUI_DispFloatMin (f,3);
  26.      GUI_GotoX(100);
  27.      GUI_DispFloatMin (-f,3);
  28.      GUI_DispStringAt("GUI_DispSFloatMin:\n",0,80);
  29.      GUI_DispSFloatMin (f,3);
  30.      GUI_GotoX(100);
  31.      GUI_DispSFloatMin (-f,3);
  32.      GUI_SetFont(&GUI_Font6x8);
  33.      GUI_DispStringAt("Press any key",0, 240-8);
  34.      ;
  35.     while (1)
  36.     {
  37.         GUI_Delay(10);
  38.     }
  39. }
复制代码
实际显示效果如下:
7.8.png
                              
7.4  实验总结
数值的显示也属于最基本的功能,初学者要多练练这些相关的函数,实践出真知。

shaoziyang 回答时间:2015-1-12 11:05:33
收藏了。
fjjjnk1234 回答时间:2015-1-12 11:12:18
资料不错!学习了

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版