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

📄 osddisplay.c

📁 本软件为tft型液晶显示器的驱动程序 可用于车载主机显示屏等
💻 C
📖 第 1 页 / 共 3 页
字号:
{
    OsdBuf[0]=0x8F;
    OsdBuf[1]=0x11;
    OsdBuf[2]=c;
    I2c_SendMData(OSDADDR,OsdBuf,3);   
}

void Pwm_Process(uchar pwm,uchar c)//pwm(1~8) is used to select PWM0---PWM7;pwm(0) is use to control; c is the variable  
{
    OsdBuf[0]=0x8F;
    OsdBuf[1]=18+pwm;
    OsdBuf[2]=c;
    I2c_SendMData(OSDADDR,OsdBuf,3);  
}

void Osd_Adjust(uchar col,uchar c)//15行 0~30列对应各自的属性
{
    OsdBuf[0]=0x8F;
    OsdBuf[1]=col;
    OsdBuf[2]=c;
    I2c_SendMData(OSDADDR,OsdBuf,3);
}

void Start_Pos(uchar row,uchar col)//开始位置 行列
{
    Osd_Adjust(0x0C,row);
    Osd_Adjust(0x0D,col);
}
void NP_Adjust(uchar flg)//flg is to show NTSC or PAL (NTSC=1;PAL=0)
{
   if(flg==NTSC)//NTSC
     {
       Start_Pos(0x00,0x00);
       Osd_Adjust(15,36);//36
       Osd_Adjust(14,0);//0
       Osd_Adjust(12,1);
       Osd_Adjust(13,0);
       //if(SourceMode!=FM_AM)
       //    String_Disp(1,20,NP[1],4);
      }
   else //PAL
     {
       Start_Pos(0x00,0x00);
       Osd_Adjust(15,35);
       Osd_Adjust(14,3);
       Osd_Adjust(12,1); //1
       Osd_Adjust(13,0);
       //if(SourceMode!=FM_AM)
       //    String_Disp(1,20,NP[0],4);
      }    
}

void Osd_Init(void)
{  
   uchar i;
   Window_Control(0xC6);//clear osd
   Window_Control(0xC0);//osd enable 
   NP_Adjust(1);
   for(i=0;i<15;i++)
     { 
        String_Attrib_Set(i,0,29,PURPLE);
        Row_Ctrol(i,YELLOW,0,0);
      }  
   String_Attrib_Set(STATUSROW-1,0,29,YELLOW);
   String_Attrib_Set(STATUSROW,  0,29,YELLOW);
   String_Attrib_Set(STATUSROW+1,0,29,YELLOW);
}
void Osd_Clear(void)
{
   Window_Control(0xC2);//clear osd
   Window_Control(0xC0);//osd enable 
}
void Windows_Close(void)
{
   WindowDispFlag=NO_WINDOW;
   Window_Control(0xC6);//clear osd
   Window_Control(0xC0);//osd enable 
} 
/*
    row 进度条行
    colsta 进度条 起始列
    colend 进度条 结束列
    pos    进度条 位置
*/
void ProgressBar(uchar row,uchar colsta,uchar colend,uchar pos)
{
  
}
/*
    开机画面显示的窗口,c(1)表示打开,c(0)表示关闭
*/
void Logo_Disp(void)
{
   Osd_Clear();
   Window_Disp(0,1,1,BLUE,0,14,0,30);
}
/*
    System settin
*/
void SysWindows_Close(void)
{
  Row_Clear(SYSMENUROW,0,30);
}
void Sysdata_Updata(void)//osd updata
{
  Row_Clear(SYSMENUROW,0,30);
  switch(SysMenuCnt)
       {
         case NUM_BRIGHT :  
                            String_Disp(SYSMENUROW,SYSMENUCOL,BrightStrPoint.str,BrightStrPoint.n);
                            Num16_Disp(SYSMENUROW,SYSNUMCOL,SysMenuBright);
                            break;
         case NUM_COLOR:    
                            String_Disp(SYSMENUROW,SYSMENUCOL,ColorStrPoint.str,ColorStrPoint.n);
                            Num16_Disp(SYSMENUROW,SYSNUMCOL,SysMenuColor);
                            break;
         case NUM_CONT:     
                            String_Disp(SYSMENUROW,SYSMENUCOL,ContStrPoint.str,ContStrPoint.n);
                            Num16_Disp(SYSMENUROW,SYSNUMCOL,SysMenuCont);
                            break;
         case NUM_PIC:      
                            String_Disp(SYSMENUROW,SYSMENUCOL,PicStrPoint.str,PicStrPoint.n);
                            Num16_Disp(SYSMENUROW,SYSNUMCOL,SysMenuPic);
                            break;
         case NUM_TINT:     
                            String_Disp(SYSMENUROW,SYSMENUCOL,TintStrPoint.str,TintStrPoint.n);
                            Num16_Disp(SYSMENUROW,SYSNUMCOL,SysMenuTint);
                            break;
         case NUM_COM:      
                            String_Disp(SYSMENUROW,SYSMENUCOL,ComStrPoint.str,ComStrPoint.n);
                            Num16_Disp(SYSMENUROW,SYSNUMCOL,SysMenuCom);
                            break;
         case NUM_SUBR:     
                            String_Disp(SYSMENUROW,SYSMENUCOL,SubrStrPoint.str,SubrStrPoint.n);
                            Num16_Disp(SYSMENUROW,SYSNUMCOL,SysMenuSubr);
                            break;
         case NUM_SUBB:     
                            String_Disp(SYSMENUROW,SYSMENUCOL,SubbStrPoint.str,SubbStrPoint.n);
                            Num16_Disp(SYSMENUROW,SYSNUMCOL,SysMenuSubb);
                            break;
         default: break;
        }
}

/*
    显示图像设置的窗口,c(1)表示打开,c(0)表示关闭
    在此模式下的设置与主板无关,只与显示板相关,打开此窗口的
    按键为专用按键,注意,此窗口不是全屏显示
    
    Bright  0=========8==========16 进度条表示
    Color   0=========8==========16 进度条表示
    Cont    0=========8==========16 进度条表示
    Rev     REV1====REV2====REV3====REV4 进度条表示,进度条上镶嵌字体
    Mode    NORMAL==================FULL 进度条表示,进度条上镶嵌字体
*/
void Menu_Select(uchar c)
{
   uchar i;
   switch(c)
   {
      case 1://video
             Window_Disp(0,1,0,GREEN,
                WINDOWDISPROWSTR+2+VideoMenuCnt,WINDOWDISPROWSTR+2+VideoMenuCnt,
                WINDOWDISPCOLSTR,WINDOWDISPCOLSTR+10);
             break;
      case 2://sound
             Window_Disp(0,1,0,GREEN,
                WINDOWDISPROWSTR+2+SoundMenuCnt,WINDOWDISPROWSTR+2+SoundMenuCnt,
                WINDOWDISPCOLSTR,WINDOWDISPCOLSTR+10);
             break;
      case 3://Usr 
             Window_Disp(0,1,0,GREEN,
                WINDOWDISPROWSTR+2+UsrMenuCnt,WINDOWDISPROWSTR+2+UsrMenuCnt,
                WINDOWDISPCOLSTR,WINDOWDISPCOLSTR+10);
             break;
      case 4://Radio
             if(RadioFreCH==0)
             { 
               Window_Disp(0,0,0,GREEN,
                    RADIOROW+5,RADIOROW+5,
                    RADIOCOL+4,RADIOCOL+11);
               return; 
              }
             i=RadioFreCH-1;
             if(i%2==0)
               Window_Disp(0,1,0,GREEN,
                    RADIOROW+5+i/2,RADIOROW+5+i/2,
                    RADIOCOL+4,RADIOCOL+11);
             else
               Window_Disp(0,1,0,GREEN,
                    RADIOROW+5+i/2,RADIOROW+5+i/2,
                    RADIOCOL+15,RADIOCOL+22); 
             break;
      case 5://   
             break;
      case 6://   
             break;
      default:break;
    }  
     
}
void Videodata_Updata(void)//osd updata
{
    Menu_Select(1); 
    switch(VideoMenuCnt)
         {
            case NUM_BRIGHT:
            case NUM_COLOR:
            case NUM_CONT:  Num_Disp(WINDOWDISPROWSTR+VideoMenuCnt+2,WINDOWDISPCOLSTR+10,VideoMenu[VideoMenuCnt],1);
                            break;
            case NUM_REV:
                            String_Disp(WINDOWDISPROWSTR+VideoMenuCnt+2,WINDOWDISPCOLSTR+7,RevStrPoint.str,RevStrPoint.n);
                            Num_Disp(WINDOWDISPROWSTR+VideoMenuCnt+2,WINDOWDISPCOLSTR+10,VideoMenuRev,0);
                            break;
            case NUM_MODE:
                            //if(VideoMenuMode>1)
                            //   VideoMenuMode=0;
                            String_Disp(WINDOWDISPROWSTR+VideoMenuCnt+2,WINDOWDISPCOLSTR+7,ModeValPoint[VideoMenuMode].str,ModeValPoint[VideoMenuMode].n);
                            break;
            default:        break;
          }
}
void VideoSet_Windows(void)
{
    uchar i;
    Windows_Close();
    WindowDispFlag=VIDEO_WINDOW;
    Row_Ctrol(WINDOWDISPROWSTR,RED,0,0);
    String_Disp(WINDOWDISPROWSTR,WINDOWDISPCOLSTR+3,VideoStrPoint.str,VideoStrPoint.n);
    Window_Disp(3,1,1,BLUE,
                WINDOWDISPROWSTR,WINDOWDISPROWSTR+6,
                WINDOWDISPCOLSTR,WINDOWDISPCOLSTR+10);
    for(i=0;i<VIDEOMENU_NUM;i++)        
      {
         String_Disp(WINDOWDISPROWSTR+i+2,WINDOWDISPCOLSTR,VideoMenuPoint[i].str,VideoMenuPoint[i].n);
         switch(i)
         {
            case NUM_BRIGHT:
            case NUM_COLOR:
            case NUM_CONT:  Num_Disp(WINDOWDISPROWSTR+i+2,WINDOWDISPCOLSTR+10,VideoMenu[i],1);
                            break;
            case NUM_REV:
                            String_Disp(WINDOWDISPROWSTR+i+2,WINDOWDISPCOLSTR+7,RevStrPoint.str,RevStrPoint.n);
                            Num_Disp(WINDOWDISPROWSTR+i+2,WINDOWDISPCOLSTR+10,VideoMenuRev,0);
                            break;
            case NUM_MODE:
                            if(VideoMenuMode>1)
                                VideoMenuMode=0;
                            String_Disp(WINDOWDISPROWSTR+i+2,WINDOWDISPCOLSTR+7,ModeValPoint[VideoMenuMode].str,ModeValPoint[VideoMenuMode].n);
                            break;
           } 
       } 
    /*
    Window_Disp(2,1,0,GREEN,
                WINDOWDISPROWSTR+2+VideoMenuCnt,WINDOWDISPROWSTR+2+VideoMenuCnt,
                WINDOWDISPCOLSTR,WINDOWDISPCOLSTR+10);
    */
     Menu_Select(1);
}

/*
    显示声音设置的窗口,c(1)表示打开,c(0)表示关闭
    此窗口在mainboard的控制下打开,其数据的变化依据主板的
    控制信息而来
    
    BASS  -7 ============ 0 -------------- +7 进度条上镶嵌字体,显示当前的数值,两种颜色指示偏移程度
    TREB  -7 ============ +5==========---  +7 进度条上镶嵌字体,显示当前的数值,两种颜色指示偏移程度
 BALANCE  -8 =======----- -3-------------- +8 进度条上镶嵌字体,显示当前的数值,两种颜色指示偏移程度
    FLAT  -8 ------------ -8 ------------- +8 进度条上镶嵌字体,显示当前的数值,两种颜色指示偏移程度
*/

void SoundNum_Disp(uchar row,uchar col,uchar c,uchar midval)
{  
   uchar c1,c2,c3;
   uchar n;

   Row_Clear(row,col-3,4);

   
   OsdBuf[0]=row|0x80;
   if(c>midval)
      {
        c=c-midval;
        OsdBuf[2]=0xEF;
      } 
   else if(c<midval) 
     {
        c=midval-c;
        OsdBuf[2]=0xEE;
      }
   else if(c==midval)
     {
        c=0;
        OsdBuf[2]=0;
      }
   c1=c%10;
   c=c/10;
   c2=c%10;
   c3=c/10;
   
   if(c3>0)//>100
    {      
       OsdBuf[3]=NumStr[c3];
       OsdBuf[4]=NumStr[c2];
       OsdBuf[5]=NumStr[c1];
       n=6;
     }
   else if(c2>0)//>10
    {
       OsdBuf[3]=NumStr[c2];
       OsdBuf[4]=NumStr[c1];
       n=5;
     }
   else 
    {      
       OsdBuf[3]=NumStr[c1];
       n=4;
     }
   
   col=col+3-n;

   OsdBuf[1]=col|0x40;
   
   I2c_SendMData(OSDADDR,OsdBuf,n);
}


void Sounddata_Updata(void)//osd updata
{
    Menu_Select(2); 
    switch(SoundMenuCnt)
         {
            case NUM_BASS:
            case NUM_TREB:
                            SoundNum_Disp(WINDOWDISPROWSTR+SoundMenuCnt+2,WINDOWDISPCOLSTR+10,SoundMenu[SoundMenuCnt],7);
                            //Num_Disp(WINDOWDISPROWSTR+SoundMenuCnt+2,WINDOWDISPCOLSTR+10,SoundMenu[SoundMenuCnt],1);
                            break;
            case NUM_FLAT:  
            case NUM_BALANCE:
                            SoundNum_Disp(WINDOWDISPROWSTR+SoundMenuCnt+2,WINDOWDISPCOLSTR+10,SoundMenu[SoundMenuCnt],8);
                            //Num_Disp(WINDOWDISPROWSTR+SoundMenuCnt+2,WINDOWDISPCOLSTR+10,SoundMenu[SoundMenuCnt],1);
                            break;         
            default:        break;
          }
}

void SoundSet_Windows(void)
{
    uchar i;
    Windows_Close();
    WindowDispFlag=SOUND_WINDOW;
    Row_Ctrol(WINDOWDISPROWSTR,RED,0,0);
    String_Disp(WINDOWDISPROWSTR,WINDOWDISPCOLSTR+3,SoundStrPoint.str,SoundStrPoint.n);
    Window_Disp(3,1,1,BLUE,
                WINDOWDISPROWSTR,WINDOWDISPROWSTR+5,
                WINDOWDISPCOLSTR,WINDOWDISPCOLSTR+10);
    for(i=0;i<SOUNDMENU_NUM;i++)        
      {
         String_Disp(WINDOWDISPROWSTR+i+2,WINDOWDISPCOLSTR,SoundMenuPoint[i].str,SoundMenuPoint[i].n);
         switch(i)
         {
            case NUM_BASS:
            case NUM_TREB:  //Num_Disp(WINDOWDISPROWSTR+i+2,WINDOWDISPCOLSTR+10,SoundMenu[i],1);
                            SoundNum_Disp(WINDOWDISPROWSTR+i+2,WINDOWDISPCOLSTR+10,SoundMenu[i],7);
                            break;
            case NUM_FLAT:  

⌨️ 快捷键说明

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