📄 k90ti_lcd.c
字号:
INT16U Disp_y = Y;
if(GUIEnFont == En_5x8){
for(i = 0; i < 7; i++){
ImgData = chardot_5x8[i+(AscciiChar-0x20)*8];
Display_Locate(ImgData, X, Disp_y);
Disp_y++;
}
ImgData = 0xFF;//下划线
Display_Locate(ImgData, X, Disp_y);
} else {
for(i = 0; i < 15; i++){
ImgData = chardot_8x16[i+(AscciiChar-0x20)*16];
Display_Locate(ImgData, X, Disp_y);
Disp_y++;
}
ImgData = 0xFF;//下划线
Display_Locate(ImgData, X, Disp_y);
}
}
/*
----------------------------------------------------------------------------------------------
//移动当前Y坐标
----------------------------------------------------------------------------------------------
*/
void GUI_GotoY(INT16U y)
{
if (y > LCD_YSIZE) {
PosY = LCD_YSIZE-1;
} else {
PosY = y;
}
}
/*
----------------------------------------------------------------------------------------------
//移动当前Y坐标
----------------------------------------------------------------------------------------------
*/
void GUI_GotoX(INT16U x)
{
if (x > LCD_X_BYTE_SIZE) {
PosX = LCD_X_BYTE_SIZE;
} else {
PosX = x;
}
}
/*
*****************************************************************************
* GUI_GotoXY - 系统光标移动到指定位置
* DESCRIPTION: -
*
* @Param y:Y轴坐标
* @Param x:X轴坐标
* @Return :
* ----
*****************************************************************************
*/
void GUI_GotoXY(INT16U x,INT16U y)
{
GUI_GotoX(x);
GUI_GotoY(y);
}
//设置背景颜色
void GUI_SetBkColor(GUI_COLOR Color)
{
BkColor = Color;
}
//设置前景颜色
void GUI_SetColor(GUI_COLOR Color)
{
FgColor = Color;
}
/*
*****************************************************************************
* GUI_SetTextMode - 设置文字显示模式
* DESCRIPTION: -
*
* @Param TextMode:模式代码
* @Return :模式代码
* ----
*****************************************************************************
*/
INT8U GUI_SetTextMode(INT8U TextMode)
{
GUITextMode = TextMode;
return GUITextMode;
}
/*
*****************************************************************************
* GUI_SetEnFont - 设置显示的英文字体
* DESCRIPTION: -
* 目前支持两种字体8x16 5x8
* @Param EnFont:字体代码
* @Return :
* ----
*****************************************************************************
*/
void GUI_SetEnFont(INT8U EnFont)
{
if (EnFont == En_5x8){
GUIEnFont = En_5x8;
Char_XSIZE = En_5x8_XSIZE;
Char_YSIZE = En_5x8_YSIZE;
} else {
GUIEnFont = En_8x16;
Char_XSIZE = En_8x16_XSIZE;
Char_YSIZE = En_8x16_YSIZE;
}
}
void GUI_SetFontZoom(INT8U ZoomMode)
{
GUIZoomMode = ZoomMode;
if(GUIZoomMode == GUI_TEXTMODE_ZOOMx1){
if (GUIEnFont == En_5x8){
Char_XSIZE = En_5x8_XSIZE;
Char_YSIZE = En_5x8_YSIZE;
} else if (GUIEnFont == En_8x16){
Char_XSIZE = En_8x16_XSIZE;
Char_YSIZE = En_8x16_YSIZE;
}
Chinese_XSIZE = _Chinese_XSIZE_;
Chinese_YSIZE = _Chinese_YSIZE_;
}else{
if (GUIEnFont == En_5x8){
Char_XSIZE = 2*En_5x8_XSIZE;
Char_YSIZE = 2*En_5x8_YSIZE;
} else if (GUIEnFont == En_8x16){
Char_XSIZE = 2*En_8x16_XSIZE;
Char_YSIZE = 2*En_8x16_YSIZE;
}
Chinese_XSIZE = 2*_Chinese_XSIZE_;
Chinese_YSIZE = 2*_Chinese_YSIZE_;
}
}
/*
*****************************************************************************
* GUI_DispCharAt - 指定位置显示一个ASCII码
* DESCRIPTION: - 字体使用是系统设定的字体
*
* @Param x:X轴坐标
* @Param y:Y轴坐标
* @Param c:ASCII码
* @Return :
* ----
*****************************************************************************
*/
void GUI_DispCharAt(INT8U AscciiChar, INT16U x, INT16U y)
{
switch (GUITextMode) {
case GUI_TEXTMODE_NORMAL :
Display_ASCII(AscciiChar, x, y);
break;
case GUI_TEXTMODE_REVERSE :
Display_InvASCII(AscciiChar, x, y);
break;
case GUI_TEXTMODE_UNDERLINE :
Display_ASCII_UnderLine(AscciiChar, x, y);
break;
default :
break;
}
}
/*
----------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------
*/
#if 1
void GUI_DispChar(INT16U AscciiChar)
{
GUI_DispCharAt(AscciiChar, PosX, PosY);
PosX += 1;
}
#endif
/*
*****************************************************************************
* Display_Chinese - 指定位置显示一个16x16的汉字
* DESCRIPTION: -
*
* @Param x0:X轴坐标0--(192-16)
* @Param y0:Y轴坐标0--(8-2)
* @Param UniCode:汉字内码
* @Return :
* ----
*****************************************************************************
*/
void Display_Chinese(INT16U UniCode, INT16U x0, INT16U y0)
{
INT16U CodeID;
INT8U i, ImgData;
INT16U Disp_y = y0;
// 在字库里搜索汉字
for(CodeID=0; CodeID < hzNum; CodeID++){
// 找到 指定汉字的 Index 后, 跳出循环
if ( (hzIndex[2*CodeID] == UniCode/256) && (hzIndex[2*CodeID+1] == UniCode%256) ){
break;
}else if(CodeID == (hzNum-1)){//未检索到的汉字,显示个"##"提示吧
GUI_DispCharAt('#',x0,y0);
GUI_DispCharAt('#',x0+Char_XSIZE,y0);
return;
}
}
//----------------------------------
switch (GUITextMode) {
case GUI_TEXTMODE_NORMAL :
//-------------------------------------------------------------------------
for(i = 0; i < 16; i++){
ImgData = hzdot[i*2+CodeID*32];
Display_Locate(ImgData, x0, Disp_y);//左边
ImgData = hzdot[i*2+1+CodeID*32];
Display_Locate(ImgData, x0+Chinese_XSIZE/2, Disp_y);//右边
if(GUIZoomMode == GUI_TEXTMODE_ZOOMx1){
Disp_y ++;
}else{
Disp_y += 2;
}
}
//-------------------------------------------------------------------------
break;
case GUI_TEXTMODE_REVERSE :
//-------------------------------------------------------------------------
for(i = 0; i < 16; i++){
ImgData = hzdot[i*2+CodeID*32] ^0xFF;
Display_Locate(ImgData, x0, Disp_y);//左边
ImgData = hzdot[i*2+1+CodeID*32] ^ 0xFF;
Display_Locate(ImgData, x0+1, Disp_y);//右边
Disp_y++;
}
//-------------------------------------------------------------------------
break;
case GUI_TEXTMODE_UNDERLINE :
//-------------------------------------------------------------------------
//-------------------------------------------------------------------------
for(i = 0; i < 15; i++){
ImgData = hzdot[i*2+CodeID*32];
Display_Locate(ImgData, x0, Disp_y);//左边
ImgData = hzdot[i*2+1+CodeID*32];
Display_Locate(ImgData, x0+1, Disp_y);//右边
Disp_y++;
}
//-------------------------------------------------------------------------
ImgData = 0xFF;
Display_Locate(ImgData, x0, Disp_y);
ImgData = 0xFF;
Display_Locate(ImgData, x0+1, Disp_y);
//-------------------------------------------------------------------------
break;
default :
break;
}
}
#if 1
void GUI_DispCEOL(void)
{
INT16U i;
for(i = PosX; i <= LCD_X_BYTE_SIZE-1; i += 1) {
GUI_DispCharAt(' ', i, PosY);
}
}
#endif
/*
*****************************************************************************
* GUI_DispStringAt - 指定位置显示一个字符串
* DESCRIPTION: -
* 支持中英混合 当中英混合时英文字体强制为8x16 如果单单英文 按照设定字体
* @Param x0:X轴坐标
* @Param y0:Y轴坐标
* @Param s:字符串
* @Return :
* ----
*****************************************************************************
*/
//void GUI_DispStringAt(U8 _CONST_ *s,U8 x0,U8 y0)
void GUI_DispStringAt(INT8U _CONST_ *Str,INT16U x0,INT16U y0)
{
INT8U i;
if (NoXY == FALSE){//没有提供坐标,则使用系统坐标
x0 = PosX;
y0 = PosY;
}
i = 0;
// if(GUI_TEXTMODE_ZOOMx2 ==GUIZoomMode){
// x0 = x0/2;
// y0 = y0/2;
// }
while(Str[i]!='\0'){
if (Str[i] < 0x80) {//是ASCII
if(Str[i] == '\n'){
x0 = 0;
y0 += Char_YSIZE;
} else {
if (x0 > (LCD_X_BYTE_SIZE-1)) {//换行
x0 = 0;
y0 += Char_YSIZE;
}
switch (GUITextMode) {
case GUI_TEXTMODE_NORMAL :
Display_ASCII(Str[i], x0, y0);
break;
case GUI_TEXTMODE_REVERSE :
Display_InvASCII(Str[i], x0, y0);
break;
case GUI_TEXTMODE_UNDERLINE :
Display_ASCII_UnderLine(Str[i], x0, y0);
break;
default :
break;
}
x0 += Char_XSIZE;
}
} else {//是中文
if (x0 > LCD_X_BYTE_SIZE-1){
x0 = 0;
y0 += Chinese_YSIZE;
}
Display_Chinese(Str[i]*256+Str[i+1],x0,y0);//中文
i++;
x0 += Chinese_XSIZE;
}
Str++;
}
if (NoXY == FALSE){
PosX = x0;
PosY = y0;
}
}
#if 0
/*
*****************************************************************************
* GUI_DispString - 在当前系统坐标下显示字符串
* DESCRIPTION: -
* 除了坐标不能指定外 功能跟GUI_DispStringAt一致
* @Param s:字符串
* @Return :
* ----
*****************************************************************************
*/
void GUI_DispString(INT8U _CONST_ *Str)
{
NoXY = FALSE;
GUI_DispStringAt(Str,PosX,PosY);
NoXY = TRUE;
}
void GUI_DispStringLen(INT8U _CONST_ *Str, INT16U Len)
{
INT8U i;
i = 0;
while(Str[i]!='\0'){
if (i >= Len ){
return;
}
if (Str[i] < 0x80) {//是ASCII
if(Str[i] == '\n'){
// PosX = 0;
// PosY += 2;
} else {
if (PosX > (LCD_X_BYTE_SIZE-1)) {//换行
PosX = 0;
// PosY += 2;
}
switch (GUITextMode) {
case GUI_TEXTMODE_NORMAL :
Display_ASCII(Str[i], PosX, PosY);
break;
case GUI_TEXTMODE_REVERSE :
Display_InvASCII(Str[i], PosX, PosY);
break;
case GUI_TEXTMODE_UNDERLINE :
Display_ASCII_UnderLine(Str[i], PosX, PosY);
break;
default :
break;
}
PosX += 1;
}
} else {//是中文
if (PosX > LCD_X_BYTE_SIZE-1){
PosX = 0;
PosY += Chinese_YSIZE;
}
Display_Chinese(Str[i]*256+Str[i+1],PosX,PosY);//中文
i++;
PosX += Chinese_XSIZE;
}
i++;
}
}
/*
void GUI_DrawCursor(INT16U x, INT16U y)
{
if(GUITextMode == GUI_TEXTMODE_NORMAL){
Display_Locate(0xFF,x,y);
Display_Locate(0xFF,x,y+1);
} else if (GUITextMode == GUI_TEXTMODE_REVERSE){
Display_Locate(0x00,x,y);
Display_Locate(0x00,x,y+1);
} else {
Display_Locate(0xFF,x,y);
Display_Locate(0xFF,x,y+1);
}
}
void GUI_CursorOn(U8 x, U8 y)
{
Display_Locate(0xFF,x,y);
Display_Locate(0xFF,x,y+1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -