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

📄 osd1_init.c

📁 厂家提供的OSD芯片T108的驱动程序,驱动模拟屏
💻 C
字号:
#include <reg51.h>
#include "common.h"
#include "Font12x12.h"
#include "OSD_def.h"
#include "OSD1_CLS.h"


code unsigned char Font1BPColorTable[]={
	0x00,0x00, // 0 TRANSPERANT    
	0x1F,0x00, // 1 PINK           
	0x00,0x00, // 2 BLACK          
	0x1f,0xf8, // 3 PURPLE         
	0x1f,0x00, // 4 BLUE           
	0x80,0xB7, // 5 BROWN          
	0x00,0xf8, // 6 RED            
	0xA6,0x33, // 7 SAFFRON        
	0xe0,0x07, // 8 GREEN          
	0xff,0x07, // 9 CYAN           
	0xff,0xff, // A WHITE          
	0x1f,0x84, // B CAMBRIDGE_BLUE 
	0xe0,0xff, // C YELLOW         
	0x1f,0xfc, // D LILAC          
	0x10,0x14, // E GRAYEST        
	0x18,0xc6, // F GRAYISH
};

void OSD1Load1BPFont(void)
{
	unsigned int i,j,k,l;
	
	OSD1SetRamAddr(OSD1Font1BPDataStrAdr);
  	twdWr_Burst_A(OSD1_RAM_DL);
	if(FontWidth==12)
	{
	 	for(j=0;j<Font1BPNum;j++)
		{
			for(i=0; i<(FontHeight); i++)
			{
				k = i<<1;
				l = (i+1)<<1;
				m_wBuff[1] = (uWORD)(All1BPFonts[j][k])|((uWORD)(All1BPFonts[j][k+1])<<8);
				m_wBuff[2] = (uWORD)(All1BPFonts[j][l])|((uWORD)(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)
{
	OSD1CfgWr(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]<32;m_wBuff[0]++)
	{
		twdWr_Burst_D(Font1BPColorTable[m_wBuff[0]]);
	}
	twdWr_Burst_P();

	OSD1CfgWr(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 OSD1InItClearMenu(uCHAR MenuIndex)
{
	uCHAR i=0; 
	if(MenuIndex == MENU1)
	{	
		for(i=0; i<OSD1Menu1Height; i++)
		{ 	
			OSD1SetRamAddr(OSD1Menu1StrAdr+(OSD1Menu1Width+4)*i);
			twdWr_Burst_A(OSD1_RAM_DL);
			//~Set RAtt_V~//
			if(i==0)
				OSDSetRamDataBuest(0x4000|OSD1Menu1StartY); 
		 	else
				OSDSetRamDataBuest(0xE001);
			//~Set RAtt_H~//
			OSDSetRamDataBuest(0x6000|OSD1Menu1StartX);
			//~Set RAtt_A~//
			OSDSetRamDataBuest(0xD000|0x0003);

			//~Set RAtt_C~//
			OSDSetRamDataBuest(0x0000|(OSD1Menu1Width));  	
			m_wBuff[0]=0;
			while(m_wBuff[0]<OSD1Menu1Width)
			{
				OSDSetRamDataBuest(0x0000|((uWORD)(0&0x04)<<9)|(0));
				m_wBuff[0]++;
			} 
			twdWr_Burst_P();
		} 
		
	}
	else if(MenuIndex == MENU2)
	{
		
		for(i=0; i<OSD1Menu2Height; i++)
		{
			OSD1SetRamAddr(OSD1Menu2StrAdr+(OSD1Menu2Width+4)*i);
			twdWr_Burst_A(OSD1_RAM_DL);
			//~Set RAtt_V~//
			if(i==0)
				OSDSetRamDataBuest(0x4000|OSD1Menu2StartY); 
		 	else
				OSDSetRamDataBuest(0xE001);
			//~Set RAtt_H~//
			OSDSetRamDataBuest(0x6000|OSD1Menu2StartX);
			//~Set RAtt_A~//
			OSDSetRamDataBuest(0xD000|0x0003);
			//~Set RAtt_C~//
			OSDSetRamDataBuest(0x0000|(OSD1Menu2Width));  	
			m_wBuff[0]=0;
			while(m_wBuff[0]<OSD1Menu2Width)
			{
				OSDSetRamDataBuest(0x0000|((uWORD)(0&0x0F)<<9)|(0));
				m_wBuff[0]++;
			} 
			twdWr_Burst_P();
		}	
	    
	}	
}

void OSD1Init(void)
{
	OSD1CfgWr(OSD_CHAR_FONT_SIZE,(0xC0)|(0x00)|FontHeight);	//Set Font Size
	OSD1CfgWr(OSD_CHAR2BP_FONT_INDEX,Font2BPIndexStr>>1);	//Set Char2BP Font Index Base
	OSD1CfgWr(OSD_CHAR4BP_FONT_INDEX,Font4BPIndexStr>>1);	//Set Char4BP Font Index Base
	OSD1CfgWr(OSD_CHAR2BP_FONT_MEMADD_L,OSD1Font2BPDataStrAdr&0x00FF);	//Set Char2BP Font Memory Base Address
	OSD1CfgWr(OSD_CHAR2BP_FONT_MEMADD_M,OSD1Font2BPDataStrAdr>>8);
	OSD1CfgWr(OSD_CHAR4BP_FONT_MEMADD_L,OSD1Font4BPDataStrAdr&0x00FF);	//Set Char4BP Font Memory Base Address
	OSD1CfgWr(OSD_CHAR4BP_FONT_MEMADD_M,OSD1Font4BPDataStrAdr>>8);
	OSD1CfgWr(OSD_GLOBAL_ALPHA_BLENDING,0x80);	//Set Globa Alpha Blending Control
	OSD1CfgWr(OSD_BSH_COLOR_HIGHBIT,0x20);	//Set Border/Shadow/Char1BP Color High Bits Offset
	OSD1CfgWr(OSD_FONTROM_INDEX,ROMFONTIndexStr>>1);	//Set Build-in Rom Font Index Base
	OSD1ClearSRam();	//Clear Ram
	I2CWriteByte(TW803_P0,OSD1_CFG_INDEX,0x09);	//Clear CFG
 	for(m_wBuff[0] =0;m_wBuff[0]<18;m_wBuff[0]++)
		I2CWriteByte(TW803_P0,OSD1_CFG_DATA,0);

	//~Menue-1 Setting. ~//
	OSD1CfgWr(OSD_MENU1_ENABLE,0x00);
	OSD1CfgWr(OSD_MENU1_START_ADR_L,OSD1Menu1StrAdr&0x00FF);
	OSD1CfgWr(OSD_MENU1_START_ADR_M,OSD1Menu1StrAdr>>8);
	OSD1CfgWr(OSD_MENU1_END_ADR_L,OSD1Menu1EndAdr&0x00FF);
	OSD1CfgWr(OSD_MENU1_END_ADR_M,OSD1Menu1EndAdr>>8);

	//~Menue-2 Setting. ~//
	OSD1CfgWr(OSD_MENU2_ENABLE,0x00);
	OSD1CfgWr(OSD_MENU2_START_ADR_L,OSD1Menu2StrAdr&0x00FF);
	OSD1CfgWr(OSD_MENU2_START_ADR_M,OSD1Menu2StrAdr>>8);
	OSD1CfgWr(OSD_MENU2_END_ADR_L,OSD1Menu2EndAdr&0x00FF);
	OSD1CfgWr(OSD_MENU2_END_ADR_M,OSD1Menu2EndAdr>>8);
			  

	//~Load Color Table.~//
	OSD1Load1BPFont();	
	OSD1LoadColor();

	OSD1InItClearMenu(MENU1);
	OSD1InItClearMenu(MENU2);
	
}


⌨️ 快捷键说明

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