📄 scalar.c
字号:
BfWin_All, //BF_ALL,
};
uint16 code bfsrgbinit[] = {
//0xF3, 0xF4, 0xE2,
0x100, 0x100, 0x100,
};
/*
********************************************************************************
* 函 数 名: SarSetBrightFrame
* 功能描述: 设置亮帧的大小和位置,如果Pos的值为OFF,那么表示关闭亮帧
* 输 入: BF : 0 亮帧0
* : 1 亮帧1
* Pos : 亮帧的大小和位置,这是标准化的10种选择
* 返 回: 无
********************************************************************************
*/
void SarSetBrightFrame(uint8 BF, uint8 Pos)
{
uint16 *posptr;
if (Pos == BF_OFF) SarBF3Disable(BF);
else SarBF3Enable(BF);
posptr = BfWin[Pos - 1];
WrScalarReg(rP131, BF);
WrScalarWord(rP132, posptr[0]);
WrScalarWord(rP134, posptr[1]);
WrScalarWord(rP136, posptr[2]);
WrScalarWord(rP138, posptr[3]);
if (Pos == BF_ALL || Pos == BF_OFF) SarBF3DisBoard(BF);
else SarBF3EnBoard(BF);
SarBF3sRGB(bfsrgbinit);
}
/*
********************************************************************************
* 函 数 名: SarBF3Enable
* 功能描述: 允许亮帧显示
* 输 入: BF : 0 亮帧0
* : 1 亮帧1
* 返 回: 无
********************************************************************************
*/
void SarBF3Enable(bit bf)
{
if (bf) WrScalarRegBit(rP130, 0x12, 0x12);
else WrScalarRegBit(rP130, 0x11, 0x11);
}
/*
********************************************************************************
* 函 数 名: SarBF3Disable
* 功能描述: 禁止亮帧显示
* 输 入: BF : 0 亮帧0
* : 1 亮帧1
* 返 回: 无
********************************************************************************
*/
void SarBF3Disable(bit bf)
{
if (bf) WrScalarRegBit(rP130, 0x10, 0x12);
else WrScalarRegBit(rP130, 0x10, 0x11);
}
/*
********************************************************************************
* 函 数 名: SarBF3Enable
* 功能描述: 允许亮帧显示边框
* 输 入: BF : 0 亮帧0
* : 1 亮帧1
* 返 回: 无
********************************************************************************
*/
void SarBF3EnBoard(bit bf)
{
if (bf) WrScalarRegBit(rP390, 0x80, 0x80);
else WrScalarRegBit(rP390, 0x40, 0x40);
}
/*
********************************************************************************
* 函 数 名: SarBF3DisBoard
* 功能描述: 禁止亮帧显示边框
* 输 入: BF : 0 亮帧0
* : 1 亮帧1
* 返 回: 无
********************************************************************************
*/
void SarBF3DisBoard(bit bf)
{
if (bf) WrScalarRegBit(rP390, 0x00, 0x80);
else WrScalarRegBit(rP390, 0x00, 0x40);
}
/*
********************************************************************************
* 函 数 名: SarBF3sRGB
* 功能描述: 设置亮帧的sRGB矩阵
* 输 入: Tbl : RGB的表格入口地址
* 返 回: 无
********************************************************************************
*/
void SarBF3sRGB(uint16 *Tbl)
{
WrScalarReg(rP1D0, 0x61);
WrScalarWord(rP1D1, Tbl[0]);
WrScalarWord(rP1D3, 0);
WrScalarWord(rP1D5, 0);
WrScalarReg(rP1D0, 0x63);
WrScalarWord(rP1D1, 0);
WrScalarWord(rP1D3, Tbl[1]);
WrScalarWord(rP1D5, 0);
WrScalarReg(rP1D0, 0x65);
WrScalarWord(rP1D1, 0);
WrScalarWord(rP1D3, 0);
WrScalarWord(rP1D5, Tbl[2]);
WrScalarReg(rP1D0, 0x7D); // old value 0xED
}
#if EN_BF3ACCMODE
//uint16 code IG0[9]={0x000,0x082,0x104,0x186,0x204,0x282,0x302,0x382,0x400}; // normal
//uint16 code IG1[9]={0x000,0x090,0x110,0x190,0x210,0x290,0x310,0x390,0x400}; // increase L+H
//uint16 code IG2[9]={0x000,0x07E,0x0FE,0x17D,0x200,0x278,0x2F0,0x360,0x400}; // photo
//uint16 code IG3[9]={0x000,0x080,0x100,0x180,0x200,0x280,0x300,0x380,0x400}; //
//uint16 code IG4[9]={0x000,0x090,0x110,0x186,0x200,0x280,0x300,0x380,0x400}; // normal
//uint16 code IG5[9]={0x000,0x07C,0x0f8,0x178,0x200,0x288,0x308,0x384,0x400}; // normal
//uint16 code IG6[9]={0x000,0x080,0x100,0x180,0x200,0x240,0x340,0x380,0x400}; // test
uint8 code IG0[18]={0x00,0x00, 0x82,0x02, 0x04,0x01, 0x86,0x01, 0x04,0x02,
0x82,0x02, 0x02,0x03, 0x82,0x03, 0x00,0x04}; // normal
uint8 code IG1[18]={0x00,0x00, 0x90,0x00, 0x10,0x01, 0x90,0x01, 0x10,0x02,
0x90,0x02, 0x10,0x03, 0x90,0x03, 0x00,0x04}; // increase L+H
uint8 code IG2[18]={0x00,0x00, 0x7E,0x00, 0xFE,0x00, 0x7D,0x01, 0x00,0x02,
0x78,0x02, 0xF0,0x02, 0x60,0x03, 0x00,0x04}; // photo
uint8 code IG3[18]={0x00,0x00, 0x80,0x00, 0x00,0x01, 0x80,0x01, 0x00,0x02,
0x80,0x02, 0x00,0x03, 0x80,0x03, 0x00,0x04}; //
uint8 code IG4[18]={0x00,0x00, 0x90,0x00, 0x10,0x01, 0x86,0x01, 0x00,0x02,
0x80,0x02, 0x00,0x03, 0x80,0x03, 0x00,0x04}; // normal
uint8 code IG5[18]={0x00,0x00, 0x7C,0x00, 0xF8,0x00, 0x78,0x01, 0x00,0x02,
0x88,0x02, 0x08,0x03, 0x84,0x03, 0x00,0x04}; // normal
uint8 code IG6[18]={0x00,0x00, 0x80,0x00, 0x00,0x01, 0x80,0x01, 0x00,0x02,
0x40,0x02, 0x40,0x03, 0x80,0x03, 0x00,0x04}; // test
/*
********************************************************************************
* 函 数 名: SarBF3WriteIG
* 功能描述: 更新动态gamma的值
* 输 入: BF : 指明所操作的亮帧窗口
* i : 指明写入的表项
* 返 回: 无
********************************************************************************
*/
void SarBF3WriteIG(uint8 BF, uint8 i)
{
#if 0
uint8 code IG[18] ={0x00,0x00, 0x80,0x00, 0x00,0x01, 0x80,0x01, 0x00,0x02,
0x40,0x02, 0x40,0x03, 0x80,0x03, 0x00,0x04};
uint8 x;
WrScalarReg(rP3B1, 0x5A);
for (x = 0; x < 18; x++) WrScalarReg(rP3B2, IG[x]);
WrScalarReg(rP3B1, 0xDA);
Delay(200);
WrScalarReg(rP3B1, 0x1A);
#endif
uint8 x;
uint8 *temp;
switch(i) {
case 0: temp = IG0; break;
case 1: temp = IG1; break;
case 2: temp = IG2; break;
case 3: temp = IG3; break;
case 4: temp = IG4; break;
case 5: temp = IG5; break;
case 6: temp = IG6; break;
}
if (BF) WrScalarReg(rP3B1, 0x7A); //select 8 levels ACC
else WrScalarReg(rP3B1, 0x5A);
#if 0
for(x = 0; x < 9; x++) {
WrScalarReg(rP3B2, (*temp + x) & 0xFF);
WrScalarReg(rP3B2, (*temp + x) >> 8); //select 8 levels ACC
temp++;
}
#endif
WrScalarBytes(rP3B2, 18, temp);
if (BF) WrScalarReg(rP3B1, 0xFA);
else WrScalarReg(rP3B1, 0xDA);
}
void SarBF3ACCPoll(void)
{
WrScalarReg(rP3B0, 0x15); //select 8 levels ACC
SarBF3WriteIG(0, 6);
}
bit Flg_WaitHT = 0;
// check histogram to turn-on or turn-off ACC
void SarBF3ACCCheck(uint8 BF)
{
uint8 b0,b1,b2;
if ((SysPar.Flag & FLAG_POWER) || SysState != SYS_NORMAL) return;
if(Flg_WaitHT) {
if(RdScalarReg(rP3B1) & 0x01) return;
Flg_WaitHT = 0;
b0 = RdScalarReg(rP3B2);
//b0 = RdScalarReg(rP3B2);
b0 += RdScalarReg(rP3B2);
b2 = RdScalarReg(rP3B2);
b2 = RdScalarReg(rP3B2);
b2 += RdScalarReg(rP3B2);
b1 = RdScalarReg(rP3B2);
b1 = RdScalarReg(rP3B2);
b1 += RdScalarReg(rP3B2);
/*
//if(FuncBuf[pACCMODE] ==0 || FuncBuf[pACCMODE] ==1) { //now
if(b0 > 3) {
if(b1 <2) SarBF3WriteIG(0, 1); //increase all
else SarBF3WriteIG(0, 3); //only increase low
}
else if(b1>4) SarBF3WriteIG(0, 3); //only increase low
else if(b2>4) SarBF3WriteIG(0, 5); //increase all
else SarBF3WriteIG(0, 0); //increase al
//}
*/
//else if(FuncBuf[pACCMODE] ==2) { //now
if(b0 > 3) {
if(b1 <2) SarBF3WriteIG(BF, 3); //increase all
else SarBF3WriteIG(BF, 4); //only increase low
}
else if(b1>4) SarBF3WriteIG(BF, 3); //only increase low
else if(b2>4) SarBF3WriteIG(BF, 5); //increase all
else SarBF3WriteIG(BF, 0); //increase al
//}
}
else {
Flg_WaitHT = 1;
if (BF) WrScalarReg(rP3B1, 0x23);
else WrScalarReg(rP3B1, 0x03);
}
}
#endif
void SarColorToneEnable(void)
{
WrScalarRegBit(rP3CC, B1110_0001, B1110_0001);
}
void SarColorToneDisable(void)
{
WrScalarRegBit(rP3CC, B0000_0000, B1110_0001);
}
void SarBF3FleshTone(uint8 FtMore )
{
uint8 signBit, i;
if (FtMore > 127)
{
i = (uint16)(FtMore-128)*48/128;
signBit = 0;
}
else
{
i = (uint16)(127 - FtMore)*48/128;
signBit = 0x80;
}
WrScalarRegBit(rP3CC, 0x00, 0x02);
WrScalarReg(rP3CD,0x01);
WrScalarReg(rP3CE,0x00);
WrScalarReg(rP3CF,(i/2) | signBit);
WrScalarReg(rP3CE,0x01);
WrScalarReg(rP3CF,((uint16)i*3/4) | signBit);
WrScalarReg(rP3CE,0x02);
WrScalarReg(rP3CF,i | signBit);
WrScalarReg(rP3CE,0x03);
WrScalarReg(rP3CF,((uint16)i*3/4) | signBit);
WrScalarRegBit(rP3CC, 0x02, 0x02);
}
void SarBF3EnchGreen(uint8 GreenMore)
{
uint8 i;
WrScalarRegBit(rP3CC, 0x00, 0x02);
WrScalarReg(rP3CD, 0x02);
WrScalarReg(rP3CE, 0x07);
i = (GreenMore >> 1) + 0x40;
WrScalarReg(rP3CF, i);
WrScalarReg(rP3CF, GreenMore);
WrScalarReg(rP3CF, i);
WrScalarRegBit(rP3CC, 0x02, 0x02);
}
void SarBF3EnchBlue(uint8 BlueMore)
{
uint8 i;
WrScalarRegBit(rP3CC, 0x00, 0x02);
WrScalarReg(rP3CD, 0x02);
WrScalarReg(rP3CE, 0x0F);
i = (BlueMore >> 1) + 0x40;
WrScalarReg(rP3CF, i);
WrScalarReg(rP3CF, BlueMore);
WrScalarReg(rP3CF, i);
WrScalarRegBit(rP3CC, 0x02, 0x02);
}
void SarSetColorToneMode(uint8 mode)
{
switch (mode) {
case CEM_LOW:
SarBF3FleshTone(0xA0);
SarBF3EnchGreen(0x90);
SarBF3EnchBlue(0x90);
SarColorToneEnable();
break;
case CEM_MIDDLE:
SarBF3FleshTone(0xA0);
SarBF3EnchGreen(0xA0);
SarBF3EnchBlue(0xA0);
SarColorToneEnable();
break;
case CEM_HIGH:
SarBF3FleshTone(0xD0);
SarBF3EnchGreen(0xC0);
SarBF3EnchBlue(0xC0);
break;
case CEM_OFF:
SarColorToneDisable();
SarBF3FleshTone(0x80);
SarBF3EnchGreen(0x80);
SarBF3EnchBlue(0x80);
break;
}
}
#define DispMode4B3_Width (PanelHeight/3)*4
#define DispMode4B3_Start PanelHActiveStart+(PanelWidth - DispMode4B3_Width)/2
void SarDispMode_4B3(void)
{
WrScalarWord(rP173, DispMode4B3_Start);
WrScalarWord(rP175, DispMode4B3_Width);
}
void SarDispMode_Normal(void)
{
WrScalarWord(rP173,PanelHActiveStart);
WrScalarWord(rP175,PanelWidth);
}
void SarBF3YCPeaking_Enable(void)
{
WrScalarReg(rP3A0, 0x11);
WrScalarReg(rP3A1, 0x04);
}
void SarBF3YCPeaking_Disable(void)
{
WrScalarReg(rP3A0, 0x10);
WrScalarReg(rP3A1, 0x00);
}
#if EN_ACEROSD
#if EN_DDC_CI
void SarDDCCI_Enable(void)
{
XFR_IIC0_ADDR = 0x6F;
XFR_INTIIC0_EN = xB_INTA;
XFR_INTIIC0_CLR = 0xFF;
}
void SarDDCCI_Disable(void)
{
XFR_IIC0_ADDR = 0x6F;
XFR_INTIIC0_EN = 0x00;
XFR_INTIIC0_CLR = 0xFF;
}
#endif
#endif
/*
********************************************************************************
* 文 件 结 束 *
********************************************************************************
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -