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

📄 mc141585.c

📁 MC141585编程应用
💻 C
📖 第 1 页 / 共 3 页
字号:
/****************************************************************************/
BYTE osd_CloseWindow(BYTE B_Num)
{
    if (B_Num > MAX_WIN)					// Check window number
        return (ERR_PARAM);                 // Error, exit
                                            // Disable OSD window
    osd_SendCtrl(15, (B_Num*3)+1, Ba_Wimage[B_Num] & (~BIT2));
    return (OK);
}

/****************************************************************************/
/*																			*/
/* FUNCTION:    BYTE osd_Position(BYTE B_Row, BYTE B_Column)				*/
/*																			*/
/* USAGE:       Setup the vertical and horizontal position of the OSD.      */
/*																			*/
/* INPUT:       row    - vertical delay, 4 horizontal lines per step        */
/*                       (1 - 255)                                          */
/*              column - horizontal delay, half character 5 or 6 dots       */
/*                       per step  (0- 255)                                 */
/*																			*/
/* OUTPUT:      OK        - sucessful                                       */
/*              ERR_PARAM - error                                           */
/*																			*/
/****************************************************************************/
BYTE osd_Position(BYTE B_Row, BYTE B_Column)
{
    if (B_Row == 0)          				// Check parameter
        return (ERR_PARAM);                 // Vertical delay can't be zero
 
    osd_SendCtrl(15, 12, B_Row);			// Vertical delay
    osd_SendCtrl(15, 13, B_Column);			// Horizontal delay
    return (OK);
}

/****************************************************************************/
/*																			*/
/* FUNCTION:    osd_DisplayMessage(BYTE B_Row, BYTE B_Column, 				*/
/*								   BYTE *Bp_Msg)							*/
/*																			*/
/* USAGE:       Display alpha numeric message on the OSD menu.				*/
/*																			*/
/* INPUT:       B_Row    - row number of the message (0-14)                 */
/*              B_Column - column number for start of message (0-29)        */
/*              Bp_Msg   - pointer to message with NULL terminate           */
/*																			*/
/* OUTPUT:      OK        - sucessful                                       */
/*              ERR_PARAM - input parameter error                           */
/*																			*/
/****************************************************************************/
BYTE osd_DisplayMessage (BYTE B_Row, BYTE B_Column, BYTE *Bp_Msg)
{
    BYTE Ba_Buf[MAX_BUF];								// OSD display buffer
    BYTE B_Data;										// Display data
    BYTE B_Idx;											// Buffer index

    if (B_Row >= MAX_OSD_ROW || B_Column >= MAX_OSD_COL)// Over limit
        return (ERR_PARAM);								// Yes, exit

	//
    // Mapp the display character into the OSD chip ROM address
    //
	B_Idx = 0;											// Zero buffer index
	while(*Bp_Msg)										// Message data = 0 ?
	{													// No
		B_Data = *Bp_Msg++;								// Get data from buffer
        if (B_Data >= 0x20 && B_Data <= 0x3F)			// Numeric data ?
            Ba_Buf[B_Idx] = Ba_Numeric[B_Data-0x20];	// Yes
        else if (B_Data >= 'A' && B_Data <= 'Z')		// Upper case letter
			Ba_Buf[B_Idx] = B_Data + UPPER_ALPHA;		// Yes
        else if (B_Data >= 'a' && B_Data <= 'z') 		// Lower case letter
            Ba_Buf[B_Idx] = B_Data + LOWER_ALPHA;		// Yes
        else if (B_Data >= 80)							// Other language
            Ba_Buf[B_Idx] = Ba_OtherLang[B_Data-0x80];	//
		B_Idx++;
		if (B_Idx == MAX_BUF)							// OSD buffer full
		{												// Yes, send it out
			osd_SendFmtC(B_Row | DSP_REG, B_Column, Ba_Buf, MAX_BUF);
			B_Column +=	MAX_BUF;						// Adjust column number
			B_Idx     = 0;								// Reset buffer index
		}
	}
	if (B_Idx)											// Display data left
	{													// Send it out
		osd_SendFmtC(B_Row | DSP_REG, B_Column, Ba_Buf, B_Idx);
	}
    return (OK);
}

/****************************************************************************/
/*																			*/
/* FUNCTION:    osd_DisplayValue(BYTE B_Row, BYTE B_Column, 				*/
/*								   WORD W_Value, BYTE B_Digits,				*/
/*								   bit Bt_ZeroPad)							*/
/*																			*/
/* USAGE:       Display numeric message (whole value) on the OSD menu.		*/
/*																			*/
/* INPUT:       B_Row    - row number of the message (0-14)                 */
/*              B_Column - column number for start of message (0-29)        */
/*              W_Value   - value to display								*/
/*				B_Digits - number of digits to display						*/
/*				Bt_ZeroPad - zero pad enable/disable						*/
/*																			*/
/* OUTPUT:      OK        - sucessful                                       */
/*              ERR_PARAM - input parameter error                           */
/*																			*/
/****************************************************************************/
BYTE osd_DisplayValue (BYTE B_Row, BYTE B_Column, WORD W_Value, BYTE B_Digits, bit Bt_ZeroPad)
{
	bit Bt_DigitDisplayed = FALSE ;
	B_Column += B_Digits - 1 ;

	if (B_Row >= MAX_OSD_ROW || B_Column >= MAX_OSD_COL)	// exit of over limit
        return (ERR_PARAM);
	
	while (B_Digits--)
	{
		BYTE B_Digit = W_Value % 10 ;
		W_Value /= 10 ;

		if (!W_Value && !B_Digit && Bt_ZeroPad && Bt_DigitDisplayed)
			B_Digit = ' ' ;
		else
		{
			B_Digit += '0' ;
			Bt_DigitDisplayed = TRUE ;
		}

	  	B_Digit = Ba_Numeric[B_Digit - ' '] ;
		osd_SendFmtC(B_Row | DSP_REG, B_Column--, &B_Digit, 1);
	} ;
    return (OK);
}

/****************************************************************************/
/*																			*/
/* FUNCTION:    BYTE osd_DisplaySlider (BYTE B_Row, BYTE B_Col,				*/
/*										BYTE B_Length, BYTE B_Percentage)	*/
/*																			*/
/* USAGE:       Display a slider in the OSD menu.							*/
/*																			*/
/* INPUT:       B_Row    - row number of the slider (0-14)					*/
/*              B_Column - column number for start of slider (0-29)			*/
/*				B_Length - length of the slider in characters				*/
/*				B_Percentage - percentage of slider filled					*/
/*																			*/
/* OUTPUT:      OK        - sucessful                                       */
/*              ERR_PARAM - input parameter error                           */
/*																			*/
/****************************************************************************/
BYTE osd_DisplaySlider (BYTE B_Row, BYTE B_Col, BYTE B_Length, BYTE B_Percentage)
{
	WORD W_Param = B_Percentage ;
	BYTE B_SliderPos;

	if (B_Row >= MAX_OSD_ROW || B_Col >= MAX_OSD_COL)	// exit of over limit
        return (ERR_PARAM);

	if (B_Length < 3)			// if length is less than three, then it's
        return (ERR_PARAM);		// too small to display!

	B_Length -= 2;				// don't include left and right ends of slider

	if (W_Param > 100)			// prohibit slider from overflowing
		W_Param = 100;			//
	//
	// display left end of the slider
	//
	osd_DisplayOneIcon (B_Row, B_Col, SLDR_L);
	//
	// if we are left of the setpoint, display SLDR_FULL.
	//
	W_Param *= B_Length;		// scale W_Param by B_Length
	B_SliderPos = (BYTE) (W_Param / 100);
	if (B_SliderPos > 0)
		osd_DisplayRepIcon (B_Row, B_Col + 1, SLDR_FULL, B_SliderPos);
	//
	// if we are within the vicinity of the setpoint, display the
	// character that best represents the fraction of being full.
	//
	if (B_SliderPos + 1 <= B_Length)
		osd_DisplayOneIcon (B_Row, B_Col + B_SliderPos + 1,
							SLDR_BLANK - 6 * (W_Param - B_SliderPos *
								100) / 100);
	//
	// if we are right of the setpoint, display SLDR_BLANK.
	//
	if (B_SliderPos + 2 <= B_Length)
		osd_DisplayRepIcon (B_Row, B_Col + B_SliderPos + 2,
							SLDR_BLANK, B_Length - 1 - B_SliderPos);
	//
	// display right end of the slider
	//
	osd_DisplayOneIcon (B_Row, B_Col + B_Length + 1, SLDR_R);

    return (OK);
}

/****************************************************************************/
/*																			*/
/* FUNCTION:    osd_DisplayOneIcon(BYTE B_Row, BYTE B_Column, BYTE B_Data)	*/
/*																			*/
/* USAGE:       Display signal icon (OSD ROM address) on the OSD menu.		*/
/*																			*/
/* INPUT:       B_Row    - row number of the message (0-14)                 */
/*              B_Column - column number for start of message (0-29)        */
/*              B_Data   - icon address			            				*/
/*																			*/
/* OUTPUT:      OK        - sucessful                                       */
/*              ERR_PARAM - input parameter error                           */
/*																			*/
/****************************************************************************/
BYTE osd_DisplayOneIcon (BYTE B_Row, BYTE B_Column, BYTE B_Data)
{
    if (B_Row >= MAX_OSD_ROW || B_Column >= MAX_OSD_COL)// Over limit
        return (ERR_PARAM);								// Yes, exit

	osd_SendFmtC(B_Row | DSP_REG, B_Column, &B_Data, 1);
	return (OK);
}

/****************************************************************************/
/*																			*/
/* FUNCTION:    BYTE osd_DisplayRepIcon (BYTE B_Row, BYTE B_Column,			*/
/*										 BYTE B_Data, BYTE B_Length)		*/
/*																			*/
/* USAGE:       Display repeated icons (OSD ROM address) on the OSD menu.	*/
/*																			*/
/* INPUT:       B_Row    - row number of the message (0-14)                 */
/*              B_Column - column number for start of message (0-29)        */
/*              B_Data   - icon address			            				*/
/*				B_Length - number of icons to display						*/
/*																			*/
/* OUTPUT:      OK        - sucessful                                       */
/*              ERR_PARAM - input parameter error                           */
/*																			*/
/****************************************************************************/
BYTE osd_DisplayRepIcon (BYTE B_Row, BYTE B_Column, BYTE B_Data, BYTE B_Length)
{
    if (B_Row >= MAX_OSD_ROW || B_Column >= MAX_OSD_COL)// Over limit
        return (ERR_PARAM);								// Yes, exit

	osd_SendRepFmtC(B_Row | DSP_REG, B_Column, B_Data, B_Length);
	return (OK);
}

/****************************************************************************/
/*																			*/
/* FUNCTION:    osd_DisplayIcon(BYTE B_Row, BYTE B_Column, 					*/
/*							    BYTE *Bp_Msg, BYTE B_Length)				*/
/*																			*/
/* USAGE:       Display icon (OSD ROM address) on the OSD menu.				*/
/*																			*/
/* INPUT:       B_Row    - row number of the message (0-14)                 */
/*              B_Column - column number for start of message (0-29)        */
/*              Bp_Msg   - pointer to icon message            				*/
/*              B_Length - Number of bytes in buffer                        */
/*																			*/
/* OUTPUT:      OK        - sucessful                                       */
/*              ERR_PARAM - input parameter error                           */
/*																			*/
/****************************************************************************/
BYTE osd_DisplayIcon (BYTE B_Row, BYTE B_Column, BYTE *Bp_Msg, BYTE B_Length)
{
    if (B_Row >= MAX_OSD_ROW || B_Column >= MAX_OSD_COL)// Over limit
        return (ERR_PARAM);								// Yes, exit

	osd_SendFmtC(B_Row | DSP_REG, B_Column, Bp_Msg, B_Length);
	return (OK);
}

/****************************************************************************/
/*																			*/
/* FUNCTION:    BYTE osd_SetRowAttr(BYTE B_Row, BYTE B_Data)				*/
/*																			*/
/* USAGE:       Set the row attribute of a display line.                    */
/*																			*/
/* INPUT:       B_Row  - display row number (0-14)                          */
/*              B_Data - configuration data                                 */
/*                       (R_INTENSITY, R_DOUBLE_H, R_DOUBLE_W)              */
/*																			*/
/* OUTPUT:      OK - sucessful                                              */
/*              ERR_PARAM - row number error                                */
/*																			*/
/****************************************************************************/
BYTE osd_SetRowAttr(BYTE B_Row, BYTE B_Data)
{
    if (B_Row >= MAX_OSD_ROW)				// Over limit in row #
        return (ERR_PARAM);                 // Yes, exit
    osd_SendCtrl(B_Row, 30, B_Data);		// Set row attribute
    return (OK);                            
}

/****************************************************************************/
/*																			*/

⌨️ 快捷键说明

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