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

📄 osdsm.c

📁 车载 液晶显示器的主控程序(主要使用芯片为 MYSON MTV512 单片机、RealTek 2323 Scare 芯片、TVP5147(视频解码)。配Sharp 8寸液晶显示器 )。
💻 C
📖 第 1 页 / 共 3 页
字号:
{
	ucNumColor=ucNumColor;
    COsdFxHLine(ucRow, ucCol, ucLength, ((ucColor & 0x0f) << 4), _WRITE_BYTE2);
    COsdFxSliderMU(ucRow, ucCol, ucLength, usValue, usRange + usMin, usMin);
    COsdFxChange1bitColor(ucRow, ucCol + ucLength + 3, WIDTH(3), HEIGHT(1),_MUCP_TEXT,_MUCP_TEXTBG);
    COsdFxShowNumberMU(ucRow, ucCol + ucLength + 3, usValue - usMin, (_ALIGN_RIGHT | _FORCE_SHOW_NUMBER_OFF| _SHOW_3));
}

//--------------------------------------------------
// Description  : 
// Input Value  : 
// Output Value : 
//--------------------------------------------------
void COsdFxSliderMU(BYTE ucRow, BYTE ucCol, BYTE ucLength, BYTE usValue, BYTE usMax, BYTE usMin)
{
    BYTE cnt;

    usValue  = usValue - usMin;
    pData[0] = _L_BAR;

    for(cnt=1;cnt<(ucLength - 1);cnt++)
        pData[cnt] = _0_BAR;

    pData[ucLength - 1] = _R_BAR;

	    cnt =((WORD)(usValue * (ucLength - 2))) / (usMax - usMin);
	    if(cnt < (ucLength - 2))
			pData[cnt + 1] = (_0_BAR) + (((((WORD)(usValue * (ucLength - 2))) * _SLIDER_RESOLUTION) / (usMax - usMin)) % _SLIDER_RESOLUTION);

	    for(;cnt>0;cnt--)
	        pData[cnt] = _0_BAR + _SLIDER_RESOLUTION - 1;

    COsdFxCalcStartAddress(ucRow, ucCol, _WRITE_BYTE1);
    CScalerWrite(_OSD_DATA_PORT_92, ucLength, pData, _NON_AUTOINC);
}

//--------------------------------------------------
// Description  : 
// Input Value  : 
// Output Value : 
//--------------------------------------------------
void COsdFxLoadTextMU(BYTE ucRow, BYTE ucCol, BYTE ucSelect, BYTE code *pArray)
{
    BYTE cnt, cnt1, cnt2, ss, temp, temp1, temp2, temp3;
    WORD length;

    length = cnt = cnt1 = cnt2 = ss = temp = temp1 = 0;

    while(_TRUE)
    {
        if(*(pArray + cnt) == _END_)
        {
            if(temp == ucSelect)
                break;
            else
            {
                pArray += (cnt + 1);
                cnt = 0;
            }
            temp++;
        }
        cnt++;
    }

    cnt = cnt1 = cnt2 = temp1 = 0;
    temp3 = ucRow;
    COsdFxCalcStartAddress(ucRow, ucCol, _WRITE_BYTE0);
    while(*(pArray + cnt) != _END_)
    {
        switch(*(pArray + cnt))
        {
            case _EXT_:
                if(*(pArray + cnt + 1) > 3)
                    return;
                temp = _EXT_ + *(pArray + cnt + 1);
                cnt += 2;
                break;

            case _REPEAT_:
                if(temp1 < (*(pArray + cnt + 1) - 1))
                    temp1++;                
                else
                {
                    cnt += 2;
                    temp1 = 0;
                    continue;
                }
                break;

            case _NEXT_:
                if(length%12)
                {
                    COsdFxCalcStartAddress(ucRow, ucCol + cnt1, _WRITE_BYTEALL);
                    pData[0] = 0x00;
                    pData[1] = ((12 - length%12) < 4) ? (12 - length%12) + 12 : (12 - length%12);
                    pData[2] = 0x00;
                    CScalerWrite(_OSD_DATA_PORT_92, 3, pData, _NON_AUTOINC);
                }
                cnt++;
                COsdFxCalcStartAddress(++ucRow, ucCol, _WRITE_BYTE0);
                length = 0;
                cnt1 = 0;
                continue;

            default:
                temp = *(pArray + cnt);
                cnt++;
                break;
        }

        cnt1++;
        ss = 0;
        temp2 = 0;
        while(_TRUE)
        {
            if((temp == (tOSD_CHARWIDTH_TABLE[0])[ss*2]) && ((tOSD_CHARWIDTH_TABLE[0])[ss*2+1] != _END_))
            {
                pData[0] = (8<<4) | 12;//(tOSD_CHARWIDTH_TABLE[0])[ss*2+1];
                length += 12;//((tOSD_CHARWIDTH_TABLE[0])[ss*2+1] & 0x0f);
                CScalerWrite(_OSD_DATA_PORT_92, 1, pData, _NON_AUTOINC);
                break;
            }
            else
            {
                if(((tOSD_CHARWIDTH_TABLE[0])[ss*2] == _END_) && ((tOSD_CHARWIDTH_TABLE[0])[ss*2+1] == _END_))
                {
                    temp2 = 1;
                    break;
                }
            }
            ss++;
        }

        ss = 0;
        while(temp2 == 1)
        {
            if((temp == (tOSD_CHARWIDTH_TABLE[ucSelect+1])[ss*2]) && ((tOSD_CHARWIDTH_TABLE[ucSelect+1])[ss*2+1] != _END_))
            {
                pData[0] = (8<<4) | 12;//(tOSD_CHARWIDTH_TABLE[ucSelect+1])[ss*2+1];
                length += 12;//((tOSD_CHARWIDTH_TABLE[ucSelect+1])[ss*2+1] & 0x0f);
                CScalerWrite(_OSD_DATA_PORT_92, 1, pData, _NON_AUTOINC);
                break;
            }
            else
            {
                if(((tOSD_CHARWIDTH_TABLE[ucSelect+1])[ss*2] == _END_) && ((tOSD_CHARWIDTH_TABLE[ucSelect+1])[ss*2+1] == _END_))
                {
                    COsdFxCalcStartAddress(ucRow, ucCol + cnt1, _WRITE_BYTE0);
                    length += 12;
                    break;
                }
            }
            ss++;
        }
    }

    if(length%12)
    {
        COsdFxCalcStartAddress(ucRow, ucCol + cnt1, _WRITE_BYTEALL);
        pData[0] = 0x00;
        pData[1] = ((12 - length%12) < 4) ? (12 - length%12) + 12 : (12 - length%12);
        pData[2] = 0x00;

        CScalerWrite(_OSD_DATA_PORT_92, 3, pData, _NON_AUTOINC);
    }

    ucRow = temp3;
    cnt = 0;
    temp1 = 0;
    COsdFxCalcStartAddress(ucRow, ucCol, _WRITE_BYTE1);
    while(*(pArray + cnt) != _END_)
    {
        switch(*(pArray + cnt))
        {
            case _EXT_:
                if(*(pArray + cnt + 1) > 3)
                    return;
                temp = _EXT_ + *(pArray + cnt + 1);
                cnt += 2;
                break;

            case _REPEAT_:
                if(temp1 < (*(pArray + cnt + 1) - 1))
                    temp1++;                
                else
                {
                    cnt += 2;
                    temp1 = 0;
                    continue;
                }
                break;

            case _NEXT_:
                cnt++;
                COsdFxCalcStartAddress(++ucRow, ucCol, _WRITE_BYTE1);
                continue;

            default:
                temp = *(pArray + cnt);
                cnt++;
                break;
        }

        CScalerWrite(_OSD_DATA_PORT_92, 1, &temp, _NON_AUTOINC);
    }
}

//--------------------------------------------------
// Description  : 
// Input Value  : 
//                ucPar:
//                bit 0 (Align left or right)   [ 0: Align left     1: Align right	      ]
//                bit 1 (Force to show number)  [ 0: Disable        1: Enable             ]
//                bit 4 ~ 6 (Show numbers)      [ 0 ~ 7: Show 1 ~ 8 numbers               ]
// Output Value : 
//--------------------------------------------------
void COsdFxShowNumberMU(BYTE ucRow, BYTE ucCol, BYTE usValue, BYTE ucPar)
{
    BYTE index, temp, i;

    pData[2] = (_0_ + (usValue)/100);
    pData[1] = (_0_ + (usValue%100)/10);
    pData[0] = (_0_ + (usValue%10));

	for(index=0;index<3;index++)
	{
		if(pData[2 - index] != ((bit)(ucPar & _BIT1) ? 0x00 : _0_))
		{
			index = 2 - index;
			break;
		}
	}

	if((bit)(ucPar & _BIT1))
    {
        temp = (ucPar & 0x70) >> 4;
		index = (ucPar & 0x70) >> 4;
    }
    else
    {
        temp = (ucPar & 0x70) >> 4;
        if(temp < index)
            temp = index;
    }

	if(usValue == 0 && !((bit)(ucPar & 0x02)) )
		index = 0;

	if((bit)(ucPar & 0x01))		// Align Right
		COsdFxCalcStartAddress(ucRow, ucCol - temp, _WRITE_BYTE1);
	else						// Align Left
		COsdFxCalcStartAddress(ucRow, ucCol, _WRITE_BYTE1);

	for(i=0;i<=temp;i++)
    {
        if(index >= temp)
        {
    		pData[i + 6] = pData[index - i];
        }
        else
        {
            if(i < (temp - index))
                pData[i + 6] = 0x00;
            else
        		pData[i + 6] = pData[index - (i - (temp - index))];
        }
    }

    CScalerWrite(_OSD_DATA_PORT_92, (temp + 1), &pData[6], _NON_AUTOINC);

    //return temp + 1;
}


//for ir
void CIrActionMute(void)
{
	if (ucCurrState != _ACTIVE_STATE)
		return;

	if (ucOsdState == _MENU_NONE) {
		//clear original text, may not need
		COsdDispClearText(ROW(0), COL(0),WIDTH(34), HEIGHT(1));
		//apply osd map
		COsdFxApplyMapSetting(_OSD_MAP4);

		//border color
		COsdFxPWMCtlCommand(ADDRESS(3), _WRITE_BYTE1, (_OSD_BORDER_COLOR<<4));
		
		COsdMUMenuSetPosition();

		//construct:	
		COsdMUMenuSaturation();
		COsdMULeftMute();
		COsdFxEnableOsd();
	}
	else if (ucOsdState == _MENU_MU_MUTE) {
		COsdMULeftMute();
	}
	CTimerReactiveTimerEvent(SEC(stOsdUserData.OsdTimeout),COsdDispOsdTimerEvent);
}

void LED_Message_HaoZhen(BYTE msg)
{
#if (_PCB_TYPE == _PCB_PV013BA1)
#if (_PCB_RIGHTECH_A_USE_PV013BA1 == _TRUE)
	msg = msg;
	return;
	
#else
	switch(msg)
	{
		case LED_MSG_GREEN:
			bLEDGREEN	= _LED_ON;
			break;
		case LED_MSG_BLACK:
			bLEDGREEN = _LED_OFF;
	}
	#endif
#else
	switch(msg)
	{
		case LED_MSG_GREEN:
			bLEDGREEN	= _LED_ON;
			break;
		case LED_MSG_BLACK:
			bLEDGREEN = _LED_OFF;
	}
#endif


}
//----------------------------------------------------------------------------------------------------
#endif	//end of #if(_OSD_SM_ENABLE)

#endif	//end of #if (_CUSTOM_TYPE == _CUSTOM_HAOZHEN)

#endif	//end of #if(_VIDEO_SUPPORT == _ON)

⌨️ 快捷键说明

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