📄 osd.c
字号:
//===================================================================================
//
// OSD.C
// Author: Duran Liu
// Date: 06\12\03
// Version: 1.0
// Copyright: AUO
//===================================================================================
#define USE_GLOBAL
#include "include.h"
#include "REGISTER.h"
void SendOSDCode(BYTE row,column,value)
{
BYTE i=0;
BYTE Buf[4];
Buf[0]=OSDSlaveAddress;
Buf[1]=row|0xa0;//0xa0 => Attribute Bytes
Buf[2]=column;
Buf[3]=value;
IICStart;
for(;i<4;i++) SendIIC(Buf[i]);
IICStop;
}
void SendOSDByte(BYTE row,column,value)
{
BYTE i=0;
BYTE Buf[4];
Buf[0]=OSDSlaveAddress;
Buf[1]=row|0x80;//0x80 => Address Bytes
Buf[2]=column;
Buf[3]=value;
IICStart;
for(;i<4;i++) SendIIC(Buf[i]);
IICStop;
}
void OpenWindow(BYTE WinNo,H_Start,H_Stop,V_Start,V_Stop,Color,bit Shadow)
{ // Range 0~15 0~15 0~31 0~31 0~7 0~1
SendOSDCode(SetCmdReg,WinNo*3,(H_Start<<4)|H_Stop);//WinNo => Column 0~11
SendOSDCode(SetCmdReg,WinNo*3+1,(V_Start<<3)|0x04|((BYTE)Shadow) );//0x04 => Enable Window. WEN=1
SendOSDCode(SetCmdReg,WinNo*3+2,(V_Stop<<3)|(Color&0x07) );
}
void CloseWindow(BYTE WinNo)
{
SendOSDCode(SetCmdReg,WinNo*3+1,0);//Disable Window. WEN=0
}
void OSDSwitch(bit status)// 1 => Turn on , 0 => Turn off .
{
if(status) SendOSDCode(SetCmdReg,Parameter,TurnOn);
else SendOSDCode(SetCmdReg,Parameter,TurnOff);
}
void ClearOSD(void)
{
BYTE i;
for(i=0;i<4;i++)
{
CloseWindow(i);
}
SendOSDCode(SetCmdReg,Parameter,0x02);
DelayX1ms(2);
SendOSDCode(SetCmdReg,Parameter,0x00);
OSDSwitch(1);
//gotoxy(0,0);
}
/*
void gotoxy(BYTE x,y)
{
CursorX=x;
CursorY=y;
}
*/
void ShowWord(BYTE Row,Column,DATA,BGColor,Color,bit DSize,BLINK)
{ // 0~7 0~7
BYTE Buf;
if(BLINK) Buf=0x08;
else Buf=0x00;
if(DSize)
{
SendOSDByte(Row,Column,DATA);
SendOSDByte(Row,30,0x03);
SendOSDCode(Row,Column,(BGColor<<4)|Buf|Color);
}
else
{
SendOSDByte(Row,Column,DATA);
SendOSDByte(Row,30,0x00);
SendOSDCode(Row,Column,(BGColor<<4)|Buf|Color);
}
}
void PrintLine(BYTE *string,row ,attribute)// row = CursorY
{ // Range 0~14
BYTE i=0;
SendIIC(OSDSlaveAddress);
// b7 b6 b5 b4 b3 b2 b1 b0
SendIIC(row|0x80);// Address Byte. Row 1 0 0 x R3 R2 R1 R0
do{
SendIIC(i|0x40);//CursorX or Column N (N = 0 ~ 29). 0x40 => Format (c)
SendIIC(ASCII_TO_OSD(*string));
i++;
string++;
}while(*string=='\0');
SendIIC(OSDSlaveAddress);
// b7 b6 b5 b4 b3 b2 b1 b0
SendIIC(row|0xa0);// Attribute Byte. Row 1 0 1 x R3 R2 R1 R0
for( ;i>0;i--)
{
SendIIC(i|0x40);//0x40 => Format (c)
SendIIC(attribute);// b7 b6 b5 b4 b3 b2 b1 b0
// - BGR BGG BGB BLINK R G B
}
}
void SetOSDRowCtrlReg(BYTE row,CHS_CWS)//
{
SendOSDCode(row|0x80,RowCtrlReg,CHS_CWS);// CHS_CWS => 0x00 CHS=0,CWS=0; 0x01 CHS=0,CWS=1;
// 0x02 CHS=1,CWS=0; 0x03 CHS=1,CWS=1;
}
void SetOSDPosition(BYTE x,y)
{
SendOSDCode(SetCmdReg,VERTD,y);//Column 12
SendOSDCode(SetCmdReg,HORD,x);//Column 13
}
void SetOSDHeight(BYTE height)//Column 14
{
SendOSDCode(SetCmdReg,ChVerHeight,height);
}
void InitOSD(void)
{
BYTE i;
ClearOSD();
SetOSDPosition(60,15);// column 13 ;column 12 ;//5.6" SetOSDPosition(60,15)
SetOSDHeight(0);//Column 14
SendOSDCode(SetCmdReg,19,0);
SendOSDCode(SetCmdReg,20,0);
SendOSDCode(SetCmdReg,21,0);
SendOSDCode(SetCmdReg,22,0);
for(i=0;i<14;i++)
{
SetOSDRowCtrlReg(i,0);
}
for(i=0;i<4;i++)
{
CloseWindow(i);
}
}
void BAR(void)
{
BYTE Buf_X0,Buf_0X,idx;
Flag=0;
Buf_X0=RegBuf/12;
Buf_0X=RegBuf%12;
ShowWord(10,0,BAR_Start,BG,BAR_Color,0,0);
for(idx=1;idx<(Buf_X0+1);idx++)
{
ShowWord(10,idx,0x81,BG,BAR_Color,0,0);//0x81 = 1 DIV
}
if(Buf_0X == 3) {ShowWord(10,idx,0x84,BG,BAR_Color,0,0);Flag=1;}
else if(Buf_0X == 6) {ShowWord(10,idx,0x83,BG,BAR_Color,0,0);Flag=1;}
else if(Buf_0X == 9) {ShowWord(10,idx,0x82,BG,BAR_Color,0,0);Flag=1;}
for(;idx<22;idx++)//0x85 = 0 DIV
{
if(Flag) ShowWord(10,idx+1,0x85,BG,BAR_Color,0,0);//Because AAA has added one,idx+2.
else ShowWord(10,idx,0x85,BG,BAR_Color,0,0);
Flag=0;
}
ShowWord(10,22,BAR_Stop,BG,BAR_Color,0,0);
}
void BAR_H(void)
{
BYTE Buf_X0,Buf_0X,idx,Buf;
Flag=0;
Buf=RegBuf+1;
Buf_X0=Buf/4;
Buf_0X=Buf%4;
ShowWord(10,0,BAR_Start,BG,BAR_Color,0,0);
for(idx=1;idx<(Buf_X0+1);idx++)
{
ShowWord(10,idx,0x81,BG,BAR_Color,0,0);//0x81 = 1 DIV
}
if(Buf_0X == 1) {ShowWord(10,idx,0x84,BG,BAR_Color,0,0);Flag=1;}
else if(Buf_0X == 2) {ShowWord(10,idx,0x83,BG,BAR_Color,0,0);Flag=1;}
else if(Buf_0X == 3) {ShowWord(10,idx,0x82,BG,BAR_Color,0,0);Flag=1;}
for(;idx<9;idx++)//0x85 = 0 DIV
{
if(Flag) ShowWord(10,idx+1,0x85,BG,BAR_Color,0,0);//Because AAA has added one,idx+2.
else ShowWord(10,idx,0x85,BG,BAR_Color,0,0);
Flag=0;
}
ShowWord(10,idx,BAR_Stop,BG,BAR_Color,0,0);
for(;idx<22;idx++)//0x85 = 0 DIV
{
ShowWord(10,idx+1,0x00,BG,BAR_Color,0,0);
Flag=0;
}
}
void BAR_V(void)
{
BYTE Buf_X0,Buf_0X,idx,Buf;
Flag=0;
Buf=(RegBuf&0x3f)+1;
Buf_X0=Buf/4;
Buf_0X=Buf%4;
ShowWord(10,0,BAR_Start,BG,BAR_Color,0,0);
for(idx=1;idx<(Buf_X0+1);idx++)
{
ShowWord(10,idx,0x81,BG,BAR_Color,0,0);//0x81 = 1 DIV
}
if(Buf_0X == 1) {ShowWord(10,idx,0x84,BG,BAR_Color,0,0);Flag=1;}
else if(Buf_0X == 2) {ShowWord(10,idx,0x83,BG,BAR_Color,0,0);Flag=1;}
else if(Buf_0X == 3) {ShowWord(10,idx,0x82,BG,BAR_Color,0,0);Flag=1;}
for(;idx<17;idx++)//0x85 = 0 DIV
{
if(Flag) ShowWord(10,idx+1,0x85,BG,BAR_Color,0,0);//Because AAA has added one,idx+2.
else ShowWord(10,idx,0x85,BG,BAR_Color,0,0);
Flag=0;
}
ShowWord(10,idx,BAR_Stop,BG,BAR_Color,0,0);
for(;idx<22;idx++)//0x85 = 0 DIV
{
ShowWord(10,idx+1,0x00,BG,BAR_Color,0,0);
Flag=0;
}
}
void Show_Number(void)
{
BYTE Buf_X0,Buf_0X,Buf_X00,Buf;
Buf=RegBuf;
Buf_X00=Buf/100;
Buf_X0=(Buf%100)/10;
Buf_0X=Buf%10;
ShowWord(8,19,Buf_X00+1,BG,BAR_Color,0,0);
ShowWord(8,20,Buf_X0+1,BG,BAR_Color,0,0);
ShowWord(8,21,Buf_0X+1,BG,BAR_Color,0,0);
}
void SaveReg(void)
{
switch(SubBuf)
{
case 0x81: VCOM=RegBuf;
break;
case 0x82: Color=RegBuf;
break;
case 0x83: Tint=RegBuf;
break;
case 0x84: BlackLimiter=RegBuf;
break;
case 0x85: BRIGHT=RegBuf;
break;
case 0x86: SHARPNESS=RegBuf;
break;
case 0x87: RSubBright=RegBuf;
break;
case 0x88: BSubBright=RegBuf;
break;
case 0x89: WhiteLimiter=RegBuf;
break;
case 0x8a: GAMMA1=RegBuf;
break;
case 0x8b: GAMMA2=RegBuf;
break;
case 0x8c: CONTRAST=RegBuf;
break;
case 0x8d: RSubContrast=RegBuf;
break;
case 0x8e: BSubContrast=RegBuf;
break;
case 0x8f: VCO=RegBuf;
break;
case 0x90: CommonDC=RegBuf;
break;
case 0x91: HPosition=RegBuf;
break;
case 0x92: VPosition=RegBuf;
break;
default :
break;
}
}
char ASCII_TO_OSD(char Data)
{
switch(Data)
{
case '0':
return(0x01);
break;
case '1':
return(0x02);
break;
case '2':
return(0x03);
break;
case '3':
return(0x04);
break;
case '4':
return(0x05);
break;
case '5':
return(0x06);
break;
case '6':
return(0x07);
break;
case '7':
return(0x08);
break;
case '8':
return(0x09);
break;
case '9':
return(0x0A);
break;
case 'A':
return(0x0B);
break;
case 'B':
return(0x0C);
break;
case 'C':
return(0x0D);
break;
case 'D':
return(0x0E);
break;
case 'E':
return(0x0F);
break;
case 'F':
return(0x10);
break;
case 'G':
return(0x11);
break;
case 'H':
return(0x12);
break;
case 'I':
return(0x13);
break;
case 'J':
return(0x14);
break;
case 'K':
return(0x15);
break;
case 'L':
return(0x16);
break;
case 'M':
return(0x17);
break;
case 'N':
return(0x18);
break;
case 'O':
return(0x01);
break;
case 'P':
return(0x19);
break;
case 'Q':
return(0x1a);
break;
case 'R':
return(0x1b);
break;
case 'S':
return(0x1c);
break;
case 'T':
return(0x1d);
break;
case 'U':
return(0x1e);
break;
case 'V':
return(0x1f);
break;
case 'W':
return(0x20);
break;
case 'X':
return(0x21);
break;
case 'Y':
return(0x22);
break;
case 'Z':
return(0x23);
break;
case 'a':
return(0x24);
break;
case 'b':
return(0x25);
break;
case 'c':
return(0x26);
break;
case 'd':
return(0x27);
break;
case 'e':
return(0x28);
break;
case 'f':
return(0x29);
break;
case 'g':
return(0x2a);
break;
case 'h':
return(0x2b);
break;
case 'i':
return(0x2c);
break;
case 'j':
return(0x2d);
break;
case 'k':
return(0x2e);
break;
case 'l':
return(0x2f);
break;
case 'm':
return(0x30);
break;
case 'n':
return(0x31);
break;
case 'o':
return(0x32);
break;
case 'p':
return(0x33);
break;
case 'q':
return(0x34);
break;
case 'r':
return(0x35);
break;
case 's':
return(0x36);
break;
case 't':
return(0x37);
break;
case 'u':
return(0x38);
break;
case 'v':
return(0x39);
break;
case 'w':
return(0x3a);
break;
case 'x':
return(0x3b);
break;
case 'y':
return(0x3c);
break;
case 'z':
return(0x3d);
break;
case ' ':
return(0x00);//Show nothing
break;
case 0x2D:
return(0x73);//Show -
break;
case 0x3C:
return(0x7d);//Show <=
break;
case 0x3D:
return(0x77);//Show :
break;
case 0x3E:
return(0x7e);//Show =>
break;
default :
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -