📄 mc141585.c
字号:
/****************************************************************************/
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 + -