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

📄 mtv018.c

📁 MTV018驱动源程序。用于车载LCD TV的OSD菜单显示源程序。并且包括了I2C的源程序。
💻 C
📖 第 1 页 / 共 5 页
字号:
            Buf[3] = OSD_U;
            Buf[4] = OSD_T;
            Buf[5] = OSD_E;
        }
        else
        {
            Buf[2] = OSD_NC;
            Buf[3] = OSD_NC;
            Buf[4] = OSD_NC;
            Buf[5] = OSD_NC;
        }
    }
    if(bDispFMOSDID)
    {
        Buf[0] = OSD_ADDR_ROW_8;
        Buf[1] = OSD_COLUMN_13;
    }
    else
    {
        Buf[0] = OSD_ADDR_ROW_11;
        Buf[1] = OSD_COLUMN_13;
    }
    ISendStr(MTV018_ADDR, Buf[0], &Buf[1], 5);
}
/********************************************************************************************************
 Descriptions:          OSD displayme
 input parameters:      None
 Returned value:        None
 Used global variables: None
 Calling modules:       None
 Created by:            xjj 2006/01/20
-------------------------------------------------------------------------------------------------------
 Modified by:
********************************************************************************************************/
void OSDTimeDisp(void)
{
     if(ucRemValue == REM_TIME)
    {
        ucRemValue = REM_INVALID;
        ucRemShadow = REM_INVALID;

        ucOSDAutoClearTime = OSD_AUTO_CLEAR_TIME;
        bOSDTimeDispID = 1;

        FreshOSDTime();
    }
    //OSD上显示时钟刷新
    if(bOSDTimeDispID)
    {
    	FreshOSDTime();
    }
}
/*-----------------------------------------------------------------------*/
void FreshOSDTime(void)
{
    uchar temp;
    uchar Buf[12];

    Buf[0] = OSD_ADDR_ROW_7;
    Buf[1] = OSD_COLUMN_11;
    //hour
    temp = ReadHour();
    Buf[2] = ((temp & b00110000B)>>4) + 1;
    Buf[3] = (temp & b00001111B) + 1;
    Buf[4] = 0xF6;
    //min
    temp = ReadMinute();
    Buf[5] = ((temp & b01110000B)>>4) + 1;
    Buf[6] = (temp & b00001111B)+1;
    Buf[7] = 0xF6;
    //sec
    temp = ReadSecond();
    Buf[8] = ((temp & b01110000B)>>4) + 1;
    Buf[9] = (temp & b00001111B)+1;
    Buf[10] = OSD_NC;
    Buf[11] = OSD_NC;
    ISendStr(MTV018_ADDR,Buf[0],&Buf[1],11);
}
/********************************************************************************************************
 Descriptions:          菜单按键识别程序
 input parameters:      None
 Returned value:        None
 Used global variables: None
 Calling modules:       None
 Created by:            xjj 2006/01/20
-------------------------------------------------------------------------------------------------------
 Modified by:
********************************************************************************************************/
void MenuSelect(void)
{
    if(ucRemValue == REM_MENU)
    {//主菜单按键识别程序
        ucRemValue = REM_INVALID;
        ucRemShadow = REM_INVALID;
        if(!bMainMenuOn)//若主菜单已显示,则不用清除CD声道信息
            ClearCDChannelInfo();
        if(bDispCDID)//清除全部CD信息
        {   //for test
            //ClearWinCDInfo();
            //ClearCharCDInfo();
        }
        DispSmallWindows();//如果主菜单已显示则不用在重新显示小窗口
        ucOSDAutoClearTime = OSD_AUTO_CLEAR_TIME;
        bMainMenuOn = 1;
        bDirectVolumeID = 0;
        ucMenuKeyCnt++;
        switch(ucMenuKeyCnt)
        {
            case MAIN_MENU:
            {
                ucOSDAutoClearTime = OSD_AUTO_CLEAR_TIME;
                ucSelectKeyCnt = 0;
                DispMainMenu();//显示主菜单(并且"PIC"高亮,包含PIC的子菜单)
                DispPicSubMenu();//调用图象调节显示菜单
                MainMenuHlight();//相应菜单高亮
                SubMenuHlight();//SUB_MENU_HLIGHT;执行二级菜单高亮
                break;
            }//the end of case
            case SOUND_MENU:
            {
                ucOSDAutoClearTime = OSD_AUTO_CLEAR_TIME;
                ucSelectKeyCnt = 0;
                //显示菜单"MENU"字符
                SendDataMTV018(TAB_MENU,10);
                MainMenuHlight();//相应菜单高亮
                DispSoundSubMenu();//DISP_SOUND_SUB_MENU;显示"SOUND"的子菜单
                SubMenuHlight();//SUB_MENU_HLIGHT;执行二级菜单高亮
                break;
            }//the end of case
            case SETUP_MENU:
            {
                ucOSDAutoClearTime = OSD_AUTO_CLEAR_TIME;
                ucSelectKeyCnt = 0;
                //显示菜单"MENU"字符
                SendDataMTV018(TAB_MENU,10);
                MainMenuHlight();//相应菜单高亮
                DispSetupSubMenu();//DISP_SETUP_SUB_MENU显示"SETUP"的子菜单
                SubMenuHlight();//SUB_MENU_HLIGHT;执行二级菜单高亮
                break;
            }//the end of case
            default:
            {
                ClearAllOSD();
                ucMenuKeyCnt = 0;
                ucSelectKeyCnt = 0;
                bMainMenuOn = 0;
                bDirectVolumeID = 1;
                StoreMainData();
            }
        }//the end of switch
    }//if(ucRemValue == REM_MENU)//主菜单按键识别程序 end

    //子菜单按键识别程序
    if(bDirectVolumeID)//直接音量标志(在显示音量,对下不作处理)
        return;
    if(ucOSDAutoClearTime == OSD_AUTO_CLEAR_STOP)//表示菜单消失
        return;
    if(bMainMenuOn)//如果没主菜单就不显示调整条
        MenuAdjustBar();

    if(ucRemValue == REM_MENU_DOWN)
    {
        ucRemValue = REM_INVALID;
        ucRemShadow = REM_INVALID;
        ucOSDAutoClearTime = OSD_AUTO_CLEAR_TIME;
        ucSelectKeyCnt++;
        if(ucSelectKeyCnt > 3)//0-3加循环计数
            ucSelectKeyCnt = 0;
        SubMenuHlight();//执行二级菜单高亮
    }
    if(ucRemValue == REM_MENU_UP)
    {
        ucRemValue = REM_INVALID;
        ucRemShadow = REM_INVALID;
        ucOSDAutoClearTime = OSD_AUTO_CLEAR_TIME;
        if(ucSelectKeyCnt == 0)//0-3加循环计数
            ucSelectKeyCnt = 4;
        ucSelectKeyCnt--;
        SubMenuHlight();//执行二级菜单高亮
    }
}
/*-----------------------------------------------------------------------------*/
void ClearCDChannelInfo(void)
{
    uchar Buf[5];

    Buf[0] = OSD_ADDR_ROW_2;
    Buf[1] = OSD_COLUMN_23;
    Buf[2] = OSD_NC;
    Buf[3] = OSD_NC;
    Buf[4] = OSD_NC;
    ISendStr(MTV018_ADDR,Buf[0],&Buf[1],4);

}
/*-----------------------------------------------------------------------------*/
void ClearWinCDInfo(void)
{
    uchar Buf[14];
    uchar ucRow;

    ucRow = OSD_ADDR_ROW_2;
    do
    {
        Buf[0] = ucRow;
        Buf[1] = OSD_COLUMN_9;
        Buf[2] = OSD_NC;
        Buf[3] = OSD_NC;
        Buf[4] = OSD_NC;
        Buf[5] = OSD_NC;
        Buf[6] = OSD_NC;
        Buf[7] = OSD_NC;
        Buf[8] = OSD_NC;
        Buf[9] = OSD_NC;
        Buf[10] = OSD_NC;
        Buf[11] = OSD_NC;
        Buf[12] = OSD_NC;
        Buf[13] = OSD_NC;
        ISendStr(MTV018_ADDR,Buf[0],&Buf[1],13);
        ucRow++;
    }while(ucRow < OSD_ADDR_ROW_10);

    Buf[0] = OSD_ADDR_ROW_5;
    Buf[1] = OSD_COLUMN_21;
    Buf[2] = OSD_NC;
    ISendStr(MTV018_ADDR,Buf[0],&Buf[1],2);

    Buf[0] = OSD_ADDR_ROW_7;
    Buf[1] = OSD_COLUMN_21;
    Buf[2] = OSD_NC;
    ISendStr(MTV018_ADDR,Buf[0],&Buf[1],2);

    Buf[0] = OSD_ADDR_ROW_9;
    Buf[1] = OSD_COLUMN_21;
    Buf[2] = OSD_NC;
    ISendStr(MTV018_ADDR,Buf[0],&Buf[1],2);
}
/*-----------------------------------------------------------------------------*/
void ClearCharCDInfo(void)
{
    uchar Buf[3];
    uchar ucCol = OSD_COLUMN_4;
    do
    {
        Buf[0] = OSD_ADDR_ROW_1;
        Buf[1] = ucCol;
        Buf[2] = OSD_NC;
        ISendStr(MTV018_ADDR,Buf[0],&Buf[1],2);
        ucCol++;
    }while(ucCol < OSD_COLUMN_29);
}
/*-----------------------------------------------------------------------------*/
//显示三个小彩条(主菜单上)
uchar code TAB_WINDOWS0[]=
    {   0xAF,0x40,b00100010B,b10100100B,b11001110B};
uchar code TAB_WINDOWS1[]=
    {   0xAF,0x43,0x33,0xA4,0xCD};
uchar code TAB_WINDOWS2[]=
    {   0xAF,0x46,0x44,0xA4,0xCB};
void DispSmallWindows(void)//如果主菜单已显示则不用在重新显示小窗口
{
    //窗口0
    SendDataMTV018(TAB_WINDOWS0,5);//调用送数程序
    //窗口1
    SendDataMTV018(TAB_WINDOWS1,5);
    //窗口2
    SendDataMTV018(TAB_WINDOWS2,5);
}
/*-----------------------------------------------------------------------------*/
//;主菜单字符表
uchar code TAB_MENU[]=
    {0x81,0x52,0x00,0x00,0x00,OSD_M,OSD_E,OSD_N,OSD_U,0x00};
uchar code TAB_PIC[]=
    {   0x82,0x55,OSD_P,OSD_I,OSD_C};
uchar code TAB_SOUND[]=
    {   0x83,0x55,OSD_S,OSD_0,OSD_U,OSD_N,OSD_D};
uchar code TAB_SETUP[]=
    {   0x84,0x55,OSD_S,OSD_E,OSD_T,OSD_U,OSD_P};
void DispMainMenu(void)//显示主菜单(并且"PIC"高亮,包含PIC的子菜单)
{
    //显示菜单"MENU"字符
    SendDataMTV018(TAB_MENU,10);
    //显示窗口0字符"PIC"
    SendDataMTV018(TAB_PIC,5);
    //显示窗口1字符"SOUND"
    SendDataMTV018(TAB_SOUND,7);
    //显示窗口2字符"SETUP"
    SendDataMTV018(TAB_SETUP,7);
}
/*-----------------------------------------------------------------------------*/
//显示"SOUND"子菜单
uchar code TAB_SOUND_FADER[]=
    {   0x84,0x44,0x00,0xD6,0xD7,OSD_F,OSD_A,OSD_D,OSD_E,OSD_R,OSD_NC,0x00,0x00};
uchar code TAB_SOUND_BALBANCE[]=
    {   0x83,0x44,0x00,0xD0,0xD1,OSD_B,OSD_A,OSD_L,OSD_A,OSD_N,OSD_C,OSD_E,0x00};
uchar code TAB_SOUND_BASS[]=
    {   0x81,0x44,0x00,0xC8,0xC9,OSD_B,OSD_A,OSD_S,OSD_S,0x00,0x00,0x00,0x00};
uchar code TAB_SOUND_TREBLE[]=
    {   0x82,0x44,0x00,0xCA,0xCB,OSD_T,OSD_R,OSD_E,OSD_B,OSD_L,OSD_E,0x00,0x00};
void DispSoundSubMenu(void)//DISP_SOUND_SUB_MENU;显示"SOUND"的子菜单
{
    //显示声音子菜单"FADER"字符
    SendDataMTV018(TAB_SOUND_FADER,13);
    //显示声音子菜单"BASS"字符
    SendDataMTV018(TAB_SOUND_BALBANCE,13);
    //显示声音子菜单"TREBLE"字符
    SendDataMTV018(TAB_SOUND_BASS,13);
    //显示声音子菜单"BALANCE"字符
    SendDataMTV018(TAB_SOUND_TREBLE,13);
}
/*-----------------------------------------------------------------------------*/
uchar code TAB_SETUP_MIRROR[]=
    {   0x81,0x44,0x00,0xD2,0xD3,OSD_M,OSD_I,OSD_R,OSD_R,OSD_0,OSD_R,0x00,0x00};
uchar code TAB_SETUP_BLUE[]=
    {   0x82,0x44,0x00,0xA8,0xA9,OSD_B,OSD_L,OSD_U,OSD_E,OSD_NC,0x00,0x00,0x00};
uchar code TAB_SETUP_BELL[]=
    {   0x83,0x44,0x00,0x24,0x25,OSD_B,OSD_E,OSD_L,OSD_L,OSD_NC,OSD_NC,0x00,0x00};
uchar code TAB_SETUP_TUNE[]=
    {   0x84,0x44,0x00,0xAA,0xAB,OSD_T,OSD_U,OSD_N,OSD_E,0x00,0x00,0x00,0x00};
void DispSetupSubMenu(void)//DISP_SETUP_SUB_MENU显示"SETUP"的子菜单
{
    //显示设置镜像菜单字符
    SendDataMTV018(TAB_SETUP_MIRROR,13);
    //显示缺省值菜单字符
    SendDataMTV018(TAB_SETUP_BLUE,13);
    //显示电视调节菜单字符
    SendDataMTV018(TAB_SETUP_BELL,13);
    //显示波段调节菜单字符
    SendDataMTV018(TAB_SETUP_TUNE,13);
}
/*-----------------------------------------------------------------------------*/
//显示"PIC"子菜单
uchar code TAB_BRIGHT[]=
    {   0x81,0x44,0x00,0xE0,0xE1,OSD_B,OSD_R,OSD_I,OSD_G,OSD_H,OSD_T,OSD_NC,OSD_NC};
uchar code TAB_CONTRAST[]=
    {   0x82,0x44,0x00,0xE2,0xE3,OSD_C,OSD_0,OSD_N,OSD_T,OSD_R,OSD_A,OSD_S,OSD_T};
uchar code TAB_COLOR[]=
    {   0x83,0x44,0x00,0xC6,0xC7,OSD_C,OSD_0,OSD_L,OSD_0,OSD_R,OSD_NC,OSD_NC,OSD_NC};
uchar code TAB_RESET[]=
    {   0x84,0x44,0x00,0xB0,0xB1,OSD_R,OSD_E,OSD_S,OSD_E,OSD_T,OSD_NC,OSD_NC,OSD_NC};

void DispPicSubMenu(void)//调用图象调节显示菜单
{
    //显示亮度菜单字符
    SendDataMTV018(TAB_BRIGHT,13);
    //显示对比度菜单字符
    SendDataMTV018(TAB_CONTRAST,13);
    //显示色度菜单字符
    SendDataMTV018(TAB_COLOR,13);
    //显示色调菜单字符
    SendDataMTV018(TAB_RESET,13);
}
/*-----------------------------------------------------------------------------*/
//一级菜单高亮程序
void MainMenuHlight(void)//相应菜单高亮
{
    uchar i,j;
    uchar Buf[8];

    i = 0xA2;
    do
    {
        j = 21;
        do
        {
            Buf[0] = i;
            Buf[1] = j;
            Buf[2] = b00000010B;
            ISendStr(MTV018_ADDR,Buf[0],&Buf[1],2);
            j++;
        }while(j<27);
        i++;
    }while(i<0xA5);

    i = ucMenuKeyCnt + 0xA1;
    if(i == 0xA1)
        i = 0xA4;
    Buf[0] = i;
    Buf[1] = 0x55;
    Buf[2] = b00000111B;
    Buf[3] = b00000111B;
    Buf[4] = b00000111B;
    Buf[5] = b00000111B;
    Buf[6] = b00000111B;
    Buf[7] = b00000111B;
    ISendStr(MTV018_ADDR,Buf[0],&Buf[1],7);//全部一级菜单绿色
}

⌨️ 快捷键说明

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