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

📄 hx8824.c

📁 一个LCD TV的源程序, 用的是realtek的IC
💻 C
📖 第 1 页 / 共 4 页
字号:
/*********************************************************************

      COPYRIGHT  (C)  Himax Technologies, Inc.

      File name     : HX8824.c

      Description   : Implement HX8824 control function

      Author        : Taylor

      Create date   : 2004/10/01

      Modifications :

*********************************************************************/

#define _HX8824_C

/********************** Include Section *****************************/

#include "hx8824.h"
#include "rs232.h"
#include "osd.h"
#include "Key.h"

/**************** Function Implement Section ************************/

/* ================================================================
    Name    : Init_HX8824
    Purpose : Initial HX8824 Device
    Passed  : None
    Notes   : None
   ================================================================ */

void Init_HX8824(void)
{

//***************** version B***********************************************
/*
    I2CWriteByte(HX8824_ADDR, 0x41, 0x10);  // initial Image enhancement
    I2CWriteByte(HX8824_ADDR, 0x42, 0xf0);
    I2CWriteByte(HX8824_ADDR, 0x43, 0x00);
    I2CWriteByte(HX8824_ADDR, 0x44, 0xf0);
    I2CWriteByte(HX8824_ADDR, 0x45, 0x0c);
    I2CWriteByte(HX8824_ADDR, 0x46, 0x80);
    I2CWriteByte(HX8824_ADDR, 0x47, 0x80);
    I2CWriteByte(HX8824_ADDR, 0x48, 0x00);
    I2CWriteByte(HX8824_ADDR, 0x49, 0x00);
    I2CWriteByte(HX8824_ADDR, 0x4A, 0x80);
    I2CWriteByte(HX8824_ADDR, 0x4B, 0x00);
*/
    I2CWriteByte(HX8824_ADDR, 0x14, 0x00);
    I2CWriteByte(HX8824_ADDR, 0x15, 0x00);
    I2CWriteByte(HX8824_ADDR, 0x16, 0x00);
    I2CWriteByte(HX8824_ADDR, 0x17, 0x00);	  
    I2CWriteByte(HX8824_ADDR, 0x19, 0x02);
    I2CWriteByte(HX8824_ADDR, 0xD6, 0x18);   //PWM control2 default value
    I2CWriteByte(HX8824_ADDR, 0xD7, 0x12);   //PWM control2 default value
    I2CWriteByte(HX8824_ADDR, 0xD8, 0x00);   //PWM control2 default value
    I2CWriteByte(HX8824_ADDR, 0xD9, 0x00);   //PWM control2 default value
    I2CWriteByte(HX8824_ADDR, 0xDA, 0x00);   //PWM control2 default value
    I2CWriteByte(HX8824_ADDR, 0xDB, 0x00);   //PWM control2 default value  
    //I2CWriteByte(HX8824_ADDR, 0x76, 0x07);   // bitwise for 3 channel	   
    I2CWriteByte(HX8824_ADDR, 0xE3, 0x01);	  // TCON bypass

//***************** Version A************************************************
/*
    I2CWriteByte(HX8824_ADDR, 0x41, 0x10);  // initial Image enhancement
    I2CWriteByte(HX8824_ADDR, 0x42, 0x00);
    I2CWriteByte(HX8824_ADDR, 0x43, 0x80);
    I2CWriteByte(HX8824_ADDR, 0x44, 0x80);
    I2CWriteByte(HX8824_ADDR, 0x45, 0x00);
    I2CWriteByte(HX8824_ADDR, 0x46, 0x00);
    I2CWriteByte(HX8824_ADDR, 0x70, 0x00);  // enable dithering
*/
    /*
    I2CWriteByte(HX8824_ADDR, 0x71, 0x5F);  // 0x5F dithering mode  (78h will cause flicker in 32 gray in green?)
    I2CWriteByte(HX8824_ADDR, 0x72, 0x2D);  //
    I2CWriteByte(HX8824_ADDR, 0x73, 0x36);
    I2CWriteByte(HX8824_ADDR, 0x74, 0x8D);
    I2CWriteByte(HX8824_ADDR, 0x75, 0x63);
    */
    /*
    I2CWriteByte(HX8824_ADDR, 0x71, 0x78);  // 0x5F dithering mode  (78h will cause flicker in 32 gray in green?)
    I2CWriteByte(HX8824_ADDR, 0x72, 0x2D);  //
    I2CWriteByte(HX8824_ADDR, 0x73, 0x36);
    I2CWriteByte(HX8824_ADDR, 0x74, 0x8D);
    I2CWriteByte(HX8824_ADDR, 0x75, 0x63);
    */

    I2CWriteByte(HX8824_ADDR, 0x71, 0x39);  // 0x5F dithering mode  (78h will cause flicker in 32 gray in green?)
    I2CWriteByte(HX8824_ADDR, 0x72, 0x1B);  //
    I2CWriteByte(HX8824_ADDR, 0x73, 0x93);
    I2CWriteByte(HX8824_ADDR, 0x74, 0x39);
    I2CWriteByte(HX8824_ADDR, 0x75, 0x87);

//**************** PWM setting ***********************************************
/*
    I2CWriteByte(HX8824_ADDR, 0xD7, 0x02);  // Enable PWM
    I2CWriteByte(HX8824_ADDR, 0xD8, 0x0D);  // Enable PWM
    I2CWriteByte(HX8824_ADDR, 0xD9, 0x00);  // Enable PWM
    DelayX1ms(10);
    I2CWriteByte(HX8824_ADDR, 0xD6, 0x3E);  // Enable PWM
*/
    // Dump to RS232
    //Puts_UART("HX8824 ID="),HexTobyStr((Byte)TestPattern),Puts_UART(byStr),Puts_UART("\r\n");


#if mode6448_8060
    // Select source from VGA
    bVideo = 0;
    S1 = 1;
    S2 = 0;
    Mode = 0;
    I2CWriteByte(HX8824_ADDR,0x00, 0x80);   // input h size
    I2CWriteByte(HX8824_ADDR,0x01, 0x02);
    I2CWriteByte(HX8824_ADDR,0x02, 0xE0);   // input v size
    I2CWriteByte(HX8824_ADDR,0x03, 0x01);
    I2CWriteByte(HX8824_ADDR,0x10, 0x1C);   // input format select
    I2CWriteByte(HX8824_ADDR,0x11, 0x04);
    I2CWriteByte(HX8824_ADDR,0x20, 0xCC);
    I2CWriteByte(HX8824_ADDR,0x21, 0x0C);
    I2CWriteByte(HX8824_ADDR,0x22, 0xFF);
    I2CWriteByte(HX8824_ADDR,0x23, 0x0F);
    I2CWriteByte(HX8824_ADDR,0x20, 0xCC);
    I2CWriteByte(HX8824_ADDR,0x21, 0x0C);
    I2CWriteByte(HX8824_ADDR,0x22, 0xFF);
    I2CWriteByte(HX8824_ADDR,0x23, 0x1F);
    I2CWriteByte(HX8824_ADDR,0x24, 0x00);
    I2CWriteByte(HX8824_ADDR,0x25, 0x00);
    I2CWriteByte(HX8824_ADDR,0x24, 0x00);
    I2CWriteByte(HX8824_ADDR,0x25, 0x04);
    I2CWriteByte(HX8824_ADDR,0xA0, 0xD8);
    I2CWriteByte(HX8824_ADDR,0xA1, 0x1D);
    I2CWriteByte(HX8824_ADDR,0xA2, 0x00);
    I2CWriteByte(HX8824_ADDR,0x90, 0xF8);
    I2CWriteByte(HX8824_ADDR,0x91, 0x03);
    I2CWriteByte(HX8824_ADDR,0x92, 0x48);
    I2CWriteByte(HX8824_ADDR,0x93, 0x00);
    I2CWriteByte(HX8824_ADDR,0x94, 0x90);
    I2CWriteByte(HX8824_ADDR,0x95, 0x00);
    I2CWriteByte(HX8824_ADDR,0x96, 0x20);
    I2CWriteByte(HX8824_ADDR,0x97, 0x03);
    I2CWriteByte(HX8824_ADDR,0x98, 0x92);
    I2CWriteByte(HX8824_ADDR,0x99, 0x02);
    I2CWriteByte(HX8824_ADDR,0x9A, 0x13);
    I2CWriteByte(HX8824_ADDR,0x9B, 0x00);
    I2CWriteByte(HX8824_ADDR,0x9C, 0x26);
    I2CWriteByte(HX8824_ADDR,0x9D, 0x00);
    I2CWriteByte(HX8824_ADDR,0x9E, 0x58);
    I2CWriteByte(HX8824_ADDR,0x9F, 0x02);
    //*****************  PLL ********************************************************
    I2CWriteByte(HX8824_ADDR, 0xD0, 0x03);  // P1
    I2CWriteByte(HX8824_ADDR, 0xD1, 0x04);  // P2
    I2CWriteByte(HX8824_ADDR, 0xD2, 0x08);  // N
    I2CWriteByte(HX8824_ADDR, 0xD3, 0x77);  // M: 120-1
    I2CWriteByte(HX8824_ADDR, 0xD4, 0x00);  // M
#endif
//**************************************************************************************
#if mode6448_8048
    // Select source from VGA
    bVideo = 0;
    S1 = 1;
    S2 = 0;
    Mode = 1;
    I2CWriteByte(HX8824_ADDR, 0x10, 0x1C);
    I2CWriteByte(HX8824_ADDR, 0x11, 0x04);
    I2CWriteByte(HX8824_ADDR, 0x20, 0x00);
    I2CWriteByte(HX8824_ADDR, 0x21, 0x10);
    I2CWriteByte(HX8824_ADDR, 0x22, 0xFF);
    I2CWriteByte(HX8824_ADDR, 0x23, 0x0F);
    I2CWriteByte(HX8824_ADDR, 0x20, 0xCC);
    I2CWriteByte(HX8824_ADDR, 0x21, 0x0C);
    I2CWriteByte(HX8824_ADDR, 0x22, 0xFF);
    I2CWriteByte(HX8824_ADDR, 0x23, 0x1F);
    I2CWriteByte(HX8824_ADDR, 0x24, 0x00);
    I2CWriteByte(HX8824_ADDR, 0x25, 0x00);
    I2CWriteByte(HX8824_ADDR, 0x24, 0x00);
    I2CWriteByte(HX8824_ADDR, 0x25, 0x04);
    I2CWriteByte(HX8824_ADDR, 0xA0, 0xe2);  // 88  e2
    I2CWriteByte(HX8824_ADDR, 0xA1, 0x13);  // 17  13
    I2CWriteByte(HX8824_ADDR, 0xA2, 0x00);
    I2CWriteByte(HX8824_ADDR, 0x00, 0x80);
    I2CWriteByte(HX8824_ADDR, 0x01, 0x02);
    I2CWriteByte(HX8824_ADDR, 0x02, 0xE0);
    I2CWriteByte(HX8824_ADDR, 0x03, 0x01);
    I2CWriteByte(HX8824_ADDR, 0x90, 0x20);
    I2CWriteByte(HX8824_ADDR, 0x91, 0x04);
    I2CWriteByte(HX8824_ADDR, 0x92, 0x3F);
    I2CWriteByte(HX8824_ADDR, 0x93, 0x00);
    I2CWriteByte(HX8824_ADDR, 0x94, 0x7A);
    I2CWriteByte(HX8824_ADDR, 0x95, 0x00);
    I2CWriteByte(HX8824_ADDR, 0x96, 0x20);
    I2CWriteByte(HX8824_ADDR, 0x97, 0x03);
    I2CWriteByte(HX8824_ADDR, 0x98, 0x0D);
    I2CWriteByte(HX8824_ADDR, 0x99, 0x02);
    I2CWriteByte(HX8824_ADDR, 0x9A, 0x03);
    I2CWriteByte(HX8824_ADDR, 0x9B, 0x00);
    I2CWriteByte(HX8824_ADDR, 0x9C, 0x20);
    I2CWriteByte(HX8824_ADDR, 0x9D, 0x00);
    I2CWriteByte(HX8824_ADDR, 0x9E, 0xE0);
    I2CWriteByte(HX8824_ADDR, 0x9F, 0x01);
    //**************** 0x10-->0x0C or 0x08(DE only, no VS & HS)**********************
//    I2CWriteByte(HX8824_ADDR, 0x14, 0x00);   // 0x21~0x23  will be ok
//    I2CWriteByte(HX8824_ADDR, 0x15, 0x00);
    //*****************  PLL ********************************************************
    I2CWriteByte(HX8824_ADDR, 0xD0, 0x03);    // P1
    I2CWriteByte(HX8824_ADDR, 0xD1, 0x04);    // P2
    I2CWriteByte(HX8824_ADDR, 0xD2, 0x08);    // N
    I2CWriteByte(HX8824_ADDR, 0xD3, 0x63);    // M: 100-1
    I2CWriteByte(HX8824_ADDR, 0xD4, 0x00);    // M
#endif
//****************************************************************************************
#if mode6448_6448
    // Select source from VGA
    bVideo = 0;
    S1 = 1;
    S2 = 0;
    Mode = 2;
    I2CWriteByte(HX8824_ADDR, 0x10, 0x1C);    // USE EXTERNAL SYNC AND DE
    I2CWriteByte(HX8824_ADDR, 0x11, 0x04);
    I2CWriteByte(HX8824_ADDR, 0x20, 0x00);
    I2CWriteByte(HX8824_ADDR, 0x21, 0x10);
    I2CWriteByte(HX8824_ADDR, 0x22, 0xFF);
    I2CWriteByte(HX8824_ADDR, 0x23, 0x0F);
    I2CWriteByte(HX8824_ADDR, 0x20, 0x00);
    I2CWriteByte(HX8824_ADDR, 0x21, 0x10);
    I2CWriteByte(HX8824_ADDR, 0x22, 0xFF);
    I2CWriteByte(HX8824_ADDR, 0x23, 0x1F);
    I2CWriteByte(HX8824_ADDR, 0x24, 0x00);
    I2CWriteByte(HX8824_ADDR, 0x25, 0x00);
    I2CWriteByte(HX8824_ADDR, 0x24, 0x00);
    I2CWriteByte(HX8824_ADDR, 0x25, 0x04);
    I2CWriteByte(HX8824_ADDR, 0x27, 0x05);    //DELAY
    I2CWriteByte(HX8824_ADDR, 0xA0, 0x1E);
    I2CWriteByte(HX8824_ADDR, 0xA1, 0x07);
    I2CWriteByte(HX8824_ADDR, 0xA2, 0x00);
    I2CWriteByte(HX8824_ADDR, 0x00, 0x80);
    I2CWriteByte(HX8824_ADDR, 0x01, 0x02);
    I2CWriteByte(HX8824_ADDR, 0x02, 0xE0);
    I2CWriteByte(HX8824_ADDR, 0x03, 0x01);
    I2CWriteByte(HX8824_ADDR, 0x90, 0x20);
    I2CWriteByte(HX8824_ADDR, 0x91, 0x03);
    I2CWriteByte(HX8824_ADDR, 0x92, 0x60);
    I2CWriteByte(HX8824_ADDR, 0x93, 0x00);
    I2CWriteByte(HX8824_ADDR, 0x94, 0x90);
    I2CWriteByte(HX8824_ADDR, 0x95, 0x00);
    I2CWriteByte(HX8824_ADDR, 0x96, 0x80);
    I2CWriteByte(HX8824_ADDR, 0x97, 0x02);
    I2CWriteByte(HX8824_ADDR, 0x98, 0x0D);
    I2CWriteByte(HX8824_ADDR, 0x99, 0x02);
    I2CWriteByte(HX8824_ADDR, 0x9A, 0x02);
    I2CWriteByte(HX8824_ADDR, 0x9B, 0x00);
    I2CWriteByte(HX8824_ADDR, 0x9C, 0x23);
    I2CWriteByte(HX8824_ADDR, 0x9D, 0x00);
    I2CWriteByte(HX8824_ADDR, 0x9E, 0xE0);
    I2CWriteByte(HX8824_ADDR, 0x9F, 0x01);
    //*****************  PLL ********************************************************
    I2CWriteByte(HX8824_ADDR, 0xD0, 0x08);  // P1
    I2CWriteByte(HX8824_ADDR, 0xD1, 0x08);  // P2
    I2CWriteByte(HX8824_ADDR, 0xD2, 0x0C);  // N
    I2CWriteByte(HX8824_ADDR, 0xD3, 0xF5);  // M: 246 -1
    I2CWriteByte(HX8824_ADDR, 0xD4, 0x00);  // M
#endif
//***************************************************************************************
#if mode6448_3224
    // Select source from VGA
    bVideo = 0;
    S1 = 1;
    S2 = 0;
    Mode = 3;
    I2CWriteByte(HX8824_ADDR, 0x10, 0x1C);   // input format select
    I2CWriteByte(HX8824_ADDR, 0x11, 0x04);
    I2CWriteByte(HX8824_ADDR, 0x20, 0x00);
    I2CWriteByte(HX8824_ADDR, 0x21, 0x20);
    I2CWriteByte(HX8824_ADDR, 0x22, 0xFF);
    I2CWriteByte(HX8824_ADDR, 0x23, 0x0F);
    I2CWriteByte(HX8824_ADDR, 0x20, 0x00);
    I2CWriteByte(HX8824_ADDR, 0x21, 0x20);
    I2CWriteByte(HX8824_ADDR, 0x22, 0xFF);

⌨️ 快捷键说明

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