📄 osddrow.c
字号:
#include <reg51.h>
#include "common.h"
#include "System.h"
#include "Struct.h"
#include "TwoWire.h"
#include "TW10xReg.h"
#include "panel.h"
#include "timer0.h"
#include "DEF.H"
extern uCHAR VOL;
extern uCHAR Pauto;
extern uCHAR menu_num;
extern bit OSD_open;
extern bit AV;
extern code unsigned char *page1_Fonts[];
/****************************************************************************************************************************
color for OSDDROW
****************************************************************************************************************************/
code unsigned char cOSDMenuLutData[]={
0x0f,0x00, //1 blue
0x00,0x00, //2 black
0x0f,0x0a, //3 purple
0x0f,0x00, //4 blue
0xf8,0x00, //5 green
0x22,0x0A, //6 red
0x1f,0x01, //7 light blue//olive
0x88,0x05, //8 light grey
0xb9,0x0b, //9 purple
0xBD,0x05, //A purple
0x0f,0x0f, //B
0xA3,0x0A, //C Yellow
0xcc,0x0c, //D light grey
0x68,0x03, //E Light Blue Main Menu Background or 0x79, 0x04 which is a litter light
0xff,0x0f, //F white
0x00,0x00, //0
};
code unsigned char DIG[]={0,'1','2','3','4','5','6','7','8','9','0'};//digital
code unsigned char source1_font[]={'C','H','1'};
code unsigned char source2_font[]={'C','H','2'};
code unsigned char source3_font[]={'C','H','3'};
code unsigned char source4_font[]={'C','H','4'};
code unsigned char *source_font[]={source1_font,source2_font,source3_font,source4_font};
/*****************************************************************************/
void OSDLoadColor(void)
{
uCHAR i;
I2CWriteByte(TW101,OSD_CFG_INDEX,OSD_LUT_RAM_DATA);
for(i=0;i<32;i++)
{
I2CWriteByte(TW101,OSD_CFG_DATA,cOSDMenuLutData[i]);
}
}
void OSDSetRamAddr(uWORD address) ///设置DATA_OSDRAM地址
{
I2CWriteByte(TW101,OSD_RAM_AH,(uCHAR)(address>>8)); ///0xa3
I2CWriteByte(TW101,OSD_RAM_AL,(uCHAR)(address & 0xff)); ///0xa2
}
void OSDEnable(void) /// 使能OSD功能
{
if(AV)
{
OSDCfgWr(OSD_CTRL,0x8d);
AV=0;
}
else
OSDCfgWr(OSD_CTRL,0x84);
Timer0Start();
}
void OSDDisable(void)
{
OSDCfgWr(OSD_CTRL,0x18);
}
void OSDCleanLine(uCHAR x,uCHAR y,uCHAR cColor,uCHAR cLength) ///x为列地址,y为行地址
{
if((x < 30) && ( y < OSD_LINE_NUM)) ///OSD_LINE_NUM = 10;
{
OSDSetRamAddr(MENU_RAM_START_ADDRESS+((int)y << 5)+x); ///设置OSDRAM地址[ROW_ATTR_ADDR = ROW_ADDR + COLU_ADDR)
twdWr_Burst_A(OSD_RAM_DL); /// Write OSD index //写T112的数据口 note by chen 06'12'1
while((x < 30) && (x < cLength))
{
twdWr_Burst_D(BLANK); ///BLANK=0x3a/0x00;
twdWr_Burst_D(cColor);
x++;
}
twdWr_Burst_P();
}
}
void send(uCHAR c,uCHAR cColor)
{
if(c>0x40) // Character
twdWr_Burst_D(c-IndexCharacterOffset);
else if(c>=0x30) // number
twdWr_Burst_D(c-IndexNumOffset);
else
twdWr_Burst_D(c);
twdWr_Burst_D(cColor );
}
void OSDShowLine(uCHAR *string,uCHAR x,uCHAR y,uCHAR cColor,uCHAR cLength)
{
uCHAR c;
if((x < 30) && ( y < OSD_LINE_NUM))
{
OSDSetRamAddr(MENU_RAM_START_ADDRESS+((int)y << 5)+x);
twdWr_Burst_A(OSD_RAM_DL); // Write OSD index
while((*string) != 0xff && (x < cLength)){
c=*string++;
send(c,cColor);
x++;
}
}
twdWr_Burst_P();
}
void OSDShowDig(uCHAR x,uCHAR y,uCHAR cColor,uCHAR num)
{
uCHAR c,b,d;
d =DIG[num/100];
num =num%100;
c =DIG[num/10];
b =DIG[num%10];
if(d!=0&&c==0)c=DIG[10];
if(b==0)b=DIG[10];
if((x < 30) && ( y < OSD_LINE_NUM))
{
OSDSetRamAddr(MENU_RAM_START_ADDRESS+((int)y << 5)+x);
twdWr_Burst_A(OSD_RAM_DL); // Write OSD index
send(d,cColor);
send(c,cColor);
send(b,cColor);
}
twdWr_Burst_P();
}
void OSDSetLineAttribute(uCHAR cLine,uCHAR cAttribute)
{
OSDSetRamAddr(MENU_RAM_START_ADDRESS+((int)cLine << 5)+31);
twdWr_Burst_A(OSD_RAM_DL);
twdWr_Burst_D(0);
twdWr_Burst_D(cAttribute);
twdWr_Burst_P();
}
void OSDPosition(uCHAR cPos)
{
if(cPos==RIGHT_TOP){
OSDCfgWr(CHAR_DLY_0,Y0RightTop);
OSDCfgWr(CHAR_DLY_1,Y1RightTop);
OSDCfgWr(CHAR_DLY_2,Y2RightTop);
}
if(cPos==CENTER){
OSDCfgWr(CHAR_DLY_0,Y0Center);
OSDCfgWr(CHAR_DLY_1,Y1Center);
OSDCfgWr(CHAR_DLY_2,Y2Center);
}
else if(cPos==LEFT_BOTTOM){
OSDCfgWr(CHAR_DLY_0,Y0LeftBottom);
OSDCfgWr(CHAR_DLY_1,Y1LeftBottom);
OSDCfgWr(CHAR_DLY_2,Y2LeftBottom);
}
}
void OSDShowSource(uCHAR P) ///显示选择源
{
uCHAR i;
AV=1;
OSDDisable();
for(i=0;i<10;i++)
{
OSDCleanLine(0,i,0,30);
OSDSetLineAttribute(i,0x80);
}
OSDPosition(RIGHT_TOP);
OSDShowLine(source_font[P],1,0,0x0c,4);
OSDEnable();
}
void OSDDrawGauge(uCHAR cVal, uCHAR cMax, uCHAR x, uCHAR y, uCHAR cColor)///进度条显示
{
int index,i;
int step_size=100/25;
OSDSetRamAddr(MENU_RAM_START_ADDRESS+((int)y<< 5)+x);
twdWr_Burst_A(OSD_RAM_DL);
index= (int)cVal*25/(int)cMax;
twdWr_Burst_D(34);
twdWr_Burst_D(cColor);
for(i=0;i<index;i++)
{
twdWr_Burst_D(2);
twdWr_Burst_D(cColor);
}
for(i=index;i<25;i++)
{
twdWr_Burst_D(1);
twdWr_Burst_D(cColor);
}
twdWr_Burst_D(36);
twdWr_Burst_D(cColor);
twdWr_Burst_P();
}
void DRWA_VOL(uCHAR num,uCHAR max_num) ///进度条
{
OSDPosition(LEFT_BOTTOM);
{
OSDShowLine(page1_Fonts[menu_num],0,0,0x06,10);
OSDShowDig(23,0,0x06,num);
OSDDrawGauge(num,max_num, 0, 1, 0x06);
}
OSDEnable();
}
void OSDShowpage1(void)
{
OSDShowLine(page1_Fonts[0],0,0,0x06,28);
OSDShowLine(page1_Fonts[6],0,1,0x06,28);
if(Pauto==0)
{
OSDShowLine(page1_Fonts[8],18,1,0x06,28);
}
else
{
OSDShowLine(page1_Fonts[7],18,1,0x06,28);
}
}
void OSDExit(void)
{
uCHAR i;
OSDCfgWr(OSD_CTRL,0x18);
OSDCfgWr(0x10,0x00); ///Disable window
OSDDisable();
for(i=0;i<10;i++)
{
OSDCleanLine(0,i,0,30);
OSDSetLineAttribute(i,0x80);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -