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

📄 systool.c

📁 汽车电子解码器电缆测试。可以判断汽车故障在哪里
💻 C
字号:
/******************************************************************************************
 *  目的:系统工具模块
 *  功能:提供软键盘、数据转换和信息提示功能
 *  模块依赖:Systemint.h
 ******************************************************************************************/
#include "Systemint.h"

/*
**-------------------------------------------------------------------------------------
** 测试失败提示
**-------------------------------------------------------------------------------------
*/
void ERR_INFO()
{
     unsigned char *SMenu[]=
     {
          "通讯连接失败!",
          "[ NO ] 返回"
     };
     unsigned char SStartline = 0;
     unsigned char SUserline  = 0;

     ScreenInit( W_STAT );
     AddMenu( SMenu, 2 );
     while( ScreenAct( &SStartline, &SUserline ) != W_RETURN )
     {
           //NULL
     }
}

/*
**-------------------------------------------------------------------------------------
** 信息提示
**-------------------------------------------------------------------------------------
*/
void DisInfo( unsigned char *Menu[], unsigned char Maxl )
{
     unsigned char Startline = 0;
     unsigned char Userline = 0;

     ScreenInit( W_STAT );
     AddMenu( Menu, Maxl );
     ScreenAct( &Startline, &Userline );
}

/*
**-------------------------------------------------------------------------------------
** 信息提示并等待按键
**-------------------------------------------------------------------------------------
*/
void InfoWait( unsigned char *Menu[], unsigned char Maxl )
{
     unsigned char Startline = 0;
     unsigned char Userline = 0;

     ScreenInit( W_STAT );
     AddMenu( Menu, Maxl );
     while( ScreenAct( &Startline, &Userline ) != W_RETURN )
     {
          //NULL
     }
}

/*
**-------------------------------------------------------------------------------------
** 键盘输入,数据输出
**-------------------------------------------------------------------------------------
*/
long DigitKeyboad( unsigned char *InputStr, unsigned char DigNum, long MaxData  )
{
     //Declation
     unsigned char Rep = W_NULL;   // 用户选定项
     unsigned char Userline = 0;
     unsigned char StartL = 0;     //当前起始行
     unsigned char Buf[10];
     long ReDig;
     unsigned char  *Overflow[]=
     {
          "数值超出范围!",
          "[NO] 返回"
     };

     Rep = W_NULL;

     ReDig = 0;

     ScreenInit( W_INPUT );
     AddString( InputStr );

     SetMaxDig( DigNum );

     while( Rep != W_RETURN )
     {
          //显示文本
          Rep = ScreenAct( &StartL, &Userline );
          if( Rep == W_OK )
          {
               //添加处理代码
               ReDig = (long)UserRep() + ReDig*10;
          }
          else if( Rep == W_CANEL )
          {
               ReDig = (long)(ReDig/10);
          }
          else if( Rep == W_FINISH )
          {
               unsigned char *Menu[]=
               {
                    "确认输入?",
                    "[YES] 确认",
                    "[NO]  返回"
               };

               ReDig = (long)UserRep() + ReDig*10;
               sprintf( (char *)Buf, "数值:%d", ReDig );

               ScreenInit( W_STAT );
               AddString( Menu[0] );
               AddString( Buf );
               AddString( Menu[1] );
               AddString( Menu[2] );

               while( 1 )
               {
                    Rep = ScreenAct( &StartL, &Userline );
                    if( Rep == W_OK )
                    {
                         //添加输出代码
                         if( ReDig>=MaxData )
                         {
                             InfoWait( Overflow, 2 );

                             ReDig = 0;

                             ScreenInit( W_INPUT );
                             AddString( InputStr );
                             SetMaxDig( DigNum );

                             Rep = W_NULL;

                             break;
                         }
                         else
                         {
                             return ReDig;
                         }
                    }
                    else if( Rep == W_RETURN )
                    {
                         Rep = W_NULL;

                         ReDig = 0;

                         ScreenInit( W_INPUT );
                         AddString( InputStr );
                         SetMaxDig( DigNum );
                         break;
                    }
               }
          }

     }

     return -1;
}

/*
**-------------------------------------------------------------------------------------
// 数据比较
**-------------------------------------------------------------------------------------
*/
char CompareB( unsigned char DataX, unsigned char DataY )
{
     if( (DataX&DataY) == DataY )
     {
         return 1;
     }
     else
     {
         return 0;
     }
}

/*
**-------------------------------------------------------------------------------------
// 转换一个16进制数
**-------------------------------------------------------------------------------------
*/
unsigned long ReadHex(unsigned char *hexin)
{
     unsigned long sum;
     char i;

     i=0;
     sum=0;
     while( (hexin[i]=='0') || (hexin[i]=='x') || (hexin[i]=='X') ) i++;
     while(hexin[i]!='\0')
     {
           if(hexin[i]<='9')         sum=sum*16+hexin[i]-'0';
           else if(hexin[i]<='F')    sum=sum*16+hexin[i]-'A'+10;
           else                      sum=sum*16+hexin[i]-'a'+10;
           i++;
     }

     return sum;
}

/*
**-------------------------------------------------------------------------------------
// 转换一个10进制数
**-------------------------------------------------------------------------------------
*/
unsigned long ReadDec(unsigned char *decin)
{
     unsigned long sum;
     char i;

     i=0;
     sum=0;	
     while(decin[i]=='0') i++;
     while(decin[i]!='\0')
     {
           sum=sum*10+decin[i]-'0';
           i++;
     }

     return sum;
}
/*
**-------------------------------------------------------------------------------------
//判断in是十进制还是十六进制
**-------------------------------------------------------------------------------------
*/
int ChkDigi(unsigned char *in)
{
     int i,xnum;
     int length=0,flag;

     //判断入口 in 长度 是否超过最大长度,不满足返回 0
     length = strlen((char *)in);
     //if( length > StrLenMax ) return 0; //#define StrLenMax 8
     if( length == 0 ) return 0;
     if( length > 20 ) return 0;

     //循环查询字符串中是否存在非法字符,( '0'~'9', 'a'~'f','A'~'F','x','X' ) 范围为合法,不合法返回 0
     for( i =0 ; i < length ; i++ )
     {
         if( (in[i]>='0')&&(in[i]<='9') );
         else if( (in[i]>='a')&&(in[i]<='f') );
         else if( (in[i]>='A')&&(in[i]<='F') );
         else if(in[i]=='x');
         else if(in[i]=='X');
         else return 0;
     }

     //循环查询是否存在字符 'x' 或 'X' , 不存在则返回 1 ,代表这是一个十进制数
     flag = 0;
     for( i =0 ; i < length ; i++ )
     {
         if( (in[i]=='x')||(in[i]=='X') ) break;
         if( (in[i]<'0') || (in[i]>'9') ) flag = 1;
     }

     if( i == length )
     {
         if(!flag) return 1; //十进制
         return 0;
     }

     //若存在 'x','X' 1.判断出现次数是否大于 1
     //               2.判断该字符前是否含有非'0'字符
     //               3.判断成功则返回 2 ,代表这是一个合法的16进制数
     xnum = 0;
     for( i =0 ; i < length ; i++ )
     {
         if( (in[i]=='x') || (in[i]=='X') )
         {
            if( i == 0 ) return 0;
            xnum++;
         }

         if( xnum > 1 ) return 0;
         if( !xnum ) if( in[i]!='0' ) return 0;
     }

     return 2;
}
/*
**-------------------------------------------------------------------------------------
//将InString转换成十进制或十六进制数值
**-------------------------------------------------------------------------------------
*/
int GetLong(unsigned char *InString, unsigned long *Output)
{
        int XFlag;

        XFlag = ChkDigi( InString );
        if( XFlag == 1 )//换成十进制
        {
            *Output = ReadDec(InString);
        }
        else if( XFlag == 2 )//换成六进制数值
        {
            //*Output = ReadHex(InString);
            *Output = 0;
        }

        return XFlag;
}

//----------------------------------------------------------------- End Of File --------


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -