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

📄 tp6315_fp.c

📁 Zoran V966 DVD 解码 Soc芯片的源程序
💻 C
字号:
/* **************************************************************************************
 *  Copyright (c) 2004 ZORAN Corporation, All Rights Reserved
 *  THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF ZORAN CORPORATION
 *
 *  File: $Workfile: TP6315_fp.c $             
 *
 * Description:
 * ============
 * NEC front Panel definition
 * 
 * Log:
 * ====
 ****************************************************************************************
 * Updates:
 ****************************************************************************************
 * 1		Dec.18, 2004	JerryLin	 
 *		First created 
 ****************************************************************************************/
 #include "Config.h"		// Global Configuration - do not remove!

#include "Config.h"		// Global Configuration - do not remove!

#include "Include\sysdefs.h"
#include "Playcore\Timing\timing.h"
#include "FP\fp_ll.h"
#include "FP\TP6315_fp\TP6315_fp.h"
#include "FP\NEC_FP\nec_io.h"

#ifdef TP6315_FP

/****************************************************************************/
static BYTE p_keycode[BYTES_USED_TO_SCANKEY];

/****************************************************************************/
void VFD_LL_Init(BYTE grid_count)
{
    BYTE i;

    for (i=0; i<BYTES_USED_TO_SCANKEY; i++)
		p_keycode[i] = 0;

	VFD_LL_SetGrid(grid_count);

    Set_Fp_STB(1);
    delay_us(1);
    Set_Fp_CLK(1);
    delay_us(1);
}
/****************************************************************************/

void VFD_LL_SetGrid(BYTE grid_count)
{
	BYTE real_grid_value;

	switch (grid_count)
	{
	case 4:
		real_grid_value = G4_S24;
		break;
	case 5:
		real_grid_value = G5_S23;
		break;
	case 6:
		real_grid_value = G6_S22;
		break;
	case 7:
		real_grid_value = G7_S21;
		break;
	case 8:
		real_grid_value = G8_S20;
		break;
	case 9:
		real_grid_value = G9_S19;
		break;
	case 10:
		real_grid_value = G10_S18;
		break;
	case 11:
		real_grid_value = G11_S17;
		break;
	case 12:
		real_grid_value = G12_S16;
	default:
		real_grid_value = G10_S18;
		break;
	}

   
	delay_us(1);
	Set_Fp_STB(1);

	delay_us(1);
	Set_Fp_STB(0);
  
	delay_us(1);
	VFD_LL_WriteByte( DISPLAY_MODE| real_grid_value );

	delay_us(1);
}

/****************************************************************************/
void VFD_LL_SetDim(BYTE vfd_dim_level)
{
  	BYTE real_dim_value;

	switch (vfd_dim_level)
	{
	case 0:
		real_dim_value = 0;	// DIM off
		break;
	case 1:
		real_dim_value = GON|DIM_1_16;
		break;
	case 2:
		real_dim_value = GON|DIM_2_16;
		break;
	case 3:
		real_dim_value = GON|DIM_4_16;
		break;
	case 4:
		real_dim_value = GON|DIM_10_16;
		break;
	case 5:
		real_dim_value = GON|DIM_11_16;
		break;
	case 6:
		real_dim_value = GON|DIM_12_16;
		break;
	case 7:
		real_dim_value = GON|DIM_13_16;
		break;
	case 8:
		real_dim_value = GON|DIM_14_16;
		break;
	default:
		real_dim_value = GON|DIM_14_16;
		break;
	}

	delay_us(1);
	Set_Fp_STB(1);

	delay_us(1);
	Set_Fp_STB(0);

	delay_us(1);
	VFD_LL_WriteByte( DISPLAY_CONTROL | real_dim_value );

	delay_us(1);
}

/****************************************************************************/
void VFD_LL_WriteDisplayRAM( BYTE grid, WORD data )
{
	delay_us(1);
	Set_Fp_STB(1);

	delay_us(1);
	Set_Fp_STB(0);

	delay_us(1);
	VFD_LL_WriteByte( (BYTE)(DATA_SETTING | NORMAL_OPERATION | ADDRESS_INCREASE | WRITE_DISPLAY ));

	delay_us(1);
	Set_Fp_STB(1);

	delay_us(1);
	Set_Fp_STB(0);

	delay_us(1);
	VFD_LL_WriteByte( (BYTE) ADDRESS_SETTING | (3*grid));
	delay_us(1);								
	VFD_LL_WriteByte( (BYTE) (data & 0x00ff) );

	delay_us(1);
	Set_Fp_STB(1);

	delay_us(1);
	Set_Fp_STB(0);

	delay_us(1);
	VFD_LL_WriteByte( (BYTE)(DATA_SETTING | NORMAL_OPERATION | ADDRESS_INCREASE | WRITE_DISPLAY ));

	delay_us(1);
	Set_Fp_STB(1);

	delay_us(1);
	Set_Fp_STB(0);

	delay_us(1);
	VFD_LL_WriteByte( (BYTE) ADDRESS_SETTING | (3*grid+1));

	delay_us(1);
	VFD_LL_WriteByte( (BYTE) (data >> 8) );

	delay_us(1);
	Set_Fp_STB(1);

	delay_us(1);
}

/****************************************************************************/
void VFD_LL_WriteDisplayRAM_InDword( BYTE grid, DWORD data )
{	
	delay_us(1);
	Set_Fp_STB(1);

	delay_us(1);
	Set_Fp_STB(0);

	delay_us(1);
	VFD_LL_WriteByte( (BYTE)(DATA_SETTING | NORMAL_OPERATION | ADDRESS_INCREASE | WRITE_DISPLAY ));

	delay_us(1);
	Set_Fp_STB(1);

	delay_us(1);
	Set_Fp_STB(0);

	delay_us(1);

	VFD_LL_WriteByte( (BYTE) ADDRESS_SETTING | (grid*3));

	delay_us(1);
	VFD_LL_WriteByte( (BYTE) (data & 0x00ff) );

	delay_us(1);
	Set_Fp_STB(1);

	delay_us(1);
	Set_Fp_STB(0);

	delay_us(1);
	VFD_LL_WriteByte( (BYTE)(DATA_SETTING | NORMAL_OPERATION | ADDRESS_INCREASE | WRITE_DISPLAY ));

	delay_us(1);
	Set_Fp_STB(1);

	delay_us(1);
	Set_Fp_STB(0);

	delay_us(1);

	VFD_LL_WriteByte( (BYTE) ADDRESS_SETTING | (grid*3+1));

	delay_us(1);
	VFD_LL_WriteByte( (BYTE) ((data >> 8) & 0x00ff) );

	delay_us(1);
	Set_Fp_STB(1);

	delay_us(1);
	Set_Fp_STB(0);

	VFD_LL_WriteByte( (BYTE)(DATA_SETTING | NORMAL_OPERATION | ADDRESS_INCREASE | WRITE_DISPLAY ));

	delay_us(1);
	Set_Fp_STB(1);

	delay_us(1);
	Set_Fp_STB(0);

	delay_us(1);

	VFD_LL_WriteByte( (BYTE) ADDRESS_SETTING | (grid*3+2));

	delay_us(1);
	VFD_LL_WriteByte( (BYTE) ((data >> 16) & 0x00ff) );

	delay_us(1);
	Set_Fp_STB(1);
	delay_us(1); 
}

/****************************************************************************/
void VFD_LL_RefreshLED( BYTE led )
{
	delay_us(1);
	Set_Fp_STB(1);

	delay_us(1);
	Set_Fp_STB(0);

	delay_us(1);
	VFD_LL_WriteByte( (BYTE)(DATA_SETTING | NORMAL_OPERATION | ADDRESS_INCREASE | WRITE_LIGHTS ));

	delay_us(1);
	VFD_LL_WriteByte( led );

	delay_us(1);
	Set_Fp_STB(1);
}

BYTE VFD_LL_ReadKeyScan( BYTE*** Key_Code )
{
	BYTE i;
	
	delay_us(1);
	Set_Fp_STB(1);

	delay_us(1);
	Set_Fp_STB(0);

	/*
	* Note: The wait states are necessary because
	*       FP needs to have some time between
	*       writes.
	*/

	delay_us(1);
	VFD_LL_WriteByte( (BYTE)(DATA_SETTING | NORMAL_OPERATION | ADDRESS_INCREASE | READ_KEYSCAN ));

	Set_FpDout_To_Input();

	for (i=0; i<BYTES_USED_TO_SCANKEY; i++)
	{
		delay_us(1);
		VFD_LL_ReadByte( p_keycode+i );
	}

	Set_FpDout_To_Output();

	delay_us(1);
	Set_Fp_STB(1);

	**Key_Code = p_keycode;

	return BYTES_USED_TO_SCANKEY;
}

/****************************************************************************/
void VFD_LL_ReadInputs( BYTE** inputs )
{
/* THIS FUNCTION IS INVALID AND NOT USED IN THIS VFD CONTROLLER.
  delay_us(1);
  Set_Fp_STB(1);

  delay_us(1);
  Set_Fp_STB(0);

  delay_us(1);
  VFD_LL_WriteByte( DATA_SETTING | NORMAL_OPERATION | ADDRESS_INCREASE | READ_INPUTS );

  delay_us(1);
  VFD_LL_ReadByte( *inputs );

  delay_us(1);
  Set_Fp_STB(1);
 */

 // avoid compiling warning
 inputs = inputs;
}

/****************************************************************************/
static void VFD_LL_WriteByte( BYTE byte )
{
	BYTE i;

	for( i=0x01; (i<=0x80 && i!=0); i<<=1 )
	{
   	Set_Fp_CLK(0);
		Set_Fp_DOUT((byte & i) ? 1:0);
		Set_Fp_CLK(1);
	}
}
/****************************************************************************/
static void VFD_LL_ReadByte( BYTE *byte )
{
	BYTE i;	

	Set_Fp_CLK(1);
	*byte = 0;   // Clear byte first

	for( i=0; i<7; i++ )
	{
		Set_Fp_CLK(0);
		*byte |= ( Get_Fp_DIN() ? 0x80:0 );
		Set_Fp_CLK(1);
		*byte >>= 1;	  
	}

	Set_Fp_CLK(0);
	*byte |= ( Get_Fp_DIN() ? 0x80:0 );
	Set_Fp_CLK(1);
}

#endif 

⌨️ 快捷键说明

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