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

📄 function.c

📁 LCDTV的source code,含周邊ic的driver code ,scaler ,
💻 C
字号:
/*******************************************************************************
  FUNCTION.C
  Copyright (c) SmartASIC, Inc. All rights reserved.
*******************************************************************************/
#include <MTV230.H>
#include <DEFINE.H>
/*===========================================================================

===========================================================================*/
void Set_Background(bit set, unsigned char color) {

  code unsigned char YUV[8][3]={{0x00,0x00,0x00},
                                {0x4d,0xd5,0x7f},
                                {0x95,0xab,0x95},
                                {0xe2,0x80,0x15},
                                {0x1d,0x7f,0xeb},
                                {0x6a,0x55,0x6b},
                                {0xb2,0x2b,0x80},
                                {0xff,0x00,0x00}};


  if(set) {
    STV_Byte_Write(0x30, YUV[color][0]);
    STV_Byte_Write(0x31, YUV[color][1]);
    STV_Byte_Write(0x32, YUV[color][2]);
    STV_Byte_Write(0x2d, STV_Byte_Read(0x2d)|0x10);
    }
  else {
    SA7114_Byte_Write(0x88, 0x88);
    SA7114_Byte_Write(0x88, 0xf8);
    STV_Byte_Write(0x2d, STV_Byte_Read(0x2d)&0xef);   
    }

  }

/*===========================================================================

===========================================================================*/
void Blank_TV_Screen(void) {

  Set_Mute(1);
  Set_Background(YES, BLACK);
  DelayX10ms(10);

  }


/*==============================================================================

==============================================================================*/
void Set_Mute(unsigned char mute) {

  //MUTE=mute;
  if(mute==1)
    Adjust_Volume(0);
  else
    Adjust_Volume(Volume);

  }


/*==============================================================================

==============================================================================*/
void Adjust_Volume(unsigned char value) {

code unsigned int VOLMAP[101]={
  //   0      1      2      3      4      5      6      7      8      9 
  0x0000,0x1300,0x2300,0x2D00,0x3700,0x4100,0x4500,0x4800,0x4B00,0x4D00,//0
  0x4F00,0x5100,0x5300,0x5500,0x5700,0x5800,0x5900,0x5A00,0x5B00,0x5C00,//1
  0x5d00,0x5E00,0x5F00,0x6000,0x6100,0x6200,0x6300,0x6400,0x6500,0x6600,//2
  0x6700,0x6800,0x6900,0x6A00,0x6B00,0x6C00,0x6D00,0x6E00,0x6F00,0x6F80,//3
  0x7000,0x7080,0x7100,0x7180,0x7200,0x7220,0x7240,0x7260,0x7280,0x72A0,//4
  0x72C0,0x72E0,0x7300,0x7320,0x7340,0x7360,0x7380,0x73A0,0x73C0,0x73E0,//5
  0x7400,0x7420,0x7440,0x7460,0x7480,0x74A0,0x74C0,0x74E0,0x7500,0x7520,//6
  0x7540,0x7560,0x7580,0x75A0,0x75C0,0x75E0,0x7600,0x7620,0x7640,0x7660,//7
  0x7680,0x76A0,0x76C0,0x76E0,0x7700,0x7720,0x7740,0x7760,0x7780,0x77A0,//8
  0x77C0,0x77E0,0x7800,0x7820,0x7840,0x7860,0x7880,0x78A0,0x78C0,0x78E0,//9
  0x7900};

  MSP_Write_Address(WR_DSP, 0x0000, VOLMAP[value]);//Loudspeaker
  
  }


/*==============================================================================

==============================================================================*/
void Set_Treble(unsigned char value) {

  if(value>49)
    MSP_Write_Address(WR_DSP, 0x0003, ((value-50)*2)*0x100);
  else
    MSP_Write_Address(WR_DSP, 0x0003, (255-((50-value)*2))*0x100);

  }


/*==============================================================================

==============================================================================*/
void Set_Bass(unsigned char value) {

  if(value>49)
    MSP_Write_Address(WR_DSP, 0x0002, ((value-50)*2)*0x100);
  else
    MSP_Write_Address(WR_DSP, 0x0002, (255-((50-value)*2))*0x100);

  }


/*==============================================================================

==============================================================================*/
void Set_Balance(unsigned char value) {

  if(value>49)//r
    MSP_Write_Address(WR_DSP, 0x0001, ((value-50)*2)*0x100);
  else//l
    MSP_Write_Address(WR_DSP, 0x0001, (255-((50-value)*2))*0x100);

  }


/*===========================================================================

===========================================================================*/
void Set_Color_Temp(unsigned char color_mode) {

  switch(color_mode) {
    case(0):
      ColorAddress=EE_COLOR_STD;
    break;
    case(1):
      ColorAddress=EE_COLOR_WARM;
    break;
    case(2):
      ColorAddress=EE_COLOR_COOL;
    break;
    }

  STV_Gain(0, EE_MCU_Byte_Read(ColorAddress+0));//Gain
  STV_Gain(1, EE_MCU_Byte_Read(ColorAddress+1));
  STV_Gain(2, EE_MCU_Byte_Read(ColorAddress+2));
  STV_Offset(0, EE_MCU_Byte_Read(ColorAddress+3));//Offset
  STV_Offset(1, EE_MCU_Byte_Read(ColorAddress+4));
  STV_Offset(2, EE_MCU_Byte_Read(ColorAddress+5));
    
  }


/*===========================================================================

===========================================================================*/
unsigned char Video_Detection(void) {

  unsigned char video, video_type;

  video=SA7114_Byte_Read(0x1f);

  if((video&0x40)==0x40) {//H unlocked
    video_type=NOVIDEO;
    }
  else {//H Locked
    switch(video&0x21) {
      case(0x20)://NTSC B&W
      case(0x21):
        video_type=NTSC;
        break;
      case(0x01):
        video_type=PAL;
        break;
/*      case(3):
        video_type=SECAM;
        break;*/
      default:
        video_type=NOVIDEO;
        break;
      }
    }

  return video_type;

  }


/*==============================================================================

==============================================================================*/
void Video_Setting(unsigned char v_system) {

  //===== the setting of stv102 for 50hz =====//
  code unsigned char STV_50Hz[14][2]={{0x03,0x40},{0x04,0x02},{0x07,0x3f},{0x08,0x02},{0x19,0x40},
                                      {0x1a,0x02},{0x1d,0x3f},{0x1e,0x02},{0x0b,0x1b},{0x0d,0x1a},
                                      {0x13,0x47},{0xd1,0xd8},{0xda,0x80},{0xdb,0xed}};
  //===== the setting of stv102 for 60hz =====//
  code unsigned char STV_60Hz[14][2]={{0x03,0xe4},{0x04,0x01},{0x07,0xe3},{0x08,0x01},{0x19,0xe4},
                                      {0x1a,0x01},{0x1d,0xe3},{0x1e,0x01},{0x0b,0x15},{0x0d,0x14},
                                      {0x13,0x3f},{0xd1,0xdb},{0xda,0xb0},{0xdb,0xc9}};
  //===== the setting of saa7114 for 50hz =====//
  code unsigned char SA7114_50Hz[10][2]={{0x06,0x0a},{0x07,0x00},{0x15,0x15},{0x16,0x34},
                                         {0x5a,0x0a},{0x9a,0x38},{0x9b,0x01},{0x9e,0x36},{0x9f,0x01}};
  //===== the setting of saa7114 for 60hz =====//
  code unsigned char SA7114_60Hz[10][2]={{0x06,0xeb},{0x07,0xe0},{0x15,0x11},{0x16,0x01},
                                         {0x5a,0x00},{0x9a,0x04},{0x9b,0x01},{0x9e,0x04},{0x9f,0x01}};
   
  unsigned char i;
  
  switch(v_system) {
    case(PAL):/******* input frequency is 50hz *******/
      for(i=0;i<10;i++)
        SA7114_Byte_Write(SA7114_50Hz[i][0], SA7114_50Hz[i][1]);
      for(i=0;i<14;i++)
        STV_Byte_Write(STV_50Hz[i][0], STV_50Hz[i][1]);
      SA7114_Byte_Write(0x0e, SA7114_Byte_Read(0x0e)&0xf7);
    break;
    case(NTSC):/******* input frequency is 60hz *******/
      for(i=0; i<10; i++)
        SA7114_Byte_Write(SA7114_60Hz[i][0], SA7114_60Hz[i][1]);
      for(i=0;i<14;i++)
        STV_Byte_Write(STV_60Hz[i][0], STV_60Hz[i][1]);
      SA7114_Byte_Write(0x0e, SA7114_Byte_Read(0x0e)|0x08);
    break;
    }

  }

⌨️ 快捷键说明

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