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

📄 drv_key.c

📁 ROHM 公司BU9432:application:应用范围
💻 C
📖 第 1 页 / 共 2 页
字号:
/******************************************************************************/
/*	[NAME]   :drv_KEY.c														  */
/*	[OUTLINE]:																  */
/*	[HISTORY]:																  */
/*	[NOTE]   :TAB=4															  */
/******************************************************************************/
//#include <machine.h>  /*  Z80梡   */
#include "BU18703.h"			/*  CPU儗僕僗僞掕媊 */
#include "prototype.h"
#include "extern.h"

/*----------------------------------------------------------------------------*/

//UINT08 gu08_ff_buffer;			
//UINT08 gu08_fr_buffer;
//UINT08 gu08_kind_Alm1;
//UINT08 gu08_kind_Alm2;

/* B0003 --->
//YTC0000  OKAMOTO's (gentleman) Assigin			
//AD keyscan偺偟偒偄抣丒杮懱懁
const UINT08 ADKEY_SLESH[] = 
{
	0xC0,	// 0  偙偺抣埲忋傪OFF
	0xA0,	// 1  偙偺抣埲忋傪1
	0x80,	// 2  偙偺抣埲忋傪2
	0x60,	// 3  偙偺抣埲忋傪3
	0x3B,	// 4  偙偺抣埲忋傪4
	0x14,	// 5  偙偺抣埲忋傪5
			// 6  偙偺抣埲忋傪6偲偡傞丅
};

//AD keyscan偺偟偒偄抣丒WIREDremonocon梡丅Vdd-Vf偱嶼弌丅
const UINT08 ADKEY_SLESH_WIRE[] = 
{
	0xCA,	// 0
	0xB3,	// 1
	0x9A,	// 2
	0x80,	// 3
	0x63,	// 4
	0x43,	// 5
			// 6
};
*/

const UINT08 ADKEY_SLESH[] =
{
	0xC0,	// 0  偙偺抣埲忋傪OFF
	0xA0,	// 1  偙偺抣埲忋傪1
	0x80,	// 2  偙偺抣埲忋傪2
	0x60,	// 3  偙偺抣埲忋傪3
	0x3B,	// 4  偙偺抣埲忋傪4
	0x14,	// 5  偙偺抣埲忋傪5
			// 6  偙偺抣埲忋傪6偲偡傞丅
};
// B0003 <---


/*----------------------------------------------------------------------------*/
/*	[NAME]     :DrvKEY_ScanKey												  */
/*	[FUNCTION] :															  */
/*	[RETURN]   :void  														  */
/*	[PARAMETER]:void														  */
/*	[HISTORY]  :															  */
/*	[NOTE]     :															  */
/*----------------------------------------------------------------------------*/
void DrvKEY_ScanKey( void )
{
//	20041206 final PCB assigin										
//			Vdd                                             GND		
//----																
//			0		1		2		3		4		5		6		
//CCT		off		reserve	reserve	reserve	SW521	(sw520)	SW501	
//											CHA_ON	(TU_ON)	PLAY	
//----																
//AD2		0		7		8		9		10		11		12		
//BOOST		off		-		-		SW517	SW516	SW515	SW514	
//									BBEQSR	BB_EQ	DBB		(TEST)	
//----																
//AD3		0		13		14		15		16		17		18		
//FUNC		off		SW513	SW512	SW511	SW510	SW509	SW508	
//					ESP		EQ_SR	SR		DIR-	PROG	MODE	
//----																
//AD4		0		19		20		21		22		23		24		
//MAIN		off		SW507	SW506	SW505	SW504	SW503	SW502	
//					PRG/MOD	EQ		DIR+	FR		FF		STOP	
//----																
//AD5		0		25		26		27		28		29		30		
//REMOTE	off		SW505	SW904	SW903	SW902	SW901	-		
//					DIR+rem	FRrem	FFrem	STOPrem	PLAYrem			
//----																
//AD6		0		31		32		33		34		35		36		
//VR		off										SW519	SW518	
//													VR-		VR+		

//  椺奜張棟                
//      FF off_edge     ?37  	(500mS埲撪偵僆僼)
//      FR off_edge     ?38  	
//      FF on_hold      ?39  	(300ms枅偵key_buff偵愊傓)
//      FR on_hold      ?40  	
//      VR++ on_hold    ?41   	
//      VR-- on_hold    ?42   	//System.h傪尒偰丅


//B0003 --->
//			VDD																				GND

//---		0		1				2				3				4			5			6
//AD0		off		SW509 3/4VDD	reverse			SW509 1/2VDD	reverse		reverse		SW509 GND
//FUNC				POWER OFF						TUNER									CD

//---		0		7				8				9				10			11			12
//AD2		off		SW526			SW525			SW524			SW523		SW522		SW521
//FUNC				ANTI			TUNER/BAND		PLAY/PAUSE		AUX			TAPE		POWER

//---		0		13				14				15				16			17			18
//AD3		off		SW516			SW515			SW514			SW513		SW512		SW511
//FUNC				DBB				DIR-/PREST-		DIR+/PRESET+	VR-			VR+			EQ

//---		0		19				20				21				22			23			24
//AD4		off		SW506			SW505			SW504			SW503		SW502		SW501
//FUNC				FR/DN			FF/UP			PROG/CLKSET		MODE/MONO	STOP/ERASE	TEST

//		FF off edge		25
//		FR off edge		26
//		FF on hold		27
//		FF on hold		28

//B0003 <---


//  慡僉乕僆僼偐傜偺扨堦僉乕擖椡偱僆儞擣幆丅key_buff偵愊傓丅
//  VR++,--偺墴偟懕偗偼300mS枅偵摨堦僉乕僐乕僪傪key_buff偵愊傓丅
//  FF,FR僆儞擣幆偐傜500mS埲撪偵棧偝傟偨傜丄off_edge傪key_buff偵愊傓丅
//  FF,FR500mS埲忋墴偟懕偗偨傜丄on_hold傪key_buff偵愊傓丅埲崀300mS枅偵on_hold傪key_buff偵愊傓丅
//
//  A/D曄姺婍偼帺摦弰夞偝偣偰偄傞偺偱丄慡僠儍儞僱儖堦婥偵僠僃僢僋壜擻丅
//
//	FF/FR in_hold 偐傜偺夝彍偱 "KEY_SEARCH_RELEASE"傪愊傓傒偨偄丅側傞傎偳丅
//	20041026 俁侽昩AutoPowerControl梡婡擻捛壛
//	20041214 徣ROM


	static UINT08 keyscan_scc;
/* B0003 --->
	static	UINT08 now_key[6];
	static	UINT08 old_key[6];
*/
//	static	UINT08 now_key[4];		//AD
//	static	UINT08 old_key[4];		//AD
//B0003 <---

	static	UINT08 now_key[5];
	static	UINT08 old_key[5];

	static UINT08 key_fixed;

	static UINT08 chat_count;
	static UINT08 chat_f;

//	UINT08 ctmp;

//	old_key0 = now_key0;		//慜夞偺僉乕忬懺傪曐懚
//	old_key1 = now_key1;		//
//	old_key2 = now_key2;		//
//	old_key3 = now_key3;		//
//	old_key4 = now_key4;		//
//	old_key5 = now_key5;		//
	
	//慜夞偺僉乕忬懺傪曐懚	//
//B0003	for(gu08_i=0; gu08_i<6; gu08_i++)
//	for(gu08_i=0; gu08_i<4; gu08_i++)		//B0003		//AD
	for(gu08_i=0; gu08_i<5; gu08_i++)		//B0003		//AP
	{
		old_key[gu08_i]=now_key[gu08_i];
	}



	//20041207 HOLD峫椂斉丅
	//嘆 Wrem偼HOLD偐偗側偄丅
//	now_key4 = DrvKEY_GetkeyNumber( CPU_ADC_ADR5 );
//	now_key4 = DrvKEY_GetkeyNumberWrem( CPU_ADC_ADR5 );
//B0002	now_key[4] = DrvKEY_GetkeyNumberWrem( CPU_ADC_ADR5 );

//YTC000 徣ROM
//	if(now_key[4]==6)
//	{	//倂rem偺GND儗儀儖偼Nokey埖偄丅BIOS儗儀儖偱檰偹傞丅
//		now_key[4]=0;
//	}


//	if(now_key4==6)
//	{	//倂rem偺GND儗儀儖偼Nokey埖偄丅BIOS儗儀儖偱檰偹傞丅
//		now_key4=0;
//	}

/* B0003 --->
#if	LCD_DM	// SDC 20050214
	if(gu08_sts_HOLDSW==0)	//HOLDon
	{	//HOLD	//noKEY傪愊傓
		//嘇HOLD on帪偺張棟丅Wrem埲奜傪Nokey偵丅
//		now_key0=now_key1=now_key2=now_key3=now_key4=now_key5=0;	//偙偺曽偑彫偝偄丅Areg=0偑堦夞偩偗偱嵪傓丅
//		now_key0=now_key1=now_key2=now_key3=now_key5=0;	//偙偺曽偑彫偝偄丅Areg=0偑堦夞偩偗偱嵪傓丅
		now_key[0]=now_key[1]=now_key[2]=now_key[3]=now_key[5]=0;	//偙偺曽偑彫偝偄丅Areg=0偑堦夞偩偗偱嵪傓丅
	}
	else
#endif
	{	//HOLD off
		//嘊尰嵼偺僉乕忬懺傪庢摼
		//A/D傕偺丅
		now_key[1] = DrvKEY_GetkeyNumber( CPU_ADC_ADR2 );
		now_key[2] = DrvKEY_GetkeyNumber( CPU_ADC_ADR3 );
		now_key[3] = DrvKEY_GetkeyNumber( CPU_ADC_ADR4 );
		now_key[5] = DrvKEY_GetkeyNumber( CPU_ADC_ADR6 );

		//PLAY/STOP2/(TU_ON)僠僃僢僋
		now_key[0]=0;
//		if( ( CPU_SIOF_PIODR & piTU_ON ) == 0 )	{now_key[0]= 4;}	//僠儏乕僫乕晅偒嶌傞恖乣丅傛傠偟偔偅丅
		if( ( CPU_SIOF_PIODR & piCHA_ON ) == 0 ){now_key[0] = 5;}
		if( ( CPU_SIOF_PIODR & piPLAY ) == 0 ){	now_key[0] = 6;}
	}
*/
		now_key[0] = gu08_RCR_Key;
		now_key[1] = DrvKEY_GetkeyNumber( CPU_ADC_ADR2 );
		now_key[2] = DrvKEY_GetkeyNumber( CPU_ADC_ADR3 );
		now_key[3] = DrvKEY_GetkeyNumber( CPU_ADC_ADR4 );	
		now_key[4] = DrvKEY_GetkeyNumber( CPU_ADC_ADR5 );			//Ap
// B0003 <---

	switch ( keyscan_scc )
	{
		case 0:				//婲摦捈屻
			if( CPU_ADC_CR & B00100000 )
			{					//帺摦弰夞偑堦弰偟偨側傜偽僉乕僗僉儍儞奐巒
				chat_count = 1;
				keyscan_scc = 1;
			}
			break;
		case 1:				//慡僉乕僆僼懸偪
//      if((now_key0 == 0) && (now_key1 == 0) && (now_key2 == 0) && (now_key3 == 0)){   //慡僉乕僆僼
//			if( ( now_key0 == 0 ) && ( now_key1 == 0 ) && ( now_key2 == 0 ) && ( now_key3 == 0 ) && ( now_key4 == 0 )&& ( now_key5 == 0 ) )
//B0003			if( ( now_key[0] == 0 ) && ( now_key[1] == 0 ) && ( now_key[2] == 0 ) && ( now_key[3] == 0 ) && ( now_key[4] == 0 )&& ( now_key[5] == 0 ) )
//			if( ( now_key[0] == 0 ) && ( now_key[1] == 0 ) && ( now_key[2] == 0 ) && ( now_key[3] == 0 ) ) 	//B0002		//AD
			if( ( now_key[0] == 0 ) && ( now_key[1] == 0 ) && ( now_key[2] == 0 ) && ( now_key[3] == 0 ) &&(now_key[4]==0)) 	//B0002		//Ap
			{	//慡僉乕僆僼
				if( --chat_count == 0 )
				{	//ALL off 妋掕
					keyscan_scc = 2;
					chat_f = B00000000;

					//FF,FR摿庩張棟丅 0.5SEC埲撪偵棧偝傟偨傜丄SKIP偡傞偟偔傒
					switch ( key_fixed )
					{
						case KEY_FF:
							if( gu08_timer_KeyRepeat != 0 )
							{	//0.5sec埲撪丒丒丒SKIP敪峴
								DrvKEY_SaveKey( KEY_FF_SKIP);
							}
							break;
						case KEY_FR:
							if( gu08_timer_KeyRepeat != 0 )
							{	//0.5sec埲撪丒丒丒SKIP敪峴
								DrvKEY_SaveKey( KEY_FR_SKIP);
							}
							break;

						case KEY_FF_SEARCH:
						case KEY_FR_SEARCH:
//B0002 --->
//							DrvKEY_SaveKey( KEY_SEARCH_RELEASE);
							if( gu08_now_mode == 2 )
							{
								DrvKEY_SaveKey( key_fixed+3);
							}
							else
							{
								DrvKEY_SaveKey( KEY_SEARCH_RELEASE );	
							}
//B0002 <---
							break;			
					}
				}
			}
			else
			{					//傑偩墴偝傟偰傞
				switch ( key_fixed )
				{
					case KEY_FF:
						if( gu08_timer_KeyRepeat == 0 )
						{		//0.5sec宱夁丒丒丒
							DrvKEY_SaveKey( KEY_FF_SEARCH );
							key_fixed = KEY_FF_SEARCH;	// FF,FR挿墴偟妋掕丅僒乕僠偵擖傞摍
//YTC00C 20050115			gu08_timer_KeyRepeat = ( 300 / 2 );	//(300/2);  //師夞偐傜俁侽侽倣俽
							gu08_timer_KeyRepeat = ( CONST_EVR_KEY_REPEAT );	//YTC00C 20050115
						}
						break;
					case KEY_FR:
						if( gu08_timer_KeyRepeat == 0 )
						{		//0.5sec宱夁丒丒丒
							DrvKEY_SaveKey( KEY_FR_SEARCH );
							key_fixed = KEY_FR_SEARCH;	// FF,FR挿墴偟妋掕丅僒乕僠偵擖傞摍
//YTC00C 20050115			gu08_timer_KeyRepeat = ( 300 / 2 );	//(300/2);  //師夞偐傜俁侽侽倣俽
							gu08_timer_KeyRepeat = ( CONST_EVR_KEY_REPEAT );	//YTC00C 20050115

						}
						break;
					case KEY_PRESET_UP:									//B0004
					case KEY_PRESET_DN:									//B0004
						if( gu08_now_mode != 2)						//B0004
							break;										//B0004
						if( gu08_timer_KeyRepeat == 0 )
						{		//0.3sec偝傜偵宱夁
							DrvKEY_SaveKey( key_fixed );
							gu08_timer_KeyRepeat = ( 400/10 );	//師夞偐傜XXX倣俽 *.h偱掕媊偡傞
						}
						break;

					case KEY_FF_SEARCH:
					case KEY_FR_SEARCH:
						if( gu08_timer_KeyRepeat == 0 )
						{		//0.3sec偝傜偵宱夁
							DrvKEY_SaveKey( key_fixed );
							gu08_timer_KeyRepeat = ( CONST_FFFR_KEY_REPEAT );	//師夞偐傜XXX倣俽 *.h偱掕媊偡傞
						}
						break;
					case KEY_UP:
					case KEY_DOWN:
						if( gu08_timer_KeyRepeat == 0 )
						{		//0.3sec偝傜偵宱夁
							DrvKEY_SaveKey( key_fixed );
							gu08_timer_KeyRepeat = ( CONST_EVR_KEY_REPEAT );	//師夞偐傜XXX倣俽 *.h偱掕媊偡傞
						}
						break;
				}
				chat_count = 1;
			}
			break;

		case 2:				//僉乕擖椡懸偪
//B0003			for(gu08_i=0; gu08_i < 6; gu08_i++)
//			for(gu08_i=0; gu08_i < 4; gu08_i++)								//B0003		//AD
			for(gu08_i=0; gu08_i < 5; gu08_i++)								//B0003		//Ap
			{
				if(( chat_f  == 0xff ) ||(chat_f == gu08_i))
				{	//懠俠俫偵僠儍僞庢傝拞偺僉乕偑柍偄||偙偺俠俫偑僠儍僞庢傝拞側傜偽
					switch(DrvKEY_CheckOn( now_key[gu08_i], old_key[gu08_i] ))
					{
						case	KEY_CHATTER:
							chat_f = gu08_i;
						break;

						case	KEY_ON:
/* B0002 --->
#if	!LCD_DM	// SDC 20050214
						  if( !gu08_sts_HOLDSW )
								DrvLCD_Hold_On();
						  else
						  {
#endif
*/
//B0002 <---
							if( gu08_i == 0 )
								DrvKEY_SaveKey( gu08_RCR_Key );
							else
							DrvKEY_SaveKey((6 * gu08_i) + now_key[gu08_i] );
							keyscan_scc = 1;
							
/* B0002 --->
#if	!LCD_DM	// SDC 20050214
						  }
#endif
B0002 <---
*/
							break;
					
						default:	//off
							chat_f = 0xff;
							break;
					}
				}
			}

			if( keyscan_scc == 1 )
			{					//僉乕墴偝傟偨側傜偽丒丒丒  僆僼懸偪僔乕働儞僗傊
				chat_count = 1;	//YTC007 20050107

				gu08_timer_KeyRepeat = CONST_FFFR_KEY_1ST;
				key_fixed = gu08_KeyBuffer;	//
			}
			break;
		default:
			keyscan_scc = 0;	//朶憱杊巭嶔
			break;
	}

	return;
}


/*----------------------------------------------------------------------------*/
/*	[NAME]     :DrvKEY_GetkeyNumber											  */
/*	[FUNCTION] :															  */
/*	[RETURN]   :UINT08  													  */
/*	[PARAMETER]:UINT08 u08_key_now											  */
/*	           :UINT08 u08_key_old											  */
/*	[HISTORY]  :															  */
/*	[NOTE]     :															  */
/*----------------------------------------------------------------------------*/
UINT08 DrvKEY_GetkeyNumber( UINT08 ad_value )
{

//UINT08	i;

//	for(gu08_i=0; gu08_i<6; gu08_i++)
//	{
//		if(ADKEY_SLESH[gu08_i] < ad_value) break;
//	}
//	return(gu08_i);

//#if 0
	if( ad_value > 0xC0 )
	{
		return 0;
	}							// off
	else if( ad_value > 0xA0 )
	{
		return 1;
	}							// 1
	else if( ad_value > 0x80 )
	{
		return 2;
	}							// 2
	else if( ad_value > 0x60 )
	{
		return 3;
	}							// 3
	else if( ad_value > 0x40 )
	{
		return 4;
	}							// 4
	else if( ad_value > 0x20 )
	{
		return 5;
	}							// 5
	else
	{
		return 6;
	}							// 6
//#endif

}


/*------------------------------------*/
UINT08 DrvKEY_GetkeyAlm1( UINT08 ad_value )			//alm1 slide sw value
{
	
	if( ad_value > 0xC0 )
	{
		return 31;
	}							// off
	else if( ad_value > 0xA0 )
	{
		return 32;
	}							// 32
	else if( ad_value > 0x80 )
	{
		return 33;
	}							// on
	else if( ad_value > 0x60 )
	{
		return 34;
	}							// 34
	else if( ad_value > 0x40 )
	{
		return 35;
	}							// 35
	else if( ad_value > 0x20 )
	{
		return 36;
	}							// 36
	else
	{
		return 37;
	}							// set
//#endif	

}

/*------------------------------------------*/
UINT08 DrvKEY_GetkeyAlm2( UINT08 ad6_value )			//alm1 slide sw value
{
	
	if( ad6_value > 0xC0 )
	{
		return 38;
	}							// off
	else if( ad6_value > 0xA0 )
	{
		return 39;
	}							// 32
	else if( ad6_value > 0x80 )
	{
		return 40;
	}							// on
	else if( ad6_value > 0x60 )
	{
		return 41;
	}							// 34
	else if( ad6_value > 0x40 )
	{
		return 42;
	}							// 35
	else if( ad6_value > 0x20 )
	{
		return 43;
	}							// 36
	else
	{
		return 44;
	}							// set
//#endif	

}

/* B0002 --->
//YTC000 徣ROM
UINT08 DrvKEY_GetkeyNumberWrem( UINT08 ad_value )
{
//UINT08	i;
	
	for(gu08_i=0; gu08_i<6; gu08_i++)
	{
		if(ADKEY_SLESH_WIRE[gu08_i] < ad_value) 
		return(gu08_i);
	}
	return(0);	// "6"傪"0"偵偡傞丅

⌨️ 快捷键说明

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