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

📄 t102osd.c

📁 本项目是台湾宏芯7"TFT模拟显示屏的驱动设计
💻 C
字号:
#include <reg51.h>
#include "common.h"
#include "System.h"
#include "OSDDraw.h"
#include "TwoWire.h"
#include "TW10xReg.h"
#include "T102OSD.h"

#ifdef NEW_OSD
#include "font1216.c"
#else
#include "T102_Font12W18H.c" 		// 12W18H
//#include "T102_Font8W16H.c"    	//  8W16H // It's better for Au 3.5".
//#include "T102_Font6W16H.c"  	//  6W16H // It's too small for Au 3.5".
#endif

#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 "T102_Logo.c"

bit OSD_PowerOnLogo_On = 1;

// define OSD Logo BMP LUT color data
code unsigned char OSDLutLogoData[32]={
	0x33,0x03,  //Black             f=0 ,   b=0  0x12, 03
  	0xaa,0x02,  //Light Blue        f=2 ,   b=1
	0x18,0x01,  //Dark  Blue        f=8 ,   b=4
	0x1f,0x01,  //Dark  Blue        f=8 ,   b=4
  	0xff,0x0f,  //White        		f=3
  	0xf6,0x0f,  //Dark Brown        f=4 ,   b=2
  	0x08,0x08,  //Purple            f=5
  	0xa8,0x07,  //Light Green       f=6 ,   b=3
  	0x86,0x0f,  //Dark  Red         f=7
  	0x54,0x0f,  //Dark  Red         f=7
  	0x54,0x0f,  //Dark  Red         f=7
  	0x0f,0x0f,
  	0xb9,0x00,  //purple                                                                                                                                          6
  	0x44,0x04,
  	0x88,0x08,  //grey
  	0xff,0x0f   //white
};
#endif //LOGO_ON


void OSDLogo(void)
{
	unsigned int i;
#ifdef LOGO_ON
	OSDSetRamAddr(FONT_DATA_START_ADDRESS);
	I2CWriteByte(TW101,OSD_CFG_INDEX,OSD_LUT_RAM_DATA);


	OSDCfgWr(BW_W,20);            	
	OSDCfgWr(BW_H,29);           

	twdWr_Burst_A(OSD_RAM_DL);
	for(i=0;i<40*32;i++)
   	twdWr_Burst_D(logodata[i]);
	twdWr_Burst_P();

	OSDCfgWr(OSD_CTRL,0xf8);           //2 bits pixel BitMap
	//kenny 20060301 ==================
	//#ifdef T116
	I2CWriteByte(TW101,0xE2,0x11);
	//#endif
	//kenny 20060301 ==================
	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);
	// add by Sherman 06'02'06
	#if (defined T102)|(defined T112)|(defined T118)	
	if((FONT_SIZE==FONT_SIZE8W16H)|(FONT_SIZE==FONT_SIZE6W16H))
		OSDCfgWr(0x0f,0x40);
	#endif
	//
	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,0x84);       
	OSDLoadColor();  
	OSDSetRamAddr(FONT_DATA_START_ADDRESS);
	twdWr_Burst_A(OSD_RAM_DL);
	
	//Below is re-writted   // chagne by Sherman 06'02'06
#ifdef T102
	if((FONT_SIZE==FONT_SIZE8W16H)|(FONT_SIZE==FONT_SIZE6W16H)){
		for(j=0;j<(TOTAL_FONT_NUM/2)+1;j++)	
		for(i=0; i<FONT_HEIGHT; i++){
			twdWr_Burst_D(AllFonts[2*j+1][2*i+1]);
			twdWr_Burst_D(AllFonts[2*j][2*i+1]);
		}
	}else{
#endif
		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]);
		}
#ifdef T102
	}
#endif

    //0x400==1024;
#ifdef T118
	for(i=(TOTAL_FONT_NUM)*FONT_HEIGHT; i<0xc00; i++){
#elif (defined T116)
	for(i=(TOTAL_FONT_NUM)*FONT_HEIGHT; i<0x600; i++){
#else
	for(i=(TOTAL_FONT_NUM)*FONT_HEIGHT; i<0x400; i++){
#endif
		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 OSDShowLine(uCHAR *string,uCHAR x,uCHAR y,uCHAR cColor,uCHAR cLength)
{
 	uCHAR c;
	if((x < 30) && ( y < OSD_LINE_NUM)){
		OSDSetRamAddr(MENU_RAM_START_ADDRESS+((int)y << 5)+x);
		twdWr_Burst_A(OSD_RAM_DL);      // Write OSD index
     	while((*string) != EOL && (x < cLength)){
		    c=*string++;
		    if(c>0x40)			// Character
		    	twdWr_Burst_D(c-IndexCharacterOffset);
			else if(c>=0x30)	// number
				twdWr_Burst_D(c-IndexNumOffset);  
			else				
				twdWr_Burst_D(c);
			
        	twdWr_Burst_D(cColor );
        	x++;
  		}
	}
   	twdWr_Burst_P();
}

⌨️ 快捷键说明

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