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

📄 pt6311_fp.c

📁 Zoran V966 DVD 解码 Soc芯片的源程序
💻 C
字号:
/* **************************************************************************************
 *  Copyright (c) 2002 ZORAN Corporation, All Rights Reserved
 *  THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF ZORAN CORPORATION
 *
 *  File: $Workfile: pt6311_fp.c $             
 *
 * Description:
 * ============
 * Nec Front Panel
 * 
 * Log:
 * ====
 * $Revision: 1 $
 * Last Modified by $Author: Tomasp $ at $Modtime: 1/20/03 3:31p $ 
 ****************************************************************************************
 * Updates:
 ****************************************************************************************
 * $Log: /SourceCode/I64_Common/I64_Reference/FP/pt6311_fp/pt6311_fp.c $
 * 
 * 1     1/20/03 10:07p Tomasp
 * 
 * 3     12/09/02 5:58p Leslie
 * Support D16311_BT224_VFD
 * 
 * 4     23/04/02 9:26 Nirm
 * - Added dependency in "Config.h".
 * 
 * 3     9/01/02 18:35 Nirm
 * Corrected Include-paths.
 * 
 * 2     25/12/01 15:55 Atai
 * Code cleaning
 **************************************************************************************** */

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

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


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)
	{
#ifdef UPD_16311
    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;
		break;
	case 13:
        real_grid_value = G13_S15;
		break;
	case 14:
        real_grid_value = G14_S14;
		break;
	case 15:
        real_grid_value = G15_S13;
		break;
	case 16:
        real_grid_value = G16_S12;
		break;
    default:		 
		//G8_S20 AS DEFAULT
        real_grid_value=0; //G14_S14;
		break;

#else
	case 4:
		real_grid_value = G4_S16;
		break;
	case 5:
		real_grid_value = G5_S16;
		break;
	case 6:
		real_grid_value = G6_S16;
		break;
	case 7:
		real_grid_value = G7_S15;
		break;
	case 8:
		real_grid_value = G8_S14;
		break;
	case 9:
		real_grid_value = G9_S13;
		break;
	case 10:
		real_grid_value = G10_S12;
		break;
	case 11:
		real_grid_value = G11_S11;
		break;
	default:
		real_grid_value = G11_S11;
		break;
#endif	//#ifdef UPD_16311	
	}

   
	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;
		break;
	case 1:
		real_dim_value = GON|DIM_2_16;
		break;
	case 2:
		real_dim_value = GON|DIM_4_16;
		break;
	case 3:
		real_dim_value = GON|DIM_10_16;
		break;
	case 4:
		real_dim_value = GON|DIM_11_16;
		break;
	case 5:
		real_dim_value = GON|DIM_12_16;
		break;
	case 6:
		real_dim_value = GON|DIM_13_16;
		break;
	case 7:
		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);
// add for support for upd16311
#ifdef UPD_16311
  VFD_LL_WriteByte( (BYTE) ADDRESS_SETTING | (3*grid));
#else  
  VFD_LL_WriteByte( (BYTE) ADDRESS_SETTING | 2*grid);
#endif  // #ifdef UPD_16311
  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);
// add for support for upd16311
#ifdef UPD_16311
  VFD_LL_WriteByte( (BYTE) ADDRESS_SETTING | (3*grid+1));
#else
  VFD_LL_WriteByte( (BYTE) ADDRESS_SETTING | 2*grid+1);
#endif  //#ifdef UPD_16311

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

  delay_us(1);
  Set_Fp_STB(1);

  delay_us(1);
}





/****************************************************************************/
/*
By Jerry CAI
Nov 30, 2002
*/

#ifdef D16311_BT224_VFD
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);

 
}

#endif



/****************************************************************************/
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 )
{
  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();

  delay_us(1);
  VFD_LL_ReadByte( p_keycode );

  delay_us(1);
  VFD_LL_ReadByte( p_keycode+1 );
 
  delay_us(1);
  VFD_LL_ReadByte( p_keycode+2 );

  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 )
{
  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);
}
/****************************************************************************/
static void VFD_LL_WriteByte( BYTE byte )
{
	BYTE i;

	for( i=0x01; (i<=0x80 && i!=0); i<<=1 )	 // Change "&" into "&&" for condition
	{
      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);
}

⌨️ 快捷键说明

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