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

📄 mc141585.c

📁 MC141585编程应用
💻 C
📖 第 1 页 / 共 3 页
字号:
#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 + -