📄 ks0108.c
字号:
HZ_X=X;
for(i=8;i<16;i++){
ImgData = chardot_8x16[i+(Char-0x20)*16] ^ 0xFF;
Display_Locate(ImgData, HZ_X, Y + 1);
HZ_X++;
}
}
}
/*
*****************************************************************************
* Display_ASCII_UnderLine - 显示一个带有下划线的ASCII
* DESCRIPTION: -
*
* @Param X:X轴坐标
* @Param Y:Y轴坐标
* @Param Char:ASCII码
* @Return :
* ----
*****************************************************************************
*/
void Display_ASCII_UnderLine(U8 Char, U8 X, U8 Y)
{
//U16 Position;
U8 i, ImgData;
U8 HZ_X = X;
if(GUIEnFont == En_5x8){
Display_Locate(0x80, HZ_X, Y);
HZ_X++;
for(i = 0; i < 5; i++){
ImgData = chardot_5x8[i+(Char-0x20)*5] | 0x80;
Display_Locate(ImgData, HZ_X, Y);
HZ_X++;
}
Display_Locate(0x80, HZ_X, Y);
HZ_X++;
Display_Locate(0x80, HZ_X, Y);
} else {
for(i=0;i<8;i++){
ImgData = chardot_8x16[i+(Char-0x20)*16];
Display_Locate(ImgData, HZ_X, Y);
HZ_X++;
}
HZ_X=X;
for(i=8;i<16;i++){
ImgData = chardot_8x16[i+(Char-0x20)*16] | 0x80;
Display_Locate(ImgData, HZ_X, Y + 1);
HZ_X++;
}
}
}
/*
----------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------
*/
#if 0
/*
----------------------------------------------------------------------------------------------
//移动当前Y坐标
----------------------------------------------------------------------------------------------
*/
void MenuGUI_GotoY(U8 y)
{
if (y > 7) {
PosY = 7;
} else {
PosY = y;
}
}
/*
----------------------------------------------------------------------------------------------
//移动当前Y坐标
----------------------------------------------------------------------------------------------
*/
void MenuGUI_GotoX(U8 x)
{
if (x > 127) {
PosX = 127;
} else {
PosX = x;
}
}
/*
*****************************************************************************
* MenuGUI_GotoXY - 系统光标移动到指定位置
* DESCRIPTION: -
*
* @Param y:Y轴坐标
* @Param x:X轴坐标
* @Return :
* ----
*****************************************************************************
*/
void MenuGUI_GotoXY(U8 x,U8 y)
{
MenuGUI_GotoX(x);
MenuGUI_GotoY(y);
}
#endif
/*
*****************************************************************************
* MenuGUI_SetTextMode - 设置文字显示模式
* DESCRIPTION: -
*
* @Param TextMode:模式代码
* @Return :模式代码
* ----
*****************************************************************************
*/
U8 MenuGUI_SetTextMode(U8 TextMode)
{
GUITextMode = TextMode;
return GUITextMode;
}
/*
*****************************************************************************
* MenuGUI_SetEnFont - 设置显示的英文字体
* DESCRIPTION: -
* 目前支持两种字体8x16 5x8
* @Param EnFont:字体代码
* @Return :
* ----
*****************************************************************************
*/
void MenuGUI_SetEnFont(U8 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 MenuGUI_Delay(U16 Period)
{
U8 j;
for (; Period>0 ; Period--) {
for (j = 0; j < 200; j++) {
}
}
}
/*
*****************************************************************************
* MenuGUI_DispCharAt - 指定位置显示一个ASCII码
* DESCRIPTION: - 字体使用是系统设定的字体
*
* @Param x:X轴坐标
* @Param y:Y轴坐标
* @Param c:ASCII码
* @Return :
* ----
*****************************************************************************
*/
void MenuGUI_DispCharAt(U8 c, U8 x, U8 y)
{
switch (GUITextMode) {
case MenuGUI_TEXTMODE_NORMAL :
Display_ASCII(c, x, y);
break;
case MenuGUI_TEXTMODE_REVERSE :
Display_InvASCII(c, x, y);
break;
case MenuGUI_TEXTMODE_UNDERLINE :
Display_ASCII_UnderLine(c, x, y);
break;
default :
break;
}
}
/*
----------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------
*/
#if 0
void MenuGUI_DispChar(U8 c)
{
MenuGUI_DispCharAt(c, PosX, PosY);
PosX += 8;
}
#endif
/*
*****************************************************************************
* MenuGUI_Init - 初始化GUI显示
* DESCRIPTION: -
*
* @Param void:
* @Return :
* ----
*****************************************************************************
*/
void MenuGUI_Init(void)
{
Display_Init();
GUIEnFont = En_8x16;
GUITextMode = MenuGUI_TEXTMODE_NORMAL;
Char_XSIZE = En_8x16_XSIZE;
Char_YSIZE = En_8x16_YSIZE;
PosX = 0;
PosY = 0;
NoXY = true;
}
void MenuGUI_Clear(void)
{
Display_Clear();
}
#if 0
void MenuGUI_DispCEOL(void)
{
U8 i;
for(i = PosX; i <= LCD_XSIZE-8; i += 8) {
MenuGUI_DispCharAt(' ', i, PosY);
}
}
#endif
/*
*****************************************************************************
* MenuGUI_DispStringAt - 指定位置显示一个字符串
* DESCRIPTION: -
* 支持中英混合 当中英混合时英文字体强制为8x16 如果单单英文 按照设定字体
* @Param x0:X轴坐标
* @Param y0:Y轴坐标
* @Param s:字符串
* @Return :
* ----
*****************************************************************************
*/
//void MenuGUI_DispStringAt(U8 _CONST_ *s,U8 x0,U8 y0)
void MenuGUI_DispStringAt(U8 *s,U8 x0,U8 y0)
{
U8 i;
if (NoXY == false){//没有提供坐标,则使用系统坐标
x0 = PosX;
y0 = PosY;
}
i = 0;
while(s[i]!='\0'){
if (s[i] < 0x80) {//是ASCII
if(s[i] == '\n'){
x0 = 0;
y0 += Char_YSIZE;
} else {
if (x0 > (LCD_XSIZE-1)) {//换行
x0 = 0;
y0 += Char_YSIZE;
}
switch (GUITextMode) {
case MenuGUI_TEXTMODE_NORMAL :
Display_ASCII(s[i], x0, y0);
break;
case MenuGUI_TEXTMODE_REVERSE :
Display_InvASCII(s[i], x0, y0);
break;
case MenuGUI_TEXTMODE_UNDERLINE :
Display_ASCII_UnderLine(s[i], x0, y0);
break;
default :
break;
}
x0 += Char_XSIZE;
}
} else {//是中文
if (x0 > LCD_XSIZE-16){
x0 = 0;
y0 += Chinese_YSIZE;
}
Display_Chinese(s[i]*256+s[i+1],x0,y0);//中文
i++;
x0 += Chinese_XSIZE;
}
s++;
}
if (NoXY == false){
PosX = x0;
PosY = y0;
}
}
#if 0
/*
*****************************************************************************
* MenuGUI_DispString - 在当前系统坐标下显示字符串
* DESCRIPTION: -
* 除了坐标不能指定外 功能跟MenuGUI_DispStringAt一致
* @Param s:字符串
* @Return :
* ----
*****************************************************************************
*/
void MenuGUI_DispString(U8 _CONST_ *s)
{
NoXY = false;
MenuGUI_DispStringAt(s,PosX,PosY);
NoXY = true;
}
void MenuGUI_DispStringLen(U8 _CONST_ *s, U16 Len)
{
U8 i;
i = 0;
while(s[i]!='\0'){
if (i >= Len ){
return;
}
if (s[i] < 0x80) {//是ASCII
if(s[i] == '\n'){
// PosX = 0;
// PosY += 2;
} else {
if (PosX > (LCD_XSIZE-1)) {//换行
PosX = 0;
// PosY += 2;
}
switch (GUITextMode) {
case MenuGUI_TEXTMODE_NORMAL :
Display_ASCII(s[i], PosX, PosY);
break;
case MenuGUI_TEXTMODE_REVERSE :
Display_InvASCII(s[i], PosX, PosY);
break;
case MenuGUI_TEXTMODE_UNDERLINE :
Display_ASCII_UnderLine(s[i], PosX, PosY);
break;
default :
break;
}
PosX += 8;
}
} else {//是中文
if (PosX > LCD_XSIZE-16){
// PosX = 0;
// PosY += 2;
return;
}
Display_Chinese(s[i]*256+s[i+1],PosX,PosY);//中文
i++;
PosX += 16;
}
i++;
}
}
void MenuGUI_DrawCursor(U8 x, U8 y)
{
if(GUITextMode == MenuGUI_TEXTMODE_NORMAL){
Display_Locate(0xFF,x,y);
Display_Locate(0xFF,x,y+1);
} else if (GUITextMode == MenuGUI_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 MenuGUI_CursorOn(U8 x, U8 y)
{
Display_Locate(0xFF,x,y);
Display_Locate(0xFF,x,y+1);
}
void MenuGUI_CursorOFF(U8 x, U8 y)
{
Display_Locate(0x00,x,y);
Display_Locate(0x00,x,y+1);
}
#endif
/*
*****************************************************************************
* MenuGUI_DispStringAtBar - 显示一个字符串在一个BAR中
* DESCRIPTION: -
* 可以设定对齐方式
* @Param s:字符串
* @Param x0:BAR起始X轴坐标
* @Param x1:BAR结束点的X轴坐标
* @Param y0:BAR的Y轴坐标
* @Param Mode:对齐方式 居中于BAR 左对齐BAR 右对齐BAR
* @Return :
* ----
*****************************************************************************
*/
//void MenuGUI_DispStringAtBar(U8 _CONST_ *s,U8 x0, U8 y0, U8 x1,U8 Mode)
void MenuGUI_DispStringAtBar(U8 *s,U8 x0, U8 y0, U8 x1,U8 Mode)
{
U8 ENCount;//英文统计
U8 CNCount;//中文统计
U8 XLen;
U8 X;
U8 Y;
U8 i;
CNCount = 0;
ENCount = 0;
XLen = 0;
i = 0;
while(s[i]!='\0'){//统计中英文个数
if (s[i] > 0x80) {
CNCount ++;
i++;
} else {
ENCount++;
}
i++;
}
MenuGUI_SetEnFont(En_8x16);
/*
if(CNCount){
MenuGUI_SetEnFont(En_8x16);
} else {
MenuGUI_SetEnFont(En_5x8);
}
*/
XLen = ENCount*8 + CNCount*16;
if (XLen > 127) {//我们只能显示一行
XLen = 127;
}
//识别对其方式属性
switch (Mode&0x30) {//只有这两个Bit是这个属性
case MenuGUI_TA_LEFT: //左对齐
XLen = 0;
break;
case MenuGUI_TA_HCENTER: //居中
XLen = ((x1-x0)-XLen)/2;
break;
case MenuGUI_TA_RIGHT: //右对齐
XLen = (x1-x0)-XLen;
break;
default:
break;
}
//--------------------------------------
//得到喀什显示的起点坐标
X = x0+XLen;
Y = y0;
//---------------------
//清除字符前面的空白部分
if(Mode&MenuGUI_JUST_TEXT){
} else {
x0 = X;
if (GUITextMode == MenuGUI_TEXTMODE_REVERSE){
for(i = 0; i <x0; i++){
Display_Locate(0xFF, i,y0);
Display_Locate(0xFF, i,y0+1);
}
}else{
for(i = 0; i <x0; i++){
Display_Locate(0x00, i,y0);
Display_Locate(0x00, i,y0+1);
}
}
}
//-----------------------
i = 0;
while(s[i]!='\0'){
if (s[i] < 0x80) {//是ASCII
switch (GUITextMode) {
case MenuGUI_TEXTMODE_NORMAL :
Display_ASCII(s[i], X, Y);
break;
case MenuGUI_TEXTMODE_REVERSE :
Display_InvASCII(s[i], X, Y);
break;
case MenuGUI_TEXTMODE_UNDERLINE :
Display_ASCII_UnderLine(s[i], X, Y);
break;
default :
break;
}
X += 8;
} else {//是中文
Display_Chinese(s[i]*256+s[i+1],X,Y);//中文
i++;
X += 16;
}
// s++;
i++;
}
//清除字符后面的空白部分
if(Mode&MenuGUI_JUST_TEXT){
MenuGUI_SetEnFont(En_5x8);
return;
} else {
x0 = X;
if (GUITextMode == MenuGUI_TEXTMODE_REVERSE){
for(i = 0; i <x1-x0; i++){
Display_Locate(0xFF, x0+i,y0);
Display_Locate(0xFF, x0+i,y0+1);
}
}else{
for(i = 0; i <x1-x0; i++){
Display_Locate(0x00, x0+i,y0);
Display_Locate(0x00, x0+i,y0+1);
}
}
MenuGUI_SetEnFont(En_5x8);
return;
}
//---------------------------------------
}
#if 0
//--------------------------
//显示ASCII(16X32)
//Char 字符
//X 0--6
//Y 0--(128-8)
U16 _CONST_ Changedot[] =
{
0x0000, 0x0003, 0x000c, 0x000f, 0x0030, 0x0033, 0x003c, 0x003f, 0x00c0, 0x00c3,
0x00cc, 0x00cf, 0x00f0, 0x00f3, 0x00fc, 0x00ff, 0x0300, 0x0303, 0x030c, 0x030f,
0x0330, 0x0333, 0x033c, 0x033f, 0x03c0, 0x03c3, 0x03cc, 0x03cf, 0x03f0, 0x03f3,
0x03fc, 0x03ff, 0x0c00, 0x0c03, 0x0c0c, 0x0c0f, 0x0c30, 0x0c33, 0x0c3c, 0x0c3f,
0x0cc0, 0x0cc3, 0x0ccc, 0x0ccf, 0x0cf0, 0x0cf3, 0x0cfc, 0x0cff, 0x0f00, 0x0f03,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -