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

📄 osddraw.c

📁 宏芯T102芯片驱动(51单片机作主控)
💻 C
📖 第 1 页 / 共 3 页
字号:
#include <reg51.h>
#include "common.h"
#include "System.h"
#include "Struct.h"
#include "OSDDraw.h"
#include "Keypad.h"
#include "TwoWire.h"
#include "TW101Reg.h"
#include "OSDCtrl.h"

#include "Video.h"
#include "Tuner.h"

#include "OSD1218.h"
#include "font1218.c"
#include "fontChinese1218.c"
#include "OSDTbl.h"
#include "OSDMenu.h"
#include "intrins.h"
extern uCHAR ir_data;
extern uCHAR m_cSoundSystem;
extern uCHAR ir_data;
extern uCHAR ir_repeat;
extern bit m_bAir_Cable;
extern bit m_bTV_Skip;
extern bit m_bKyPowerFlat;
extern bit m_bBKPowerOn;
extern bit m_bOSDEnable;
extern bit m_bKyPowerOn;
extern bit m_bChipPowerOn;
extern bit m_bKyBlocked;
extern uCHAR idata m_cBuff[5];
extern uWORD idata m_wBuff[3];
extern uDWORD	m_dwBuff[2];
extern uCHAR idata m_cOSDEvent;
extern uCHAR idata m_cCurreKey;
extern uCHAR idata m_cPreKey;
extern uCHAR idata m_cOSDFunc;
extern uWORD idata m_wVRes;
extern uWORD idata m_wHRes;
extern uCHAR idata m_cSource;
extern uCHAR idata m_cLang;
extern uCHAR idata m_cMode;
extern sCHAR sStep;
extern uCHAR idata ChangeTime;
extern bit ChangeLang;
extern bit Key;
extern bit AdjustSig;
extern idata m_cOSDFactoryMenu;
extern uCHAR idata m_cTV_Num;

extern uDWORD m_dwVFrameCntPre;
extern uWORD  m_wHSyncPeriodPre;
extern void BKPower(void);
extern void PowerManage(void);
extern void AutoScanChannel(void);

#if VIDEO_AVAILABLE
extern EEPVIDEO idata EepVideo;
#endif

#ifdef TIMER0
extern void Timer0Start(void);
extern void Timer0Stop(void);
#endif

#ifdef NVRAM
#include "NVRam.h"
extern uWORD idata m_wEepRom;
#endif


extern uCHAR idata m_cOSDMenu;



MULTILANGUAGEOSD *pOSDLangPtr;
OSDMENU **pOSDMenuPtr;
MULTICHINESELANGUAGEOSD *pOSDChineseLangPtr;
OSDMENU **pOSDChineseMenuPtr;
MULTIFACTORYOSD *pOSDFactoryLangPtr;
OSDMENU **pOSDFactoryMenuPtr;
uCHAR	cTotal=5;

//                                                             ADC         Digi
//Bright,contrast,sharp,freq,phase,hpos,vpos,Bklight,OSDH/V,Gain/Offset Gain/Offset Volume
OSDPARAMS code sOSDParamsMax=
{0xff,	    0xff,    5,  20, 0x1f, 40,  20,		20,	80,65, 0xC0,0xff,  0xff,0xff,	0xFF};
OSDPARAMS code sOSDParamsMin=
{0,	 	 	 0,    	 0,  0,  0x00, 0,   0,		0,	   1,1,	 0,0, 		 0,0,		0x00};
OSDPARAMS code sOSDParamsDef=
{0x80,	    0x80, 	 2,  10, 0x10, 20,  10,		10,	75,45, 0x80,0x80,  0x80,0x80,	0x40};

/*
uCHAR code cOSDMenuLutData[32]={
	//0xGB, 0x0R
	0x00,0x00, //0
  	0x0f,0x00, //1 blue
  	0x00,0x00, //2 black
  	0x0f,0x0a, //3 purple
	0x0e,0x00, //4 dark blue
  	0xf8,0x00,  //5 green
	0x22,0x0A, //6  red
  	0xc4,0x0c, //7 olive
	0x88,0x05, //8 light grey
  	0xb9,0x0b,  //9 purple
  	0xBD,0x05, //A  purple
  	0x0f,0x0f,  //B
  	0xA3,0x0A, 	//C Yellow
	0xcc,0x0c, //D light grey
	0x68,0x03,  //E Light Blue Main Menu Background or 0x79, 0x04 which is a litter light
  	0xff,0x0f,  //F white
};
*/

uCHAR code cOSDMenuLutData[32]={ //For test
	//0xGB, 0x0R
	0x00,0x00, //0
  	0x0f,0x00, //1 blue
  	0x00,0x0f, //2 black
  	0xf0,0x00, //3 purple
  	0x0f,0x00, //1 blue
  	0x00,0x0f, //2 black
  	0x0f,0x00, //3 purple
  	0x0f,0x00, //1 blue
  	0x00,0x0f, //2 black
  	0xf0,0x00, //3 purple
  	0x0f,0x00, //1 blue
  	0x00,0x0f, //2 black
  	0xf0,0x00, //3 purple
  	0x0f,0x00, //1 blue
  	0x00,0x0f, //2 black
  	0xf0,0x00, //3 purple
};
#define LOGO_ON
#ifdef LOGO_ON
#define OSDBMP_2BIT_PIXEL	0xf8
#define OSDBMP_4BIT_PIXEL	0xb8
#define OSDBMP_TYPE OSDBMP_2BIT_PIXEL
#define	BMP_HPOS (1024-320)/2
#define	BMP_VPOS (768-76)/2


#include "logo1113_new.c"

bit OSD_PowerOnLogo_On = 1;

// define OSD Logo BMP LUT color data
code unsigned char OSDLutLogoData[32]={
0x0f,0x0f,
0x0F,0x00,
0x0F,0x00,
0x00,0x00,
0x00,0x00,
0x00,0x00,
0x00,0x00,
0x00,0x00,
0x03,0x00,
0x03,0x00,
0x03,0x00,
0x07,0x00,
0x03,0x00,
0x02,0x00,
0x0E,0x00,
0x0B,0x00,
};
#endif //LOGO_ON

void OSDLogo(void)
{
	unsigned int i = 0;
	I2CWriteByte(TW101, 0xC2, 0x12);   			//add by zjl 
	I2CWriteByte(TW101, 0x9d, 0x10);			//add by zjl 
	I2CWriteByte(TW101, 0x9e, 0xff);			//add by zjl 
	I2CWriteByte(TW101, 0x9f, 0x40);			//add by zjl 
	I2CWriteByte(TW101, PATTERN_CTRL, 0x87); 	//add by zjl 
#ifdef LOGO_ON
	OSDSetRamAddr(FONT_DATA_START_ADDRESS);
	I2CWriteByte(TW101,OSD_CFG_INDEX,OSD_LUT_RAM_DATA);
	for(i=0;i<32;i++)
  		I2CWriteByte(TW101,OSD_CFG_DATA,OSDLutLogoData[i]);
	OSDCfgWr(BW_W,20);            	
	OSDCfgWr(BW_H,29);	
	OSDCfgWr(0x0a,0x05); 
	OSDCfgWr(0x04,0x80);          
	twdWr_Burst_A(OSD_RAM_DL);
	for(i=0;i<40*32;i++)
   	twdWr_Burst_D(logodata[i]);
	OSDCfgWr(CHAR_DLY_0,0x00);		//V[10:8] bit 6-4; H[10:8] bit2-0
  	OSDCfgWr(CHAR_DLY_1,0x40);    //H[7:0]
  	OSDCfgWr(CHAR_DLY_2,0x40);
	twdWr_Burst_P();
	OSDCfgWr(OSD_CTRL,0xf8);           //2 bits pixel BitMap
	twdDelay(2000);
#endif
}
void OSDInit(void)
{
	unsigned int i,j;
	OSDCfgWr(OSD_CTRL,0x18);           //disable osd and width*1


	OSDSetRamAddr(FONT_DATA_START_ADDRESS);
	OSDCfgWr(CHAR_FONT_SIZE,FONT_SIZE);
		OSDCfgWr(0x0d,0x96);
	OSDCfgWr(CHAR_RAM_BASE_A,CHAR_MAIN_MENU_START);    //To setup character index start address.
                                            //If start address is 0x9c0,
                                                    //You have get ((0x9c0 >> 5) & 0x7f) to store it
	OSDCfgWr(CHAR_RAM_END_A,CHAR_RAM_END);           //This is to set index end address.

  	OSDCfgWr(BLINK_CTRL,0x09);
    OSDCfgWr(ALPHA_BLD_CTRL,0x86);       
	OSDLoadColor();  //For test
	OSDSetRamAddr(FONT_DATA_START_ADDRESS);

	twdWr_Burst_A(OSD_RAM_DL);
	//Below is re-writted
	if(m_cLang==L_ENGLISH)
    {
		for(j=0;j<TOTAL_FONT_NUM;j++)
       		for(i=0; i<FONT_HEIGHT; i++){
				twdWr_Burst_D(AllFonts[j][2*i]);
   			twdWr_Burst_D(AllFonts[j][2*i+1]);
	   }
	}
	else if(m_cLang==L_CHINESE)
	{
		for(j=0;j<TOTAL_FONT_NUM;j++)
       		for(i=0; i<FONT_HEIGHT; i++){
				twdWr_Burst_D(AllChineseFonts[j][2*i]);
   			twdWr_Burst_D(AllChineseFonts[j][2*i+1]);
	   }
	
	}
  //0x400==1024;
	for(i=(TOTAL_FONT_NUM+1)*FONT_HEIGHT; i<0x400; i++){
   	 twdWr_Burst_D(0x00);
     twdWr_Burst_D(0x00);
	}
 	twdWr_Burst_P();

	for(i=0;i<OSD_LINE_NUM;i++)
	{
  		OSDCleanLine(0,i,0,31);
     	OSDSetLineAttribute(i,0x80);
	}
}

void OSDLoadColor(void)
{
	uCHAR i;
	I2CWriteByte(TW101,OSD_CFG_INDEX,OSD_LUT_RAM_DATA);
  	for(i=0;i<32;i++)
		I2CWriteByte(TW101,OSD_CFG_DATA,cOSDMenuLutData[i]); 
	twdDelay(500); 
/*
	I2CWriteByte(TW101, 0xC2, 0x12);   			//add by zjl 
	I2CWriteByte(TW101, 0x9d, 0x10);			//add by zjl 
	I2CWriteByte(TW101, 0x9e, 0xff);			//add by zjl 
	I2CWriteByte(TW101, 0x9f, 0x40);			//add by zjl 
	I2CWriteByte(TW101, PATTERN_CTRL, 0x87); 	//add by zjl   */   

}

void OSDSetRamAddr(uWORD address)
{
	I2CWriteByte(TW101,OSD_RAM_AH,(uCHAR)(address>>8));
  	I2CWriteByte(TW101,OSD_RAM_AL,(uCHAR)(address & 0xff));

}

void OSDEnable(void)
{
	m_bOSDEnable = 1;
	OSDCfgWr(OSD_CTRL,0x84);//0x98);

#ifdef TIMER0
	Timer0Start();
#endif

}

void OSDDisable(void)
{
	Timer0Stop();
	OSDCfgWr(OSD_CTRL,0x18);
	/*
	m_cOSDEvent=0;
	m_cOSDFunc=0;
	m_cItem=1;
	m_bOSDEnable=0;
	m_cCurreKey=m_cPreKey=0xFF;*/

	m_cCurreKey=m_cPreKey=0xFF;
	m_cOSDEvent=0;
	m_cOSDFunc= 0;
	m_cOSDMenu=idNULLMENU;
	m_cOSDFactoryMenu=ifaNULLMENU;
}

void OSDExit(void)
{
	OSDCfgWr(OSD_CTRL,0x18);
	OSDCfgWr(0x10,0x00); //Disable window
	OSDDisable();
	Key = 0;
	if(AdjustSig==0)
		OSDLogo();
}

void OSDFuncSelect(sCHAR sStep)
{
		if(m_cLang==L_ENGLISH)
    		OSDClearCursor(0x00, 0x00);
		else if(m_cLang==L_CHINESE)
			OSDClearChineseCursor(0x00,0x00);
		switch(m_cOSDFunc)
		{
				case	idBRIGHTMENU:
						m_cOSDFunc = idCONTRASTMENU;
						break;
				case	idCONTRASTMENU:
						m_cOSDFunc = idSHARPMENU;
						break;
				case	idSHARPMENU:
						m_cOSDFunc = idSATMENU;
						break;
//						case	idSATMENU:
//								m_cOSDFunc = idHUEMENU;	 
//								break;
//						case	idVOLUMESOURCEMENU:
///								m_cOSDFunc = idVOLUMEMENU;	 
//								break;
				case	idSATMENU:
						m_cOSDFunc = idLANGUAGEMENU;
						break;
		}
				
		switch(m_cOSDMenu){
			case idVIDEOMENU:
	   			OSDShowVideoData();
	    		break;
			case idTVMENU:
				OSDShowTVData();
				break;
			default:
				break;
			}
		if(m_cLang==L_ENGLISH)
			OSDMoveCursor(0x00,0x00);
		else if(m_cLang==L_CHINESE)
			OSDMoveChineseCursor(0x00,0x00);
		return; 
}


void OSDEventMgr(void)
{
	Timer0Stop();
	switch(m_cOSDEvent){
	case CLOSEMENU:
		OSDExit();
		break;
	case OPENMENU:
		OSDOpenMenu();
		break;	
	case FUNCSELCT_IN:
		OSDFuncSelect(1);
		break;
	case FUNCSELCT_DN:
		OSDFuncSelect(-1);
		break;
	case FUNCENTER:
			OSDClearPage();
            OSDPosition(CENTER);
			OSDShowPage();
			break;
	case FUNCEXIT:
			OSDFuncExit();
		break;
	case FUNCADJ_IN:	
		OSDItemAdj(INCREASE);
		break;
	case FUNCADJ_IN1:
		OSDItemAdj(INCREASE1);
		break;
	case FUNCADJ_DN:
		OSDItemAdj(DECREASE);
        break;
	case FUNCADJ_DN1:
		OSDItemAdj(DECREASE1);
		break;
	case FUNCADCCAL:
		break;
	case POWERMANAGE:
		m_bKyPowerOn = m_bKyPowerOn^0x01;
		PowerManage();
		break;
	default:	break;
	
		}
	if(m_bOSDEnable)
		Timer0Start();
}

void OSDOpenMenu(void)
{
	OSDClearPage();
	OSDPosition(CENTER);


	OSDEnable();
	//m_cOSDFunc=1;
	if(m_cLang==L_ENGLISH)
		OSDShowPage();
	else if(m_cLang==L_CHINESE)
		OSDShowChinesePage();	
	switch(m_cOSDMenu){
	case idVIDEOMENU:
	     ir_repeat=1;
//		OSDShowLine(iBlankLine,0,0,COL_TITLE,OSD_LENGTH);
//		OSDShowLine(MainMenuStr[EepOSDPub[OSD_cOSDLang]],1,0,COL_TITLE,OSD_LENGTH);
        OSDShowVideoData();
		break;
	case idTVMENU:
		ir_repeat=0;
//		OSDShowLine(iBlankLine,0,0,COL_TITLE,OSD_LENGTH);
//		OSDShowLine(PictMenuStr[EepOSDPub[OSD_cOSDLang]],1,0,COL_TITLE,OSD_LENGTH);
		OSDShowTVData();
		break;
	default:
		return;
	}
	m_cOSDEvent=OPENMENU;
}

void OSDFuncExit(void)
{

}

uCHAR OSD_cOSDLang=0;
void OSDShowPage(void)
{
uCHAR y=1;


	pOSDLangPtr=&MultiLangOSD[OSD_cOSDLang];
	pOSDMenuPtr=pOSDLangPtr->osdMenuPtr;  
	cTotal=0;

	while(pOSDMenuPtr[m_cOSDMenu-1][cTotal].iconStr!=NULL)
	{
		OSDShowLine(iBlankLine,0,y,COL_NORMAL,OSD_LENGTH);
//		OSDShowLine(pOSDMenuPtr[m_cOSDMenu-1][cTotal].iconStr,ICON_STAT,y,COL_NORMAL,OSD_LENGTH);
		OSDShowLine(pOSDMenuPtr[m_cOSDMenu-1][cTotal].txtStr,TXT_STAT,y,COL_NORMAL,OSD_LENGTH);
//		idx = pOSDMenuPtr[(m_cOSDFunc>>4)-1][cTotal].cidIdx;
		switch (pOSDMenuPtr[(m_cOSDMenu-1)-1][cTotal].cDataAttr)
		{
			case GAUGE:
			case NUMBER:
//				OSDDrawNum(EepOSDPub[idx],sOSDParams1[idx].Max,NUM_STAT,y,COL_NORMAL);
				break;
//			case OPTION:

⌨️ 快捷键说明

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