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

📄 vdc_tvp5150.c

📁 很难得的最好的rtd3523系列原厂源码LCD驱动开发
💻 C
📖 第 1 页 / 共 4 页
字号:
    0x0F, 0x5B, 0xF5,
    0x00, 0x00, 0x01,
    0x01, 0x01, 0x80,
    0x01, 0x30, 0xE9,
    0x06, 0x41, 0x8E,
    0x06, 0x70, 0x8E,
    0x08, 0x06, 0x03,
    0x00, 0x80, 0x00,
    0x09, 0x80, 0x02,
    0x0E, 0xDB, 0xFF,
    0x09, 0x00, 0x81,
    0x09, 0x01, 0x02,
    0x0A, 0x00, 0x81,
    0x0A, 0x41, 0x00,
    0x01, 0x01, 0x9B,
    0x08, 0x81, 0xEB,
    0x01, 0x02, 0x07,
    0x08, 0xC2, 0x19,
    0x0E, 0x9C, 0x0A,
    0x00, 0xFF, 0xFF,
    0x01, 0x02, 0x00,
    0x00, 0x00, 0x00,
    0x08, 0x80, 0x69,
    0x01, 0x32, 0x00,
    0x0F, 0x5C, 0x0D,
    0x00, 0x00, 0x01,
    0x01, 0x02, 0x00,
    0x01, 0x32, 0x69,
    0x06, 0x42, 0x0E,
    0x06, 0x72, 0x0E,
    0x08, 0x0D, 0x04,
    0x02, 0x6F, 0x03,
    0x0B, 0x81, 0x83,
    0x00, 0x00, 0x03,
    0x08, 0x80, 0x03,
    0x0E, 0xDC, 0xDF,
    0x00, 0x00, 0x02,
    0x08, 0x80, 0x03,
    0x0E, 0xDC, 0x46,
    0x02, 0x75, 0x80,
    0x0B, 0x80, 0x10,
    0x0F, 0x1C, 0x20,
    0x0A, 0x81, 0x00,
    0x0F, 0x1C, 0x22,
    0x00, 0xC0, 0x00,
    0x09, 0x80, 0x80,
    0x0F, 0x1C, 0x22,
    0x08, 0x87, 0x0E,
    0x0F, 0x5C, 0x23,
    0x0B, 0xC7, 0x04,
    0x01, 0x00, 0x69,
    0x0B, 0x80, 0x0F,
    0x0A, 0x80, 0x07,
    0x0E, 0xDC, 0x2A,
    0x0A, 0x80, 0x02,
    0x0E, 0xDC, 0x2D,
    0x0F, 0x5C, 0x2E,
    0x00, 0xFF, 0xFF,
    0x01, 0x1D, 0x80,
    0x0F, 0x5C, 0x2E,
    0x08, 0x9D, 0xBB,
    0x01, 0x00, 0xE9,
    0x0A, 0x00, 0x88,
    0x08, 0x00, 0xBB,
    0x07, 0x00, 0x84,
    0x00, 0x00, 0x03,
    0x08, 0x80, 0x01,
    0x0E, 0x1C, 0x37,
    0x00, 0x00, 0x03,
    0x01, 0x00, 0x80,
    0x0A, 0x80, 0x82,
    0x03, 0x38, 0x81,
    0x00, 0x00, 0x00,
    0x03, 0x35, 0x80,
    0x01, 0x00, 0x16,
    0x0B, 0x80, 0x03,
    0x0A, 0x80, 0x02,
    0x0E, 0x1C, 0x48,
    0x0E, 0xDC, 0x46,
    0x01, 0x00, 0x33,
    0x0B, 0x80, 0x02,
    0x0F, 0x1C, 0x46,
    0x01, 0x32, 0x8C,
    0x01, 0x33, 0x1A,
    0x0F, 0x5C, 0x48,
    0x02, 0x18, 0xE5,
    0x02, 0x19, 0x66,
    0x00, 0x00, 0x80,
    0x02, 0x62, 0x81,
    0x09, 0x80, 0x80,
    0x0E, 0xDC, 0x55,
    0x02, 0x49, 0x00,
    0x03, 0x98, 0x80,
    0x07, 0x00, 0x04,
    0x03, 0x78, 0x00,
    0x02, 0x49, 0x80,
    0x03, 0x99, 0x00,
    0x07, 0x00, 0x04,
    0x03, 0x78, 0x80,
    0x0F, 0x5C, 0xDF,
    0x08, 0x81, 0x83,
    0x08, 0x81, 0x02,
    0x08, 0x82, 0x85,
    0x01, 0x02, 0x65,
    0x02, 0x67, 0x01,
    0x01, 0x00, 0x01,
    0x0B, 0x80, 0x01,
    0x0E, 0xDC, 0x5E,
    0x08, 0x01, 0x04,
    0x07, 0x42, 0x01,
    0x07, 0xC2, 0x81,
    0x01, 0x00, 0x01,
    0x0B, 0x80, 0x02,
    0x0E, 0xDC, 0x65,
    0x08, 0x01, 0x04,
    0x08, 0x41, 0x85,
    0x07, 0x42, 0x01,
    0x07, 0xC2, 0x81,
    0x01, 0x00, 0x01,
    0x0B, 0x80, 0x04,
    0x0E, 0xDC, 0x6C,
    0x08, 0x01, 0x04,
    0x08, 0x41, 0x85,
    0x07, 0x42, 0x01,
    0x07, 0xC2, 0x81,
    0x01, 0x00, 0x01,
    0x0B, 0x80, 0x08,
    0x0E, 0xDC, 0x73,
    0x08, 0x01, 0x04,
    0x08, 0x41, 0x85,
    0x07, 0x42, 0x01,
    0x07, 0xC2, 0x81,
    0x01, 0x00, 0x01,
    0x0B, 0x80, 0x10,
    0x0E, 0xDC, 0x7A,
    0x08, 0x01, 0x04,
    0x08, 0x41, 0x85,
    0x07, 0x42, 0x01,
    0x07, 0xC2, 0x81,
    0x01, 0x00, 0x01,
    0x0B, 0x80, 0x20,
    0x0E, 0xDC, 0x81,
    0x08, 0x01, 0x04,
    0x08, 0x41, 0x85,
    0x07, 0x42, 0x01,
    0x07, 0xC2, 0x81,
    0x01, 0x00, 0x01,
    0x0B, 0x80, 0x40,
    0x0E, 0xDC, 0x88,
    0x08, 0x01, 0x04,
    0x08, 0x41, 0x85,
    0x07, 0x42, 0x01,
    0x07, 0xC2, 0x81,
    0x07, 0x00, 0x81,
    0x0B, 0x80, 0xC0,
    0x0E, 0xDC, 0x8F,
    0x08, 0x01, 0x04,
    0x08, 0x41, 0x85,
    0x07, 0x01, 0x87,
    0x07, 0x81, 0x07,
    0x01, 0x00, 0x02,
    0x0A, 0x80, 0x00,
    0x0E, 0x1C, 0x95,
    0x00, 0x00, 0x00,
    0x03, 0x98, 0x80,
    0x07, 0x00, 0x04,
    0x03, 0x78, 0x00,
    0x08, 0x81, 0x83,
    0x08, 0x81, 0x02,
    0x08, 0x82, 0x85,
    0x01, 0x02, 0x66,
    0x02, 0x67, 0x01,
    0x01, 0x00, 0x01,
    0x0B, 0x80, 0x01,
    0x0E, 0xDC, 0xA1,
    0x08, 0x01, 0x04,
    0x07, 0x42, 0x01,
    0x07, 0xC2, 0x81,
    0x01, 0x00, 0x01,
    0x0B, 0x80, 0x02,
    0x0E, 0xDC, 0xA8,
    0x08, 0x01, 0x04,
    0x08, 0x41, 0x85,
    0x07, 0x42, 0x01,
    0x07, 0xC2, 0x81,
    0x01, 0x00, 0x01,
    0x0B, 0x80, 0x04,
    0x0E, 0xDC, 0xAF,
    0x08, 0x01, 0x04,
    0x08, 0x41, 0x85,
    0x07, 0x42, 0x01,
    0x07, 0xC2, 0x81,
    0x01, 0x00, 0x01,
    0x0B, 0x80, 0x08,
    0x0E, 0xDC, 0xB6,
    0x08, 0x01, 0x04,
    0x08, 0x41, 0x85,
    0x07, 0x42, 0x01,
    0x07, 0xC2, 0x81,
    0x01, 0x00, 0x01,
    0x0B, 0x80, 0x10,
    0x0E, 0xDC, 0xBD,
    0x08, 0x01, 0x04,
    0x08, 0x41, 0x85,
    0x07, 0x42, 0x01,
    0x07, 0xC2, 0x81,
    0x01, 0x00, 0x01,
    0x0B, 0x80, 0x20,
    0x0E, 0xDC, 0xC4,
    0x08, 0x01, 0x04,
    0x08, 0x41, 0x85,
    0x07, 0x42, 0x01,
    0x07, 0xC2, 0x81,
    0x01, 0x00, 0x01,
    0x0B, 0x80, 0x40,
    0x0E, 0xDC, 0xCB,
    0x08, 0x01, 0x04,
    0x08, 0x41, 0x85,
    0x07, 0x42, 0x01,
    0x07, 0xC2, 0x81,
    0x07, 0x00, 0x81,
    0x0B, 0x80, 0xC0,
    0x0E, 0xDC, 0xD2,
    0x08, 0x01, 0x04,
    0x08, 0x41, 0x85,
    0x07, 0x01, 0x87,
    0x07, 0x81, 0x07,
    0x01, 0x00, 0x82,
    0x00, 0x5A, 0xBD,
    0x08, 0x80, 0x80,
    0x0E, 0x1C, 0xDC,
    0x01, 0x00, 0x02,
    0x0A, 0x80, 0x00,
    0x0E, 0x1C, 0xDC,
    0x00, 0x00, 0x00,
    0x03, 0x99, 0x00,
    0x07, 0x00, 0x04,
    0x03, 0x78, 0x80,
    0x0F, 0xBF, 0xFF
};

void CVdcBitDly(void)
{
    _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
   _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
   _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
    _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
}
BYTE CVdcI2CGetByte(BYTE ack) 
{
    BYTE r, m;

    r = 0;

    for (m = 0; m < 8; m++)         // Each bit at a time, MSB first
    {
        bI2CSCL= 1;
        CVdcBitDly();                   // Delay

        r   = (r << 1) | bI2CSDA;

        bI2CSCL    = 0;
        CVdcBitDly();                   // Delay
    }  

    // Send ACK according to 'ack'
    bI2CSDA    = (bit)(ack & 0x01);
    CVdcBitDly();                       // Delay
    
    bI2CSCL    = 1; 
    CVdcBitDly();                       // Delay
    
    bI2CSCL    = 0; 
    CVdcBitDly();                       // Delay
    
    bI2CSDA    = 1;

    return (r);
}

void CVdcI2CSendByte(BYTE send)
{
    BYTE m;
    
    for (m = 0; m < 8; m++)
    {
        bI2CSDA    = (bit)(send & 0x80);   // Send each bit, MSB first
        CVdcBitDly();

        bI2CSCL    = 1;
        CVdcBitDly();

        bI2CSCL    = 0;

        send    = send << 1;
    }

    bI2CSDA    = 1;
    bI2CSCL    = 1;
    CVdcBitDly();

    bI2CSCL    = 0;
    CVdcBitDly();
} 

void CVdcI2CSendAddr(BYTE addr, BYTE index, BYTE rd)
{                  
    bI2CSCL    = 1;
    bI2CSDA    = 0;    // Start
    CVdcBitDly();

    bI2CSCL    = 0;
    CVdcI2CSendByte(addr + rd);             // Send address byte

    if (0 == rd)    CVdcI2CSendByte(index); // Send index byte  
}

void CVdcI2CSendStop(void)
{
    bI2CSDA    = 0; 
    CVdcBitDly();

    bI2CSCL    = 1;
    CVdcBitDly();

    bI2CSDA    = 1;
    CVdcBitDly();
}

void CVdcI2cRead(BYTE addr, BYTE index, BYTE count)
{
   BYTE n;
   
    if (count==1)
    {
        CVdcI2CSendAddr(addr, index, 0);

		CVdcI2CSendStop();
		
        CVdcI2CSendAddr(addr, 0, 1);
		
        count   = count - 1;

        for (n = 0; n < count; n++)     pData[n] = CVdcI2CGetByte(0);

        pData[count] = CVdcI2CGetByte(1);

		CTimerDelayXms(1);
		
        CVdcI2CSendStop();
		
		CTimerDelayXms(10);
    }
}
 
void CVdcWrite(BYTE *array)
{
    BYTE len;
	
    do
    {
        if (0 == array[0])     return;

        len     = array[0] - 3;
        array   = array + 1;

        CVdcI2CSendAddr(array[0], array[1], 0);
        array   = array + 2;
        do
        {
          CVdcI2CSendByte(*array++);
        }
        while (--len);
        CTimerDelayXms(1);
        CVdcI2CSendStop();
        CTimerDelayXms(10);

    }
    while (1);
}

void CVdcI2cWrite(BYTE ucDeviceAddr, BYTE ucStartAddr, BYTE * pWriteArray)
{
	pData[0] = 4;
	pData[1] = ucDeviceAddr;
	pData[2] = ucStartAddr;
	pData[3] = *pWriteArray;
	pData[4] = 0;
	CVdcWrite(pData);
		
}



///////////////////////////////////////////////////

BYTE CAdjustPercentValue(BYTE srcValue, BYTE srcMax, BYTE srcMin)
{
	WORD usTemp;
	if (srcValue>100)
		srcValue = 50;
	/* This line 
	usTemp = (srcValue * (srcMax-srcMin)) /100 + srcMin;
	*/
	usTemp = srcMax-srcMin;
	usTemp *= srcValue;
	usTemp /= 100;
	usTemp += srcMin;
	
	return ((BYTE)usTemp);
}
BYTE CAdjustRealValue(BYTE srcItem, BYTE srcSliderValue, BYTE srcSliderMax, BYTE srcMax, BYTE srcMid, BYTE srcMin)
{
	WORD usTemp;

	srcItem = srcItem;

	if (srcSliderValue == srcSliderMax)
		return (srcMax);
	if (srcSliderValue == 0)
		return (srcMin);

	if (srcItem == _MENU_MU_SHARPNESS) {
		if (srcSliderValue<5)
			return 0;
		else if (srcSliderValue<10)
			return 1;
		else if (srcSliderValue<15)
			return 2;
		else 
			return 3;

	}
	
	if (srcSliderValue>srcSliderMax)
		srcSliderValue = srcSliderMax/2;
	/* This line 
	usTemp = (srcValue * (srcMax-srcMin)) /100 + srcMin;
	*/

	if (srcSliderValue > srcSliderMax/2) {
		usTemp = srcMax-srcMid;
		usTemp *= (srcSliderValue-srcSliderMax/2);
		usTemp /= srcSliderMax/2;
		usTemp += srcMid;
	}
	else {
		usTemp = srcMid-srcMin;
		usTemp *= (srcSliderValue);
		usTemp /= srcSliderMax/2;
		usTemp += srcMin;
	}
	
	return ((BYTE)usTemp);
}

void CAdjustVideoContrast(void)
{
	BYTE ucTemp;
	//ucTemp = CAdjustPercentValue(stVideoData.Contrast, _VCONTRAST_MAX, _VCONTRAST_MIN);
	ucTemp = CAdjustRealValue(_MENU_MU_CONTRAST, _SLIDER_MAX_CONTRAST-stVideoData.Contrast, _SLIDER_MAX_CONTRAST,_VCONTRAST_MAX, _VCONTRAST_MID, _VCONTRAST_MIN);

	//x.hu, 20050806, add
	//reverse control direction
	//ucTemp = (_VCONTRAST_MAX - ucTemp) + _VCONTRAST_MIN;

	CVdcI2cWrite(_VIDEO_DEVICE, ADDRESS(0x0C),&ucTemp);
}


void CAdjustVideoBright(void)
{
#if (_SLIDER_MAX_BRIGHTNESS == 15)
#define DIGITAL_BRI_MIN		(0x50+5)
#define DIGITAL_BRI_MAX		(0x50+3*15+5)
#define DIGITAL_BRI_STEP	((DIGITAL_BRI_MAX-DIGITAL_BRI_MIN)/_SLIDER_MAX_BRIGHTNESS)
	BYTE ucTemp;
	/////////////////////////////
	stConBriData.Brightness = DIGITAL_BRI_MIN + DIGITAL_BRI_STEP*stVideoData.Brightness;
	CAdjustBrightness();
	CEepromSaveBriConData();
	
	////////////////////////////
	//ucTemp = CAdjustPercentValue(stVideoData.Brightness, _VBRIGHT_MAX, _VBRIGHT_MIN);
	//ucTemp = CAdjustRealValue(_MENU_MU_BRIGHT, 6/*stVideoData.Brightness*/, _SLIDER_MAX_BRIGHTNESS,_VBRIGHT_MAX, _VBRIGHT_MID, _VBRIGHT_MIN);
	ucTemp = 0x68;	
	CVdcI2cWrite(_VIDEO_DEVICE, ADDRESS(0x09), &ucTemp);

#else
#define DIGITAL_BRI_MAX		(0x50+100/2)
#define DIGITAL_BRI_MIN		0x50
#define DIGITAL_BRI_STEP	1//((DIGITAL_BRI_MAX-DIGITAL_BRI_MIN)/_SLIDER_MAX_BRIGHTNESS)
	BYTE ucTemp;
	/////////////////////////////
	stConBriData.Brightness = DIGITAL_BRI_MIN + DIGITAL_BRI_STEP*(stVideoData.Brightness/2);
	CAdjustBrightness();
	CEepromSaveBriConData();
	
	////////////////////////////
	//ucTemp = CAdjustPercentValue(stVideoData.Brightness, _VBRIGHT_MAX, _VBRIGHT_MIN);
	//ucTemp = CAdjustRealValue(_MENU_MU_BRIGHT, /*stVideoData.Brightness*/, _SLIDER_MAX_BRIGHTNESS,_VBRIGHT_MAX, _VBRIGHT_MID, _VBRIGHT_MIN);
	ucTemp = 0x68;
	CVdcI2cWrite(_VIDEO_DEVICE, ADDRESS(0x09), &ucTemp);
#endif


}

void CAdjustVideoSaturation(void)
{
	BYTE ucTemp;
	//ucTemp = CAdjustPercentValue(stVideoData.Saturation, _VSATURATION_MAX, _VSATURATION_MIN);
	ucTemp = CAdjustRealValue(_MENU_MU_SATURATION, stVideoData.Saturation, _SLIDER_MAX_SATURATION,_VSATURATION_MAX, _VSATURATION_MID, _VSATURATION_MIN);
	CVdcI2cWrite(_VIDEO_DEVICE, ADDRESS(0x0A), &ucTemp);
}

void CAdjustVideoHue(void)
{
/*	BYTE ucTemp;
	if (CHECK50HZ()) {
		ucTemp = 0x00;
	}
	else{
		ucTemp = CAdjustPercentValue(stVideoData.Hue, _VHUE_MAX, _VHUE_MIN);
		ucTemp = ucTemp^0x80;
	}
	CVdcI2cWrite(_VIDEO_DEVICE, ADDRESS(0x0B), &ucTemp);
	*/
	BYTE ucTemp;
		//ucTemp = CAdjustPercentValue(stVideoData.Hue, _VHUE_MAX, _VHUE_MIN);
	if (CHECK50HZ()) {
		ucTemp = 0x00;
	}
	else{

⌨️ 快捷键说明

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