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

📄 osd.c

📁 NOVATEK公司的LCD_CONTROLLER源代码 液晶显示器驱动板源代码NT68521
💻 C
📖 第 1 页 / 共 4 页
字号:
void ShowValue(unsigned char Attr,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);
	if(OSD_Type < 6)
		m = 7 * OSD_WIDTH + 23;
	else if(OSD_Type == 6)
		m = 5;
	ch = (unsigned char)m;
	MasterSendByte(ch);
	ch = (unsigned char)(m >> 8);
	MasterSendByte(ch);
	for(i=0; i<3; i++){
		ch = buff[i];
		MasterSendByte(ch);
	}
	if(OSD_Point2 == 17)
		MasterSendByte(' ');
	else
		MasterSendByte('%');
/* transmit dumy data for stop bit */
	WaitTx();
/* stop bit */
	IIC1_CLK = 0xA0|IIC_BaudRate;
//	IIC1_CON = 0x00;
	WaitStop();
}

void ShowSliderBar(unsigned char xx,unsigned char yy,unsigned char value)
{
#define BarWidth 16
unsigned char i,k;
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(0x90);
	m = (unsigned short)yy * OSD_WIDTH + xx;
	i = (unsigned char)m;
	MasterSendByte(i);
	i = (unsigned char)(m >> 8);
	MasterSendByte(i);
	MasterSendByte('-');
	MasterSendByte(0x73);
	m = value * BarWidth;
	k = m / 100;
	for(i=0; i<k; i++){
		MasterSendByte(0x78);
	}
	if(i < BarWidth){
		k = (m % 100) / 20;
		switch(k){
		case 0:
			MasterSendByte(0x74);
			break;
		case 1:
			MasterSendByte(0x75);
			break;
		case 2:
			MasterSendByte(0x76);
			break;
		case 3:
			MasterSendByte(0x77);
			break;
		case 4:
			MasterSendByte(0x78);
			break;	
		}
		i++;
		for(i; i<BarWidth; i++){
			MasterSendByte(0x74);
		}
	}
	MasterSendByte(0x79);
	MasterSendByte('+');
/* transmit dumy data for stop bit */
	WaitTx();
/* stop bit */
	IIC1_CLK = 0xA0|IIC_BaudRate;
//	IIC1_CON = 0x00;
	WaitStop();
}

void ShowFreq(void)
{
unsigned char i,ch;
unsigned char buff[4];
unsigned short m;
// Show Horizontal
	sprintf(buff,"%4d",H_SYNC);
	if((flag3 & BIT_0) == 0)
		WriteWordIIC_HW(Scaler_Addr,0xcc,MsgColor1);
	else
		WriteWordIIC_HW(Scaler_Addr,0xcc,MsgColor2);
/* 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(0x90);
	m = 13 * OSD_WIDTH + 9;
	ch = (unsigned char)m;
	MasterSendByte(ch);
	ch = (unsigned char)(m >> 8);
	MasterSendByte(ch);
	MasterSendByte('H');
	ch = buff[0];
	if(ch != 0x20){
		MasterSendByte(ch);
	}
	for(i=1; i<3; i++){
		ch = buff[i];
		MasterSendByte(ch);
	}
	MasterSendByte('.');
	ch = buff[i];
	MasterSendByte(ch);
	MasterSendByte('K');
	MasterSendByte('H');
	MasterSendByte('Z');
	MasterSendByte(' ');
	MasterSendByte(' ');
	MasterSendByte('V');
/* transmit dumy data for stop bit */
	WaitTx();
/* stop bit */
	IIC1_CLK = 0xA0|IIC_BaudRate;
//	IIC1_CON = 0x00;
	WaitStop();

// Show Vertical
	sprintf(buff,"%4d",V_SYNC);
/* 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(0x90);
	m = 13 * OSD_WIDTH + 20;
	ch = (unsigned char)m;
	MasterSendByte(ch);
	ch = (unsigned char)(m >> 8);
	MasterSendByte(ch);
	ch = buff[0];
	if(ch != 0x20){
		MasterSendByte(ch);
	}
	for(i=1; i<3; i++){
		ch = buff[i];
		MasterSendByte(ch);
	}
	MasterSendByte('.');
	ch = buff[i];
	MasterSendByte(ch);
	MasterSendByte('H');
	MasterSendByte('Z');
/* transmit dumy data for stop bit */
	WaitTx();
/* stop bit */
	IIC1_CLK = 0xA0|IIC_BaudRate;
//	IIC1_CON = 0x00;
	WaitStop();
}

void ShowResolution(void)
{
unsigned char i,ch,k;
unsigned short m;
unsigned char buff[4];
//show value
	m = 0x106 + (ModePoint * 8);
	k = Read24C16(m);
	if((k == 0)||(k == 2))
		sprintf(buff,"%4d",H_ActiveTab[k]/2);
	else
		sprintf(buff,"%4d",H_ActiveTab[k]);
	if((flag3 & BIT_0) == 0)
		WriteWordIIC_HW(Scaler_Addr,0xcc,MsgColor1);
	else
		WriteWordIIC_HW(Scaler_Addr,0xcc,MsgColor2);
/* 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(0x90);
	m = 12 * OSD_WIDTH + 14;
	ch = (unsigned char)m;
	MasterSendByte(ch);
	ch = (unsigned char)(m >> 8);
	MasterSendByte(ch);
	for(i=0; i<4; i++){
		ch = buff[i];
		MasterSendByte(ch);
	}
	MasterSendByte(0x58);	// x
/* transmit dumy data for stop bit */
	WaitTx();
/* stop bit */
	IIC1_CLK = 0xA0|IIC_BaudRate;
//	IIC1_CON = 0x00;
	WaitStop();

// Show Vertical
	sprintf(buff,"%4d",V_ActiveTab[k]);
/* 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(0x90);
	m = 12 * OSD_WIDTH + 19;
	ch = (unsigned char)m;
	MasterSendByte(ch);
	ch = (unsigned char)(m >> 8);
	MasterSendByte(ch);
	if(buff[0] != 0x20){
		ch = buff[0];
		MasterSendByte(ch);
	}
	for(i=1; i<4; i++){
		ch = buff[i];
		MasterSendByte(ch);
	}
	if(buff[0] == 0x20){
		MasterSendByte(0x20);
	}
/* transmit dumy data for stop bit */
	WaitTx();
/* stop bit */
	IIC1_CLK = 0xA0|IIC_BaudRate;
//	IIC1_CON = 0x00;
	WaitStop();
}

void UnselectIcon(void)
{
unsigned char k;
	if(OSD_Point1 == 0){
		k = OSD_Point2 << 1;
		if(MainIconColor[OSD_Point2] == 1){
			if(OSD_Point2 == 8){
				FillLineAttr(IconPosition[k],IconPosition[k+1],2,RedColor);
			}
			else if(OSD_Point2 == 9){
				FillLineAttr(IconPosition[k],IconPosition[k+1],2,GreenColor);
			}
			else if(OSD_Point2 == 10){
				FillLineAttr(IconPosition[k],IconPosition[k+1],2,BlueColor);
			}
			else{
				FillLineAttr(IconPosition[k],IconPosition[k+1],2,FrameColor);
			}
		}
		else{
			FillLineAttr(IconPosition[k],IconPosition[k+1],2,FrameMColor);
		}
	}
	else{
		k = (OSD_Point2-14) << 1;
		if(MainIconColor[OSD_Point2] == 1){
			FillLineAttr(IconPosition[k],IconPosition[k+1],2,FrameColor);
		}
		else{
			FillLineAttr(IconPosition[k],IconPosition[k+1],2,FrameMColor);
		}
	}
}

void ShowInputSource(void)
{
unsigned char i;
	OSD_Type = 6;
	Osd3Init();
	i = PowerStatus & ~BIT_7;
	if(i == 3){
		if(Read24C16(0xe3) != 0)
			i = 4;
	}
	WriteWordIIC_HW(Scaler_Addr,0xcc,ChannelColor);
	WriteXY_StrScaler(1,0,0,SourceTab[i]);
	OSD_Control |= BIT_0;
	WriteIIC_HW(Scaler_Addr,0x95,OSD_Control);
	Timer2 = 300;
}

void VideoMenu(void)
{
	switch(OSD_Type){
	case 0x00:
		SavePointer = NotSaveSaveFlag;
		OsdInit();
		OSD_Type = 1;
//osd on
		OSD_Control |= BIT_0;
		WriteIIC_HW(Scaler_Addr,0x95,OSD_Control);
		if((flag3 & BIT_2) != 0x00)
			printf("OSD ON\r\n");
		break;
	case 0x01:
		SaveData();
		VideoUnSelectIcon();
		if(OSD_Point1 == 0){
			if(++OSD_Point2 > 10){
				OSD_Point2 = 0;
			}
		}
		ShowVideoSubMenu();
		break;
	default:
		OSD_OFF();
		OsdInit();
		OSD_Type = 1;
//osd on
		OSD_Control |= BIT_0;
		WriteIIC_HW(Scaler_Addr,0x95,OSD_Control);
		break;
	}
	KeyBuffer = 0xff;
}

void VideoSelectItem(void)
{
	SaveData();
	VideoUnSelectIcon();
	if(OSD_Point1 == 0){
		if(--OSD_Point2 > 10){
			OSD_Point2 = 10;
		}
	}
	ShowVideoSubMenu();
}

void ShowVideoMenu(void)
{
code unsigned char VideoIcon[][5]={
	4,1,1,0x00,0x01,
	4,1,3,0x18,0x19,
	4,1,5,0x24,0x25,
	4,1,7,0x26,0x27,
	4,1,9,0x28,0x29,
	4,1,11,0x0e,0x0f,
	4,1,13,0x0a,0x0b,
	4,4,1,0x16,0x17,
	4,4,3,0x18,0x19,
	4,4,5,0x1a,0x1b,
	4,4,7,0x12,0x13,
	4,4,9,0x20,0x20,
	4,4,11,0x20,0x20,
	4,4,13,0x20,0x20,
};

unsigned char i;
	for(i=0; i<14; i++){
		if(VideoIconColor[i] == 1){
			WriteWordIIC_HW(Scaler_Addr,0xcc,FrameColor);
		}
		else{
			WriteWordIIC_HW(Scaler_Addr,0xcc,FrameMColor);
		}
		WriteStringScaler(1,VideoIcon[i]);
	}
}

void VideoUnSelectIcon(void)
{
unsigned char k;
//Icon
	if(OSD_Point1 == 0){
		k = OSD_Point2 << 1;
	}
	else{
		k = (OSD_Point2-14) << 1;
	}
	if(VideoIconColor[OSD_Point2] == 1){
		FillLineAttr(IconPosition[k],IconPosition[k+1],2,FrameColor);
	}
	else{
		FillLineAttr(IconPosition[k],IconPosition[k+1],2,FrameMColor);
	}
}

void ShowVideoSubMenu(void)
{
unsigned char k;
//Icon
	if(OSD_Point1 == 0){
		k = OSD_Point2 << 1;
	}
	else{
		k = (OSD_Point2-14) << 1;
	}
	if(VideoIconColor[OSD_Point2] == 1){
		FillLineAttr(IconPosition[k],IconPosition[k+1],2,IconColor);
	}
	else{
		FillLineAttr(IconPosition[k],IconPosition[k+1],2,IconMColor);
	}
// Show Titel
	k = Language * 11 + OSD_Point2;
	WriteXY_CStrScaler(0,7,3,23,VideoTab1[k]);
//Show Value
	switch(OSD_Point2){
	case AvBrightnessNode:
		ShowBrightness();
		break;
	case AvContrastNode:
		ShowContrast();
		break;
	case AvSaturationNode:
		ShowSaturation();
		break;
	case AvTintNode:
		ShowTint();
		break;
	case AvSharpnessNode:
		ClearText();
		ShowSharpness();
		break;
	case AvLanguageNode:
		ClearText();
		ShowLanguage();
		break;
	case AvRecallNode:
	case AvExitMainMenuNode:
		ClearText();
		ShowNO_YES(0);
		break;
	case AvOSD_X_Node:
		ShowOSD_X();
		break;
	case AvOSD_Y_Node:
		ShowOSD_Y();
		break;
	case AvOSD_TimerNode:
		ShowOSD_Timer();
		break;
	}
}

void VideoValueUp(void)
{
	if((OSD_Type == 0x00)||(OSD_Type == 0x06)){
		if((flag1 & BIT_3) == 0){
			DirectVolume();
		}
	}
	else if(OSD_Type == 0x01){
		switch(OSD_Point2){
		case AvBrightnessNode:
			BrightnessUp();
			SavePointer = BrightnessSaveFlag;
			break;
		case AvContrastNode:
			ContrastUp();
			SavePointer = ContrastSaveFlag;
			break;
		case AvSaturationNode:
			SaturationUp();
			SavePointer = SaturationSaveFlag;
			break;
		case AvTintNode:
			TintUp();
			SavePointer = TintSaveFlag;
			break;
		case AvSharpnessNode:
			SharpnessUp();
			SavePointer = SharpnessSaveFlag;
			break;
		case AvLanguageNode:
			LanguageUp();
			Repeat = 0xff;
			break;
		case AvRecallNode:
			ShowNO_YES(1);
			Recall();
			ShowNO_YES(0);
			Repeat = 0xff;
			break;
		case AvOSD_X_Node:
			OSD_X_Up();
			SavePointer = OSD_X_SaveFlag;
			break;
		case AvOSD_Y_Node:
			OSD_Y_Up();
			SavePointer = OSD_Y_SaveFlag;
			break;
		case AvOSD_TimerNode:
			OSD_TimerUp();
			SavePointer = OSD_TimerSaveFlag;
			break;
		case AvExitMainMenuNode:
			OSD_OFF();
			Repeat = 0xff;
			break;
		default:
			Repeat = 0xff;
			break;
		}
	}
	else if(OSD_Type == 3){
		if(++Volume > 100){
			Volume = 100;
		}
		else{
			SetVolume();
			ShowVolume();
			SavePointer = VolumeSaveFlag;
		}
	}
	KeyBuffer = 0xff;
}

void VideoValueDown(void)
{
	if((OSD_Type == 0x00)||(OSD_Type == 0x06)){
		if((flag1 & BIT_3) == 0){
			DirectVolume();
		}
	}
	else if(OSD_Type == 0x01){
		switch(OSD_Point2){
		case AvBrightnessNode:
			BrightnessDown();
			SavePointer = BrightnessSaveFlag;
			break;
		case AvContrastNode:
			ContrastDown();
			SavePointer = ContrastSaveFlag;
			break;
		case AvSaturationNode:
			SaturationDown();
			SavePointer = SaturationSaveFlag;
			break;
		case AvTintNode:
			TintDown();
			SavePointer = TintSaveFlag;
			break;
		case AvSharpnessNode:
			SharpnessDown();
			SavePointer = SharpnessSaveFlag;
			break;
		case AvLanguageNode:
			LanguageDown();
			Repeat = 0xff;
			break;
		case AvOSD_X_Node:
			OSD_X_Down();
			SavePointer = OSD_X_SaveFlag;
			break;
		case AvOSD_Y_Node:
			OSD_Y_Down();
			SavePointer = OSD_Y_SaveFlag;
			break;
		case AvOSD_TimerNode:
			OSD_TimerDown();
			SavePointer = OSD_TimerSaveFlag;
			break;
		default:
			Repeat = 0xff;
			break;
		}
	}
	else if(OSD_Type == 3){
		if(--Volume > 100){
			Volume = 0;
		}
		else{
			SetVolume();
			ShowVolume();
			SavePointer = VolumeSaveFlag;
		}
	}
	KeyBuffer = 0xff;
}

⌨️ 快捷键说明

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