📄 screensol.c
字号:
#endif
if( CursorX!= 0xff)
{
TagScr.Couserx = CursorX*TagScr.Ch_X+1;
}
else
{
//NULL
}
if( CursorY!= 0xff)
{
TagScr.Cousery = CursorY*TagScr.Ch_Y;
}
else
{
//NULL
}
if( TagScr.Couserx >= 128 )
{
TagScr.Couserx = 0;
}
else
{
//NULL
}
if( TagScr.Cousery >= 64 )
{
TagScr.Cousery = 0;
}
else
{
//NULL
}
}
/*
**-------------------------------------------------------------------------------------
** 显示驱动 - 设定当前的显示颜色
** 输入:NewColor - 代表颜色 0~255
** 输出:无
** 返回:
** 说明:
**-------------------------------------------------------------------------------------
*/
void SetColor( unsigned char NewColor )
{
TagScr.Ch_Color = NewColor;
}
/*
**-------------------------------------------------------------------------------------
** 显示驱动 - 在当前行输出字符串
** 输入:string - 输入串
** 输出:无
** 返回:
** 说明:
**-------------------------------------------------------------------------------------
*/
void PutStr( unsigned char *string )
{
#ifdef DEBUGMODE
DebugString( "PutStr()" );
#endif
if( TagScr.CHMode == CH_8x6 )
{
LcdStr86( TagScr.Couserx, TagScr.Cousery, string, TagScr.Ch_Color );
}
else
{
LcdHZ16Str( TagScr.Couserx, TagScr.Cousery, string, TagScr.Ch_Color );
}
TagScr.Cousery += TagScr.Ch_Y;
}
/*
**-------------------------------------------------------------------------------------
** 显示驱动 - 输出当前屏幕
** 输入:ShowMode - 显示模式: 居中或起始输出
** 输出:无
** 返回:
** 说明:
**-------------------------------------------------------------------------------------
*/
void PutScreen( char ShowMode )
{
#ifdef DEBUGMODE
DebugString( "PutScreen()" );
#endif
unsigned char i;
unsigned char j;
unsigned char Count;
char upflag;
char downflag;
LcdClr();
if( ShowMode == LEFTSIDE )
{
SetCursor( 0, 0 );
Count = LCDROUT/TagScr.Ch_Y;
for( i = TagScr.Start,j = 0; j<Count; i++, j++ )
{
if( i == TagScr.Max )
{
break;
}
if( TagScr.MenuBuf[i] )
{
PutStr( TagScr.MenuBuf[i] );
}
}
}
else
{
Count = LCDROUT/TagScr.Ch_Y;
for( i = TagScr.Start,j = 0; j<Count; i++, j++ )
{
SetCursor( ( LCDLEN/TagScr.Ch_X - strlen( (char *)TagScr.MenuBuf[i] ) )/2,( LCDROUT/TagScr.Ch_Y - TagScr.Max )/2+j );
if( i == TagScr.Max )
{
break;
}
PutStr( TagScr.MenuBuf[i] );
}
}
if( TagScr.Start ) upflag = 1;
else upflag = 0;
if( TagScr.Start+Count < TagScr.Max ) downflag = 1;
else downflag = 0;
LCDShowFlag( upflag, downflag );
}
/*
**-------------------------------------------------------------------------------------
** 屏幕返回
** 输入:无
** 输出:
** 返回:外部需求的数据
** 说明:
**-------------------------------------------------------------------------------------
*/
unsigned char UserRep( )
{
if( TagScr.WinMode == W_MENU || TagScr.WinMode == W_STREAM )
{
return (TagScr.UserLine + TagScr.Start+1);
}
else if( TagScr.WinMode == W_INPUT )
{
return TagScr.UserRip;
}
else
{
return 0;
}
}
/*
**-------------------------------------------------------------------------------------
** 屏幕键盘
** 输入:DigNum - 数据个数
** 输出:
** 返回:无
** 说明:
**-------------------------------------------------------------------------------------
*/
void SetMaxDig( unsigned char DigNum )
{
if( DigNum < 20 ) TagScr.MaxCount = DigNum;
}
/*
**-------------------------------------------------------------------------------------
** 屏幕动作 - 外部调用函数
** 输入:无
** 输出:*StartLine - 输出当前屏幕起始行
*UserLine - 输出当前屏幕光标所在行
** 返回:在当前屏幕模式下有效的操作和操作结果
** 说明:根据屏幕的初始化结果进行相应的屏幕动作并返回进行成功的屏幕动作宏
**-------------------------------------------------------------------------------------
*/
unsigned char ScreenAct( unsigned char *StartLine, unsigned char *UserLine )
{
#ifdef DEBUGMODE
DebugString( "ScreenAct()" );
#endif
unsigned char KeyMove;
if( TagScr.ScreenFlash )
{
TagScr.Start = *StartLine;
TagScr.UserLine = *UserLine;
if( TagScr.WinMode == W_STAT )
{
PutScreen( MIDSIDE );
}
else if( TagScr.WinMode == W_INPUT )
{
unsigned char i;
unsigned char *CH = "0";
PutScreen( LEFTSIDE );
for( i=0; i<TagScr.MaxCount; i++ )
{
LcdHZ16( (unsigned char)((15-TagScr.MaxCount)/2+i)*9, 32, CH, BLACK );
}
LcdHZ16( (unsigned char)((15-TagScr.MaxCount)/2)*9, 32, CH, WHITE );
LcdHZ16Str( 1, 48, "YES 确认 NO 取消", BLACK );
}
else
{
PutScreen( LEFTSIDE );
}
if( TagScr.WinMode == W_MENU || TagScr.WinMode == W_STREAM )
{
CursorInit( CURSORFORSTR );
}
else
{
//NULL
}
TagScr.ScreenFlash = 0;
}
else
{
//NULL
}
//处理菜单动作
if( TagScr.WinMode == W_MENU || TagScr.WinMode == W_STREAM )
{
if( TagScr.WinMode == W_MENU )
{
KeyMove = GetAKey( 0 );
}
else
{
KeyMove = GetAKey( 1 );
}
if( KeyMove == KEY_NULL )
{
return W_NULL;
}
else
{
//NULL
}
switch( KeyMove )
{
case KEY_YES : //确认
return W_OK;
case KEY_NO : //退出
return W_RETURN;
case KEY_UP : //动作向上
if( SUCCESS == CursorMove( CURSORUP ) ) //处理光标上动作
{
*UserLine = TagScr.UserLine;
return C_UP;
}
else if( SUCCESS == ScreenMove( SCREENUP ) ) //处理向上翻页
{
CursorInit( CURSORFORSTR );
*StartLine = TagScr.Start;
return W_UP;
}
else
{
return W_NULL;
}
case KEY_DOWN://动作向下
if( SUCCESS == CursorMove( CURSORDOWN ) ) //处理光标下动作
{
*UserLine = TagScr.UserLine;
return C_DOWN;
}
else if( SUCCESS == ScreenMove( SCREENDOWN ) ) //处理向下翻页
{
CursorInit( CURSORFORSTR );
*StartLine = TagScr.Start;
return W_DOWN;
}
else
{
return W_NULL;
}
default :
return W_NULL;
}
}
//处理文本窗口动作
else if( TagScr.WinMode == W_TEXT )
{
KeyMove = GetAKey( 0 );
switch( KeyMove )
{
case KEY_NO : //退出
return W_RETURN;
case KEY_UP : //动作向上
if( SUCCESS == ScreenMove( SCREENUP ) ) //处理向下翻页
{
*StartLine = TagScr.Start;
return W_UP;
}
else
{
return W_NULL;
}
case KEY_DOWN://动作向下
if( SUCCESS == ScreenMove( SCREENDOWN ) ) //处理向下翻页
{
*StartLine = TagScr.Start;
return W_DOWN;
}
else
{
return W_NULL;
}
case KEY_YES: //确认
return W_OK;
default:
return W_NULL;
}
}
//处理状态栏
else if( TagScr.WinMode == W_STAT )
{
KeyMove = GetAKey( 1 );
if( KeyMove == KEY_NULL )
{
return W_NULL;
}
else
{
//NULL
}
switch( KeyMove )
{
case KEY_YES: //确认
return W_OK;
case KEY_NO: //退出
return W_RETURN;
default:
return W_NULL;
}
}
//数据输入屏
else if( TagScr.WinMode == W_INPUT )
{
unsigned char *OutputCH = "0123456789";
KeyMove = GetAKey( 0 );
switch( KeyMove )
{
case KEY_UP: //向上选择
if( TagScr.UserLine )
{
TagScr.UserLine--;
LcdHZ16( (unsigned char)((15-TagScr.MaxCount)/2+TagScr.Count)*9, 32, &OutputCH[TagScr.UserLine], WHITE );
}
else
{
TagScr.UserLine = 9;
LcdHZ16( (unsigned char)((15-TagScr.MaxCount)/2+TagScr.Count)*9, 32, &OutputCH[TagScr.UserLine], WHITE );
}
return W_UP;
case KEY_DOWN://向下选择
if( TagScr.UserLine < 9 )
{
TagScr.UserLine++;
LcdHZ16( (unsigned char)((15-TagScr.MaxCount)/2+TagScr.Count)*9, 32, &OutputCH[TagScr.UserLine], WHITE );
}
else
{
TagScr.UserLine = 0;
LcdHZ16( (unsigned char)((15-TagScr.MaxCount)/2+TagScr.Count)*9, 32, &OutputCH[TagScr.UserLine], WHITE );
}
return W_DOWN;
case KEY_YES: //确认输入
LcdHZ16( (unsigned char)((15-TagScr.MaxCount)/2+TagScr.Count)*9, 32, &OutputCH[TagScr.UserLine], BLACK );
TagScr.UserRip = TagScr.UserLine;
TagScr.UserLine = 0;
TagScr.Count++;
LcdHZ16( (unsigned char)((15-TagScr.MaxCount)/2+TagScr.Count)*9, 32, &OutputCH[0], WHITE );
if( TagScr.Count < TagScr.MaxCount )
{
return W_OK;
}
else
{
return W_FINISH;
}
case KEY_NO: //取消输入
if( TagScr.Count <= 0 )
{
return W_RETURN;
}
else
{
//NULL
}
LcdHZ16( (unsigned char)((15-TagScr.MaxCount)/2+TagScr.Count)*9, 32, &OutputCH[0], BLACK );
TagScr.UserRip = 0;
TagScr.UserLine = 0;
TagScr.Count--;
LcdHZ16( (unsigned char)((15-TagScr.MaxCount)/2+TagScr.Count)*9, 32, &OutputCH[0], WHITE );
return W_CANEL;
default:
return W_NULL;
}
}
return W_RETURN;
}
//----------------------------------------------------------------- End Of File --------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -