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

📄 osddraw.c

📁 MCU为:ATMGEA128
💻 C
字号:
#include "include.h"
#include "osddraw.h"
//#include "font1218.c"
extern unsigned char colourmode;
extern unsigned char user_config[CONFIGDATA_MAX];

void OSDCfgWr(unsigned char osdcfg_add,unsigned char osdcfg_dat);
void OSDInit(void);
void OSDLoadColor(void);
void OSDLoadFont(void);
void refreshmenu(void);
void cleanline(unsigned char page,unsigned char line);
void osddisable(void);
void osdenable(void);

void OSDInit(void)
{
	unsigned int i,j;
	unsigned char temp;
	extern unsigned char tmp;
	OSDCfgWr(0x00,0x01);        //disable osd and width*1
	OSDCfgWr(0x01,0x02);//OSD显示的位置参数
	OSDCfgWr(0x02,100);//第100*2	个行象素点
	OSDCfgWr(0x03,94);	//第100*2	个列象素点
	OSDCfgWr(0x04,0x0b);	//0x09:Font Size:18*12
	OSDCfgWr(0X05,CHAR_MAIN_MENU_START); 	//0X05H:CHAR_RAM_BASE_A:the begining of 128step.
	OSDCfgWr(0X1E,CHAR_RAM_END);   		 	//0X1E:CHAR_RAM_END_A,the ending of the 128step
	OSDCfgWr(0x06,0x01);
	OSDCfgWr(0x07,0x40);
  	OSDCfgWr(0x08,0x20);
  	OSDCfgWr(0x09,0x00);

	OSDCfgWr(0x0a,0x00);
	OSDCfgWr(0x0b,0x80);
	OSDCfgWr(0x0c,0x60);
	OSDCfgWr(0x0d,0x11);
	OSDCfgWr(0x0f,0x00);
	
   	
   	//可用于菜单选中功能
   	OSDCfgWr(0x10,0x00);	//Window_1 Start Character Row Number
	OSDCfgWr(0x11,0x00);	//Window_1 end   Character Row Number
	OSDCfgWr(0x12,0x00);	//Start Character Column Number
	OSDCfgWr(0x13,0x00);	//end   Character Column Number
	OSDCfgWr(0x14,0x00);	//OSDCfgWr(0x13,0x00);	
	
	OSDCfgWr(0x1A,0x00);	//Char2BP Font Base Address LBS
	OSDCfgWr(0x1B,0x08);	//Char2BP Font Base Address MBS
	OSDCfgWr(0x1c,0xf0);       //0x86   // Alpha blending is disable; for malata only
	//OSDSetRamAddr(FONT_DATA_START_ADDRESS);
	//OSDSetRamAddr(0x0000);
		
	OSDLoadColor();
	//OSDCfgWr(0x00,0x01);
	OSDLoadFont();
	//loadcfg();
	refreshmenu();
	t103_write(0x50,0xe2,0x11);
	osddisable();
}



#define	I2CWriteByte(a, b, c)	t103_write(a,b,c)
#define   TW101			0X50
#define	OSD_RAM_AH	0XA3
#define	OSD_RAM_AL	0XA2
#define 	OSD_CFG_INDEX	0xa0	
#define 	OSD_CFG_DATA	0xa1
#define 	OSD_LUT_RAM_DATA	0x0e

void OSDCfgWr(unsigned char osdcfg_add,unsigned char osdcfg_dat)
{
t103_write(0x50,0xa0,osdcfg_add);
t103_write(0x50,0xa1,osdcfg_dat);
}
void OSDSetRamAddr(unsigned int address)
{
	I2CWriteByte(TW101,OSD_RAM_AH,(unsigned char)(address>>8));
  	I2CWriteByte(TW101,OSD_RAM_AL,(unsigned char)(address & 0xff));
}
void OSDLoadColor(void)
{
	unsigned char tmp, i;
	I2CWriteByte(TW101,OSD_CFG_INDEX,OSD_LUT_RAM_DATA);
  	for(i=0;i<32;i++)
	I2CWriteByte(TW101,OSD_CFG_DATA,tmp=cOSDMenuLutData[i]);
}

void OSDLoadFont(void)
{

unsigned char tmp;
unsigned char i,j;
OSDSetRamAddr(0x00);
t103_write(0X50, 0Xf1, 0x00);//STOP INC
		I2C_Start();
		I2C_Write(0X50);
		I2C_Write(0XA4);
for(j=0;j<TOTAL_FONT_NUM;j++)
	{
	for(i=0; i<18; i++)
		{
		tmp=AllFonts[j][2*i];
		I2C_Write(tmp);
		tmp=AllFonts[j][2*i+1];
		I2C_Write(tmp);
		}
	}
tmp=0;
for(;j<0x8d;j++)
	for(i=0; i<18; i++)
		{
		I2C_Write(tmp);		
		I2C_Write(tmp);
		}
		I2C_Stop();
}

void refreshmenu(void)
{
//extern unsigned char osdstyle;
unsigned char tmp,temp,j,i;
unsigned char menu[5][32]=
{
//LINE-0
{zfont_biao,zfont_zhun,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,
font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl},
//LINE-1
{font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl
,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl},
//LINE-2
{font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl
,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl},
//LINE-3
{font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl
,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl},
//LINE-4
{font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl
,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl},
};

static const unsigned char constmenu[5][32]=
{
//LINE-0
{font_b,font_r,font_i,font_g,font_h,font_t,font_n,font_e,font_s,font_s,font_bl,font_bl,
font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl},
//LINE-1
{font_c,font_h,font_r,font_o,font_m,font_a,font_bl,font_bl,
 font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl},
//LINE-2
{font_c,font_o,font_n,font_t,font_r,font_a,font_s,font_t,font_bl,
 font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl},
//LINE-3
{font_r,font_e,font_s,font_e,font_t,font_bl,font_v,
font_1,font_2,font_bl,font_bl,font_bl,font_o,font_n
,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl},
//LINE-4
{font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl
,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl},
};

static const unsigned char gmmenu[5][32]=
{
//LINE-0
{
font_g,font_m,font_2,font_8,font_bl,font_bl,font_g,font_m,font_0,font_bl,font_bl,font_bl,
font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,},
//LINE-1
{
font_g,font_m,font_9,font_3,font_bl,font_bl,font_g,font_m,font_6,font_0,font_bl,font_bl,
font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,},
//LINE-2
{
font_g,font_m,font_1,font_5,font_7,font_bl,font_g,font_m,font_1,font_2,font_5,font_bl,
font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,},
//LINE-3
{
font_g,font_m,font_1,font_9,font_0,font_bl,font_g,font_m,font_1,font_2,font_2,font_bl,
font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,},
//LINE-4
{
font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_g,font_m,font_2,font_5,font_5,font_bl,
font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,},
};

switch(osdstyle)
{
	case	0:
		menu[0][0]=font_v;
		menu[0][1]=font_i;
		menu[0][2]=font_d;
		menu[0][3]=font_e;
		menu[0][4]=font_o;
		menu[0][5]=font_bl;
		menu[0][6]=font_s;
		menu[0][7]=font_e;
		menu[0][8]=font_a;
		menu[0][9]=font_r;
		menu[0][10]=font_c;
		menu[0][11]=font_h;	
		menu[0][12]=zfont_juhao;
		menu[0][13]=zfont_juhao;
		menu[0][14]=zfont_juhao;	
		menu[0][15]=zfont_juhao;
		for(i=16;i<32;i++)menu[0][i]=font_bl;
		for(j=1;j<5;j++)for(i=0;i<32;i++)menu[j][i]=font_bl;
		break;
	case	1:
		switch(colourmode)
			{
			case 0://标准
			menu[0][0]=zfont_biao;
			menu[0][1]=zfont_zhun;
			for(i=2;i<32;i++)menu[0][i]=font_bl;
			for(j=1;j<5;j++)for(i=0;i<32;i++)menu[j][i]=font_bl;
			break;
			case 1://明亮
			menu[0][0]=zfont_ming;
			menu[0][1]=zfont_liang;
			for(i=2;i<32;i++)menu[0][i]=font_bl;
			for(j=1;j<5;j++)for(i=0;i<32;i++)menu[j][i]=font_bl;
			break;
			case 2://鲜艳
			menu[0][0]=zfont_xian;
			menu[0][1]=zfont_yan;
			for(i=2;i<32;i++)menu[0][i]=font_bl;
			for(j=1;j<5;j++)for(i=0;i<32;i++)menu[j][i]=font_bl;
			break;
			
			default:
		 	break;
			}
		break;
	case	2:
		for(i=0;i<5;i++)
			for(j=0;j<32;j++)
			menu[i][j]=constmenu[i][j];		
			menu[0][12]=htoi(user_config[BRIGHTNESS])>>4;
			menu[0][13]=htoi(user_config[BRIGHTNESS])&0xf;
			menu[1][12]=htoi(user_config[CHROMA])>>4;
			menu[1][13]=htoi(user_config[CHROMA])&0xf;
			menu[2][12]=htoi(user_config[CONSTRAST])>>4;
			menu[2][13]=htoi(user_config[CONSTRAST])&0xf;
		break;
	case	4://td028的GM曲线
	//保证显示的即为输入的
		 user_config[gm0]=TD28_READ(0x14)&0xf;
		 user_config[gm1]=(TD28_READ(0x14)>>4)&0xf;
		 user_config[gm2]=TD28_READ(0x15)&0xf;
		 user_config[gm3]=(TD28_READ(0x15)>>4)&0xf; 
		 user_config[gm4]=TD28_READ(0x16)&0xf;
		 user_config[gm5]=(TD28_READ(0x16)>>4)&0xf;
		 user_config[gm6]=TD28_READ(0x17)&0xf;
		 user_config[gm7]=(TD28_READ(0x17)>>4)&0xf;
		 user_config[gm8]=TD28_READ(0x18)&0xf;
		for(i=0;i<5;i++)
			for(j=0;j<32;j++)
		menu[i][j]=gmmenu[i][j];	
		menu[0][13]=user_config[gm0];
		menu[0][12]=user_config[gm1];
		menu[1][13]=user_config[gm2];
		menu[1][12]=user_config[gm3];
		menu[2][13]=user_config[gm4];
		menu[2][12]=user_config[gm5];
		menu[3][13]=user_config[gm6];
		menu[3][12]=user_config[gm7];
		menu[4][13]=user_config[gm8];
		OSDCfgWr(0X1E,CHAR_RAM_END+3); 
		osdenable();
		break;
	case	5://td028的GM曲线
	//保证显示的即为输入的
		menu[0][0]=font_t;
		menu[0][1]=font_e;
		menu[0][2]=font_s;
		menu[0][3]=font_t;
		menu[0][4]=font_bl;
		menu[0][5]=font_m;
		menu[0][6]=font_o;
		menu[0][7]=font_d;
		menu[0][8]=font_e;
		menu[0][9]=zfont_juhao;
		menu[0][10]=zfont_juhao;
		menu[0][11]=zfont_juhao;	
		menu[0][12]=zfont_juhao;
		menu[0][13]=zfont_juhao;
		menu[0][14]=zfont_juhao;	
		menu[0][15]=zfont_juhao;
		for(i=16;i<32;i++)menu[0][i]=font_bl;
		for(j=1;j<5;j++)for(i=0;i<32;i++)menu[j][i]=font_bl;
		osdenable();
		break;
	default:
 		break;
}

//写入数据
OSDSetRamAddr(MENU_RAM_START_ADDRESS);
tmp=0;
t103_write(0X50, 0Xf1, 0x00);//STOP INC
I2C_Start();
I2C_Write(0X50);
I2C_Write(0XA4);
for(i=0;i<5;i++)
	{
	for(j=0;j<0x1f;j++)
		{
		tmp=menu[i][j];
		if(j>=15)tmp=font_bl;
		I2C_Write(tmp);//low:index
		if(j<15)temp=0x1f;else
		temp=0x00;
		I2C_Write(temp);//char attrib
 		}
		I2C_Write(0x00);//resv
		I2C_Write(0x80);//row attrib	
	}
for(i=3;i<20;i++){
	for(j=0;j<0x1f;j++)
		{
		tmp=font_bl;
		I2C_Write(tmp);//low:index
		temp=0x00;
		I2C_Write(temp);//char attrib
 		}
		I2C_Write(0x00);//resv
		I2C_Write(0x80);//row attrib	
	}
I2C_Stop();
}

void refreshline(unsigned char page,unsigned char line){
unsigned char j,tmp,temp;
//extern unsigned char user_config[CONFIGDATA_MAX];
t103_write(0X50, 0Xf1, 00);//STOP INC
switch(line)
	{
	case 0:
		OSDSetRamAddr(MENU_RAM_START_ADDRESS+12);
		tmp=htoi(user_config[BRIGHTNESS]);
		I2C_Start();
		I2C_Write(0X50);
		I2C_Write(0XA4);
		I2C_Write((tmp>>4)&0xf);
		I2C_Write(0X8f);		
		I2C_Write(tmp&0xf);
		I2C_Write(0X8f);
		I2C_Stop();	
		break;
	case 1:
		OSDSetRamAddr(MENU_RAM_START_ADDRESS+0x20+12);
		tmp=htoi(user_config[CHROMA]);
		I2C_Start();
		I2C_Write(0X50);
		I2C_Write(0XA4);
		I2C_Write((tmp>>4)&0xf);
		I2C_Write(0X8f);		
		I2C_Write(tmp&0xf);
		I2C_Write(0X8f);
		I2C_Stop();	
		break;
	case 2:
		OSDSetRamAddr(MENU_RAM_START_ADDRESS+0x40+12);
		tmp=htoi(user_config[CONSTRAST]);
		I2C_Start();
		I2C_Write(0X50);
		I2C_Write(0XA4);
		I2C_Write((tmp>>4)&0xf);
		I2C_Write(0X8f);		
		I2C_Write(tmp&0xf);
		I2C_Write(0X8f);
		I2C_Stop();	
		break;
	case 3:
		OSDSetRamAddr(MENU_RAM_START_ADDRESS+0x60+12);
		I2C_Start();
		I2C_Write(0X50);
		I2C_Write(0XA4);
		I2C_Write(font_o);
		I2C_Write(0X8f);		
		I2C_Write(font_n);
		I2C_Write(0X8f);
		I2C_Stop();	
		break;
	case 4:
		break;
	default:
		 break;
	}
}

void refreshline_gm(unsigned char page,unsigned char line){
unsigned char j,tmp,temp;
//extern unsigned char user_config[CONFIGDATA_MAX];
t103_write(0X50, 0Xf1, 00);//STOP INC
switch(line)
	{
	case 0:
		OSDSetRamAddr(MENU_RAM_START_ADDRESS+12);
		I2C_Start();
		I2C_Write(0X50);
		I2C_Write(0XA4);
		I2C_Write(user_config[gm1]);
		I2C_Write(0X0f);		
		I2C_Write(user_config[gm0]);
		I2C_Write(0X0f);
		I2C_Stop();	
		break;
	case 1:
		OSDSetRamAddr(MENU_RAM_START_ADDRESS+0x20+12);
		tmp=htoi(user_config[CHROMA]);
		I2C_Start();
		I2C_Write(0X50);
		I2C_Write(0XA4);
		I2C_Write(user_config[gm3]);
		I2C_Write(0X0f);		
		I2C_Write(user_config[gm2]);
		I2C_Write(0X0f);
		I2C_Stop();	
		break;
	case 2:
		OSDSetRamAddr(MENU_RAM_START_ADDRESS+0x40+12);
		tmp=htoi(user_config[CONSTRAST]);
		I2C_Start();
		I2C_Write(0X50);
		I2C_Write(0XA4);
		I2C_Write(user_config[gm5]);
		I2C_Write(0X0f);		
		I2C_Write(user_config[gm4]);
		I2C_Write(0X0f);
		I2C_Stop();	
		break;
	case 3:
		OSDSetRamAddr(MENU_RAM_START_ADDRESS+0x60+12);
		I2C_Start();
		I2C_Write(0X50);
		I2C_Write(0XA4);
		I2C_Write(user_config[gm7]);
		I2C_Write(0X0f);		
		I2C_Write(user_config[gm6]);
		I2C_Write(0X0f);
		I2C_Stop();	
		break;
	case 4:
	OSDSetRamAddr(MENU_RAM_START_ADDRESS+0x80+12);
		I2C_Start();
		I2C_Write(0X50);
		I2C_Write(0XA4);
		I2C_Write(0);
		I2C_Write(0X0f);		
		I2C_Write(user_config[gm8]);
		I2C_Write(0X0f);
		I2C_Stop();	
		break;
	default:
		 break;
	}
}


void cleanline(unsigned char page,unsigned char line){
unsigned char j,tmp,temp;
extern unsigned char user_config[CONFIGDATA_MAX];
t103_write(0X50, 0Xf1, 00);//STOP INC
switch(line)
	{
	case 0:
		OSDSetRamAddr(MENU_RAM_START_ADDRESS+12);
		tmp=htoi(user_config[BRIGHTNESS]);
		I2C_Start();
		I2C_Write(0X50);
		I2C_Write(0XA4);
		I2C_Write((tmp>>4)&0xf);
		I2C_Write(0X0f);		
		I2C_Write((tmp)&0xf);
		I2C_Write(0X0f);
		I2C_Stop();	
		break;
	case 1:
		OSDSetRamAddr(MENU_RAM_START_ADDRESS+0x20+12);
		tmp=htoi(user_config[CHROMA]);
		I2C_Start();
		I2C_Write(0X50);
		I2C_Write(0XA4);
		I2C_Write((tmp>>4)&0xf);
		I2C_Write(0X0f);		
		I2C_Write((tmp)&0xf);
		I2C_Write(0X0f);
		I2C_Stop();	
		break;
	case 2:
		OSDSetRamAddr(MENU_RAM_START_ADDRESS+0x40+12);
		tmp=htoi(user_config[CONSTRAST]);
		I2C_Start();
		I2C_Write(0X50);
		I2C_Write(0XA4);
		I2C_Write((tmp>>4)&0xf);
		I2C_Write(0X0f);		
		I2C_Write((tmp)&0xf);
		I2C_Write(0X0f);
		I2C_Stop();	
		break;
	case 3:
		OSDSetRamAddr(MENU_RAM_START_ADDRESS+0x60+12);
		I2C_Start();
		I2C_Write(0X50);
		I2C_Write(0XA4);
		I2C_Write(font_o);
		I2C_Write(0X0f);		
		I2C_Write(font_n);
		I2C_Write(0X0f);
		I2C_Stop();	
		break;
	case 4:
		break;
	default:
		 break;
	}
}


void osdenable(void){
	OSDCfgWr(0x00,0x81);        //enable osd and width*1
	t103_write(0x50,0xe2,0x11);
}

void osddisable(void){
	OSDCfgWr(0x00,0x01);        //disable osd and width*1
	t103_write(0x50,0xe2,0x11);
}
void bluescrenable(void){	
	//t103_write(0x50,0x90,0x02); //黑屏
	t103_write(0x50,0x91,0x97);
 	t103_write(0x50,0x9F,0xff);

	
}
void bluescrdisable(void){	
	//t103_write(0x50,0x90,0x04);// 非黑屏
	t103_write(0x50,0x91,0x00);
 	t103_write(0x50,0x9F,0xff);
}
//十六进制转十进制数(最大值64(0x3f))
unsigned char htoi(unsigned char	dat){
	unsigned char i,j,high,low;
	low=0;
	high=0;
	for(i=(dat>>2)&0x3f;i>=10;i-=10)
	{
	high++;
	}	
	low=i;
	i=high<<4|low;
	return i;
}

⌨️ 快捷键说明

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