文本顯示支援的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