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

📄 osddraw.c

📁 在51单片机上用C写的T100,T101TFT屏的控制程序,有OSD
💻 C
字号:
#include <reg51.h>
#include <intrins.h>
#include "common.h"
#include "System.h"
//#include "Struct.h"
#include "OSDDraw.h"
//#include "OSDCtrl.h"
//#include "Video.h"
#include "TwoWire.h"
#include "TW100Reg.h"

#include "OSD1218.h"
#include "font1218.c"
//#include "OSDTbl.h"
//#include "OSDMenu.h"

#define TURE 1
//extern bit bGAMMA_ADJ;
//bit m_bOSDEnable=0;
//bit m_bKyPowerOn=0;
//bit m_bChipPowerOn=0;
//extern uCHAR idata m_cBuff[5];
//extern uWORD idata m_wBuff[3];
//extern uCHAR idata m_cOSDEvent;
//extern uCHAR idata m_cCurreKey;
//extern uCHAR idata m_cPreKey;
//extern uCHAR idata m_cItem;
//extern uCHAR idata m_cOSDFunc;
extern uCHAR idata cSource;
//extern uCHAR idata AddPoint;
//extern uCHAR idata GammaBuffer;
//extern void AdjustGammmaDate(void);

//void BKPower(void);
//void PowerManage(void);
#define GAUGE_Y  6

//extern EEPVIDEO idata EepVideo;

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

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

/////////////////////////////////////////////
//sary/////////////
#include "OSD_main.h"
#include "OSD_source.h"
#include "OSD_audio.h"
#include "OSD_video.h"
#include "OSD_screen.h"
#include "OSD_system.h"


extern bit OSD_enable;
extern uCHAR window;
extern uCHAR cursor1, cursor2;
extern bit enter;

extern unsigned char CurMode; //source_val; //source chosen

//Audio
extern unsigned char Aud_BassLevel; //0(-7)->15(+7)
extern unsigned char Aud_TrebleLevel; //0(-7)->15(+7)
extern unsigned char Aud_BalanceLevel; //0(L7)->15(R7)
extern unsigned char Aud_FaderLevel; //0(F7)->15(R7)

extern unsigned int AudioStatus;
extern unsigned char Aud_IniVol;

/*extern bit subwoofer; //0 off, 1 on
extern bit beep; //0 off, 1 on
extern unsigned char start_vol; //0->50*/


//video
extern unsigned char bright;
extern unsigned char contrast;
extern unsigned char color;
extern unsigned char sharp;

//screen
extern  unsigned int	VideoStatus;
/*extern bit direction; //0 normal, 1 inv
extern bit full;    //0 4:3, 1 16:9
*/

//System
extern unsigned char MinoutState; //in_out; //0 none, 1 level-1,
                          //2 level-2, 3 level-3
extern unsigned char TiltLimit; //tilt_range; //2 auto, 3 1-3,
                              //4 1-4, 5 1-5
extern unsigned char ChannelType; //tv_sys; //0 NTSC, 1 PAL, 2 CHINESE
extern unsigned char PalType; //tv_sound; //0 sound-3, 1 sound-1
                            //2 sound-2
extern unsigned int TiltFlag0; //bit tilt; //0 auto, 1 manual
//extern bit backlight; //0 normal, 1 bright

//reset
extern bit reset_valid; //0: no   1:ok

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

 /*
code OSDMENU *OSDMenu_E[]={
	MainMenu_E,
};

code OSDMENU *OSDMenu_C[]={
	MainMenu_C,
};

typedef struct tagMULTILANGUAGEOSD{
	uCHAR cLangID;
	OSDMENU **osdMenuPtr;
}MULTILANGUAGEOSD;

MULTILANGUAGEOSD code MultiLangOSD[]={
	{eENGLISH, OSDMenu_E},
	{eCHINESE, OSDMenu_C},
};

code uCHAR *MessageData[] = {
		iNoSignal,
		iNoSupport,
		iFailSafeMode,
		iAutoAdjust,
		iPowerOff,
		iADCCalib,
     iAdcSubsample,
     iSyncError
};
 */
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
};


void OSDInit(void)
{
	unsigned int i;
	OSDCfgWr(OSD_CTRL,0x18);           //disable osd and width*1

//	OSDCfgWr(OSD_CTRL,0x18);
	OSDSetRamAddr(FONT_DATA_START_ADDRESS);
	OSDCfgWr(CHAR_FONT_SIZE,FONT_SIZE);
	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(CHAR_BS_CTRL,0x40);
	OSDCfgWr(CHAR_BS_COLOR,0x00);
  	OSDCfgWr(CHAR_HEIGHT_CTRL,0x20);
	//OSDCfgWr(CHAR_HEIGHT_CTRL,0x40);  //For malata only
  	OSDCfgWr(BLINK_CTRL,0x01);
       //OSDCfgWr(ALPHA_BLD_CTRL,0x80);          /* Alpha blending is disable */
        OSDCfgWr(ALPHA_BLD_CTRL,0x02);       //0x86   // Alpha blending is disable; for malata only

	OSDLoadColor();
	//OSDSetRamAddr(FONT_DATA_START_ADDRESS);
	twdWr_Burst_A(OSD_RAM_DL);
	//Below is re-writted
	for(i=0; i<128*FONT_HEIGHT; i++){
		twdWr_Burst_D(font_00[2*i]);
   	twdWr_Burst_D(font_00[2*i+1]);
	}

  //0xc00==1024*3;
	for(; i<0xc00; i++){
   	twdWr_Burst_D(0x00);
        twdWr_Burst_D(0x00);
	}
 	twdWr_Burst_P();

	for(i=0;i<15;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]);

}

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

void OSDEnable(void)
{
//	m_bOSDEnable = 1;
	OSDCfgWr(OSD_CTRL,0x98);
	//OSDCfgWr(OSD_CTRL,0x99); //For malata only

//#ifndef TIMER0
//	if(m_bFactryMode)	return;
//	Timer0Start();
//#endif

}

void OSDDisable(void)
{
/*
#ifdef TIMER0
	if(!m_bFactryMode)

#endif
*/		//Timer0Stop();
	OSDCfgWr(OSD_CTRL,0x18);
//	m_cOSDEvent=0;
//	m_cOSDFunc=0;
//	m_cItem=1;
//	m_bAdjRGBColor=0;  //Init color
//	m_bOSDEnable=0;
//	m_cCurreKey=m_cPreKey=0xFF;
}
//extern bit bFactry_Func,bFactry_Menu;

void OSDExit(void)
{
	OSDCfgWr(OSD_CTRL,0x18);
	OSDCfgWr(0x10,0x00); //Disable window
	OSDDisable();
	OSDClearPage();
//bFactry_Func=0;
//bFactry_Menu=0;

}

/*void OSDEventMgr(void)
{
//	Timer0Stop();
	switch(m_cOSDEvent){
	case GammaAdjust:
	      bGAMMA_ADJ=TURE;
	      AddPoint=0;
	      GammaBuffer=I2CReadByte(EEPBLOCK1,AddPoint);
	      OSDPosition(CENTER);
	      OSDEnable();
	      OSDShowLine(iGAMMA,0,0,COL_TITLE,OSD_LENGTH);
	      OSDDisplayNum(AddPoint, 8,0, COL_TITLE);
	      OSDDisplayNum(GammaBuffer, 13,0, COL_TITLE);
	      break;
	case CLOSEMENU:
		OSDExit();
		break;
	case OPENMENU:
		m_cItem=1;
		OSDOpenMenu();
		OSDMoveCursor(0x00,0x17);
		break;
	case FUNCSELCT_IN:
	        if(bGAMMA_ADJ==TURE){
	            AddPoint++;
	            if(AddPoint>=GAMMA_TABLE_DATA_SIZE)
	                AddPoint=0;
	            GammaBuffer=I2CReadByte(EEPBLOCK1,AddPoint);
	            OSDDisplayNum(AddPoint, 8,0, COL_TITLE);
	            OSDDisplayNum( GammaBuffer, 13,0, COL_TITLE);
	        }
	         else
	             OSDFuncSelect(-1);
		break;
	case FUNCSELCT_DN:
	        if(bGAMMA_ADJ==TURE){
	            if(AddPoint==0)
	               AddPoint=GAMMA_TABLE_DATA_SIZE;
	            AddPoint--;
	            GammaBuffer=I2CReadByte(EEPBLOCK1,AddPoint);
	            OSDDisplayNum(AddPoint, 8,0, COL_TITLE);
	            OSDDisplayNum( GammaBuffer, 13,0, COL_TITLE);
	        }
	        else
	            OSDFuncSelect(1);
		break;
	case FUNCEXIT:
			OSDFuncExit();
		break;
	case FUNCADJ_IN:
	        if(bGAMMA_ADJ==TURE){
	             GammaBuffer++;
	             I2CWriteByte(EEPBLOCK1,AddPoint,GammaBuffer);
	             OSDDisplayNum(AddPoint, 8,0, COL_TITLE);
	             OSDDisplayNum(GammaBuffer, 13,0, COL_TITLE);
	             AdjustGammmaDate();
	            }
	        else
	             OSDItemAdj(INCREASE);
		break;
	case FUNCADJ_DN:
	          if(bGAMMA_ADJ==TURE){
	             GammaBuffer--;
	             I2CWriteByte(EEPBLOCK1,AddPoint,GammaBuffer);
	             OSDDisplayNum(AddPoint, 8,0, COL_TITLE);
	             OSDDisplayNum(GammaBuffer, 13,0, COL_TITLE);
	             AdjustGammmaDate();
	            }
	        else
	             OSDItemAdj(DECREASE);
		break;
	case POWERMANAGE:
		m_bKyPowerOn = m_bKyPowerOn^0x01;
		PowerManage();
		//if(m_bChipPowerOn)
		//	BKPower();
		break;
	default:	break;
	}

	//if(m_bOSDEnable)
	//	Timer0Start();
}*/
/*void OSDDisplayNum(uCHAR cVal, uCHAR x, uCHAR y, uCHAR cColor)
{       uCHAR i;
	uCHAR cTemp=cVal;
	uCHAR Num[2]=0;
	Num[0]=(uCHAR)(cTemp/16);
        Num[1]=(uCHAR)(cTemp%16);

        OSDSetRamAddr(MENU_RAM_START_ADDRESS+((int)y << 5)+x);
        twdWr_Burst_A(OSD_RAM_DL);
        for(i=0;i<2;i++){
           OSDNumConvert(Num[i]);
           twdWr_Burst_D(cColor );
           x++;
         }
        twdWr_Burst_P();
}
*/
/*void OSDOpenMenu(void)
{

	OSDPosition(CENTER);
	OSDEnable();
	OSDShowPage();	//Title
	m_cOSDFunc|=m_cItem;
	OSDShowVideoData();
}*/
/*void OSDFuncExit(void)
{
		OSDCfgWr(0x10,0x00); //Disable window
		OSDClearPage();
		OSDDisable();
		m_cOSDEvent=0;
		m_cItem=1;
}*/
/*void OSDFuncSelect(sCHAR sStep)
{
 	//Remove previous cursor
	//OSDHLLine(m_cItem, COL_NORMAL);

	switch(m_cOSDFunc&0xf0){
	case idMainMenu:
     		if(m_cItem+sStep>=1 && m_cItem+sStep<=5 )	m_cItem+=sStep;
		else{
			if(sStep<0)		m_cItem=5;
			else			m_cItem=1;
		}
		break;
	default:
		break;
	}
	m_cOSDFunc=(m_cOSDFunc&0xf0)|m_cItem;
  //High Light Current item
		OSDMoveCursor(0x00,0x17);
}
*/

/*void OSDShowPage(void)
{
	uCHAR i=0;
	uCHAR y=1;

	MULTILANGUAGEOSD *pOSDLangPtr;
	OSDMENU **pOSDMenuPtr;

	OSDPosition(CENTER);
		pOSDLangPtr=&MultiLangOSD[0];
	pOSDMenuPtr=pOSDLangPtr->osdMenuPtr;  //Main

 	while(pOSDMenuPtr[(m_cOSDFunc>>4)-1][i].iconStr!=NULL)
	{
		OSDShowLine(iBlankLine,0,y,COL_NORMAL,OSD_LENGTH);//TV Kuo
		OSDSetRamAddr(MENU_RAM_START_ADDRESS+((int)y<<5)+24);
		twdWr_Burst_A(OSD_RAM_DL);
		twdWr_Burst_D(0x3C); //V
		twdWr_Burst_D(0x02);
		twdWr_Burst_P();

		OSDShowLine(pOSDMenuPtr[(m_cOSDFunc>>4)-1][i].iconStr,ICON_STAT,y,COL_NORMAL,OSD_LENGTH);//TV Kuo
		OSDShowLine(pOSDMenuPtr[(m_cOSDFunc>>4)-1][i].txtStr,TXT_STAT,y,COL_NORMAL,OSD_LENGTH);
		if(pOSDMenuPtr[(m_cOSDFunc>>4)-1][i].cDataAttr==GAUGE)
		{
			OSDShowVideoNum(i+m_cOSDFunc+1,y);
	 	}
		i++;
		y++;
	}
	OSDShowLine(iBlankLine,0,y,COL_NORMAL,OSD_LENGTH);//Kuo TV

⌨️ 快捷键说明

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