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

📄 access.c

📁 keil c51平台,此代码可用于学习TFT LCD TV 搜台等,(本人自己修改)
💻 C
字号:
#define __ACCESS__

#include "reg52.h"
#include "intrins.h"

#include "MAIN_DEF.H"
#include "ACCESS.h"
#include "CONFIG.H"
#include "MTV512.H"

void BitDly(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_();
}

void I2CRead(unsigned char addr, unsigned char index, unsigned char count)
{
    unsigned char   n;

    if (count)
    {
        I2CSendAddr(addr, index, 0);
        
        I2CSendAddr(addr, 0, 1);

        count   = count - 1;

        for (n = 0; n < count; n++)     Data[n] = I2CGetByte(0);

        Data[count] = I2CGetByte(1);

        I2CSendStop();
    }
}

void I2CWrite(unsigned char *array)
{
    unsigned char   n, len;

    if (3 <= array[0])
    {
        len     = array[0];
        I2CSendAddr(array[1], array[2], 0);     

        for (n = 3; n < len; n++)   I2CSendByte(array[n]);

        I2CSendStop();
    }
}


unsigned char I2CGetByte(unsigned char ack) 
{
    unsigned char   r, m;

    r = 0;

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

        BitDly();                   // Delay

        r   = (r << 1) | bIIC_SDA;

        bIIC_SCL    = 0;
        
        BitDly();                   // Delay
    }  

    // Send ACK according to 'ack'
    bIIC_SDA    = (bit)(ack & 0x01);
    BitDly();                       // Delay
    
    bIIC_SCL    = 1; 
    BitDly();                       // Delay
    
    bIIC_SCL    = 0; 
    BitDly();                       // Delay
    
    bIIC_SDA    = 1;

    return (r);
}

void I2CSendByte(unsigned char send)
{
    unsigned char   m;

    for (m = 0; m < 8; m++)
    {
        bIIC_SDA    = (bit)(send & 0x80);   // Send each bit, MSB first
        BitDly();

        bIIC_SCL    = 1;
        BitDly();

        bIIC_SCL    = 0;

        send    = send << 1;
    }

    bIIC_SDA    = 1;
    BitDly();
    bIIC_SCL    = 1;
    BitDly();

    bIIC_SCL    = 0;
    BitDly();
} 

void I2CSendAddr(unsigned char addr, unsigned char index, unsigned char rd)
{         
    bIIC_SCL    = 1;
    BitDly();
    bIIC_SDA    = 0;    // Start
    BitDly();

    bIIC_SCL    = 0;
    BitDly();
    
    I2CSendByte(addr + rd);             // Send address byte

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

void I2CSendStop(void)
{
    bIIC_SDA    = 0; 
    BitDly();

    bIIC_SCL    = 1;
    BitDly();

    bIIC_SDA    = 1;
    BitDly();
}

unsigned char RTDGetByte(void) 
{

    bRTD_SCLK   = 1;
    bRTD_SCLK   = 0;
    r0          = bRTD_SDO;

    bRTD_SCLK   = 1;
    bRTD_SCLK   = 0;
    r1          = bRTD_SDO;

    bRTD_SCLK   = 1;
    bRTD_SCLK   = 0;
    r2          = bRTD_SDO;

    bRTD_SCLK   = 1;
    bRTD_SCLK   = 0;
    r3          = bRTD_SDO;

    bRTD_SCLK   = 1;
    bRTD_SCLK   = 0;
    r4          = bRTD_SDO;

    bRTD_SCLK   = 1;
    bRTD_SCLK   = 0;
    r5          = bRTD_SDO;

    bRTD_SCLK   = 1;
    bRTD_SCLK   = 0;
    r6          = bRTD_SDO;

    bRTD_SCLK   = 1;
    bRTD_SCLK   = 0;
    r7          = bRTD_SDO;

    bRTD_SCLK   = 1;

    return Reg;
}

void RTDSendByte(unsigned char send)
{

    bRTD_SDI    = (bit)(send & 0x01);
    bRTD_SCLK   = 1;
    bRTD_SCLK   = 0;

    bRTD_SDI    = (bit)(send & 0x02);
    bRTD_SCLK   = 1;
    bRTD_SCLK   = 0;

    bRTD_SDI    = (bit)(send & 0x04);
    bRTD_SCLK   = 1;
    bRTD_SCLK   = 0;

    bRTD_SDI    = (bit)(send & 0x08);
    bRTD_SCLK   = 1;
    bRTD_SCLK   = 0;

    bRTD_SDI    = (bit)(send & 0x10);
    bRTD_SCLK   = 1;
    bRTD_SCLK   = 0;

    bRTD_SDI    = (bit)(send & 0x20);
    bRTD_SCLK   = 1;
    bRTD_SCLK   = 0;

    bRTD_SDI    = (bit)(send & 0x40);
    bRTD_SCLK   = 1;
    bRTD_SCLK   = 0;

    bRTD_SDI    = (bit)(send & 0x80);
    bRTD_SCLK   = 1;
    bRTD_SCLK   = 0;

    bRTD_SDI    = 1;
    bRTD_SCLK   = 1;

}

void RTDSendAddr(unsigned char addr, unsigned char rd, unsigned char inc)   // rd   : 0 - Write, 1 - Read
{

    RTDSendByte(addr);

    bRTD_SDI    = 1;
    bRTD_SCLK   = 1;        
    bRTD_SDI    = (bit)(rd & 0x01); 
    bRTD_SCLK   = 1;
    bRTD_SCLK   = 0;
    bRTD_SDI    = (bit)(inc & 0x01); 
    bRTD_SCLK   = 1;
    bRTD_SCLK   = 0;
    bRTD_SDI    = 1;

}

void RTDRead(unsigned char index, unsigned char count, unsigned char inc)
{

    if (count)
    {
        bRTD_SCSB   = 0;
        RTDSendAddr(index, 1, inc);

        index   = 0;
        do
        {
            Data[index++]   = RTDGetByte();
        }
        while (--count);

        bRTD_SCLK   = 0;
        bRTD_SCLK   = 1; 
        bRTD_SCSB   = 1;
    }
}

void RTDWrite(unsigned char data *array)
{
    unsigned char   len, m;

    do
    {
        if (0 == (array[0] & 0xfc))     return;

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

        bRTD_SCSB   = 0;

        if (BURST == array[0])
        {
            RTDSendAddr(array[1], 0, N_INC);

            array   = array + 2;
            m       = array[0];

            do
            {
                RTDSendByte(m);
            }
            while (--len);

            array   = array + 1;
        }
        else
        {
            RTDSendAddr(array[1], 0, array[0]);

            array   = array + 2;
            do
            {
                RTDSendByte(*array++);
            }
            while (--len);
        }

        bRTD_SCLK   = 0;
        bRTD_SCLK   = 1;
        bRTD_SCSB   = 1;
    }
    while (1);
}

void RTDCodeW(unsigned char code *array)
{
    unsigned char   len, m;
    do
    {
        if (0 == (array[0] & 0xfc))     return;

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

        bRTD_SCSB   = 0;

        if (BURST == array[0])
        {
            RTDSendAddr(array[1], 0, N_INC);

            array   = array + 2;
            m       = array[0];
            
            do
            {
                RTDSendByte(m);
            }
            while (--len);

            array   = array + 1;
        }
        else
        {
            RTDSendAddr(array[1], 0, array[0]);

            array   = array + 2;
            do
            {
                RTDSendByte(*array++);
            }
            while (--len);
        }

        bRTD_SCLK   = 0;
        bRTD_SCLK   = 1;
        bRTD_SCSB   = 1;
    }
    while (1);
}


void RTDSetByte(unsigned char addr, unsigned char val)
{
    // Set Write Address
    bRTD_SCSB   = 0;   
    RTDSendAddr(addr, 0, 1);

    // Write one Byte
    RTDSendByte(val);

    bRTD_SCLK   = 0; 
    bRTD_SCLK   = 1;
    bRTD_SCSB   = 1;
}

void RTDSetBit(unsigned char addr, unsigned char and, unsigned char or)
{
    // Set Read Address
    bRTD_SCSB   = 0;
    RTDSendAddr(addr, 1, 1);

    // Read 1 Byte
    or      = (RTDGetByte() & and) | or;

    bRTD_SCLK   = 0;
    bRTD_SCLK   = 1; 
    bRTD_SCSB   = 1;  

    // Set Write Address
    bRTD_SCSB   = 0;   
    RTDSendAddr(addr, 0, 1);

    // Write one Byte
    RTDSendByte(or);

    bRTD_SCLK   = 0; 
    bRTD_SCLK   = 1;
    bRTD_SCSB   = 1;

}

void Load_Font(unsigned char code *array, unsigned char start, unsigned char end)
{
    unsigned char   n, ucTemp;

    do
    {
        bRTD_SCSB   = 0;   
        RTDSendAddr(OSD_ROW_90, WRITE, Y_INC);
        RTDSendByte(0xc0);

#if (SWAP_FONT_RAM)
        RTDSendByte(start ^ 0x20);
#else
        RTDSendByte(start);
#endif

        bRTD_SCLK   = 0; 
        bRTD_SCLK   = 1;
        bRTD_SCSB   = 1;
        bRTD_SCSB   = 0;   
        RTDSendAddr(OSD_DATA_92, WRITE, N_INC);

        n   = 36;  
        do
        {
            ucTemp  = *array;

            bRTD_SDI    = (bit)(ucTemp & 0x01);
            bRTD_SCLK   = 1;
            bRTD_SCLK   = 0;
            bRTD_SDI    = (bit)(ucTemp & 0x02);
            bRTD_SCLK   = 1;
            bRTD_SCLK   = 0;
            bRTD_SDI    = (bit)(ucTemp & 0x04);
            bRTD_SCLK   = 1;
            bRTD_SCLK   = 0;
            bRTD_SDI    = (bit)(ucTemp & 0x08);
            bRTD_SCLK   = 1;
            bRTD_SCLK   = 0;
            bRTD_SDI    = (bit)(ucTemp & 0x10);
            bRTD_SCLK   = 1;
            bRTD_SCLK   = 0;
            bRTD_SDI    = (bit)(ucTemp & 0x20);
            bRTD_SCLK   = 1;
            bRTD_SCLK   = 0;
            bRTD_SDI    = (bit)(ucTemp & 0x40);
            bRTD_SCLK   = 1;
            bRTD_SCLK   = 0;
            bRTD_SDI    = (bit)(ucTemp & 0x80);
            bRTD_SCLK   = 1;
            bRTD_SCLK   = 0;
            bRTD_SDI    = 1;
            bRTD_SCLK   = 1;

            array ++;
        }
        while (--n);

        bRTD_SCLK   = 0; 
        bRTD_SCLK   = 1;
        bRTD_SCSB   = 1;
    }
    while (end != start++);

}


#if(HDCP_ENABLE)
void KEYCodeW(unsigned char code *array)
{
    unsigned int m;  

   RTDSetBit(DVI_CTRL1_AF, 0x7f,0x00);  //Reset the HDCP key download index
   RTDSetBit(DVI_CTRL1_AF, 0x7f,0x80);
	
    for(m = 0; m < 320; m++)   //Key 0 ~ Key39   
    {
		RTDSetByte(0xb1,array[m]);
    }	

    RTDSetBit(DVI_CTRL1_AF, 0x7f,0x00);  //Disable the Key Access Download port
    RTDSetBit(TMDS_INPUT_ENA_A1, 0x7f, 0x00);   // Turn on HDCP DDC channel  
}
#endif


#if (AUDIO_TYPE == AUDIO_62429)
void I2CWrite2(unsigned char send)
{
    unsigned char   m;


    if ( send > 0x57)        send = 0x57;

    send    = (send >> 2 & 0x1f) | (send << 5 & 0x60);

    bA_SCL    = 0;
    BitDly();

    bA_SDA    = 1;
    BitDly();
    bA_SCL    = 1;		//D0
    BitDly();
    bA_SDA    = 0;
    BitDly();
    bA_SCL    = 0;
    BitDly();
        
    bA_SDA    = 0;
    BitDly();
    bA_SCL    = 1;		//D1
    BitDly();
    bA_SDA    = 0;
    BitDly();
    bA_SCL    = 0;
    BitDly();

    for (m = 0; m < 7; m++)
    {
        bA_SDA    = (bit)(send & 0x01);   // Send D2~D8, LSB first
        BitDly();
        bA_SCL    = 1;
        BitDly();
        bA_SDA    = 0;
        BitDly();       
        bA_SCL    = 0;
        BitDly();
        
        send    = send >> 1;
    }

    bA_SDA    = 1;
    BitDly();
    bA_SCL    = 1;		//D9
    BitDly();
    bA_SDA    = 0;
    BitDly();       
    bA_SCL    = 0;
    BitDly();
        
    bA_SDA    = 1;
    BitDly();
    bA_SCL    = 1;		//D10
    BitDly();
    bA_SCL    = 0;    
    BitDly();
    bA_SDA    = 0;

} 
#endif

⌨️ 快捷键说明

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