微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 第7章 STemWin数值显示

第7章 STemWin数值显示

时间:10-02 整理:3721RD 点击:
第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. GUI_SetFont(&GUI_Font24B_ASCII);

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

  17.     while (1)
  18.     {
  19.         GUI_Delay(10);
  20.     }
  21. }

复制代码

实际显示效果如下:



7.1.2 函数GUI_DispDecAt()

      这个的显示类似上面,只是多了个可以设置显示的坐标。

在STemWin5.24模拟器上面跑如下代码:

  1. #include "GUI.h"

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

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

  15.     while (1)
  16.     {
  17.         GUI_Delay(10);
  18.     }
  19. }

复制代码

实际显示效果如下:



7.1.3 函数GUI_DispDecMin()

      使用这个函数不需要指定长度,会自动的使用最少的字符显示,如果需要对其方式且显示的个数不一样,这个函数不合适。这个函数的首位也不可以是0,是0的话也会出现错位。

在STemWin5.24模拟器上面跑如下代码:

  1. #include "GUI.h"

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

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

  18.     while (1)
  19.     {
  20.         GUI_Delay(10);
  21.     }
  22. }

复制代码

实际显示效果如下:



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. GUI_SetFont(&GUI_Font24B_ASCII);

  8. /* 设置显示数值 */
  9. GUI_GotoXY(0,60);
  10. GUI_DispDecShift(1234,4,2);               
  11. GUI_GotoX(100);
  12. GUI_DispDecShift(01234,6,2);      
  13. GUI_GotoX(200);
  14. GUI_DispDecShift(-1234,6,2);        
  15. GUI_GotoX(300);
  16. GUI_DispDecShift(1234,5,2);
  17. GUI_GotoXY(0,80);
  18. GUI_DispDecShift(123456789,9,2);      
  19. GUI_GotoX(200);
  20. GUI_DispDecShift(12345678,9,2);
  21. ;
  22.     while (1)
  23.     {
  24.         GUI_Delay(10);
  25.     }
  26. }

复制代码

实际显示效果如下:



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. GUI_SetFont(&GUI_Font24B_ASCII);

  8. /* 设置显示数值 */
  9. GUI_GotoXY(0,100);
  10. GUI_DispSDec(-1234,5);                  
  11. GUI_GotoX(100);
  12. GUI_DispSDec(1234,5);                        
  13. GUI_GotoX(200);
  14. GUI_DispSDec(1234,3);
  15. GUI_GotoX(300);                              
  16. GUI_DispSDec(0234,5);
  17. GUI_GotoXY(0,120);
  18. ;
  19.     while (1)
  20.     {
  21.         GUI_Delay(10);
  22.     }
  23. }

复制代码

实际显示效果如下:



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. GUI_SetFont(&GUI_Font24B_ASCII);

  8. /* 设置显示数值 */
  9. GUI_DispSDecShift(02345,7,3);      
  10. GUI_GotoX(100);
  11. GUI_DispSDecShift(345,6,2);
  12. GUI_GotoX(200);
  13. GUI_DispSDecShift(12345,3,3);
  14. GUI_GotoX(300);
  15. GUI_DispSDecShift(-1234,6,3);
  16. ;
  17.     while (1)
  18.     {
  19.         GUI_Delay(10);
  20.     }
  21. }

复制代码

实际显示效果如下:



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

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. GUI_SetFont(&GUI_Font24B_ASCII);

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

  17. GUI_DispBinAt(0x55,0,160,8);
  18. GUI_DispBinAt(0x55,100,160,7);  
  19. GUI_DispBinAt(0x05,200,160,4);  
  20. GUI_DispBinAt(0x05,300,160,16);
  21. ;
  22.     while (1)
  23.     {
  24.         GUI_Delay(10);
  25.     }
  26. }

复制代码

实际显示效果如下:



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. GUI_SetFont(&GUI_Font8x8);

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

  12. GUI_DispFloat (f,9);
  13. GUI_GotoX(100);
  14. GUI_DispFloat (-f,9);
  15. GUI_DispStringAt("GUI_DispFloatFix:\n",0,20);
  16. GUI_DispFloatFix (f,9,2);
  17. GUI_GotoX(100);
  18. GUI_DispFloatFix (-f,9,2);
  19. GUI_DispStringAt("GUI_DispSFloatFix:\n",0,40);
  20. GUI_DispSFloatFix (f,9,2);
  21. GUI_GotoX(100);
  22. GUI_DispSFloatFix (-f,9,2);
  23. GUI_DispStringAt("GUI_DispFloatMin:\n",0,60);
  24. GUI_DispFloatMin (f,3);
  25. GUI_GotoX(100);
  26. GUI_DispFloatMin (-f,3);
  27. GUI_DispStringAt("GUI_DispSFloatMin:\n",0,80);
  28. GUI_DispSFloatMin (f,3);
  29. GUI_GotoX(100);
  30. GUI_DispSFloatMin (-f,3);
  31. GUI_SetFont(&GUI_Font6x8);
  32. GUI_DispStringAt("Press any key",0, 240-8);
  33. ;
  34.     while (1)
  35.     {
  36.         GUI_Delay(10);
  37.     }
  38. }

复制代码

实际显示效果如下:



7.4 实验总结

     数值的显示也属于最基本的功能,初学者要多练练这些相关的函数,实践出真知。


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top