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

📄 eeprom.c

📁 keil C51 LCD 驱动源码,其中还有I2C驱动,ADC驱动,键盘操作等,是一个完整的keil源代码,供大家参考
💻 C
📖 第 1 页 / 共 2 页
字号:
/****************************************************************************
   +----------------------------------------------------------------------+
   | Copyright Trumpion Microelectronics Inc. 1999                        |
   | Trumpion Microelectronics Inc. reserves the right to change products |
   | or specifications without notice.                                    |
   +----------------------------------------------------------------------+
   Project    : LCD monitor
   Version    : 0.94
   File Name  : eeprom.c
   Functions  : EEPROM interface function implement
   Revision   :

   1999-05-18  OriginalTeam    First Created
   2000-07-17  Bill Tseng      Modified for Zurac-II
****************************************************************************/

//=========================================================================
// include files                                                          =
//=========================================================================
#include  "lib\extent.h"
#include  "lib\wreg516.h"
#include  "lib\declare.h"
#include  "lib\DEFINE.h"

#include  "lib\global.h"
#include  "lib\modedata.h"
#include  "lib\initial.h"
#include  "lib\eeprom.h"
#include        "LIB\OSDMENU.H"
/************************************************************************
 * Function    : EepromCommonRecall                                     *
 * Description : Recall                                                 *
 * Input       : ModeType                                               *
 * Output      : none                                                   *
 ************************************************************************/
Byte  EepromCommonRecall(Byte ModeType)
{
    Byte  i,csum,eecsum,misc,misc2;

    if( ModeType == 0 )
    {
       EepromRead( EE3_CHECKSUM_A0, 1);
       eecsum = TrmBuf[0];

       EepromRead( EE3_PANEL_TYPE, 8);
       for(i=csum=0; i<8; i++)
           csum += TrmBuf[i];

       if( csum != eecsum )     /* checksum error */
          return 1;

       PanelType        = TrmBuf[0];
       OSDHorPosition   = TrmBuf[1];
       OSDVerPosition   = TrmBuf[2];
       OSDLanguage      = TrmBuf[3];
       OSDTimerByte     = TrmBuf[4];
       misc             = TrmBuf[5];
       misc2            = TrmBuf[6];
       ColorTemp        = TrmBuf[7];

//     FgGammaEnable = FgTransparency = FgDosMode = 0;
       FgDosMode = FgDosMode1 =0;
       FgBurnin = 0;
       DitherMode = ScalingMode = 0;
//     if( misc & 0x80 )  FgGammaEnable  = 1;
//     if( misc & 0x40 )  FgTransparency = 1;
       if( misc & 0x40 )  FgDosMode1     = 1;
       if( misc & 0x20 )  FgDosMode      = 1;
       if( misc & 0x10 )  FgBurnin       = 1;

       if( (misc & 0x0C)==0x0C )       DitherMode = 3;
       else if( (misc & 0x0C)==0x08 )  DitherMode = 2;
       else if( (misc & 0x0C)==0x04 )  DitherMode = 1;

       ScalingMode = (misc & 0x03);

       AlphaBlending = (misc2 / 32);
       GammaIndex = misc2 & 0x1F;

//     FgShowBurnin = FgBurnin;

    }
    else if( ModeType==1 )
    {
       EepromRead( EE3_CHECKSUM_A1, 1);
       eecsum = TrmBuf[0];

       EepromRead( EE3_BRIGHTNESS, 4);
       for(i=csum=0; i<4; i++)
           csum += TrmBuf[i];

       if( csum != eecsum )     /* checksum error */
          return 1;

       EepromRead( EE3_BRIGHTNESS, 4);
       BrightnessValue  = TrmBuf[0];
       ContrastValue    = TrmBuf[1];
       BrightnessValueZ = TrmBuf[2];
       ContrastValueZ   = TrmBuf[3];
    }
    else if( ModeType==2 )
    {
       EepromRead( EE3_CHECKSUM_A2, 1);
          eecsum = TrmBuf[0];

       EepromRead( EE3_GAIN_R, 6);
       for(i=0,csum=0; i<6; i++)
           csum += TrmBuf[i];

       if( csum != eecsum )     /* checksum error */
             return 1;

#if SWAP_RED_BLUE
       U1BgainValue    = TrmBuf[0];
       U1GgainValue    = TrmBuf[1];
       U1RgainValue    = TrmBuf[2];
       M_BrightnessB   = TrmBuf[3];
       M_BrightnessG   = TrmBuf[4];
       M_BrightnessR   = TrmBuf[5];
#else
       U1RgainValue    = TrmBuf[0];
       U1GgainValue    = TrmBuf[1];
       U1BgainValue    = TrmBuf[2];
       M_BrightnessR   = TrmBuf[3];
       M_BrightnessG   = TrmBuf[4];
       M_BrightnessB   = TrmBuf[5];
#endif
    }
    else if( ModeType== 3 )
    {

//     EepromRead( EE3_ZURAC_RCONTRAST , 6);
//     ZRContrast   = TrmBuf[0];
//     ZGContrast   = TrmBuf[1];
//     ZBContrast   = TrmBuf[2];
//     ZRBrightness = TrmBuf[3];
//     ZGBrightness = TrmBuf[4];
//     ZBBrightness = TrmBuf[5];
    }


    return 0;
}

void EepromCommonStore(Byte ModeType)
{
    Byte  i,csum,misc,misc2;

    if( ModeType == 0 )
    {
       misc = 0;
//     if( FgGammaEnable  )   misc |= 0x80;
//     if( FgTransparency )   misc |= 0x40;
       if( FgDosMode1     )   misc |= 0x40;
       if( FgDosMode      )   misc |= 0x20;
       if( FgBurnin       )   misc |= 0x10;

       if( DitherMode==3 )       misc |= 0x0C;
       else if( DitherMode==2 )  misc |= 0x08;
       else if( DitherMode==1 )  misc |= 0x04;

       misc |= ScalingMode;
       misc2 = AlphaBlending << 5;
       misc2 += GammaIndex;
    
       TrmBuf[ 1] = PanelType;
       TrmBuf[ 2] = OSDHorPosition;
       TrmBuf[ 3] = OSDVerPosition;
       TrmBuf[ 4] = OSDLanguage;
       TrmBuf[ 5] = OSDTimerByte;
       TrmBuf[ 6] = misc;
       TrmBuf[ 7] = misc2;
       TrmBuf[ 8] = ColorTemp;
       for(i=1,csum=0; i<=8; i++)
           csum += TrmBuf[i];
       EepromWrite( EE3_PANEL_TYPE,8 );

       TrmBuf[ 1] = csum;
       EepromWrite( EE3_CHECKSUM_A0,1 );
       
    }
    else if( ModeType == 1 )
    {
       TrmBuf[ 1] = BrightnessValue;
       TrmBuf[ 2] = ContrastValue;
       TrmBuf[ 3] = BrightnessValueZ;
       TrmBuf[ 4] = ContrastValueZ;
       for(i=1,csum=0; i<=4; i++)
           csum += TrmBuf[i];
       EepromWrite( EE3_BRIGHTNESS,4 );

       TrmBuf[ 1] = csum;
       EepromWrite( EE3_CHECKSUM_A1,1 );
    }
    else if( ModeType == 2 )
    {
#if SWAP_RED_BLUE
       TrmBuf[1]   = U1BgainValue;
       TrmBuf[2]   = U1GgainValue;
       TrmBuf[3]   = U1RgainValue;
       TrmBuf[4]   = M_BrightnessB;
       TrmBuf[5]   = M_BrightnessG;
       TrmBuf[6]   = M_BrightnessR;
#else
       TrmBuf[1]   = U1RgainValue;
       TrmBuf[2]   = U1GgainValue;
       TrmBuf[3]   = U1BgainValue;
       TrmBuf[4]   = M_BrightnessR;
       TrmBuf[5]   = M_BrightnessG;
       TrmBuf[6]   = M_BrightnessB;
#endif
       for(i=1,csum=0; i<=6; i++)
           csum += TrmBuf[i];
       EepromWrite( EE3_GAIN_R,6);

       TrmBuf[1] = csum;
       EepromWrite( EE3_CHECKSUM_A2 , 1);  // write checksum
    }
    else if( ModeType== 3 )
    {

//     TrmBuf[0] = ZRContrast;
//     TrmBuf[1] = ZGContrast;
//     TrmBuf[2] = ZBContrast;
//     TrmBuf[3] = ZRBrightness;
//     TrmBuf[4] = ZGBrightness;
//     TrmBuf[5] = ZBBrightness;
//     EepromWrite( EE3_ZURAC_RCONTRAST , 6);
    }

       return;
}

void EepromCommonDefault(Byte ModeType)
{
    Byte  misc,misc2;

    if( ModeType == 0 )
    {
       PanelType        = EEPROMDefault_table2[ 0];
       OSDHorPosition   = EEPROMDefault_table2[ 1];
       OSDVerPosition   = EEPROMDefault_table2[ 2];
       OSDLanguage      = EEPROMDefault_table2[ 3];
       OSDTimerByte     = EEPROMDefault_table2[ 4];
       misc             = EEPROMDefault_table2[ 5];
       misc2            = EEPROMDefault_table2[ 6];
       ColorTemp        = EEPROMDefault_table2[ 7];

//     FgGammaEnable = FgTransparency = FgDosMode = 0;
       FgDosMode = FgDosMode = 0;
       FgBurnin = 0;
       DitherMode = 0;
       ScalingMode = 0;
//     if( misc & 0x80 )  FgGammaEnable  = 1;
//     if( misc & 0x40 )  FgTransparency = 1;
       if( misc & 0x40 )  FgDosMode1     = 1;
       if( misc & 0x20 )  FgDosMode      = 1;
       if( misc & 0x10 )  FgBurnin       = 1;

       if( (misc & 0x0C)==0x0C )       DitherMode = 3;
       else if( (misc & 0x0C)==0x08 )  DitherMode = 2;
       else if( (misc & 0x0C)==0x04 )  DitherMode = 1;

       ScalingMode = (misc & 0x03);
       AlphaBlending = misc2 / 32;
       GammaIndex = misc2 & 0x1F;
    }
    else if( ModeType == 1 )
    {
       BrightnessValue  = EEPROMDefault_table2[ 8];
       ContrastValue    = EEPROMDefault_table2[ 9];
       BrightnessValueZ = EEPROMDefault_table2[10];
       ContrastValueZ   = EEPROMDefault_table2[11];
    }
    else if( ModeType == 2 )
    {
       U1RgainValue     = EEPROMDefault_table2[12];
       U1GgainValue     = EEPROMDefault_table2[13];
       U1BgainValue     = EEPROMDefault_table2[14];
       M_BrightnessR    = EEPROMDefault_table2[15];
       M_BrightnessG    = EEPROMDefault_table2[16];
       M_BrightnessB    = EEPROMDefault_table2[17];
    }
    else if( ModeType == 3 )
    {
//     ZRContrast       = EEPROMDefault_table2[30];
//     ZGContrast       = EEPROMDefault_table2[31];
//     ZBContrast       = EEPROMDefault_table2[32];
//     ZRBrightness     = EEPROMDefault_table2[33];
//     ZGBrightness     = EEPROMDefault_table2[34];
//     ZBBrightness     = EEPROMDefault_table2[35];
    }


    return;
}
/************************************************************************
 * Function    : recall mode data from eeprom                           *
 * Description : recall mode data from EEPROM                           *
 * Input       : ModeCounter                                            *
 * Output      : none                                                   *
 ************************************************************************/
Byte EepromTimingRecall(Byte ModeNum)
{
    Word  wval;
    Byte  i,csum;

    wval = EE1_USER_MODEDEP+(ModeNum*USER_DATA_NUM);
    EepromRead( wval, USER_DATA_NUM);
    
    for(i=csum=0; i<7; i++)   /* checksum value */
        csum += TrmBuf[i];
        
    if( csum != TrmBuf[7] )   /* checksum error */
        return 1;
    
    wval = MAKEWORD(TrmBuf[0],TrmBuf[1]);   /* 12 bits */
    HorPositionValue = wval / 16;
    
    wval = MAKEWORD(TrmBuf[1],TrmBuf[2]);   /* 12 bits */
    VerPositionValue = wval & 0x0FFF;

    PhaseValue       = TrmBuf[3];
    ClockValue       = MAKEWORD(TrmBuf[4],TrmBuf[5]);
//  HScaling         = TrmBuf[6];
    ModeInfo         = TrmBuf[6];
    HScaling         = 0x20;
       
    return 0;
}

void EepromTimingStore(Byte ModeNum)
{
    Byte  i,j,csum;
    
    i = LOBYTE(HorPositionValue);
    j = HIBYTE(VerPositionValue);
    j = (i << 4) + (j & 0x0F);
    
    TrmBuf[1] = (Byte) (HorPositionValue / 16);   // HPOS(msb 8 bits)
    TrmBuf[2] = j;                                // HPOS(lsb 4 bits) + VPOS(msb 4 bits)
    TrmBuf[3] = (Byte) (VerPositionValue & 0xFF); // VPOS(lsb 8 bits)
    TrmBuf[4] = PhaseValue;                       // Phase
    TrmBuf[5] = HIBYTE( ClockValue );             // ClockValue
    TrmBuf[6] = LOBYTE( ClockValue );             // H-scaling
    TrmBuf[7] = ModeInfo;
//  TrmBuf[7] = HScaling;
    for(i=1,csum=0; i<=7; i++)
        csum += TrmBuf[i];
    TrmBuf[8] = csum;                             // checksum

    EepromWrite( EE1_USER_MODEDEP+(ModeNum*8) , 8);
    
    return;
}

void EepromTimingDefault(Byte ModeNum)
{
    DataPointer      = EEPROMDefault_table1[ModeNum];
    HorPositionValue = MAKEWORD(*DataPointer,*(DataPointer+1));
    VerPositionValue = MAKEWORD(*(DataPointer+2),*(DataPointer+3));
    PhaseValue       = *(DataPointer+4);
    ClockValue       = MAKEWORD(*(DataPointer+5),*(DataPointer+6));
//  HScaling         = *(DataPointer+7);
    ModeInfo         = *(DataPointer+7);
    
    return;
}

/************************************************************************
 * Function    : EepromColorRecall                                      *
 * Description : Recall                                                 *
 * Input       : ModeType - 0 : 6500                                    *
 *                          1 : 9300                                    *
 * Output      : none                                                   *
 ************************************************************************/
Byte EepromColorRecall(Byte ModeType)
{
    Word SubAddress;
    Byte  i,csum,eecsum;

    if( ModeType== COLOR_9300 )
       SubAddress = EE3_CHECKSUM_B0;      // Checksum address
    else if( ModeType== COLOR_6500 )
       SubAddress = EE3_CHECKSUM_B1;
    else if( ModeType== COLOR_5000 )
       SubAddress = EE3_CHECKSUM_B2;
    else
       SubAddress = EE3_CHECKSUM_B3;

    EepromRead( SubAddress, 1);
       eecsum = TrmBuf[0];

    if( ModeType== COLOR_9300 )
       SubAddress = EE3_GAIN_R_9300;                            // Color address
    else if( ModeType== COLOR_6500 )
       SubAddress = EE3_GAIN_R_6500;
    else if( ModeType== COLOR_5000 )
       SubAddress = EE3_GAIN_R_5000;
    else
       SubAddress = EE3_GAIN_R_USER;

    EepromRead( SubAddress, 6);
    for(i=0,csum=0; i<6; i++)
        csum += TrmBuf[i];

    if( csum != eecsum )     /* checksum error */
          return 1;

#if SWAP_RED_BLUE
        ZBContrast   = TrmBuf[0];
        ZGContrast   = TrmBuf[1];
        ZRContrast   = TrmBuf[2];
        ZBBrightness = TrmBuf[3];
        ZGBrightness = TrmBuf[4];
        ZRBrightness = TrmBuf[5];
#else
        ZRContrast   = TrmBuf[0];
        ZGContrast   = TrmBuf[1];
        ZBContrast   = TrmBuf[2];
        ZRBrightness = TrmBuf[3];
        ZGBrightness = TrmBuf[4];
        ZBBrightness = TrmBuf[5];
#endif

    return 0;
}

void EepromColorStore(Byte ModeType)
{
    Word SubAddress;
    Byte  i,csum;

    if( ModeType== COLOR_9300 )
       SubAddress = EE3_GAIN_R_9300;                            // Color address
    else if( ModeType== COLOR_6500 )

⌨️ 快捷键说明

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