📄 mc141585.c
字号:
#define __MC141585_C__
/****************************************************************************/
/* */
/* Copyright (C) 2001. GENESIS MICROCHIP INC. */
/* All rights reserved. No part of this program may be reproduced. */
/* */
/* Genesis Microchip Inc., 165 Commerce Valley Dr. West */
/* Thornhill, Ontario, Canada, L3T 7V8 */
/* */
/*==========================================================================*/
/* */
/* MODULE: MC141585.c */
/* */
/* USAGE: This module is OSD device driver for Motorola MC141585. */
/* */
/****************************************************************************/
/****************************************************************************/
/* I N C L U D E F I L E S */
/****************************************************************************/
#include "all.h"
//
// Include files requires
//
//#include "io51.h"
//#include "global.h"
//#include "mcu8051.h"
//#include "d_i2c.h"
//#include "mc141585.h"
/****************************************************************************/
/* G L O B A L F U N C T I O N S */
/****************************************************************************/
BYTE osd_Init (void);
BYTE osd_Enable (void);
BYTE osd_Disable (void);
BYTE osd_Clear (void);
BYTE osd_CreateWindow (BYTE B_Num, ST_OSD_WINS *Stp_Win);
BYTE osd_OpenWindow (BYTE B_Num);
BYTE osd_CloseWindow (BYTE B_Num);
BYTE osd_Position (BYTE B_Row, BYTE B_Column);
BYTE osd_DisplayMessage (BYTE B_Row, BYTE B_Column, BYTE *Bp_Msg);
BYTE osd_DisplayValue (BYTE B_Row, BYTE B_Column, WORD W_Value,
BYTE B_Digits, bit Bt_ZeroPad) ;
BYTE osd_DisplaySlider (BYTE B_Row, BYTE B_Col, BYTE B_Length,
BYTE B_Percentage);
BYTE osd_DisplayOneIcon (BYTE B_Row, BYTE B_Column, BYTE B_Data);
BYTE osd_DisplayRepIcon (BYTE B_Row, BYTE B_Column, BYTE B_Data,
BYTE B_Length) ;
BYTE osd_DisplayIcon (BYTE B_Row, BYTE B_Column, BYTE *Bp_Msg,
BYTE B_Length);
BYTE osd_SetRowAttr (BYTE B_Row, BYTE B_Data);
BYTE osd_SetDataAttr (BYTE B_Row, BYTE B_Column, BYTE B_Data,
BYTE B_Length);
BYTE osd_Fading (BYTE B_Flag);
BYTE osd_ShadowBorder (BYTE B_Flag);
BYTE osd_RowSpace (BYTE B_Line);
BYTE osd_CharSize (BYTE B_Line);
BYTE osd_SetRegister (BYTE B_Row, BYTE B_Column, BYTE B_Data);
BYTE osd_PageSelect (BYTE B_BankB, BYTE B_BankC);
/****************************************************************************/
/* S T A T I C V A R I A B L E S */
/****************************************************************************/
static idata BYTE Ba_Wimage[MAX_WIN]; // Image of windows setup
static idata BYTE B_FrameControl15; // Image of register row 15,column 15
static idata BYTE B_FrameControl18; // Image of register row 15,column 18
static idata BYTE B_SpecialControl; // Image of register row 16,column 00
/****************************************************************************/
/* C O N S T V A R I A B L E S */
/****************************************************************************/
/****************************************************************************/
/* NOTE - All the following mapping should OSD chip specific */
/* It should map to the proper ROM with the chip */
/* */
/* If the display character value is 0x00-0x7F -> alpha numeric */
/* If the display character value is 0x80-0xFF -> other language */
/****************************************************************************/
#define UPPER_ALPHA 0x3F // Start from 0x80-0x41 ('A'- 'Z')
#define LOWER_ALPHA 0x5F // Start from 0xC0-0x61 ('a'- 'z')
static code const BYTE Ba_Numeric[] = // Numeric characters (0x20 to 0x3F)
{
0x00,0x2E,0xBA,0xF5,0xF6,0x21,0x22,0xBB,
0x2A,0x2B,0x23,0x20,0xBC,0x1F,0xBD,0x27,
0x1A,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
0x18,0x19,0xBE,0xBF,0x1B,0x24,0x1C,0x25
};
static code const BYTE Ba_OtherLang[] = // Other language and special symbol
{
0x9A,0x9B,0x9C,0x9D,0x9E, // 0x80 - A' A: Ao A^ A`
0xDA,0xDB,0xDC,0xDD,0xDE, // 0x85 - a' a: ao a^ a`
0x9F,0xA0,0xA1,0xA2, // 0x8A - E' E: E^ E`
0xDF,0xE0,0xE1,0xE2, // 0x8E - e' e: e^ e`
0xA3,0xA4,0xA5,0xA6, // 0x92 - I' I: I^ I`
0xE3,0xE4,0xE5,0xE6, // 0x96 - i' i: i^ i`
0xA7,0xA8,0xA9,0xAA, // 0x9A - O' O: O^ O`
0xE7,0xE8,0xE9,0xEA, // 0x9E - o' o: o^ o`
0xAB,0xAC,0xAD,0xAE, // 0xA2 - U' U: U^ U`
0xEB,0xEC,0xED,0xEE, // 0xA6 - u' u: u^ u`
0xB2,0xF2 // 0xAA - N~ n~
};
/****************************************************************************/
/* L O C A L D E F I N I T I O N S */
/****************************************************************************/
#define MAX_BUF 5 // OSD buffer size
#define DSP_REG 0x80 // Indicate display register
#define CTRL_REG 0xA0 // Indicate control register
#define FMT_C 0x40 // Transmit format "C"
/****************************************************************************/
/* S T A T I C R O U T I N E S */
/****************************************************************************/
static void osd_SendCtrl (BYTE B_Row, BYTE B_Col, BYTE B_Data);
static void osd_SendFmtC (BYTE B_Row, BYTE B_Col, BYTE *Bp_Buf, BYTE B_Len);
static void osd_SendRepFmtC (BYTE B_Row, BYTE B_Col, BYTE B_Data, BYTE B_Len) ;
/****************************************************************************/
/* C O D E */
/****************************************************************************/
/****************************************************************************/
/* */
/* FUNCTION: BYTE osd_Init(void) */
/* */
/* USAGE: Initialize OSD driver. */
/* */
/* INPUT: None */
/* */
/* OUTPUT: OK */
/* */
/****************************************************************************/
BYTE osd_Init(void)
{
B_FrameControl15 = 0; // Row 15,Col 15 - Frame control
B_FrameControl18 = 0x01; // Row 15,Col 18 - Frame control
// - VSync (+), HSync(-)
B_SpecialControl = 0x00; // Row 16,Col 00 - Special control
// - MUST use 12x18 font size (IC bug)
osd_SendCtrl(15, 14, 16); // Character height
osd_SendCtrl(15, 15, B_FrameControl15); // Send data
osd_SendCtrl(15, 18, B_FrameControl18); // Send data
osd_SendCtrl(16, 0, B_SpecialControl); // Send data
osd_SendCtrl(16, 4, 0x10); // ROM page BankB-page1,BankC-Page2
osd_Clear(); // Clear OSD memory
return (OK);
}
/****************************************************************************/
/* */
/* FUNCTION: BYTE osd_Enable(void) */
/* */
/* USAGE: Enable an OSD for display menu. */
/* */
/* INPUT: None */
/* */
/* OUTPUT: OK - sucessful */
/* */
/****************************************************************************/
BYTE osd_Enable(void)
{
B_FrameControl15 |= BIT7; // Enable OSD
osd_SendCtrl(15, 15, B_FrameControl15); // Setup register
return (OK);
}
/****************************************************************************/
/* */
/* FUNCTION: BYTE osd_Disable(void) */
/* */
/* USAGE: Disable current OSD menu. */
/* */
/* INPUT: None */
/* */
/* OUTPUT: OK - sucessful */
/* */
/****************************************************************************/
BYTE osd_Disable(void)
{
B_FrameControl15 &= (~BIT7); // Disable OSD
osd_SendCtrl(15, 15, B_FrameControl15); // Setup register
return (OK);
}
/****************************************************************************/
/* */
/* FUNCTION: BYTE osd_Clear(void) */
/* */
/* USAGE: Clear the display memory from row 1 to row 15 but affect */
/* control registers. */
/* */
/* INPUT: None */
/* */
/* OUTPUT: OK - sucessful */
/* */
/****************************************************************************/
BYTE osd_Clear(void)
{
B_SpecialControl |= BIT7; // Clear OSD memory
osd_SendCtrl(16, 0, B_SpecialControl); // Setup register
return (OK);
}
/****************************************************************************/
/* */
/* FUNCTION: BYTE osd_CreateWindow(BYTE B_Num, ST_OSD_WINS *Stp_Win) */
/* */
/* USAGE: Define the window co-ordinates and attributes */
/* */
/* INPUT: B_Num - window number (WIN1-WIN4) */
/* Stp_Win - structure pointer of the windows */
/* */
/* OUTPUT: OK - sucessful */
/* ERR_PARAM - incorrect parameters */
/* */
/****************************************************************************/
BYTE osd_CreateWindow(BYTE B_Num, ST_OSD_WINS *Stp_Win)
{
BYTE B_Data, B_Col, B_Flag;
//
// Check for input data
//
if (B_Num >= MAX_WIN) // Check window number
return (ERR_PARAM); // Error, exit
if (Stp_Win->B_RowStart >= MAX_OSD_ROW || Stp_Win->B_RowEnd >= MAX_OSD_ROW ||
Stp_Win->B_ColStart >= MAX_OSD_COL || Stp_Win->B_ColEnd >= MAX_OSD_COL)
return (ERR_PARAM);
//
// Convert data to OSD chip registers
//
B_Col = B_Num * 3; // Column number
B_Data = (Stp_Win->B_RowStart) << 4; // Row start number
B_Data |= (Stp_Win->B_RowEnd); // Row end number
osd_SendCtrl(15, B_Col, B_Data); // Send data
B_Col++; // Next column
//
B_Data = (Stp_Win->B_ColStart) << 3; // Column start number
B_Flag = Stp_Win->B_Attribute >> 2; // Window enable & color intensity
B_Data |= (B_Flag & 0x06); // Take bit 1&2 only
Ba_Wimage[B_Num] = B_Data; // Save window column start & attribute
osd_SendCtrl(15, B_Col, B_Data); // Send data
B_Col++; // Next column
//
B_Data = (Stp_Win->B_ColEnd) << 3; // Column end number
B_Flag = Stp_Win->B_Attribute; // Window color
B_Data |= (B_Flag & 0x07); // Take bit 0-2 only
osd_SendCtrl(15, B_Col, B_Data); // Send data
return (OK);
}
/****************************************************************************/
/* */
/* FUNCTION: BYTE osd_OpenWindow(BYTE B_Num) */
/* */
/* USAGE: Open / Enable the selected window for display. */
/* */
/* INPUT: B_Num - Window number (WIN1-WIN4) */
/* */
/* OUTPUT: OK - sucessful */
/* ERR_PARAM - incorrect window number */
/* */
/****************************************************************************/
BYTE osd_OpenWindow(BYTE B_Num)
{
if (B_Num > MAX_WIN) // Check window number
return (ERR_PARAM); // Error, exit
// Enable OSD window
osd_SendCtrl(15, (B_Num*3)+1, Ba_Wimage[B_Num] | BIT2);
return (OK);
}
/****************************************************************************/
/* */
/* FUNCTION: BYTE osd_CloseWindow(BYTE B_Num) */
/* */
/* USAGE: Close / Disable the selected window for display. */
/* */
/* INPUT: B_Num - Window number (WIN1-WIN4) */
/* */
/* OUTPUT: OK - sucessful */
/* ERR_PARAM - incorrect window number */
/* */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -