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

📄 t102.c

📁 这是一个用T108加上瑞萨公司R8C2A做的一个OSD显示。希望能帮上大家。
💻 C
字号:
#include "tw803_regs.h"
#include "t108_util.h"
#include "osddraw.h"
#include "OSD2_define.h"
#include "OSD1_define.h"
#include "iic.h"
#include "GAMMA.H"

#include "t102.h"

#include "T102_Logo.c"
#include "Font12x12.c"

unsigned int   m_wBuff[3];
const unsigned char Icon1BPColorTable[]={
0x00,0x00,0x1F,0x00,0x00,0xF8,0xE0,0x07,0x80,0xB7,0xA0,0x8D,0x80,0x53,0xA6,0x33,
0xA0,0x07,0xC4,0x24,0xB9,0x10,0x1E,0x00,0x52,0x29,0x46,0x33,0xE0,0x05,0x44,0x24
};

const unsigned char OSDLutLogoData[32]={
0x00,0x00,
0xDE,0x00,
0x10,0x00,
0xFE,0x00,
0x9C,0x00,
0x17,0x00,
0xDD,0x00,
0x14,0x00,
0x0D,0x00,
0x38,0x00,
0x5A,0x00,
0x11,0x00,
0x7B,0x00,
0x15,0x00,
0x7B,0x00,
0x16,0x00
};

void OSD1Init(void);
void OSDLogo(void);
void OSD1ClearSRam(void);
void OSD1InItClearMenu(unsigned char MenuIndex);
void OSD1Load1BPFont(void);
void OSD1LoadColor(void);
void OpenBluePanel(void);

void OSDLogo(void)
{
	unsigned int i,j;
    unsigned char tt,tt1;
	OSD1Disable();
	OSDCfgWr(OSD_MENU1_ENABLE,0x00);
	//OSDSetRamAddr(MENU_RAM_START_ADDRESS); 
	//for(i=0; i< 0x1FFF; i++) OSDSetRamData(0xE001);										 
	//~ Set OSD Main Color LUT for Logo. ~//
	OSDCfgWr(OSD_COLOR_LUT_ADR_PORT,0x00);
	I2CWriteByte(TW803_P0,OSD_CFG_INDEX,0x09);
 	for(i=0;i<32;i++)
  	{
		OSDCfgWr(OSD_COLOR_LUT_DATA_PORT,OSDLutLogoData[i]);	 
	}	  	
	//~ Set BMP Color LUT Base address. ~//
	OSDCfgWr(0x2C,0x00);
//	OSDCfgWr(0x2d,0xc0);

	//~ Set LOGO Width. ~//
	OSDCfgWr(OSD_BMP_HSIZE_L,0x54);            	//width 40(x8)
	OSDCfgWr(OSD_BMP_HSIZE_M,0x00);
	//~ Set LOGO Height. ~//
	OSDCfgWr(OSD_BMP_VSIZE_L,0x51);            	//width 40(x8)
	OSDCfgWr(OSD_BMP_VSIZE_M,0x00);
    //~ Set LOGO Horizintal start position. ~//
	OSDCfgWr(OSD_BMP_HSTART_L,0x40);            	//width 40(x8)								                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
	OSDCfgWr(OSD_BMP_HSTART_M,0x00);
	//~ Set LOGO Vertical start position. ~//
	OSDCfgWr(OSD_BMP_VSTART_L,0x38);            	//width 40(x8)
	OSDCfgWr(OSD_BMP_VSTART_M,0x00);
	//~ Set OSD RAM Address. ~//
	OSDSetRamAddr(0x0000);
	//~ Load LOGO bitmap table to RAM. ~//
	twdWr_Burst_A(OSD1_RAM_DL);
    for(i=0;i<168*81/2;i++)
	{
		tt=0;tt1=0;
	    for(j=0;j<4;j++)
	    {
	        tt=((logodata[i*2+1]>>j*2)&0x03);
	        tt1=tt|(tt1<<2);
	    }
		twdWr_Burst_D(tt1);
		//IC_WritByte(TWIC_P0,OSD2_RAM_DL,tt1);
		tt=0;tt1=0;
	    for(j=0;j<4;j++)
	    {
	        tt=((logodata[i*2]>>j*2)&0x03);
	        tt1=tt|(tt1<<2);
	    }
		twdWr_Burst_D(tt1);
		//IC_WritByte(TWIC_P0,OSD2_RAM_DL,tt1);
	}
	twdWr_Burst_P();

	//~ Set LOGO bitmap data address in RAM. ~//
	OSDCfgWr(OSD_BMP_START_ADR_L,0x00);
	OSDCfgWr(OSD_BMP_START_ADR_M,0x00);

	//~ Set BMP configuration. ~//
	OSDCfgWr(0x20,0xC0);
	
	OSDEnable();
	twdDelay(/*30000*/2000);
	
	
//	OSD1Disable();

        //	OSDCfgWr(0x20,0x25);         cjh
}

void OSD1Init(void)
{

	OSDCfgWr(OSD_CHAR_FONT_SIZE,(0xC0)|(0x00)|FontHeight);	

	//~Set Char2BP Font Index Base.~//
	OSDCfgWr(OSD_CHAR2BP_FONT_INDEX,Font2BPIndexStr>>1);
	//~Set Char4BP Font Index Base.~//
	OSDCfgWr(OSD_CHAR4BP_FONT_INDEX,Font4BPIndexStr>>1);
	//~Set Char2BP Font Memory Base Address.~//
	OSDCfgWr(OSD_CHAR2BP_FONT_MEMADD_L,Font2BPDataStrAdr&0x00FF);
	OSDCfgWr(OSD_CHAR2BP_FONT_MEMADD_M,Font2BPDataStrAdr>>8);
	//~Set Char4BP Font Memory Base Address.~//
	OSDCfgWr(OSD_CHAR4BP_FONT_MEMADD_L,Font4BPDataStrAdr&0x00FF);
	OSDCfgWr(OSD_CHAR4BP_FONT_MEMADD_M,Font4BPDataStrAdr>>8);
	//~Set Globa Alpha Blending Control.~//
	OSDCfgWr(OSD_GLOBAL_ALPHA_BLENDING,0x10);
	//~Set Border/Shadow/Char1BP Color High Bits Offset.~//
	OSDCfgWr(OSD_BSH_COLOR_HIGHBIT,0x20);
	//~Set Build-in Rom Font Index Base//
	OSDCfgWr(OSD_FONTROM_INDEX,ROMFONTIndexStr>>1);
	//~Clear Ram	~//
	OSD1ClearSRam();
	//Clear CFG
	I2CWriteByte(TW803_P0,OSD1_CFG_INDEX,0x09);
 	for(m_wBuff[0] =0;m_wBuff[0]<18;m_wBuff[0]++)
	{														
		I2CWriteByte(TW803_P0,OSD1_CFG_DATA,0);
	}							   

	//~Menue-1 Setting. ~//
	OSDCfgWr(OSD_MENU1_ENABLE,0x00);
	OSDCfgWr(OSD_MENU1_START_ADR_L,Menu1StrAdr&0x00FF);
	OSDCfgWr(OSD_MENU1_START_ADR_M,Menu1StrAdr>>8);
	OSDCfgWr(OSD_MENU1_END_ADR_L,Menu1EndAdr&0x00FF);
	OSDCfgWr(OSD_MENU1_END_ADR_M,Menu1EndAdr>>8);

	//~Menue-2 Setting. ~//
	OSDCfgWr(OSD_MENU2_ENABLE,0x00);
	OSDCfgWr(OSD_MENU2_START_ADR_L,Menu2StrAdr&0x00FF);
	OSDCfgWr(OSD_MENU2_START_ADR_M,Menu2StrAdr>>8);
	OSDCfgWr(OSD_MENU2_END_ADR_L,Menu2EndAdr&0x00FF);
	OSDCfgWr(OSD_MENU2_END_ADR_M,Menu2EndAdr>>8);
			  

	//~Load Color Table.~//

	OSD1Load1BPFont();	
	OSD1LoadColor();

		
	OSD1InItClearMenu(MENU1);
	OSD1InItClearMenu(MENU2);
	
}


void OSD1ClearSRam(void)
{
	OSDCfgWr(OSD_BLK_WRT_LSB,0x00);
	OSDCfgWr(OSD_BLK_WRT_MSB,0x00);
	OSDCfgWr(OSD_BLK_WRT_SADD_LSB,0x00);
	OSDCfgWr(OSD_BLK_WRT_SADD_MSB,0x00);
	OSDCfgWr(OSD_BLK_WRT_LENGTH,0xFF);
	OSDCfgWr(OSD_BLK_WRT_CTR,0x9f);
}

void OSD1InItClearMenu(unsigned char MenuIndex)
{
	unsigned char i=0; 
	if(MenuIndex == MENU1)
	{	
		for(i=0; i<Menu1Height; i++)
		{ 	
			OSDSetRamAddr(Menu1StrAdr+(Menu1Width+4)*i);
			twdWr_Burst_A(OSD1_RAM_DL);
			//~Set RAtt_V~//
			if(i==0)
				OSDSetRamDataBuest(0x4000|Menu1StartY); 
		 	else
				OSDSetRamDataBuest(0xE001);
			//~Set RAtt_H~//
			OSDSetRamDataBuest(0x6000|Menu1StartX);
			//~Set RAtt_A~//
			OSDSetRamDataBuest(0xD000|0x0003);

			//~Set RAtt_C~//
			OSDSetRamDataBuest(0x0000|(Menu1Width));  	
			m_wBuff[0]=0;
			while(m_wBuff[0]<Menu1Width)
			{
				OSDSetRamDataBuest(0x0000|((unsigned int)(0&0x04)<<9)|(0));
				m_wBuff[0]++;
			} 
			twdWr_Burst_P();
		} 
		
	}
	else if(MenuIndex == MENU2)
	{
		
		for(i=0; i<Menu2Height; i++)
		{
			OSDSetRamAddr(Menu2StrAdr+(Menu2Width+4)*i);
			twdWr_Burst_A(OSD1_RAM_DL);
			//~Set RAtt_V~//
			if(i==0)
				OSDSetRamDataBuest(0x4000|Menu2StartY); 
		 	else
				OSDSetRamDataBuest(0xE001);
			//~Set RAtt_H~//
			OSDSetRamDataBuest(0x6000|Menu2StartX);
			//~Set RAtt_A~//
			OSDSetRamDataBuest(0xD000|0x0003);
			//~Set RAtt_C~//
			OSDSetRamDataBuest(0x0000|(Menu2Width));  	
			m_wBuff[0]=0;
			while(m_wBuff[0]<Menu2Width)
			{
				OSDSetRamDataBuest(0x0000|((unsigned int)(0&0x0F)<<9)|(0));
				m_wBuff[0]++;
			} 
			twdWr_Burst_P();
		}	
	    
	}	
}


void OSD1Load1BPFont(void)
{
	unsigned int i,j,k,l;
	
	OSDSetRamAddr(Font1BPDataStrAdr);
  	twdWr_Burst_A(OSD1_RAM_DL);
	if(FontWidth==OSD1FONTWIDTH12)
	{
	 	for(j=0;j<Font1BPNum;j++)
		{
			for(i=0; i<(FontHeight); i++)
			{
				k = i<<1;
				l = (i+1)<<1;
				m_wBuff[1] = (unsigned int)(All1BPFonts[j][k])|((unsigned int)(All1BPFonts[j][k+1])<<8);
				m_wBuff[2] = (unsigned int)(All1BPFonts[j][l])|((unsigned int)(All1BPFonts[j][l+1])<<8);
				switch(i&0x03)
				{
					case 0:
						m_wBuff[0]=	m_wBuff[1] |(m_wBuff[2]>>12);
						twdWr_Burst_D(m_wBuff[0]&0x00FF);
						twdWr_Burst_D(m_wBuff[0]>>8);
					break;
					case 1:
						m_wBuff[0]=	(m_wBuff[1] <<4)|(m_wBuff[2] >>8);
						twdWr_Burst_D(m_wBuff[0]&0x00FF);
						twdWr_Burst_D(m_wBuff[0]>>8);
					break;
					case 2:
						m_wBuff[0]=	(m_wBuff[1] <<8)|(m_wBuff[2]>>4);
						twdWr_Burst_D(m_wBuff[0]&0x00FF);
						twdWr_Burst_D(m_wBuff[0]>>8);
					break;
					case 3:
						//Do nothing
					break;
				}
			}
		}
	}
	twdWr_Burst_P();
}

void OSD1LoadColor(void)
{


	OSDCfgWr(OSD_COLOR_LUT_ADR_PORT,0x00);
	I2CWriteByte(TW803_P0,OSD1_CFG_INDEX,0x09);

	twdWr_Burst_A(OSD1_CFG_DATA);
 	for(m_wBuff[0] =0;m_wBuff[0]<3212;m_wBuff[0]++)
	{
		twdWr_Burst_D(Icon1BPColorTable[m_wBuff[0]]);
	}
	twdWr_Burst_P();

	OSDCfgWr(OSD_COLOR_LUT_ADR_PORT,0x80);
	I2CWriteByte(TW803_P0,OSD1_CFG_INDEX,0x09);
	for(m_wBuff[0]=0;m_wBuff[0]<18;m_wBuff[0]++)
	{
		I2CWriteByte(TW803_P0,OSD1_CFG_DATA,0);
		I2CWriteByte(TW803_P0,OSD1_CFG_DATA,0);
		I2CWriteByte(TW803_P0,OSD1_CFG_DATA,0);
	}

}

void OpenBluePanel(void)
{
		I2CWriteByte(TW803_P0, 0x9d, 0x00);
		I2CWriteByte(TW803_P0, 0x9e, 0xff);
		I2CWriteByte(TW803_P0, 0x9f, 0x00);
		I2CWriteByte(TW803_P0, PATTERN_CTRL, I2CReadByte(TW803_P0, PATTERN_CTRL)|0x80);
		I2CWriteByte(TW803_P0, 0xe2, 0x11);   /*/enable registers shadow control,sync all shadow registers	*/
}

⌨️ 快捷键说明

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