天天看點

μcGUI學習筆記之三文本顯示與數值顯示μc/GUI學習筆記之三文本顯示與數值顯示

文本顯示支援的ASCII字元如圖3.1。

字元

C字元

功能

LF

\n

換行符。目前的文本顯示位置更改到下一行。類似于C語言中的換行

CR

\r

類似于C語言的回車。不換行,僅回車,X坐标設定為0

主要的文本顯示API如下:

l  void GUI_DispChar(U16 c):在目前視窗的目前的文本位置使用目前字型顯示一個字元;如果字型不支援,則不會顯示;

l  void GUI_DispCharAt(U16 c, I16P x, I16P y):在目前視窗的指定文本位置使用目前字型顯示一個字元;如果字型不支援,則不會顯示。指定的坐标為顯示的字元的左上角坐标;

l  void GUI_DispChars(U16 c, int Cnt):在目前視窗的目前的文本位置使用目前字型顯示Cnt個同一字元;如果字型不支援,則不會顯示;

l  void GUI_DispNextLine(void):移動光标至下一行行首,相當于換行;

l  void GUI_DispString(const char GUI_FAR *s):在目前視窗的目前的文本位置使用目前字型顯示一個字元串,可支援’\n’控制字元;如果字型不支援,則不會顯示;

l  void GUI_DispStringLen(const char GUI_FAR *s, int Len); 在目前視窗的目前的文本位置使用目前字型顯示一個字元;如果字型不支援,則不會顯示.如果字元串長度較短,以空格填充,否則将隻顯示一部分;

l  void GUI_DispStringAt(const char GUI_FAR *s, int x, int y):在目前視窗的指定的文本位置使用目前字型顯示一個字元串,可支援’\n’控制字元;如果字型不支援,則不會顯示;

l  GUI_DispStringAtCEOL():顯示字元串,并清除至顯示串尾至對應行行末的顯示内容;

l  void GUI_DispStringHCenterAt(const char GUI_FAR *s, int x, int y): 在目前視窗的以(x,y)為橫向居中的位置用目前字型顯示一個字元串(文本居中顯示);如果字型不支援,則不會顯示;

l  void GUI_DispStringInRect(const char GUI_FAR *s, const GUI_RECT *pRect, int Align):在在目前視窗中指定的矩形框内以目前字型顯示一個字元串.。坐标的基準為字元串中部位置。對齊方式Align可選值為:

u  GUI_TA_TOP, GUI_TA_BOTTOM, GUI_TA_VCENTER for vertical alignment.;

u  GUI_TA_LEFT, GUI_TA_RIGHT, GUI_TA_HCENTER for horizontal alignment。

選擇在矩形框内的對齊方式。如果矩形框太小,則有可能無法顯示所有内容。

l  void GUI_DispStringInRectEx(const char GUI_UNI_PTR *s,GUI_RECT* pRect,int TextAlign,int MaxLen,const GUI_ROTATION * pLCD_Api); 在在目前視窗中指定的矩形框内以目前字型顯示一個字元串.MaxLen-最大字元串長度。pLCD_Api取值GUI_ROTATE_0,GUI_ROTATE_CCW順時針旋轉90度。

注:上面的API函數主要可分為幾類:單個字元的顯示、換行、字元串的普通顯示、矩形框内的字元串顯示。附加的功能是設計顯示對齊方式、文本樣式。

l  GUI_TEXTMODE_NORMAL:普通文本模式,寫入文本将覆寫原有LCD上的點;

l  GUI_TEXTMODE_REVERSE:反轉模式,顯示的文本顔色将反轉;前景色與背景色反轉;

注:這個暫不清楚功能如何。

l  GUI_TEXTMODE_TRANS:透明模式,寫入文本将在原有的圖形頂層顯示;

l  GUI_TEXTMODE_XOR:異或模式。

l  int GUI_GetTextMode(void):擷取顯示的文本模式;

l  int GUI_SetTextMode(int TextMode):設定顯示的文本模式;

l  char GUI_SetTextStyle(char Style):設定顯示的文本樣式,主要樣式有:

n  GUI_TS_NORMAL;

n  GUI_TS_UNDERLINE;

n  GUI_TS_STRIKETHRU;

n  GUI_TS_OVERLINE。

注:文本樣式,有意思!

l  int GUI_GetTextAlign(void):擷取文本對齊方式;

l  int GUI_SetTextAlign(int TextAlign):設定文本的對齊方式;主要對齊方式:

n  GUI_TA_LEFT-GUI_TA_HCENTER-GUI_TA_RIGHT;

n  GUI_TA_TOP-GUI_TA_VCENTER-GUI_TA_BOTTOM。

l  void GUI_SetLBorder(int x):設定顯示的左邊距。

注:這個應該是設定了變量,然後在調用顯示函數時使用。對齊方式應該是用于顯示函數參數包含指定坐标的函數,如GUI_DispStringAt()。相應的坐标指定顯示對齊用的基準坐标。見程式清單3.1中的左對齊與居中對齊效果。

每個任務都對應着一個文本位置,位置相對于視窗的(0,0)坐标而言。用于決定輸出文本的目前位置。

l  char GUI_GotoXY(int x, int y);

l  char GUI_GotoX(int x);

l  char GUI_GotoY(int y);

l  int GUI_GetDispPosX(void);

l  int GUI_GetDispPosY(void)。

注:我覺得這裡的文本顯示位置應該是相對于的活動視窗而言,不是相對于整個液晶屏。當輸入一個字元時,顯示的起始位置對應于字模圖像的左上角的坐标。

l  void GUI_Clear(void):清除目前視窗。如果沒有指定目前視窗,則清除整個螢幕;

l  void GUI_DispCEOL(void):從目前視窗的目前位置以目前字型的高度清除文本至目前行行尾。

#include "gui.h"

void         MainTask( void )

{

                GUI_RECT rect = { 0, 50, 10, 250 };

                GUI_Init();             

                GUI_DispChars( 'C', 20 );                      /* 顯示20個字元C                                               */

                GUI_DispNextLine();                                             /* 換行                                                    */

                GUI_DispChars( 'D', 10 );                      /* 顯示10個字元D                                              */

                GUI_DispString( "Hello, uc/GUI\n" );

                GUI_DispStringLen("Hello,uc/GUI\n", 7 );           /* 顯示指定長度的字元                        */

                GUI_DispStringHCenterAt( "Hello,uc/GUI!", 0, 0 ); /* 文本居中位置顯示                       */

                GUI_SetTextStyle( GUI_TS_UNDERLINE | GUI_TS_OVERLINE );/* 設定文本樣式   */

                GUI_DispStringInRect( "Hello,uc/GUI!", &rect, GUI_TA_HCENTER );

                /* ------------------------ 文本串顯示------------------------------ */

                GUI_SetTextAlign( GUI_TA_HCENTER );                         /* 居中對齊                            */

                GUI_DispStringAt( "GUI_TA_HCENTER!!!", 10, 100 );

                GUI_SetTextAlign( GUI_TA_LEFT );                  /* 左對齊                                                */

                GUI_DispStringAt( "GUI_TA_LEFT!!!", 0, 200 );             

                GUI_SetColor(GUI_RED);

                GUI_DrawLine(80, 10, 240, 90);

                GUI_DrawLine(80, 90, 240, 10);

                GUI_SetBkColor(GUI_BLACK);

                GUI_SetTextMode(GUI_TM_NORMAL);                           /* 普通顯示                            */

                GUI_DispStringHCenterAt("GUI_TM_NORMAL" , 160, 10);

                GUI_SetTextMode(GUI_TM_REV);

                GUI_DispStringHCenterAt("GUI_TM_REV" , 160, 26);

                GUI_SetTextMode(GUI_TM_TRANS);                               /* 透明顯示                            */

                GUI_DispStringHCenterAt("GUI_TM_TRANS" , 160, 42);

                GUI_SetTextMode(GUI_TM_XOR);

                GUI_DispStringHCenterAt("GUI_TM_XOR" , 160, 58);

                GUI_SetTextMode(GUI_TM_TRANS | GUI_TM_REV);

                GUI_DispStringHCenterAt("GUI_TM_TRANS | GUI_TM_REV", 160, 74);   

                while( 1 )

                {

                                GUI_Delay( 100 );

                }

}

l  void GUI_DispDec(I32 v, U8 Len):顯示十進制數,最大長度為9;如果數為負數,則顯示時會添加負号。若實際的長度小于Len,則顯示時将填0被充;

l  void GUI_DispDecAt(I32 v, I16P x, I16P y, U8 Len):在指定位置顯示十進制數,同GUI_DispDec();

l  void GUI_DispDecMin(I32 v); 以最小長度的串顯示一個十進制數;

l  void GUI_DispDecShift(I32 v, U8 Len, U8 Shift):指定從右邊起有多少位表示小數部分。Len指定顯示的串的長度;

l  void DispDecSpace(I32 v, U8 MaxDigits);

l  void GUI_DispSDec(I32 v, U8 Len):顯示有符号十進制數;同GUI_DispDec(),但是總是包含+/-符号;

l  void GUI_DispSDecShift(I32 v, U8 Len, U8 Shift)。

注:如果需要指定len,若len較長,則顯示将以空格或字元0補空;如len較小,則顯示可能會出現不正确。使用GUI_DispDecMin()自動決定顯示多長。Shift用于移位,本來是顯示整數的,但現在可顯示小數。最大支援顯示9個字元長度。支援正負号顯示。

l  void GUI_DispFloat(float v, char Len):顯示符點數,小數點符号計入顯示的符号數;

l  void GUI_DispFloatFix (float v, char Len, char Decs):顯示浮點數,len-總長;Decs小數部分的位數;

l  void GUI_DispFloatMin(float f, char Fract):如果Fract值為負,則添加負号。Fract顯示最少用的字元長度,并不是必需,實際顯示時會根據需要選擇最小值;

l  void GUI_DispSFloatFix(float v, char Len, char Decs):

l  void GUI_DispSFloatMin(float f, char Fract);指定顯示的小數部分位數;總是在顯示值前面顯示+/-符号。

注:部分同上。但顯示時是在後面補0。

l  void GUI_DispBin(U32 v, U8 Len):

l  void DispBinAt(U32 v, I16P y, I16P x, U8 Len)。

l  void GUI_DispHex(U32 v, U8 Len):

l  void GUI_DispHexAt(U32 v, I16P x, I16P y, U8 Len)。

注:沒有附加的“0x”字元串顯示,且不支援正負符号顯示。

程式清單3.2  數值顯示測試程式

void    MainTask( void )

    GUI_RECT rect = { 0, 50, 10, 250 };

    GUI_Init();

    /* ---------- 十進制顯示支援 ---------------*/

    GUI_DispString("Disp Dec:\n");

    GUI_DispDec( -32, 9 );              /* 顯示負号,以零補空  */

    GUI_DispNextLine();

    GUI_DispDec( 56, 9 );               /* 不顯正号,以零補空  */

    GUI_DispDec( 51, 1 );               /* 不顯正号,以零補空  */

    GUI_DispDecMin( -32 );              /* 最小數量顯示        */

    GUI_DispDecMin( 54 );          

    GUI_DispDecShift( -3212, 8, 1 );      /* 1位小數             */

    GUI_DispDecShift( -3212, 8, 2 );      /* 2位小數             */

    GUI_DispDecSpace( -3212, 9 );       /* 以空格補空          */

    /* ---------- 浮點數顯示支援 ---------------*/

    GUI_DispFloat( -3.1232, 9 );        /* 普通浮點顯示支援     */

    GUI_DispFloatFix( -3.14159, 9, 2 );  /* 最大9個字元,2個小數部分*/

    /* ---------- 二進制數顯示支援 ---------------*/

    GUI_DispBin( 0xfe, 8 );

    /* ---------- 十六進制數顯示支援 ---------------*/

    GUI_DispHex( 0xfe, 4 );

    while( 1 )

    {

        GUI_Delay( 100 );

    }

By:lstzixing

Mail:[email protected]

Blog:http://blog.ednchina.com/lstzixing

2010-5-7

繼續閱讀