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

📄 bttest.inc

📁 乐高机器人的源码,开发平台是IAR_for_AVR.
💻 INC
📖 第 1 页 / 共 4 页
字号:

        case BUTTON_EXIT :
        {
          State = TSTPRG_INIT;
        }
        break;

      }
    }
    break;

    case TSTPRG_RCX_DISPLAY_INIT :
    {
      Count = 0;
      pMapDisplay->EraseMask             |=  SCREEN_BIT(SCREEN_BACKGROUND);
      State = TSTPRG_RCX_DISPLAY;
    }
    break;

    case TSTPRG_RCX_DISPLAY :
    {
      if ((Count & 0x7FF) == 0x000)
      {
        pMapDisplay->pScreens[SCREEN_BACKGROUND]       =  (BMPMAP*)Test1;
        pMapDisplay->UpdateMask                       |=  SCREEN_BIT(SCREEN_BACKGROUND);
      }
      if ((Count & 0x7FF) == 0x3FF)
      {
        pMapDisplay->pScreens[SCREEN_BACKGROUND]       =  (BMPMAP*)Test2;
        pMapDisplay->UpdateMask                       |=  SCREEN_BIT(SCREEN_BACKGROUND);
      }
      Count++;
      if (cUiReadButtons() != BUTTON_NONE)
      {
        State = TSTPRG_SKIP_RCX;
      }
    }
    break;

    case TSTPRG_RCX_INPUT_SELECT :
    {
      switch (cUiReadButtons())
      {
        case BUTTON_LEFT :
        {
          pMapDisplay->pTextLines[TEXTLINE_1] = (UBYTE*)TXT_RCX_INPUT_PASIVE;
          for (Count = 0;Count < NO_OF_INPUTS;Count++)
          {
            pMapInput->Inputs[Count].SensorType     = SWITCH;
          }
          State = TSTPRG_RCX_INPUT_INIT;
        }
        break;

        case BUTTON_ENTER :
        {
          pMapDisplay->pTextLines[TEXTLINE_1] = (UBYTE*)TXT_RCX_INPUT_ACTIVE;
          for (Count = 0;Count < NO_OF_INPUTS;Count++)
          {
            pMapInput->Inputs[Count].SensorType     = REFLECTION;
          }
          State = TSTPRG_RCX_INPUT_INIT;
        }
        break;

        case BUTTON_EXIT :
        {
          State = TSTPRG_SKIP_RCX;
        }
        break;

        case BUTTON_RIGHT :
        {
          pMapDisplay->pTextLines[TEXTLINE_1] = (UBYTE*)TXT_RCX_INPUT_DIGITAL;
          pMapDisplay->pTextLines[TEXTLINE_2] = (UBYTE*)TXT_LINE;
          pMapDisplay->pTextLines[TEXTLINE_3] = (UBYTE*)TXT_EMPTY;
          pMapDisplay->pTextLines[TEXTLINE_4] = (UBYTE*)TXT_EMPTY;
          pMapDisplay->pTextLines[TEXTLINE_5] = (UBYTE*)TXT_EMPTY;
          pMapDisplay->pTextLines[TEXTLINE_6] = (UBYTE*)TXT_EMPTY;
          pMapDisplay->pTextLines[TEXTLINE_7] = (UBYTE*)TXT_EMPTY;
          pMapDisplay->pTextLines[TEXTLINE_8] = (UBYTE*)TXT_SUBTEST_STOP;
          pMapDisplay->UpdateMask            |= TEXTLINE_BITS;
          for (Count = 0;Count < NO_OF_INPUTS;Count++)
          {
            pMapInput->Inputs[Count].SensorType     = CUSTOM;
          }
          SubState = 0;
          Timer    = 0;
          State    = TSTPRG_RCX_DIGITAL_INIT;
        }
        break;

      }
    }
    break;

    case TSTPRG_RCX_INPUT_INIT :
    {
      for (Count = 0;Count < NO_OF_INPUTS;Count++)
      {
        pMapDisplay->pTextLines[TEXTLINE_3 + Count] = TxtBuffer[Count];
      }
      pMapDisplay->pTextLines[TEXTLINE_8] = (UBYTE*)TXT_SUBTEST_STOP;
      pMapDisplay->UpdateMask            |= TEXTLINE_BITS;
      State = TSTPRG_RCX_INPUT;
      Timer = 0;
    }
    break;

    case TSTPRG_RCX_INPUT :
    {
      if (++Timer >= 250)
      {
        Timer = 0;
        for (Count = 0;Count < NO_OF_INPUTS;Count++)
        {
          if (InputValues[Count] != pMapInput->Inputs[Count].ADRaw)
          {
            InputValues[Count]    = pMapInput->Inputs[Count].ADRaw;
            sprintf((char*)TxtBuffer[Count]," Input %u = %4u ",(UWORD)Count + 1,(UWORD)InputValues[Count]);
            pMapDisplay->UpdateMask |= TEXTLINE_BIT(TEXTLINE_3 + Count);
          }
        }
      }
      if (cUiReadButtons() != BUTTON_NONE)
      {
        State = TSTPRG_SKIP_RCX;
      }
    }
    break;

    case TSTPRG_RCX_DIGITAL_INIT :
    {
      if (++Timer >= 20)
      {
        Timer = 0;
        switch (SubState)
        {
          case 0 :
          {
            pMapInput->Inputs[0].DigiPinsDir |=  DIGI0;         // Digi 1-0 output        -,
            pMapInput->Inputs[0].DigiPinsDir &= ~DIGI1;         // Digi 1-1 input     -,   |
            pMapInput->Inputs[2].DigiPinsDir &= ~DIGI0;         // Digi 3-0 input      |  -'
            pMapInput->Inputs[2].DigiPinsDir |=  DIGI1;         // Digi 3-1 output    -'

            pMapInput->Inputs[0].DigiPinsOut |=  DIGI0;         // Digi 1-0 output   high
            pMapInput->Inputs[2].DigiPinsOut &= ~DIGI1;         // Digi 3-1 output   low

            SubState++;
          }
          break;

          case 1 :
          {
            if ((pMapInput->Inputs[2].DigiPinsIn & DIGI0) && !(pMapInput->Inputs[0].DigiPinsIn & DIGI1))
            {
              pMapInput->Inputs[0].DigiPinsOut &= ~DIGI0;         // Digi 1-0 output   low
              pMapInput->Inputs[2].DigiPinsOut |=  DIGI1;         // Digi 3-1 output   high

              SubState++;
            }
            else
            {
              State = TSTPRG_RCX_DIGITAL_FAIL;
            }
          }
          break;

          case 2 :
          {
            if (!(pMapInput->Inputs[2].DigiPinsIn & DIGI0) && (pMapInput->Inputs[0].DigiPinsIn & DIGI1))
            {
              pMapInput->Inputs[0].DigiPinsDir &= ~DIGI0;         // Digi 1-0 input
              pMapInput->Inputs[0].DigiPinsDir &= ~DIGI1;         // Digi 1-1 input
              pMapInput->Inputs[2].DigiPinsDir &= ~DIGI0;         // Digi 3-0 input
              pMapInput->Inputs[2].DigiPinsDir &= ~DIGI1;         // Digi 3-1 input

              pMapInput->Inputs[1].DigiPinsDir |=  DIGI0;         // Digi 2-0 output        -,
              pMapInput->Inputs[1].DigiPinsDir &= ~DIGI1;         // Digi 2-1 input     -,   |
              pMapInput->Inputs[3].DigiPinsDir &= ~DIGI0;         // Digi 4-0 input      |  -'
              pMapInput->Inputs[3].DigiPinsDir |=  DIGI1;         // Digi 4-1 output    -'

              pMapInput->Inputs[1].DigiPinsOut |=  DIGI0;         // Digi 2-0 output   high
              pMapInput->Inputs[3].DigiPinsOut &= ~DIGI1;         // Digi 4-1 output   low

              SubState++;
            }
            else
            {
              State = TSTPRG_RCX_DIGITAL_FAIL;
            }
          }
          break;

          case 3 :
          {
            if ((pMapInput->Inputs[3].DigiPinsIn & DIGI0) && !(pMapInput->Inputs[1].DigiPinsIn & DIGI1))
            {
              pMapInput->Inputs[1].DigiPinsOut &= ~DIGI0;         // Digi 2-0 output   low
              pMapInput->Inputs[3].DigiPinsOut |=  DIGI1;         // Digi 4-1 output   high

              SubState++;
            }
            else
            {
              State = TSTPRG_RCX_DIGITAL_FAIL;
            }
          }
          break;

          case 4 :
          {
            if (!(pMapInput->Inputs[3].DigiPinsIn & DIGI0) && (pMapInput->Inputs[1].DigiPinsIn & DIGI1))
            {
              pMapInput->Inputs[1].DigiPinsDir &= ~DIGI0;         // Digi 2-0 input
              pMapInput->Inputs[1].DigiPinsDir &= ~DIGI1;         // Digi 2-1 input
              pMapInput->Inputs[3].DigiPinsDir &= ~DIGI0;         // Digi 4-0 input
              pMapInput->Inputs[3].DigiPinsDir &= ~DIGI1;         // Digi 4-1 input

              State = TSTPRG_RCX_DIGITAL_OK;
            }
            else
            {
              State = TSTPRG_RCX_DIGITAL_FAIL;
            }
          }
          break;

        }
      }
    }
    break;

    case TSTPRG_RCX_DIGITAL_OK :
    {
      pMapDisplay->pTextLines[TEXTLINE_5] = (UBYTE*)TXT_RCX_DIGITAL_OK;
      pMapDisplay->UpdateMask            |= TEXTLINE_BITS;
      State = TSTPRG_RCX_DIGITAL;
    }
    break;

    case TSTPRG_RCX_DIGITAL_FAIL :
    {
      pMapDisplay->pTextLines[TEXTLINE_5] = (UBYTE*)TXT_RCX_DIGITAL_FAIL;
      pMapDisplay->UpdateMask            |= TEXTLINE_BITS;
      State = TSTPRG_RCX_DIGITAL;
    }
    break;

    case TSTPRG_RCX_DIGITAL :
    {
      if (cUiReadButtons() != BUTTON_NONE)
      {
        State = TSTPRG_SKIP_RCX;
      }
    }
    break;

    case TSTPRG_RCX_MOTOR_INIT :
    {
      pMapDisplay->pTextLines[TEXTLINE_1] = (UBYTE*)TXT_MOTOR;
      pMapDisplay->pTextLines[TEXTLINE_2] = (UBYTE*)TXT_LINE;
      pMapDisplay->pTextLines[TEXTLINE_3] = (UBYTE*)TXT_MOTOR_HEADER;
      pMapDisplay->pTextLines[TEXTLINE_4] = (UBYTE*)TXT_EMPTY;
      pMapDisplay->pTextLines[TEXTLINE_5] = (UBYTE*)TXT_EMPTY;
      pMapDisplay->pTextLines[TEXTLINE_6] = (UBYTE*)TXT_EMPTY;
      pMapDisplay->pTextLines[TEXTLINE_7] = (UBYTE*)TXT_EMPTY;
      pMapDisplay->pTextLines[TEXTLINE_8] = (UBYTE*)TXT_MOTOR_NEXT;

      for (Count = 0;Count < NO_OF_OUTPUTS;Count++)
      {
        OutputValues[Count] = 0x7FFF;
        TestPrgRunMotor(Count,0);
        strcpy((char*)TxtBuffer[Count],"                ");
        pMapDisplay->pTextLines[TEXTLINE_4 + Count] = TxtBuffer[Count];
      }

      Pointer = 0;
      pMapDisplay->UpdateMask            |= TEXTLINE_BITS;
      State = TSTPRG_RCX_MOTOR;
    }
    break;

    case TSTPRG_RCX_MOTOR :
    {
      for (Count = 0;Count < NO_OF_OUTPUTS;Count++)
      {
        if (OutputValues[Count] != (SWORD)TestPrgReadMotor(Count))
        {
          OutputValues[Count] = (SWORD)TestPrgReadMotor(Count);
          if (Pointer == Count)
          {
            sprintf((char*)TxtBuffer[Count],"> %c   %-4d  %4d",(char)Count + 'A',(SWORD)pMapOutPut->Outputs[Count].Speed,OutputValues[Count]);
          }
          else
          {
            sprintf((char*)TxtBuffer[Count],"  %c   %-4d  %4d",(char)Count + 'A',(SWORD)pMapOutPut->Outputs[Count].Speed,OutputValues[Count]);
          }
          pMapDisplay->UpdateMask |= TEXTLINE_BIT(TEXTLINE_4 + Count);
        }
      }
      switch (cUiReadButtons())
      {
        case BUTTON_LEFT :
        {
          for (Count = 0;Count < NO_OF_OUTPUTS;Count++)
          {
            OutputValues[Count]               = 0x7FFF;
            if (Pointer == Count)
            {
              TestPrgRunMotor(Count,-50);
            }
            else
            {
              TestPrgRunMotor(Count,0);
            }
          }
        }
        break;

        case BUTTON_ENTER :
        {
          for (Count = 0;Count < NO_OF_OUTPUTS;Count++)
          {
            OutputValues[Count] = 0x7FFF;
            TestPrgRunMotor(Count,0);
          }
          if (++Pointer >= NO_OF_OUTPUTS)
          {
            State = TSTPRG_SKIP_RCX_MOTOR;
          }
        }
        break;

        case BUTTON_EXIT :
        {
          State = TSTPRG_SKIP_RCX_MOTOR;
        }
        break;

        case BUTTON_RIGHT :
        {
          for (Count = 0;Count < NO_OF_OUTPUTS;Count++)
          {
            OutputValues[Count] = 0x7FFF;
            if (Pointer == Count)
            {
              TestPrgRunMotor(Count,50);
            }
            else
            {
              TestPrgRunMotor(Count,0);
            }
          }
        }
        break;

      }
    }
    break;

    case TSTPRG_SKIP_RCX_MOTOR :
    {
      for (Count = 0;Count < NO_OF_OUTPUTS;Count++)
      {
        TestPrgFloatMotor(Count);
      }
      State = TSTPRG_RCX_INIT;
    }
    break;

    case TSTPRG_SKIP_RCX :
    {
      for (Count = 0;Count < NO_OF_INPUTS;Count++)
      {
        pMapInput->Inputs[Count].SensorType     = NO_SENSOR;
      }
      pMapDisplay->EraseMask   |=  SCREEN_BIT(SCREEN_BACKGROUND);
      State = TSTPRG_RCX_INIT;
    }
    break;

#endif

    case TSTPRG_SKIP :
    {
      Count++;
      if (Count == 100)
      {
        pMapDisplay->EraseMask |=  SCREEN_BIT(SCREEN_BACKGROUND);
      }
      if (Count >= 200)
      {
        IOMapUi.Flags          |= UI_REDRAW_STATUS;
        State = 0;
      }
    }
    break;

    default :
    {
      State = SYSTEM_INIT;
    }
    break;

  }

  return (State);
}

⌨️ 快捷键说明

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