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

📄 osd.c

📁 NOVATEK公司的LCD_CONTROLLER源代码 液晶显示器驱动板源代码NT68521
💻 C
📖 第 1 页 / 共 4 页
字号:
	String1,String3,String5,String7
};
code unsigned char *Tab2[]={
	String2,String4,String6,String8
};
unsigned char i;
	WriteWordIIC_HW(Scaler_Addr,0xcc,TextColor);
	for(i=0; i<4; i++){
		WriteXY_StrScaler(1,8,i+6,Tab1[i]);
		WriteXY_StrScaler(1,19,i+6,Tab2[i]);
	}
	i = Language >> 1;
	if((Language & BIT_0) == 0)
		FillLineAttr(8,i+6,11,TextSelColor);
	else
		FillLineAttr(19,i+6,11,TextSelColor);
//osd on
	OSD_Control |= BIT_0;
	WriteIIC_HW(Scaler_Addr,0x95,OSD_Control);
}


void ShowRGB(void)
{
unsigned char value;
	switch(OSD_Point2){
	case R_GainNode:
		value = R_Gain;
		break;
	case G_GainNode:
		value = G_Gain;
		break;
	case B_GainNode:
		value = B_Gain;
		break;
	}
	WriteWordIIC_HW(Scaler_Addr,0xcc,TextColor);
	ShowValue(1,value);
	ShowSliderBar(9,8,value);
}

void ClearText(void)
{
unsigned char i;
	WriteWordIIC_HW(Scaler_Addr,0xcc,TextColor);
	for(i=5; i<11; i++){
		WriteXY_StrScaler(1,7,i,SpaceLine23);
	}
}

void ShowOutOfRange(void)
{
code unsigned char String1[]={
	12,"OUT OF RANGE"
};
code unsigned char String2[]={
	21,"EN DEHORS DE LA PLAGE"
};
code unsigned char String3[]={
	17,"AUSSER REICHWEITE"
};
code unsigned char String4[]={
	14,"FUERA DE RANGO"
};
code unsigned char String5[]={
	11,"FUORI GAMMA"
};
code unsigned char String6[]={
	13,"BUITEN BEREIK"
};
code unsigned char String7[]={
	17,"FORA DO INTERVALO"
};
code unsigned char String8[]={
	4,0x99,0x9a,0x9b,0x9c
};
code unsigned char *Tab1[]={
	String1,String2,String3,String4,String5,String6,String7,String8
};
	if((flag2 & BIT_3) == 0){
//		ForceToBackground(0);	//Set fource to background
		OSD_Type = 5;
		Osd4Init();
		WriteWordIIC_HW(Scaler_Addr,0xcc,TextColor | BIT_0);
		WriteXY_CStrScaler(1,2,2,27,Tab1[Language]);
		OSD_Control |= BIT_0;
		WriteIIC_HW(Scaler_Addr,0x95,OSD_Control);
		AUDIO_MUTE();
		flag2 |= BIT_3;
		if((flag3 & BIT_2) != 0x00)
			printf("Out of range\r\n");
	}
	else{
		SetMovePosition();
	}
	OutOfRangeTimer = 500;
}

void ShowNoSync(void)
{
code unsigned char String1[]={
	15,"NO INPUT SIGNAL"
};
code unsigned char String2[]={
	21,"PAS DE SIGNAL DENTR`E"
};
code unsigned char String3[]={
	19,"KEIN EINGANGSSIGNAL"
};
code unsigned char String4[]={
	23,"NO HAY SE@AL DE ENTRADA"
};
code unsigned char String5[]={
	26,"NESSUN SEGNALE IN INGRESSO"
};
code unsigned char String6[]={
	19,"GEEN INGANGSSIGNAAL"
};
code unsigned char String7[]={
	20,"SEM SINAL DE ENTRADA"
};
code unsigned char String8[]={
	6,0x99,0x9a,0x9b,0x9c,0x9d,0x9e
};
code unsigned char *Tab1[]={
	String1,String2,String3,String4,String5,String6,String7,String8
};
//	ForceToBackground(0);	//Set fource to background
	OSD_Type = 4;
	Osd4Init();
	WriteWordIIC_HW(Scaler_Addr,0xcc,TextColor | BIT_0);
	WriteXY_CStrScaler(1,2,2,27,Tab1[Language]);
	OSD_Control |= BIT_0;
	WriteIIC_HW(Scaler_Addr,0x95,OSD_Control);
	if((flag3 & BIT_2) != 0x00)
		printf("No input signal\r\n");
}

void ShowDisconnector(void)
{
code unsigned char String1[]={
	12,"DISCONNECTOR"
};
code unsigned char String2[]={
	21,"PAS DE SIGNAL DENTR`E"
};
code unsigned char String3[]={
	19,"KEIN EINGANGSSIGNAL"
};
code unsigned char String4[]={
	23,"NO HAY SE@AL DE ENTRADA"
};
code unsigned char String5[]={
	26,"NESSUN SEGNALE IN INGRESSO"
};
code unsigned char String6[]={
	19,"GEEN INGANGSSIGNAAL"
};
code unsigned char String7[]={
	20,"SEM SINAL DE ENTRADA"
};
code unsigned char String8[]={
	6,0x99,0x9a,0x9b,0x9c,0x9d,0x9e
};
code unsigned char *Tab1[]={
	String1,String2,String3,String4,String5,String6,String7,String8
};
	if((flag2 & BIT_2) == 0){
//		ForceToBackground(0);	//Set fource to background
		OSD_Type = 4;
		Osd4Init();
		WriteWordIIC_HW(Scaler_Addr,0xcc,TextColor | BIT_0);
		WriteXY_CStrScaler(1,2,2,27,Tab1[Language]);
		OSD_Control |= BIT_0;
		WriteIIC_HW(Scaler_Addr,0x95,OSD_Control);
		AUDIO_MUTE();
		flag2 |= BIT_2;
		if((flag3 & BIT_2) != 0x00)
			printf("DISCONNECTOR\r\n");
	}
	else{
		SetMovePosition();
	}
}

void SetMovePosition(void)
{
unsigned short xy;
	if(MoveX < 0x8000){
		if(++MoveX > 150){
			MoveX |= 0x8000;
		}
	}
	else{
		if(--MoveX == 0x7fff){
			MoveX = 1;
		}
	}
	if(MoveY < 0x8000){
		if(++MoveY > 154){
			MoveY |= 0x8000;
		}
	}
	else{
		if(--MoveY == 0x7fff){
			MoveY = 1;
		}
	}
	xy = (MoveX & 0x7fff) * 6;
	WriteWordIIC_HW(Scaler_Addr,0x96,xy);
	if((flag3 & BIT_2) != 0x00)
		printf("OSD X = %d\r\n",xy);
	xy = (MoveY & 0x7fff) * 6;
	WriteWordIIC_HW(Scaler_Addr,0x99,xy);
	WriteIIC_HW(Scaler_Addr,0x98,OSD2_WIDTH-1);
	WriteIIC_HW(Scaler_Addr,0x9b,OSD2_HIGHT-1);
	if((flag3 & BIT_2) != 0x00)
		printf("OSD Y = %d\r\n",xy);
}

void SaveData(void)
{
unsigned short addr;
	switch(SavePointer){
	case BrightnessSaveFlag:
		if(PowerStatus == 0x80)
			Write24C16(0xd0,Brightness);
		else if(PowerStatus > 0x80)
			Write24C16(0xd6,Brightness);
		break;
	case ContrastSaveFlag:
		if(PowerStatus == 0x80)
			Write24C16(0xd1,Contrast);
		else if(PowerStatus > 0x80)
			Write24C16(0xd7,Contrast);
		break;
	case ClockSaveFlag:
		addr = 0x104 + (ModePoint * 8);
		Write24C16(addr,(unsigned char)(HTotal >> 8));
		addr++;
		Write24C16(addr,(unsigned char)HTotal);
		break;
	case PhaseSaveFlag:
		addr = 0x107 + (ModePoint * 8);
		Write24C16(addr,ADC_Phase);
		break;
	case HP_SaveFlag:
		addr = 0x102 + (ModePoint * 8);
		Write24C16(addr,(unsigned char)(HP_Start >> 8));
		addr++;
		Write24C16(addr,(unsigned char)HP_Start);
		break;
	case VP_SaveFlag:
		addr = 0x101 + (ModePoint * 8);
		Write24C16(addr,(unsigned char)VP_Start);
		break;
	case R_GainSaveFlag:
		addr = Read24C16(0xe1);
		addr = ColorTab[addr];
		addr = addr * 3 + 0xee;
		Write24C16(addr,R_Gain);
		break;
	case G_GainSaveFlag:
		addr = Read24C16(0xe1);
		addr = ColorTab[addr];
		addr = addr * 3 + 0xef;
		Write24C16(addr,G_Gain);
		break;
	case B_GainSaveFlag:
		addr = Read24C16(0xe1);
		addr = ColorTab[addr];
		addr = addr * 3 + 0xf0;
		Write24C16(addr,B_Gain);
		break;
	case VolumeSaveFlag:
		Write24C16(0xd4,Volume);
		break;
	case OSD_X_SaveFlag:
		Write24C16(0xdd,OSD_X);
		break;
	case OSD_Y_SaveFlag:
		Write24C16(0xde,OSD_Y);
		break;
	case OSD_TimerSaveFlag:
		Write24C16(0xcf,OSD_Timer);
		break;
	case SaturationSaveFlag:
		if(PowerStatus == 0x80)
			Write24C16(0xc8,Saturation);
		else if(PowerStatus > 0x80)
			Write24C16(0xd8,Saturation);
		break;
	case TintSaveFlag:
		if(PowerStatus == 0x80)
			Write24C16(0xc9,Tint);
		else if(PowerStatus > 0x80)
			Write24C16(0xd9,Tint);
		break;
	case SharpnessSaveFlag:
		if(PowerStatus == 0x80){
			Write24C16(0xca,Sharpness);
		}
		else{
			Write24C16(0xda,Sharpness);
		}
		break;
	case InverterSaveFlag:
		Write24C16(0xd5,Inverter);
		break;
	case Osd_ControlSaveFlag:
		Write24C16(0xce,(OSD_Control & ~BIT_0));
		break;
	}
	if((flag3 & BIT_2) != 0x00)	
		printf("SavePointer = %x\r\n",(unsigned short)SavePointer);
	SavePointer = NotSaveSaveFlag;
}

void ShowAutoAdj(void)
{
code unsigned char AutoAdjStr1[]={
	14,"AUTO ADJUSTING"
};
code unsigned char AutoAdjStr2[]={
	22,"AJUSTEMENT AUTOMATIQUE"
};
code unsigned char AutoAdjStr3[]={
	24,"AUTOMATISCHE EINSTELLUNG"
};
code unsigned char AutoAdjStr4[]={
	17,"AJUSTE AUTOM[TICO"
};
code unsigned char AutoAdjStr5[]={
	22,"REGOLAZIONE AUTOMATICA"
};
code unsigned char AutoAdjStr6[]={
	23,"AUTOMATISCHE INSTELLING"
};
code unsigned char AutoAdjStr7[]={
	17,"AJUSTE AUTOM[TICO"
};
code unsigned char AutoAdjStr8[]={
	4,0x99,0x9a,0x9b,0x9c
};
code unsigned char *Tab1[]={
	AutoAdjStr1,AutoAdjStr2,AutoAdjStr3,AutoAdjStr4,AutoAdjStr5,AutoAdjStr6,AutoAdjStr7,AutoAdjStr8
};
	OSD_Type = 4;
	Osd4Init();
	WriteWordIIC_HW(Scaler_Addr,0xcc,TextColor | BIT_0);
	WriteXY_CStrScaler(1,2,2,27,Tab1[Language]);
	OSD_Control |= BIT_0;
	WriteIIC_HW(Scaler_Addr,0x95,OSD_Control);
	if((flag3 & BIT_2) != 0x00)
		printf("Auto Adjust\r\n");
}

void DirectVolume(void)
{
code unsigned char VolumeStr1[]={
	6,"VOLUME"
};
code unsigned char VolumeStr2[]={
	6,"VOLUME"
};
code unsigned char VolumeStr3[]={
	7,"VOLUMEN"
};
code unsigned char VolumeStr4[]={
	7,"VOLUMEN"
};
code unsigned char VolumeStr5[]={
	6,"VOLUME"
};
code unsigned char VolumeStr6[]={
	6,"VOLUME"
};
code unsigned char VolumeStr7[]={
	6,"VOLUME"
};
code unsigned char VolumeStr8[]={
	4,0x99,0x9a,0x9b,0x9c
};
code unsigned char *Tab1[]={
	VolumeStr1,VolumeStr2,VolumeStr3,VolumeStr4,VolumeStr5,VolumeStr6,VolumeStr7,VolumeStr8
};
	OSD_Type = 3;
	Osd4Init();
	WriteWordIIC_HW(Scaler_Addr,0xcc,TextColor);
	WriteXY_CStrScaler(1,13,1,8,Tab1[Language]);
	ShowVolume();
	OSD_Control |= BIT_0;
	WriteIIC_HW(Scaler_Addr,0x95,OSD_Control);
}

void WriteSequenceScaler(unsigned char addr,unsigned char *p)
{
unsigned short i,l;
/* start bit */
/* transmit device */
	INTIIC1_FLG = 0xff;
	IIC1_DATA = Scaler_Addr;
	IIC1_CLK = 0x20 | IIC_BaudRate;
	IIC1_CON = 0x00;
/* transmit addr */
	MasterSendByte(addr);
/* transmit data */
	l = p[1] * 256;
	l = l + p[0] + 2;
	for(i=2; i<l; i++){
		MasterSendByte(p[i]);
	}
/* transmit dumy data for stop bit */
	WaitTx();
/* stop bit */
	IIC1_CLK = 0xA0|IIC_BaudRate;
//	IIC1_CON = 0x00;
	WaitStop();
}

void WriteStringScaler(unsigned char Attr,unsigned char *p)
{
unsigned char i,l,ch;
unsigned short m;
/* start bit */
/* transmit device */
	INTIIC1_FLG = 0xff;
	IIC1_DATA = Scaler_Addr;
	IIC1_CLK = 0x20 | IIC_BaudRate;
	IIC1_CON = 0x00;
/* transmit addr */
	MasterSendByte(0xe0);
/* transmit data */
	if(Attr == 0)
		MasterSendByte(0x40);
	else
		MasterSendByte(0x90);
	if(OSD_Type < 2)
		m = p[2] * OSD_WIDTH + p[1];
	else
		m = p[2] * OSD2_WIDTH + p[1];
	ch = (unsigned char)m;
	MasterSendByte(ch);
	ch = (unsigned char)(m >> 8);
	MasterSendByte(ch);
	l = p[0] + 1;
	for(i=3; i<l; i++){
		ch = p[i];
		MasterSendByte(ch);
	}
/* transmit dumy data for stop bit */
	WaitTx();
/* stop bit */
	IIC1_CLK = 0xA0|IIC_BaudRate;
//	IIC1_CON = 0x00;
	WaitStop();
}

void WriteXY_StrScaler(unsigned char Attr,unsigned char x,unsigned char y,unsigned char *p)
{
unsigned char i,l,ch;
unsigned short m;
/* start bit */
/* transmit device */
	INTIIC1_FLG = 0xff;
	IIC1_DATA = Scaler_Addr;
	IIC1_CLK = 0x20 | IIC_BaudRate;
	IIC1_CON = 0x00;
/* transmit addr */
	MasterSendByte(0xe0);
/* transmit data */
	if(Attr == 0)
		MasterSendByte(0x40);
	else
		MasterSendByte(0x90);
	if(OSD_Type < 2)
		m = y * OSD_WIDTH + x;
	else
		m = y * OSD2_WIDTH + x;
	ch = (unsigned char)m;
	MasterSendByte(ch);
	ch = (unsigned char)(m >> 8);
	MasterSendByte(ch);
	l = p[0] + 1;
	for(i=1; i<l; i++){
		ch = p[i];
		MasterSendByte(ch);
	}
/* transmit dumy data for stop bit */
	WaitTx();
/* stop bit */
	IIC1_CLK = 0xA0|IIC_BaudRate;
//	IIC1_CON = 0x00;
	WaitStop();
}

void WriteXY_CStrScaler(unsigned char Attr,unsigned char x,unsigned char y,unsigned char w,unsigned char *p)
{
unsigned char i,l,ch;
unsigned short m;
/* start bit */
/* transmit device */
	INTIIC1_FLG = 0xff;
	IIC1_DATA = Scaler_Addr;
	IIC1_CLK = 0x20 | IIC_BaudRate;
	IIC1_CON = 0x00;
/* transmit addr */
	MasterSendByte(0xe0);
/* transmit data */
	if(Attr == 0)
		MasterSendByte(0x40);
	else
		MasterSendByte(0x90);
	if(OSD_Type < 2)
		m = y * OSD_WIDTH + x;
	else
		m = y * OSD2_WIDTH + x;
	ch = (unsigned char)m;
	MasterSendByte(ch);
	ch = (unsigned char)(m >> 8);
	MasterSendByte(ch);
	i = w - p[0];
	i >>= 1;		//string start position
	l = p[0] + i;	//string end position
	i++;
	w ++;
	ch = 1;
	for(m=1; m<w; m++){
		if((m < i)||(m > l)){
			MasterSendByte(' ');
		}
		else{
			MasterSendByte(p[ch]);
			ch++;
		}
	}
/* transmit dumy data for stop bit */
	WaitTx();
/* stop bit */
	IIC1_CLK = 0xA0|IIC_BaudRate;
//	IIC1_CON = 0x00;
	WaitStop();
}

void FillLineAttr(unsigned char x,unsigned char y,unsigned char l,unsigned short Attr)
{
unsigned char i,ch;
unsigned short m;
/* start bit */
/* transmit device */
	INTIIC1_FLG = 0xff;
	IIC1_DATA = Scaler_Addr;
	IIC1_CLK = 0x20 | IIC_BaudRate;
	IIC1_CON = 0x00;
/* transmit addr */
	MasterSendByte(0xe0);
/* transmit data */
	MasterSendByte(0x70);
	if(OSD_Type < 2)
		m = y * OSD_WIDTH + x;
	else
		m = y * OSD2_WIDTH + x;
	ch = (unsigned char)m;
	MasterSendByte(ch);
	ch = (unsigned char)(m >> 8);
	MasterSendByte(ch);
	ch = (unsigned char)(Attr>>8);
	for(i=0; i<l; i++){
		MasterSendByte((unsigned char)Attr);
		MasterSendByte(ch);
	}
/* transmit dumy data for stop bit */
	WaitTx();
/* stop bit */
	IIC1_CLK = 0xA0|IIC_BaudRate;
//	IIC1_CON = 0x00;
	WaitStop();
}

void ShowNum(unsigned char Attr,unsigned char xx,unsigned char yy,unsigned char value)
{
unsigned char i,ch;
unsigned short m;
unsigned char buff[3];
//show value
	sprintf(buff,"%3d",(unsigned short)value);
/* start bit */
/* transmit device */
	INTIIC1_FLG = 0xff;
	IIC1_DATA = Scaler_Addr;
	IIC1_CLK = 0x20 | IIC_BaudRate;
	IIC1_CON = 0x00;
/* transmit addr */
	MasterSendByte(0xe0);
/* transmit data */
	if(Attr == 0)
		MasterSendByte(0x40);
	else
		MasterSendByte(0x90);
	m = yy * OSD_WIDTH + xx;
	ch = (unsigned char)m;
	MasterSendByte(ch);
	ch = (unsigned char)(m >> 8);
	MasterSendByte(ch);
	for(i=0; i<3; i++){
		ch = buff[i];
		MasterSendByte(ch);
	}
/* transmit dumy data for stop bit */
	WaitTx();
/* stop bit */
	IIC1_CLK = 0xA0|IIC_BaudRate;
//	IIC1_CON = 0x00;
	WaitStop();
}

⌨️ 快捷键说明

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