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

📄 vfd_tool.c

📁 MTK1389D dvd原程序
💻 C
📖 第 1 页 / 共 4 页
字号:
        pbIndex += 3;
      }
      else
      {
        sprintf(pcIndex, "0x%02x, 0x%02x, 0x%02x, ",
                VFD_LIST_END, VFD_LIST_END, VFD_LIST_END);
      }
      pcIndex += 18;
    }

    /* the list end is added here */
    sprintf(pcIndex, "0x%02x", VFD_LIST_END);
    pcIndex += 4;

    /* terminate the string */
    *pcIndex = 0;

    fprintf(out,"  {%s},\n",pcTmp);
  }

  return;
}

/************************************************************************
     Function : 
  Description : 
    Parameter : 
    Return    :
************************************************************************/
void VfdWriteList(FILE *out, BYTE bNo, BYTE bListMax)
{
  BYTE i, j, bMaxLen;
  char pcTmp[MAX_LIST_LEN*6+5];
  BYTE *pbIndex;
  char *pcIndex;

  /* convert binary to string */
  pbIndex = (prShadow[bNo]).pbList;
  pcIndex = pcTmp;

  for (j=0;j<bListMax;j++)
  {
    if (j < (prShadow[i]).bListLen)
    {
      sprintf(pcIndex, "0x%02x, 0x%02x, 0x%02x, ",
              *pbIndex, *(pbIndex+1), *(pbIndex+2));
      pbIndex += 3;
    }
    else
    {
      sprintf(pcIndex, "0x%02x, 0x%02x, 0x%02x, ",
              VFD_LIST_END, VFD_LIST_END, VFD_LIST_END);
    }
    pcIndex += 18;
  }

  /* the list end is added here */
  sprintf(pcIndex, "0x%02x", VFD_LIST_END);
  pcIndex += 4;

  /* terminate the string */
  *pcIndex = 0;

  fprintf(out,"{%s}",pcTmp);

  return;
}

/************************************************************************
     Function : 
  Description : 
    Parameter :
    Return    : 
************************************************************************/
void VfdWheel(FILE *out_c, FILE *out_h)
{
  BYTE i, bPos;
  BYTE bMaxLen;

  if (sizeof(prVfdWheel) > 0)
  {
    fprintf(out_c, "#define VFD_WHEEL_FANS %d\n", VFD_WHEEL_FANS);
    fprintf(out_c, "#define VFD_WHEEL_SZ   (VFD_WHEEL_FANS + 2)\n");
    fprintf(out_c, "\n#ifdef INVERT_LITED_WHEEL\n");
  
    /* reset shadow RAM */
    vResetShadow();
  
    /* wheel all on */
    for (i=0;i<VFD_WHEEL_FANS;i++)
    {
      VfdSetIcon(&prVfdWheel[i], 1, 0);
    }
  
    /* spin wheel, INVERT */
    for (bPos=0;bPos<VFD_WHEEL_FANS;bPos++)
    {
      for (i=0;i<VFD_WHEEL_FANS;i++)
      {
        VfdSetIcon(&prVfdWheel[i], (i == bPos), bPos+1);
      }
    }
  
    /* wheel all off */
    for (i=0;i<VFD_WHEEL_FANS;i++)
    {
      VfdSetIcon(&prVfdWheel[i], 0, VFD_WHEEL_FANS+1);
    }
  
    /* get list */
    for (i=0;i<VFD_WHEEL_FANS+2;i++)
    {
      VfdGetList(i);
    }
  
    bMaxLen = bVfdGetListLenMax(VFD_WHEEL_FANS+2);
  
    fprintf(out_c, "#define VFD_WHEEL_LIST_SZ %d\n",LIST_ITEM2LEN(bMaxLen));
    fprintf(out_c, "code BYTE pbVfdWheel[VFD_WHEEL_SZ][VFD_WHEEL_LIST_SZ] = {\n");
  
    /* write list */
    VfdWriteAllList(out_c, VFD_WHEEL_FANS+2, bMaxLen);
  
    fprintf(out_c, "};\n");
    fprintf(out_c, "#else\n");
  
    /* reset shadow RAM */
    vResetShadow();
  
    /* wheel all on */
    for (i=0;i<VFD_WHEEL_FANS;i++)
    {
      VfdSetIcon(&prVfdWheel[i], 1, 0);
    }
  
    /* spin wheel, normal */
    for (bPos=0;bPos<VFD_WHEEL_FANS;bPos++)
    {
      for (i=0;i<VFD_WHEEL_FANS;i++)
      {
        VfdSetIcon(&prVfdWheel[i], (i != bPos), bPos+1);
      }
    }
  
    /* wheel all off */
    for (i=0;i<VFD_WHEEL_FANS;i++)
    {
      VfdSetIcon(&prVfdWheel[i], 0, VFD_WHEEL_FANS+1);
    }
  
      /* get list */
    for (i=0;i<VFD_WHEEL_FANS+2;i++)
    {
      VfdGetList(i);
    }
  
    bMaxLen = bVfdGetListLenMax(VFD_WHEEL_FANS+2);
  
    fprintf(out_c, "#define VFD_WHEEL_LIST_SZ %d\n",LIST_ITEM2LEN(bMaxLen));
    fprintf(out_c, "code BYTE pbVfdWheel[VFD_WHEEL_SZ][VFD_WHEEL_LIST_SZ] = {\n");
  
    /* write list */
    VfdWriteAllList(out_c, VFD_WHEEL_FANS+2, bMaxLen);
  
    fprintf(out_c, "};\n");
    fprintf(out_c, "#endif\n");
  }
  else /* sizeof(prVfdWheel) == 0 */
  {
    fprintf(out_c, "#define VFD_WHEEL_FANS 0\n");
    fprintf(out_c, "#define VFD_WHEEL_SZ   0\n");
  }
}

/************************************************************************
     Function :
  Description :
    Parameter :
    Return    :
************************************************************************/
void VfdSetChar(WORD *pwSeg, WORD wCode, BYTE bNo)
{
  BYTE i;

  for (i = 0; i < VFD_CHAR_SEG_SZ; i++)
  {
    if (!IS_NODE_EMPTY(pwSeg[i]))
    {
      VfdSetIcon((strucVfdIcon *)(pwSeg+i), wCode & 1, bNo);
    }
    wCode >>= 1;
  }
}

/************************************************************************
     Function :
  Description :
    Parameter :
    Return    :
************************************************************************/
void VfdClearChar(WORD *pwSeg, WORD wCode, BYTE bNo)
{
  BYTE i;

  for (i = 0; i < VFD_CHAR_SEG_SZ; i++)
  {
    if (!IS_NODE_EMPTY(pwSeg[i]))
    {
      VfdSetIcon((strucVfdIcon *)(pwSeg+i), 0, bNo);
    }
    wCode >>= 1;
  }
}

/************************************************************************
     Function :
  Description :
    Parameter :
    Return    :
************************************************************************/
void VfdMsgCompose(WORD *pwMsg, BYTE bNo)
{
  BYTE *pbMsgPos = pbVfdMsgPosition;  /* Display order */
  strucVfdSegment *prPtr;  /* 8 segment for corresponding character */

  while (*pwMsg != CHAR_end)
  {
    /* Get the 8 segments for the corresponding character position  */
    prPtr = &prVfdCharSegments[*pbMsgPos++];
    VfdSetChar(prPtr->pwSeg, *pwMsg, bNo);
    pwMsg++;
  }
}

/************************************************************************
     Function :
  Description : 
    Parameter :
    Return    :
************************************************************************/
void VfdMsg(FILE *out_c, FILE *out_h)
{
  BYTE i, bMaxLen;

  fprintf(out_c, "\n#define VFD_CHAR_NO %d\n", VFD_CHAR_NO);
  fprintf(out_c, "#define VFD_MSG_NO %d\n", VFD_MSG_NO);
  fprintf(out_c, "#define VFD_CHAR_SEG_SZ %d\n\n", VFD_CHAR_SEG_SZ);
  /* fprintf(out, "#define VFD_MSG_CHAR_NUM %d\n\n", VFD_MSG_CHAR_NUM); */

  /* reset shadow RAM */
  vResetShadow();

  /* check max message number */
  assert(VFD_MSG_NO <= MAX_SHADOW_NUMBER);

  /* compose message first */
  for (i=0;i<VFD_MSG_NO;i++)
  {
    VfdMsgCompose(prVfdMsg[i].pwMsg,i);
  }

  /* get list */
  for (i=0;i<VFD_MSG_NO;i++)
  {
    VfdGetList(i);
  }

  bMaxLen = bVfdGetListLenMax(VFD_MSG_NO);

  fprintf(out_c, "code BYTE pbVfdMsg[][%d] = {\n", LIST_ITEM2LEN(bMaxLen));
  VfdWriteAllList(out_c, VFD_MSG_NO, bMaxLen);
  fprintf(out_c, "};\n");

  for (i=0;i<VFD_MSG_NO;i++)
  {
    fprintf(out_h,"#define VFDMSG_%s    %d\n", prVfdMsg[i].pcName, i);
  }
}

/************************************************************************
     Function :
  Description : 
    Parameter : 
    Return    :
************************************************************************/
void VfdWriteFieldDefine(FILE *out)
{
  fprintf(out, "#define VFD_TRACK      %d\n", VFD_TRACK);
  fprintf(out, "#define VFD_CHAPTER    %d\n", VFD_TRACK);
  fprintf(out, "#define VFD_MINUTE     %d\n", VFD_MINUTE);
  fprintf(out, "#define VFD_SECOND     %d\n", VFD_SECOND);
  fprintf(out, "#define VFD_HOUR       %d\n", VFD_MIN100);
  fprintf(out, "#define VFD_MIN100     %d\n", VFD_MIN100);
  fprintf(out, "#define VFD_TITLE      %d\n", VFD_TITLE);
#if (VFD_FIELD_MAX == 10)
  fprintf(out, "#define VFD_CHAP100    %d\n", VFD_CHAP100);
#endif
  fprintf(out, "#define VFD_FIELD_MAX  %d\n", VFD_FIELD_MAX);
}

/************************************************************************
     Function :
  Description : 
    Parameter : 
    Return    :
************************************************************************/
void VfdNum(FILE *out_c, FILE *out_h)
{
  BYTE i, bPos;
  BYTE bMaxLen;

  VfdWriteFieldDefine(out_c);
  VfdWriteFieldDefine(out_h);

  fprintf(out_c, "\n#define CHAR_NUM_ARRAY_SZ %d\n\n", CHAR_NUM_ARRAY_SZ);

  for (i=0;i<10;i++)
  {
    fprintf(out_c, "#define CHAR_%d %d\n", i, i);
    fprintf(out_h, "#define CHAR_%d %d\n", i, i);
  }
  fprintf(out_c, "#define CHAR_CLEAR %d\n\n", i);
  fprintf(out_h, "#define CHAR_CLEAR %d\n\n", i);

  /* geerate number array for every char */
  for (bPos=0;bPos<VFD_CHAR_NO;bPos++)
  {
    /* reset shadow RAM */
    vResetShadow();

    /* set all numbers */
    for (i=0;i<CHAR_NUM_ARRAY_SZ-1;i++)
    {
      VfdSetChar((WORD *)(&(prVfdCharSegments[bPos])), pwNumberList[i], i);
    }

    /* the last one is CHAR_clear */
    VfdClearChar((WORD *)(&(prVfdCharSegments[bPos])), pwNumberList[i], i);

    /* get list */
    for (i=0;i<CHAR_NUM_ARRAY_SZ;i++)
    {
      VfdGetList(i);
    }

    bMaxLen = bVfdGetListLenMax(CHAR_NUM_ARRAY_SZ);

    /* write list */
    fprintf(out_c, "code BYTE pbVfdCharNo%d[CHAR_NUM_ARRAY_SZ][%d] = {\n", bPos, LIST_ITEM2LEN(bMaxLen));
    VfdWriteAllList(out_c, CHAR_NUM_ARRAY_SZ, bMaxLen);
    fprintf(out_c, "};\n\n");
  }

  fprintf(out_c, "code BYTE code * ppbVfdCharNum[VFD_CHAR_NO][CHAR_NUM_ARRAY_SZ] = {\n");
  for (i=0;i<VFD_CHAR_NO;i++)
  {
    fprintf(out_c, "  { ", i);
    for (bPos=0;bPos<CHAR_NUM_ARRAY_SZ;bPos++)
    {
      fprintf(out_c, "pbVfdCharNo%d[%d]", i, bPos);
      if (bPos == (CHAR_NUM_ARRAY_SZ-1))
      {
        fprintf(out_c, " ");
      }
      else
      {
        fprintf(out_c, ", ");
      }
      if (bPos == ((int)(CHAR_NUM_ARRAY_SZ/2)))
      {
        fprintf(out_c, "\n    ");

⌨️ 快捷键说明

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