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

📄 smart.c

📁 LCDTV的source code,含周邊ic的driver code ,scaler ,
💻 C
字号:
/*******************************************************************************
  SMART.C
  Copyright (c) SmartASIC, Inc. All rights reserved.
*******************************************************************************/
#include <MTV230.H>
#include <DEFINE.H>
extern void IIC_Start(void);
extern void IIC_Stop(void);
extern bit IIC_Data_In(unsigned char bytedata);
extern unsigned char IIC_Data_Out(void);
extern void Send_Acknowledge(bit ack);

idata unsigned char
IDATA_START     _at_ 0x08;
pdata unsigned char
PDATA_START     _at_ 0x80;
xdata unsigned char
XDATA_START     _at_ 0x800;

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

==============================================================================*/
unsigned int Chip_Byte_Read(unsigned char device, unsigned char address) {

  unsigned int error, bytedata;

  error=0;
  
  IIC_Start();
  if(IIC_Data_In(device))
    error=1;
  if(IIC_Data_In(address))
    error=1;
  IIC_Start();
  if(IIC_Data_In(device|1))
    error=1;
  bytedata=IIC_Data_Out();
  Send_Acknowledge(1);
  IIC_Stop();

  if(error==1)
    return 256;
  else
    return bytedata;

  }


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

==============================================================================*/
unsigned int Chip_Byte_Write(unsigned char device, unsigned char address, unsigned char bytedata) {

  unsigned int error;

  error=0;
  
  IIC_Start();
  if(IIC_Data_In(device))
    error=1;
  if(IIC_Data_In(address))
    error=1;
  if(IIC_Data_In(bytedata))
    error=1;
  IIC_Stop();

  return error;

  }
  

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

==============================================================================*/
void Print_Hex(unsigned char row, unsigned char col,
               unsigned char value, unsigned char color) {

  if((value/16)>9)
    Print_Icon(row, col, ((value/16)-10)+'A', color);
  else
    Print_Icon(row, col, (value/16)+'0', color);

  if((value%16)>9)
    Print_Icon(row, col+1, ((value%16)-10)+'A', color);
  else
    Print_Icon(row, col+1, (value%16)+'0', color);

  }


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

==============================================================================*/
void Print_Int(unsigned char row, unsigned char column,
               unsigned int value, unsigned char attribute) {

  Print_Icon(row, column++, (value/10000)+'0', attribute);
  value%=10000;
  Print_Icon(row, column++, (value/1000)+'0', attribute);
  value%=1000;
  Print_Icon(row, column++, (value/100)+'0', attribute);
  value%=100;
  Print_Icon(row, column++, (value/10)+'0', attribute);
  value%=10;
  Print_Icon(row, column, value+'0', attribute);

  }


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

==============================================================================*/
void Smart(void) {

  switch(SmartASIC) {
    case(0):
      if(bkey_code_now==KEY_CH_PLUS)
        SmartASIC=1;
      else
        SmartASIC=0;
    break;
    case(1):
      if(bkey_code_now==KEY_CH_PLUS)
        SmartASIC=2;
      else
        SmartASIC=0;
    break;
    case(2):
      if(bkey_code_now==KEY_CH_MINUS)
        SmartASIC=3;
      else
        SmartASIC=0;
    break;
    case(3):
      if(bkey_code_now==KEY_CH_MINUS)
        SmartASIC=4;
      else
        SmartASIC=0;
    break;
    case(4):
      if(bkey_code_now==KEY_VOL_PLUS)
        SmartASIC=5;
      else
        SmartASIC=0;
    break;
    case(5):
      if(bkey_code_now==KEY_VOL_MINUS)
        SmartASIC=6;
      else
        SmartASIC=0;
    break;
    case(6):
      if(bkey_code_now==KEY_VOL_PLUS)
        SmartASIC=7;
      else
        SmartASIC=0;
    break;
    case(7):
      if(bkey_code_now==KEY_VOL_MINUS)
        SmartASIC=8;
      else
        SmartASIC=0;
    break;
    }

  if(SmartASIC==8) {
    OSD_Show(0,0,0,0,0);
    bsmart=1;
    SmartASIC=0;
    Smart_Win();
    OSD_Show(1,0,0,0,0);
    }

  }


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

==============================================================================*/
void Smart_Win(void) {

  code unsigned char S_AV1[]="AV1 [AV]",
                     S_AV2[]="AV2 [S1]",
                     S_AV3[]="AV3 [S2]",
                     S_TV[]="TV      ";
  code unsigned char *SOURCE_HEADER[]={S_AV1,S_AV2,S_AV3,S_TV};

  Page=Item=0;
  Device=Address=Data=0;

  OSD_Position(20, 20);
  Clear_Screen();
  Window_Control(3, 0, 7, 0, 20, BLUE);

  Print_String(1, 1, "Device", WHITE);
  Print_String(2, 1, "Address", WHITE);
  Print_String(3, 1, "Data", WHITE);
  Print_String(4, 1, "Read", WHITE);
  Print_String(5, 1, "Write", WHITE);
  Print_String(6, 1, "Exit", WHITE);

  Print_Hex(1, 12, Device, WHITE);
  Print_Char(1, 17, Device, WHITE);
  Print_Hex(2, 10, Address/0x100, WHITE);
  Print_Hex(2, 12, Address%0x100, WHITE);
  Print_Char(2, 17, Address, WHITE);
  Print_Hex(3, 12, Data, WHITE);
  Print_Char(3, 17, Data, WHITE);

  Window_Control(2, Item+1, Item+1, 1, 19, CYAN);

  Print_String(8, 0, *(SOURCE_HEADER+Source), GREEN);

  }


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

==============================================================================*/
void Smart_OSD(void) {

  idata unsigned char *idataptr;
  pdata unsigned char *pdataptr; 
  xdata unsigned char *xdataptr; 
  unsigned char ret;

  switch(bkey_code_now) {
    //&&&&&&&&&&&&&&&&&&&&&&&&&&&& MENU &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
    case(KEY_CH_PLUS)://bsw1(MENU)
      Item=(Item+5)%6;
      Window_Control(2, Item+1, Item+1, 1, 19, CYAN);
    break;
    //&&&&&&&&&&&&&&&&&&&&&&&&&&& SELECT &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
    case(KEY_CH_MINUS)://bsw2(SELECT)
      Item=(Item+1)%6;
      Window_Control(2, Item+1, Item+1, 1, 19, CYAN);
    break;
    //&&&&&&&&&&&&&&&&&&&&&&&&&&&& LEFT &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
    case(KEY_VOL_MINUS)://bsw3(LEFT)
      switch(Item) {
        case(0):
          Device=(Device+0xff)%0x100;
          Print_Hex(1, 12, Device, WHITE);
          Print_Char(1, 17, Device, WHITE);
          Address=Data=0;
          if(Device==1)//PDATA
            Address=0x80;
          if(Device==2)//XDATA
            Address=0x800;
          Print_Hex(2, 10, Address/0x100, WHITE);
          Print_Hex(2, 12, Address%0x100, WHITE);
          Print_Int(2, 15, Address, WHITE);
          Print_Hex(3, 12, Data, WHITE);
          Print_Char(3, 17, Data, WHITE);
        break;
        case(1):
          switch(Device) {
            case(0)://IDATA
              Address=(Address+0xff)%0x100;
              if(Address==0x07)
                Address=0xff;
            break;
            case(1)://PDATA
              Address=(Address+0xff)%0x100;
              if(Address==0x7f)
                Address=0xff;
            break;
            case(2)://XDATA
              Address=(Address+0xfff)%0x1000;
              if(Address==0x800)
                Address=0xfff;
            break;
            default://Other Device
              Address=(Address+0xff)%0x100;
            break;
            }
          Print_Hex(2, 10, Address/0x100, WHITE);
          Print_Hex(2, 12, Address%0x100, WHITE);
          Print_Int(2, 15, Address, WHITE);
        break;
        case(2):
          Data=(Data+255)%256;
          Print_Hex(3, 12, Data, WHITE);
          Print_Char(3, 17, Data, WHITE);
        break;
        case(3):
          switch(Device) {
            case(0)://IDATA
              idataptr=&IDATA_START+(Address-0x00);
              Data=*idataptr;
            break;
            case(1)://PDATA
              pdataptr=&PDATA_START+(Address-0x80);
              Data=*pdataptr;
            break;
            case(2)://XDATA
              xdataptr=&XDATA_START+(Address-0x800);
              Data=*xdataptr;
            break;
            default://Other Device
              Data=Chip_Byte_Read(Device, Address);
            break;
            }
          if(Data!=256) {
            Print_Hex(3, 12, Data, WHITE);
            Print_Char(3, 17, Data, WHITE);
            Print_String(4, 10, "OK   ", RED|BLINK);
            DelayX10ms(100);
            Print_String(4, 10, "     ", RED|BLINK);
            }
          else {
            Print_String(4, 10, "Error", RED|BLINK);
            DelayX10ms(100);
            Print_String(4, 10, "     ", RED|BLINK);
            }
        break;
        case(4):
          switch(Device) {
            case(0)://IDATA
              idataptr=&IDATA_START+(Address-0x00);
              *idataptr=Data;
              ret=0;
            break;
            case(1)://PDATA
              pdataptr=&PDATA_START+(Address-0x80);
              *pdataptr=Data;
              ret=0;
            break;
            case(2)://XDATA
              xdataptr=&XDATA_START+(Address-0x800);
              *xdataptr=Data;
              ret=0;
            break;
            default://Other Device
              ret=Chip_Byte_Write(Device, Address, Data);
            break;
            }
          if(ret==1) {
            Print_String(5, 10, "Error", RED|BLINK);
            DelayX10ms(100);
            Print_String(5, 10, "     ", RED|BLINK);
            }
          else {
            Print_String(5, 10, "OK   ", RED|BLINK);
            DelayX10ms(100);
            Print_String(5, 10, "     ", RED|BLINK);
            }
        break;
        case(5):
          bsmart=Page=Item=0;
          OSD_Show(0,0,0,0,0);
        break;
        }
    break;
    //&&&&&&&&&&&&&&&&&&&&&&&&&&& RIGHT &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
    case(KEY_VOL_PLUS)://bsw4(RIGHT)
      switch(Item) {
        case(0):
          Device=(Device+0x01)%0x100;
          Print_Hex(1, 12, Device, WHITE);
          Print_Char(1, 17, Device, WHITE);
          Address=Data=0;
          if(Device==1)//PDATA
            Address=0x80;
          if(Device==2)//XDATA
            Address=0x800;
          Print_Hex(2, 10, Address/0x100, WHITE);
          Print_Hex(2, 12, Address%0x100, WHITE);
          Print_Int(2, 15, Address, WHITE);
          Print_Hex(3, 12, Data, WHITE);
          Print_Char(3, 17, Data, WHITE);
        break;
        case(1):
          switch(Device) {
            case(0)://IDATA
              Address=(Address+0x01)%0x100;
              if(Address==0x00)
                Address=0x08;
            break;
            case(1)://PDATA
              Address=(Address+0x01)%0x100;
              if(Address==0x00)
                Address=0x80;
            break;
            case(2)://XDATA
              Address=(Address+0x01)%0x1000;
              if(Address==0x00)
                Address=0x800;
            break;
            default://Other Device
              Address=(Address+0x01)%0x100;
            break;
            }
          Print_Hex(2, 10, Address/0x100, WHITE);
          Print_Hex(2, 12, Address%0x100, WHITE);
          Print_Int(2, 15, Address, WHITE);
        break;
        case(2):
          Data=(Data+1)%256;
          Print_Hex(3, 12, Data, WHITE);
          Print_Char(3, 17, Data, WHITE);
        break;
        case(3):
          switch(Device) {
            case(0)://IDATA
              idataptr=&IDATA_START+(Address-0x00);
              Data=*idataptr;
            break;
            case(1)://PDATA
              pdataptr=&PDATA_START+(Address-0x80);
              Data=*pdataptr;              
            break;
            case(2)://XDATA
              xdataptr=&XDATA_START+(Address-0x800);
              Data=*xdataptr;
            break;
            default://Other Device
              Data=Chip_Byte_Read(Device, Address);
            break;
            }
          if(Data!=256) {
            Print_Hex(3, 12, Data, WHITE);
            Print_Char(3, 17, Data, WHITE);
            Print_String(4, 10, "OK   ", RED|BLINK);
            DelayX10ms(100);
            Print_String(4, 10, "     ", RED|BLINK);
            }
          else {
            Print_String(4, 10, "Error", RED|BLINK);
            DelayX10ms(100);
            Print_String(4, 10, "     ", RED|BLINK);
            }
        break;
        case(4):
          switch(Device) {
            case(0)://IDATA
              idataptr=&IDATA_START+(Address-0x00);
              *idataptr=Data;
              ret=0;
            break;
            case(1)://PDATA
              pdataptr=&PDATA_START+(Address-0x80);
              *pdataptr=Data;
              ret=0;
            break;
            case(2)://XDATA
              xdataptr=&XDATA_START+(Address-0x800);
              *xdataptr=Data;
              ret=0;
            break;
            default://Other Device
              ret=Chip_Byte_Write(Device, Address, Data);
            break;
            }
          if(ret==1) {
            Print_String(5, 10, "Error", RED|BLINK);
            DelayX10ms(100);
            Print_String(5, 10, "     ", RED|BLINK);
            }
          else {
            Print_String(5, 10, "OK   ", RED|BLINK);
            DelayX10ms(100);
            Print_String(5, 10, "     ", RED|BLINK);
            }
        break;
        case(5):
          bsmart=Page=Item=0;
          OSD_Show(0,0,0,0,0);
        break;
        }
    break;
    }

  }

⌨️ 快捷键说明

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