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

📄 auto.c

📁 keil C51 LCD 驱动源码,其中还有I2C驱动,ADC驱动,键盘操作等,是一个完整的keil源代码,供大家参考
💻 C
📖 第 1 页 / 共 5 页
字号:
    }
    auto_adc_phase( PhaseValue );
    bplval0 = bplval1 - bplval2;   /* best_sod - worst_sod */
    bplval0 = (bplval1 << 3) + bplval0;

    return bplval0;
#endif
}
/***************************************************************************
  Function : auto_get_zurac
  Purpose  : get Zurac register value
  Input    : Byte  Addr                Zurac register address
             Byte  Rcount              number of bytes to be read
  Output   :
  External : Byte  TruBuf[]            i2c i/o buffer
             Byte  SlvAdr              i2c slave address
             Byte  ByteCnt             i2c i/o byte count
  Return   :
***************************************************************************/
void auto_get_zurac(Byte Addr, Byte Rcount)
{
    SlvAdr = ZURAC_ADDRESS;
    ReadI2CData(Addr,Rcount);
    return;
}

/***************************************************************************
  Function : auto_zurac_restore
  Purpose  : restore Zurac Brightness and Contrast
  Input    :
  Output   :
  External : Byte  TruBuf[]            i2c i/o buffer
             Byte  SlvAdr              i2c slave address
             Byte  ByteCnt             i2c i/o byte count
             Byte  ContrastValueZ      contrast value for Zurac
             Byte  BrightnessValueZ    brightness value ofr Zurac
  Return   :
***************************************************************************/
void auto_zurac_restore()
{
    return;
}

/***************************************************************************
  Function : auto_adc_restore
  Purpose  : restore the ADC default status
  Input    :
  Output   :
  External : Byte  ModeCounter         display mode index
  Return   :
***************************************************************************/
void auto_adc_restore()
{
    ADC9884( ModeCounter );
    return;
}

/***************************************************************************
  Function : auto_adc_preset
  Purpose  : preset the ADC device to default status
  Input    :
  Output   :
  External : Byte  TruBuf[]            i2c i/o buffer
             Byte  SlvAdr              i2c slave address
             Byte  ByteCnt             i2c i/o byte count
             Byte  ModeCounter         display mode index
             Word  ClockValue          current clock value
             Byte  PhaseValue          current phase value
             Bool  CurrentHPol         current h-sync polarity
  Return   :
***************************************************************************/
void auto_adc_preset()
{
#if 0 // USE_TDA8752
    SlvAdr    = TDA8752_ADDR;
    ByteCnt   = 10;
    TrmBuf[0] = TDA_OFFSETR;
    TrmBuf[1] = 90;                // minimize the offset value
    TrmBuf[2] = TDA_COARSER;
    TrmBuf[3] = 180;
    TrmBuf[4] = TDA_FINER;
    TrmBuf[5] = 31;
    TrmBuf[6] = TDA_OFFSETG;
    TrmBuf[7] = 90;
    TrmBuf[8] = TDA_COARSEG;
    TrmBuf[9] = 180;
    SendData();

    ByteCnt   = 8;
    TrmBuf[0] = TDA_FINEG;
    TrmBuf[1] = 31;
    TrmBuf[2] = TDA_OFFSETB;
    TrmBuf[3] = 90;
    TrmBuf[4] = TDA_COARSEB;
    TrmBuf[5] = 180;
    TrmBuf[6] = TDA_FINEB;
    TrmBuf[7] = 31;
    SendData();
#endif

#if (ADC_CHIP==ADI_9884 || ADC_CHIP==FMS_9884 || ADC_CHIP==FMS_9874 ||  \
     ADC_CHIP==SCL_9884 || ADC_CHIP==TMI_9884 || ADC_CHIP==SG_9884 )
    Word wval;

    if ( ModeInputport[ModeCounter] == 2 )
        wval = (ClockValue - 1) << 4;
    else if ( ModeInputport[ModeCounter] == 1 )
        wval = (ClockValue*2 - 1) << 4;
    else /* ( ModeInputport[ModeCounter] == 0 ), single port */
        wval = (ClockValue - 1) << 4;

    SlvAdr    = AD9884_ADDR;
    ByteCnt   = 9;
    TrmBuf[0] = 0x00;
    TrmBuf[1] = HIBYTE(wval);                // Reg00 clockvalue Msb8
    TrmBuf[2] = LOBYTE(wval);                // Reg01 clockvalue lsb4
    TrmBuf[3] = 0x74;                        // Reg02 R Gain     contrast
    TrmBuf[4] = 0x74;                        // Reg03 G Gain
    TrmBuf[5] = 0x74;                        // Reg04 B Gain
    TrmBuf[6] = 0x9C;                        // Reg05 R OFFSET   brightness
    TrmBuf[7] = 0x9C;                        // Reg06 G OFFSET
    TrmBuf[8] = 0x9C;                        // Reg07 B OFFSET
    SendData();


    if( ModeInputport[ModeCounter]==1 )
    {
       ByteCnt   = 2;
       TrmBuf[0] = 0x0B;
       TrmBuf[1] = (PhaseValue & 0x0F)*2 + 1;
       TrmBuf[1] = TrmBuf[1]<<3;             // Reg0B phase
       SendData();

       ByteCnt   = 2;
       TrmBuf[0] = 0x0D;
       if( (PhaseValue&0x1F) < 16 )
          TrmBuf[1] = 0x10;                  // Reg0D
       else
          TrmBuf[1] = 0x00;                  // Reg0D
       SendData();
    }
    else
    {
       ByteCnt   = 2;
       TrmBuf[0] = 0x0B;                /* phase adjust register */
       TrmBuf[1] = ((PhaseValue%32) << 3);
       SendData();
    }
#endif
#if (ADC_CHIP==ADI_9883)
    Word wval;

    wval = (ClockValue - 1) << 4;

    SlvAdr    = AD9883_ADDR;
    ByteCnt   = 3;
    TrmBuf[0] = 0x01;
    TrmBuf[1] = HIBYTE(wval);        // Reg00 clockvalue Msb8
    TrmBuf[2] = LOBYTE(wval);        // Reg01 clockvalue lsb4
    SendData();

    SlvAdr    = AD9883_ADDR;
    ByteCnt   = 7;
    TrmBuf[0] = 0x08;
    TrmBuf[1] = 0x74;                        // Reg08 R Gain     contrast
    TrmBuf[2] = 0x74;                        // Reg09 G Gain
    TrmBuf[3] = 0x74;                        // Reg0A B Gain
    TrmBuf[4] = 0x9C;                        // Reg0B R OFFSET   brightness
    TrmBuf[5] = 0x9C;                        // Reg0C G OFFSET
    TrmBuf[6] = 0x9C;                        // Reg0D B OFFSET
    SendData();

    SlvAdr    = AD9883_ADDR;
    ByteCnt   = 2;
    TrmBuf[0] = 0x04;
    TrmBuf[1] = PhaseValue<<3;               // Reg0B phase
    SendData();
#endif
#if (ADC_CHIP==ADI_9887)
    Word wval;

    if ( ModeInputport[ModeCounter] == 2 )
        wval = (ClockValue - 1) << 4;
    else if ( ModeInputport[ModeCounter] == 1 )
        wval = (ClockValue*2 - 1) << 4;
    else /* ( ModeInputport[ModeCounter] == 0 ), single port */
        wval = (ClockValue - 1) << 4;

    SlvAdr    = AD9887_ADDR;
    ByteCnt   = 3;
    TrmBuf[0] = 0x01;
    TrmBuf[1] = HIBYTE(wval);        // Reg00 clockvalue Msb8
    TrmBuf[2] = LOBYTE(wval);        // Reg01 clockvalue lsb4
    SendData();

    SlvAdr    = AD9887_ADDR;
    ByteCnt   = 7;
    TrmBuf[0] = 0x08;
    TrmBuf[1] = 0x74;                        // Reg08 R Gain     contrast
    TrmBuf[2] = 0x74;                        // Reg09 G Gain
    TrmBuf[3] = 0x74;                        // Reg0A B Gain
    TrmBuf[4] = 0x9C;                        // Reg0B R OFFSET   brightness
    TrmBuf[5] = 0x9C;                        // Reg0C G OFFSET
    TrmBuf[6] = 0x9C;                        // Reg0D B OFFSET
    SendData();

    SlvAdr    = AD9887_ADDR;
    ByteCnt   = 2;
    TrmBuf[0] = 0x04;
    TrmBuf[1] = PhaseValue<<3;               // Reg0B phase
    SendData();
#endif
    return;
}
/***************************************************************************
  Function : auto_adc_clockphase
  Purpose  : set the TDA8752/AD9884 clock and phase value
  Input    :
  Output   :
  External : Byte  TruBuf[]            i2c i/o buffer
             Byte  SlvAdr              i2c slave address
             Byte  ByteCnt             i2c i/o byte count
             Byte  DataValue_8752[][]  DA8752 data table
             Byte  ModeCounter         display mode index
             Word  ClockValue          current clock value
             Byte  PhaseValue          current phase value
  Return   :
***************************************************************************/
void auto_adc_clockphase()
{
#if 0 // USE_TDA8752

    SlvAdr    = TDA8752_ADDR;
    ByteCnt   = 8;
    TrmBuf[0] = TDA_CONTROL;
    TrmBuf[1] = DataValue_8752[ModeCounter][0] & 0x07;

    TrmBuf[2] = TDA_VCO_R;
    TrmBuf[3] = (DataValue_8752[ModeCounter][1] & 0xF8) | (Byte)((ClockValue & 0xE00) >> 9);

    TrmBuf[4] = TDA_DIVIDER;
    TrmBuf[5] = (Byte)((ClockValue & 0x1FE)>>1);

    TrmBuf[6] = TDA_PHASEA;
    TrmBuf[7] = (PhaseValue%32)| (Byte)((ClockValue & 1)<<6);

    SendData();
#endif

#if (ADC_CHIP==ADI_9884 || ADC_CHIP==FMS_9884 || ADC_CHIP==FMS_9874 || \
     ADC_CHIP==SCL_9884 || ADC_CHIP==TMI_9884 || ADC_CHIP==SG_9884 )
    Word  wval;

    if ( ModeInputport[ModeCounter]==2 )
        wval = (ClockValue - 1) << 4;
    else if ( ModeInputport[ModeCounter]==1 )
        wval = (ClockValue*2 - 1) << 4;
    else /* ( ModeInputport[ModeCounter]==0 ), single port */
        wval = (ClockValue - 1) << 4;

    SlvAdr    = AD9884_ADDR;
    ByteCnt   = 3;
    TrmBuf[0] = 0x00;
    TrmBuf[1] = HIBYTE(wval);        /* Reg00 clockvalue MSB 8 */
    TrmBuf[2] = LOBYTE(wval);        /* Reg01 clockvalue LSB 4 */
    SendData();

    if( ModeInputport[ModeCounter]==1 )
    {
       ByteCnt   = 2;
       TrmBuf[0] = 0x0B;
       TrmBuf[1] = (PhaseValue & 0x0F)*2 + 1;
       TrmBuf[1] = TrmBuf[1]<<3;             // Reg0B phase
       SendData();

       ByteCnt   = 2;
       TrmBuf[0] = 0x0D;
       if( (PhaseValue&0x1F) < 16 )
          TrmBuf[1] = 0x10;                  // Reg0D
       else
          TrmBuf[1] = 0x00;                  // Reg0D
       SendData();
    }
    else
    {
       ByteCnt   = 2;
       TrmBuf[0] = 0x0B;                /* phase adjust register */
       TrmBuf[1] = ((PhaseValue%32) << 3);
       SendData();
    }
#endif
#if (ADC_CHIP==ADI_9883)
    Word  wval;

    wval = (ClockValue - 1) << 4;

    SlvAdr    = AD9883_ADDR;
    ByteCnt   = 3;
    TrmBuf[0] = 0x01;
    TrmBuf[1] = HIBYTE(wval);        /* Reg00 clockvalue MSB 8 */
    TrmBuf[2] = LOBYTE(wval);        /* Reg01 clockvalue LSB 4 */
    SendData();

    ByteCnt   = 2;
    TrmBuf[0] = 0x04;                /* phase adjust register */
    TrmBuf[1] = ((PhaseValue%32) << 3);
    SendData();
#endif
#if (ADC_CHIP==ADI_9887)
    Word  wval;

    if ( ModeInputport[ModeCounter]==2 )
        wval = (ClockValue - 1) << 4;
    else if ( ModeInputport[ModeCounter]==1 )
        wval = (ClockValue*2 - 1) << 4;
    else /* ( ModeInputport[ModeCounter]==0 ), single port */
        wval = (ClockValue - 1) << 4;

    SlvAdr    = AD9887_ADDR;
    ByteCnt   = 3;
    TrmBuf[0] = 0x01;
    TrmBuf[1] = HIBYTE(wval);        /* Reg00 clockvalue MSB 8 */
    TrmBuf[2] = LOBYTE(wval);        /* Reg01 clockvalue LSB 4 */
    SendData();

    ByteCnt   = 2;
    TrmBuf[0] = 0x04;                /* phase adjust register */
    TrmBuf[1] = ((PhaseValue%32) << 3);
    SendData();
#endif
    auto_short_delay(2);
    return;
}

void auto_adc_phase(Byte phase_value)
{
#if (ADC_CHIP==ADI_9884 || ADC_CHIP==FMS_9884 || ADC_CHIP==FMS_9874 || \
     ADC_CHIP==SCL_9884 || ADC_CHIP==TMI_9884 || ADC_CHIP==SG_9884 )
    SlvAdr    = AD9884_ADDR;
    if( ModeInputport[ModeCounter]==1 )
    {
       ByteCnt   = 2;
       TrmBuf[0] = 0x0B;
       TrmBuf[1] = (phase_value & 0x0F)*2 + 1;
       TrmBuf[1] = TrmBuf[1]<<3;             // Reg0B phase
       SendData();

       ByteCnt   = 2;
       TrmBuf[0] = 0x0D;
       if( (phase_value&0x1F) < 16 )
          TrmBuf[1] = 0x10;                  // Reg0D
       else
          TrmBuf[1] = 0x00;                  // Reg0D
       SendData();
    }
    else
    {
       ByteCnt   = 2;
       TrmBuf[0] = 0x0B;                /* phase adjust register */
       TrmBuf[1] = ((phase_value%32) << 3);
       SendData();
    }
#endif
#if (ADC_CHIP==ADI_9883)
    SlvAdr    = AD9883_ADDR;
    ByteCnt   = 2;
    TrmBuf[0] = 0x04;                /* phase adjust register */
    TrmBuf[1] = ((phase_value%32) << 3);
    SendData();
#endif
#if (ADC_CHIP==ADI_9887)
    SlvAdr    = AD9887_ADDR;
    ByteCnt   = 2;
    TrmBuf[0] = 0x04;                /* phase adjust register */
    TrmBuf[1] = ((phase_value%32) << 3);
    SendData();
#endif
    return;
}
/***************************************************************************
  Function : auto_clock_change
  Purpose  : Set the Zurac related registers value for clock adjustment
  Input    :
  Output   :
  External : Byte  TruBuf[]            i2c i/o buffer
             Byte  SlvAdr              i2c slave address
             Byte  ByteCnt             i2c i/o byte count
             Byte  mode_factor[]       mode factor table
             Byte  scale_factor_table[]  scaling factor table
             Byte  ModeCounter         display mode index
             Word  ClockValue          current clock value
  Return   :
***************************************************************************/
void auto_clock_change()
{
    Word  accval;

    accval = ClockValue;
    if( accval>0x07FF )  accval = 0x07FF;
    SlvAdr    = ZURAC_ADDRESS;
    ByteCnt   = 3;
    TrmBuf[0] = ZRC_IH_TOTAL;     // input Hsync total
    TrmBuf[1] = LOBYTE(accval);
    TrmBuf[2] = HIBYTE(accval);
    SendData();
 
 #if (FREERUN_AUTO==0)
    accval = 4 * mode_factor[ModeCounter];
    accval = (Word) ( ((long)ClockValue * (long)scale_factor_table[accval + Vd]) /
                    (long)scale_factor_table[accval + Vn] );
    if ( ModeInputport[ModeCounter]==2 )   /* for dual port */
        accval = accval / 2; 
 
    SlvAdr    = ZURAC_ADDRESS;
    ByteCnt   = 3;
    TrmBuf[0] = ZRC_SPH_EMU;
    TrmBuf[1] = LOBYTE(accval);
    TrmBuf[2] = HIBYTE(accval);
    SendData();
 #endif
    return;
}
/***************************************************************************
  Function : auto_min_threshold
  Purpose  : Set the Zurac related registers value for clock adjustment
  Input    : Byte  min_val             value for minimum_threhold
  Output   :
  External : Byte  TruBuf[]            i2c i/o buffer
             Byte  SlvAdr              i2c slave address

⌨️ 快捷键说明

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