⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 screensol.c

📁 可以对北京汽车所产生的故障进行诊断的电脑解码器
💻 C
📖 第 1 页 / 共 2 页
字号:
#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 + -