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

來源:互聯網
上載者:User
  μc/GUI學習筆記之三文本顯示與數值顯示 3.1      文本顯示 3.1.1   顯示支援控制字元

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

圖3.1  顯示支援的ASCII控制字元

字元

C字元

功能

LF

\n

分行符號。當前的文本顯示位置更改到下一行。類似於C語言中的換行

CR

\r

類似於C語言的斷行符號。不換行,僅斷行符號,X座標設定為0

3.1.2   文本顯示API

主要的文本顯示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函數主要可分為幾類:單個字元的顯示、換行、字串的普通顯示、矩形框內的字串顯示。附加的功能是設計顯示對齊、文本樣式。 3.1.3   文字模式的選擇 1.   支援四種文字模式

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

l  GUI_TEXTMODE_REVERSE:反轉模式,顯示的文本顏色將反轉;前景色彩與背景色反轉;

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

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

l  GUI_TEXTMODE_XOR:異或模式。

註:這個暫不清楚功能如何。 2.   文字模式相關API

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。

註:文本樣式,有意思。 3.1.4   文本對齊:

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中的靠左對齊與置中對齊效果。 3.1.5   當前文本位置:

每個任務都對應著一個文本位置,位置相對於視窗的(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)。

註:我覺得這裡的文本顯示位置應該是相對於的使用中視窗而言,不是相對於整個液晶屏。當輸入一個字元時,顯示的起始位置對應於字模映像的左上方的座標。 3.1.6   視窗的完全與部分清除

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

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

程式清單3.1文本顯示測試程式

 

#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_SetColor(GUI_RED);

                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 );

                }

} 3.2      數值顯示API 3.2.1   十進位數顯示支援

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個字元長度。支援加號或減號顯示。 3.2.2   浮點數顯示支援:

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。 3.2.3   位元顯示支援:

l  void GUI_DispBin(U32 v, U8 Len):

l  void DispBinAt(U32 v, I16P y, I16P x, U8 Len)。 3.2.4   十六進位數顯示支援

l  void GUI_DispHex(U32 v, U8 Len):

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

註:沒有附加的“0x”字串顯示,且不支援正負符號顯示。 3.2.5   測試程式

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

#include "gui.h"

 

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_DispNextLine();

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

    GUI_DispNextLine();

 

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

    GUI_DispNextLine();

    GUI_DispDecMin( 54 );          

    GUI_DispNextLine();

 

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

    GUI_DispNextLine();

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

    GUI_DispNextLine();

 

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

 

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

    GUI_DispNextLine();

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

    GUI_DispNextLine();

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

    GUI_DispNextLine();

 

    /* ---------- 位元顯示支援 ---------------*/

    GUI_DispBin( 0xfe, 8 );

    GUI_DispNextLine();

 

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

    GUI_DispHex( 0xfe, 4 );

    GUI_DispNextLine();

 

    while( 1 )

    {

        GUI_Delay( 100 );

    }

}

 

By:lstzixing

Mail:blievethink@gmail.com

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

2010-5-7

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.