祝大家国庆快乐,玩的开心。
特别说明:pdf版60期emWin教程已经发布:
http://www.armbbs.cn/forum.php?mod=viewthread&tid=2932
armfly-x2,x3,v2,v3,v5开发板裸机和带系统的emWin工程已经全部建立,链接如下:
http://www.armbbs.cn/forum.php?mod=viewthread&tid=1830
本期主要讲数值的显示,整体来说比较的简单,但很适合初学的兄弟看,里面有一些函数的使用
上面需要注意的问题。
我们可以使用字符串和标准C库的函数来显示数值。然而,有时候这会是件困难的事。通常,较
为容易 (也更为有效)的是调用一个例程显示所需结构的数值。emWin支持各种十进制、十六进制
和二进制输出。本章将对这些例程进行逐一描述。所有函数不需要使用浮点库,并对速度和大小进行
了优化。当然“Sprintf”可以用于任何系统。使用本章介绍的例程,有时可以简化操作,节省ROM空
间和执行时间。
本期分为五个小节:
11. 1 显示十进制数值
11. 2 显示十六进制和二进制
11. 3 显示浮点数值
11. 4 实验总结
11. 1 显示十进制数值
GUI_DispDec()
这个要注意的是首位不能是0,是0的话显示会出现错误。
显示负数的话,负号也要算在No. of digits里面,切记,要不也会出错。
设置的No. of digits比实际要显示的字符串大的话,前面会补0。
设置的No. of digits比实际要显示的字符串小的话,会出现错位。[blockquote]
GUI_GotoXY(0,0);
GUI_DispDec(-123,4);
GUI_GotoXY(100,0);
GUI_DispDec(012,4);
GUI_GotoXY(200,0);
GUI_DispDec(1234,7);
GUI_GotoXY(300,0);
GUI_DispDec(1234,2);
[/blockquote]
GUI_DispDecAt()
这个的显示类似上面,只是多了个可以设置显示的坐标。[blockquote]
GUI_DispDecAt(-123,0,20,5);
GUI_DispDecAt(045 ,100,20,3);
GUI_DispDecAt(345 ,200,20,5);
GUI_DispDecAt(345 ,300,20,2);
[/blockquote]
GUI_DispDecMin()
不需要指定长度,自动的用最少的字符显示,如果需要对其方式且显示的个数不一样的话,这个方式不太合适。
这个的首位也不可以是0,是0的话也会出现错位。[blockquote]
GUI_GotoXY(0,40);
GUI_DispDecMin(-33232);
GUI_GotoX(100);
GUI_DispDecMin(0032);
GUI_GotoX(200);
GUI_DispDecMin(00330);
GUI_GotoX(300);
GUI_DispDecMin(5980);
[/blockquote]
GUI_DispDecShift()
首位也不可以是0。
负号和小数点都要算在No. of digits,最大支持9位。
No. of digits设置的大了的话前面要补0。[blockquote]
GUI_GotoXY(0,60);
GUI_DispDecShift(1234,4,2);
GUI_GotoX(100);
GUI_DispDecShift(01234,6,2);
GUI_GotoX(200);
GUI_DispDecShift(-1234,6,2);
GUI_GotoX(300);
GUI_DispDecShift(1234,5,2);
GUI_GotoXY(0,80);
GUI_DispDecShift(123456789,9,2);
GUI_GotoX(200);
GUI_DispDecShift(12345678,9,2);
[/blockquote]
GUI_DispSDec()
类似于GUI_DispDec(),不支持首位是0,不管是正的,还是负的,都要显示负号,而且这个正负号也要算在No. of digits里面。[blockquote]
GUI_GotoXY(0,100);
GUI_DispSDec(-1234,5);
GUI_GotoX(100);
GUI_DispSDec(1234,5);
GUI_GotoX(200);
GUI_DispSDec(1234,3);
GUI_GotoX(300);
GUI_DispSDec(0234,5);
GUI_GotoXY(0,120);
[/blockquote]
GUI_DispSDecShift()
这个是GUI_DispSDec()和GUI_DispDecShift()的合并版,只要注意No. of digits里面要包括正号负号还有小数点。[blockquote]
GUI_DispSDecShift(02345,7,3);
GUI_GotoX(100);
GUI_DispSDecShift(345,6,2);
GUI_GotoX(200);
GUI_DispSDecShift(12345,3,3);
GUI_GotoX(300);
GUI_DispSDecShift(-1234,6,3);
[/blockquote]
总结:用时一定要保证自己设置的No. of digits要大于等于自己实际要显示的。多了的话前面会补零,少了的话就
会出错的,显示一堆9。
11. 2 显示十六进制和二进制
GUI_DispBin()
GUI_DispBinAt()
GUI_DispHex()
GUI_DispHexAt()
这四个差不多,第一个最大支持32位的显示,后面三个中最大支持16位,No. of digits设置的多了的话前
面会补零,少了的话有几个显示几个。[blockquote]
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);[/blockquote]
11. 3 显示浮点数值
关于浮点的ucGUI里面有个很好的说明的例子,我这里直接的贴上[blockquote]float f = 123.45678; GUI_Clear(); GUI_SetFont(&GUI_Font8x8); GUI_DispStringAt("GUI_DispFloat:\n",0,0);
GUI_DispFloat (f,9);GUI_GotoX(100); GUI_DispFloat (-f,9); GUI_DispStringAt("GUI_DispFloatFix:\n",0,20); GUI_DispFloatFix (f,9,2); GUI_GotoX(100); GUI_DispFloatFix (-f,9,2); GUI_DispStringAt("GUI_DispSFloatFix:\n",0,40); GUI_DispSFloatFix (f,9,2); GUI_GotoX(100); GUI_DispSFloatFix (-f,9,2); GUI_DispStringAt("GUI_DispFloatMin:\n",0,60); GUI_DispFloatMin (f,3); GUI_GotoX(100); GUI_DispFloatMin (-f,3); GUI_DispStringAt("GUI_DispSFloatMin:\n",0,80); GUI_DispSFloatMin (f,3); GUI_GotoX(100); GUI_DispSFloatMin (-f,3); GUI_SetFont(&GUI_Font6x8); GUI_DispStringAt(" ress any key",0, 240-8); [/blockquote]
11. 4 实验总结
实验上面的例子都是2年以前写的了,今天找了出来,数值显示方面,大家多多的联系就好。 |