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

📄 timer.c

📁 dz3000_51.0.0.4.rar
💻 C
📖 第 1 页 / 共 3 页
字号:
								  }
							 }
						}
				   }
			  }
	
		//Joe@2003.3.5 11:20 add begin
			  Key_Column1 = 0;
			  Key_Column2 = 0;	  //Scan Preview/Playback key, Flash key
			  //Joe@2003.3.7 13:41 add begin
			  Key_Column3 = 1;
			  //Joe@2003.3.7 13:41 add end
	
			  TIMER0_GetGPIOByte(25,&temp_key);
	
			  temp_key &= 0x1e;
	
			  if ((temp_key == 0x04) && (pressing_key == K_ReleaseKey))   //Check Preview/Playback Key
			  {
				   if (key != temp_key)
				   {
						key = temp_key;
						return;
				   }
				   else
				   {
						pressing_key = K_ModeKey;
						old_key = key;
						return;
				   }
			  }
			  else
			  {
				   if ((temp_key == 0x02) && (pressing_key == K_ReleaseKey))	//Check Flash Key
				   {
						if (key != temp_key)
						{
							 key = temp_key;
							 return;
						}
						else
						{
							 pressing_key = K_FlashKey;
							 old_key = key;
							 return;
						}
				   }
			  }
		//Joe@2003.3.5 11:20 add end
		 }
	
		 //Check if all 8 keys are released
		 if (pressing_key > K_ReleaseKey)
		 {
			  if (pressing_key <= 0x08) 	//Check Display,Menu,Snap1,Snap2
			  {
				   Key_Column1 = 1;
				   Key_Column2 = 0;
				   //Joe@2003.3.7 13:42 add begin
				   Key_Column3 = 0;
				   //Joe@2003.3.7 13:42 add end
	
				   TIMER0_GetGPIOByte(25,&temp_key);
				   temp_key &= 0x1e;
	
				   if (temp_key == 0x00)
				   {
						if (key != temp_key)
						{
							 key = temp_key;
							 return;
						}
						else
						{
							 pressing_key = K_ReleaseKey;
							 old_key = key;
							 return;
						}
				   }
			  }
			  //Joe@2003.3.5 12:45 modify begin
			  //else //pressing_key >= 0x10,Check Left,Up,Right,Down
			  else if (pressing_key <= 0x80)	//Check Left,Up,Right,Down
			  //Joe@2003.3.5 12:45 modify end
			  {
				   Key_Column1 = 0;
				   Key_Column2 = 1;
				   //Joe@2003.3.7 13:42 add begin
				   Key_Column3 = 0;
				   //Joe@2003.3.7 13:42 add end
	
				   TIMER0_GetGPIOByte(25,&temp_key);
				   temp_key &= 0x1e;
	
				   if (temp_key == 0x00)
				   {
						if (key != temp_key)
						{
							 key = temp_key;
							 return;
						}
						else
						{
							 pressing_key = K_ReleaseKey;
							 old_key = key;
							 return;
						}
				   }
			  }
	
			  //Joe@2003.3.5 12:46 add begin
			  else if (pressing_key > 0x80) //Check Preview/Playback,Flash
			  {
				   Key_Column1 = 0;
				   Key_Column2 = 0;
				   //Joe@2003.3.7 13:42 add begin
				   Key_Column3 = 1;
				   //Joe@2003.3.7 13:42 add end
	
				   TIMER0_GetGPIOByte(25,&temp_key);
				   temp_key &= 0x1e;
	
				   if (temp_key == 0x00)
				   {
						if (key != temp_key)
						{
							 key = temp_key;
							 return;
						}
						else
						{
							 pressing_key = K_ReleaseKey;
							 old_key = key;
							 return;
						}
				   }
			  }
			  //Joe@2003.3.5 12:46 add end
		 }
     #endif
	}
//=============================================================================
//TIMER0_Get_Hardware_Keypad2
//=============================================================================
//ada@0415 test ui
UCHAR TIMER0_Get_Hardware_Keypad2(void) USING_2
{
		 UCHAR tt;	// XiaoAo add at 2005.03.21
		 UCHAR temp_key;
		 UCHAR keymode = 0;
		 TIMER0_GetGPIOBit(28,&temp_key);	
		 if (temp_key == 0x10)
		 {
			  //DelayBase(100);
			  for (tt=0; tt<100; tt++);	// XiaoAo modify at 2005.03.21
			  TIMER0_GetGPIOBit(28,&temp_key);
	
			  if (temp_key == 0x10)
			  {
				   keymode |= 0x01;
			  }
		 }

		 TIMER0_GetGPIOBit(27,&temp_key);	
		 if (temp_key == 0x08)
		 {
			  //DelayBase(100);
			  for (tt=0; tt<100; tt++);	// XiaoAo modify at 2005.03.21
			  TIMER0_GetGPIOBit(27,&temp_key);
	
			  if (temp_key == 0x08)
			  {
				   keymode |= 0x02;
			  }
		 }
	
		 TIMER0_GetGPIOBit(26,&temp_key);
	
		 if (temp_key == 0x04)
		 {
			  //DelayBase(100);
			  for (tt=0; tt<100; tt++);	// XiaoAo modify at 2005.03.21
			  TIMER0_GetGPIOBit(26,&temp_key);
	
			  if (temp_key == 0x04)
			  {
				   keymode |= 0x04;
			  }
		 }
	
		 TIMER0_GetGPIOBit(25,&temp_key);
	
		 if (temp_key == 0x02)
		 {
			  //DelayBase(100);
			  for (tt=0; tt<100; tt++);	// XiaoAo modify at 2005.03.21
			  TIMER0_GetGPIOBit(25,&temp_key);
	
			  if (temp_key == 0x02)
			  {
				   keymode |= 0x08;
			  }
		 }
		 //wendy
		 //Davis:patch5.0.0.5_2005/Jul/19
		 //增加gpio35检测第五种模式选择
		TIMER0_GetGPIOBit(35,&temp_key);
		 if (temp_key /*== 0x01*/)
		 {
			  for (tt=0; tt<100; tt++);
			  TIMER0_GetGPIOBit(35,&temp_key);
			  if (temp_key /*== 0x01*/)
			  {
				   keymode |= 0x10;
			  }
		 }
			 //wendy

		 switch (keymode)
		 {
/*			  case 0x00:
				   return K_RotarySwitchMode0;		//mode 0
	*/			
			  case 0x01:
				  old_Audeokey=0;//wendy
				   return K_RotarySwitchMode0;		//mode 1
	
			  case 0x02:
				  old_Audeokey=0;//wendy
				   return K_RotarySwitchMode1;		//mode 2
	
			  case 0x04:
				  old_Audeokey=0;//wendy
				   return K_RotarySwitchMode2;		//mode 3
	
			  case 0x08:
				  old_Audeokey=0;//wendy
				   return K_RotarySwitchMode3;		//mode 4 
				   /*	//Davis:patch5.0.0.5_2005/Jul/19 close
			 case 0x00:
				if(old_Audeokey==10)//wendy
	 			return K_RotarySwitchMode4;
				
				else//mode 5
				old_Audeokey++;
				return K_RotateSwitchUnknownMode;	//unknown mode
				//*/
			//Davis:patch5.0.0.5_2005/Jul/19 当检测到GPIO35,进入第五种模式
			case 0x10:	
				old_Audeokey=0;
				return K_RotarySwitchMode4;
	/*
			  case 0x09:
				   return K_RotarySwitchMode6;		//mode 6
	
			  case 0x0c:
				   return K_RotarySwitchMode7;		//mode 7
				   */
	
			  default:
				   return K_RotateSwitchUnknownMode;   //unknown mode
		 }
	}


//-----------------------------------------------------------------------------
//TIMER0_GetGPIOBit
//-----------------------------------------------------------------------------
//ada@0415 test ui
UCHAR TIMER0_GetGPIOBit(UCHAR Index, PUCHAR GPIOBitValPt) USING_2
{
  UCHAR BitNum;
  USHORT Addr;
  UCHAR tmp0, tmp1;
  UCHAR status = 0x00;

  BitNum = Index&0x07;
  Addr = 0x2040|(USHORT)(Index>>3);
  tmp0 = XBYTE[Addr];
  tmp1 = 0x01<<BitNum;
  *GPIOBitValPt = tmp0&tmp1;

  return status;
}

//-----------------------------------------------------------------------------
//TIMER0_SetGPIOBit
//-----------------------------------------------------------------------------
//ada@0515
void TIMER0_SetGPIOBit(UCHAR Index, UCHAR Value) USING_2
{
     UCHAR BitNum;
     USHORT Addr;
     UCHAR tmp0, tmp1;

     BitNum = Index & 0x07;
     Addr = 0x2030 | (USHORT)(Index >> 3);
     tmp0 = XBYTE[Addr];
     tmp1 = 0x01 << BitNum;

     if (Value)
     {
         XBYTE[Addr] = tmp0 | tmp1;
     }
     else
     {
         XBYTE[Addr] = tmp0 & (~tmp1);
     }
}

//-----------------------------------------------------------------------------
//TIMER0_GetGPIOByte
//-----------------------------------------------------------------------------
//ada@0415 test ui
UCHAR TIMER0_GetGPIOByte (UCHAR Index, UCHAR *GPIOByteValPt) USING_2
{
  USHORT Addr;
  UCHAR status = 0x00;

  Addr = 0x2040|(USHORT)(Index>>3);
  *GPIOByteValPt = XBYTE[Addr];

  return status;
}

//patch4.4@ada@MP3 begin

//Joe@2003.2.28 9:28 mask begin
//#if (MP3_OPTION)
//Joe@2003.2.28 9:29 mask end
//---------------------------------------------------------------------------------------------------------------------------------------
//DELAY_10us
//---------------------------------------------------------------------------------------------------------------------------------------
void DELAY_10us(void) USING_0
{
#pragma asm
     MOV     R6,#010
DELAY_10us_1:                        	;10 * 6 * (4 / 24M) s = 10 us
     NOP                             	;1 Instr. Cycles
     NOP                             	;1 Instr. Cycles
     NOP                             	;1 Instr. Cycles
     DJNZ    R6,DELAY_10us_1		     ;3 Instr. Cycles
#pragma endasm
}

//---------------------------------------------------------------------------------------------------------------------------------------
//DELAY_1ms
//---------------------------------------------------------------------------------------------------------------------------------------
void DELAY_1ms(void) USING_0
{
#pragma asm
	MOV	R5,#010
DELAY_1ms_1:
     MOV     R6,#100
DELAY_1ms_2:                        	;100 * 6 * (4 / 24M) s = 100 us
     NOP                             	;1 Instr. Cycles
     NOP                             	;1 Instr. Cycles
     NOP                             	;1 Instr. Cycles
     DJNZ    R6,DELAY_1ms_2		     ;3 Instr. Cycles
     DJNZ    R5,DELAY_1ms_1		     ;3 Instr. Cycles
#pragma endasm
}
//Joe@2003.2.28 9:29 mask begin
//#endif
//Joe@2003.2.28 9:29 mask end
//patch4.4@ada@MP3 end

//patch4.4@ada@FOSD begin
//---------------------------------------------------------------------------------------------------------------------------------------
//DELAY_1s
//---------------------------------------------------------------------------------------------------------------------------------------
void DELAY_1s(void) USING_0
{
#pragma asm
	MOV	R4,#100
DELAY_1s_1:
	MOV	R5,#100
DELAY_1s_2:
     MOV     R6,#100
DELAY_1s_3:                        	;100 * 6 * (4 / 24M) s = 100 us
     NOP                             	;1 Instr. Cycles
     NOP                             	;1 Instr. Cycles
     NOP                             	;1 Instr. Cycles
     DJNZ    R6,DELAY_1s_3 	      	;3 Instr. Cycles
     DJNZ    R5,DELAY_1s_2 	      	;3 Instr. Cycles
     DJNZ    R4,DELAY_1s_1 	      	;3 Instr. Cycles
#pragma endasm
}
//patch4.4@ada@FOSD end

//-----------------------------------------------------------------------------
//                               TIMER1
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
//TIMER1
//-----------------------------------------------------------------------------
void TIMER1_Routine(void) INTERRUPT_3 USING_3
{
        EX0 = 0;
        TIMER1_Handler();     //TIMER1 handler
        EX0 = 1;
}

//-----------------------------------------------------------------------------
//TIMER1_Handler
//-----------------------------------------------------------------------------
void TIMER1_Handler(void) USING_3
{
        TR1 = 0 ;
        TH1 = K_Timer1IntervalHi;
        TL1 = K_Timer1IntervalLo;
        TR1 = 1 ;
}

//-----------------------------------------------------------------------------
//TIMER1_Start
//-----------------------------------------------------------------------------
void TIMER1_Start(void) USING_3
{
        //start timer
        ET1 = 1;                //IE:    TIMER1 interrupt enable
        TR1 = 1;                //TCON:  TIMER1 enable
}

//-----------------------------------------------------------------------------
//TIMER1_Stop
//-----------------------------------------------------------------------------
void TIMER1_Stop(void) USING_3
{
        ET1 = 0;                //IE:    TIMER1 interrupt disable
        TR1 = 0;                //TCON:  TIMER1 disable
}

//Joe@2003.3.5 9:19 add begin
//=============================================================================
//TIMER0_LowPowerCount
//=============================================================================
void TIMER0_LowPowerCount(void) USING_2
{
     #if (K_BATT_SEG_TOTAL >= 1)
	if(G_BatteryStatus == K_BATTERY_STATUS_EMPTY)//wendy@2004/10/3
	{
		 if (G_LowPowerCount < 100)
				 G_LowPowerCount++;
	}
//wendy@2004/10/3
	else{
	     if (LB3){
			 if (G_LowPowerCount > 0)
					 G_LowPowerCount--;
	     }
	     else {
			 if (G_LowPowerCount < 80)
					 G_LowPowerCount++;
	     }
	}
     #endif
     #if (K_BATT_SEG_TOTAL >= 2)
     if (LB2 == 0){
		if (G_MidPowerCount < 50){
          		G_MidPowerCount++;
          		G_LowPowerCount = 0;
		}
     }
     else{
          	G_LowPowerCount = 0;
		if (G_MidPowerCount > 0)
          		G_MidPowerCount--;
     }
     #endif
     #if (K_BATT_SEG_TOTAL >= 3)
     if (LB1 == 0)
     {
		if (G_HighPowerCount < 50)
		{
          		G_HighPowerCount++;
          		G_MidPowerCount = 0;
		}
     }
     else
     {
          	G_MidPowerCount = 0;
		if (G_HighPowerCount > 0)
		{
          		G_HighPowerCount--;
		}
     }
     #endif
}
//Joe@2003.3.5 9:19 add end

//Joe@2003.3.20 9:24 add begin
//---------------------------------------------------------------------------------------------------------------------------------------
//DELAY_100us
//---------------------------------------------------------------------------------------------------------------------------------------
void DELAY_100us(void) USING_0
{
#pragma asm
     MOV     R6,#100
DELAY_100us_1:                        	;100 * 6 * (4 / 24M) s = 100 us
     NOP                             	;1 Instr. Cycles
     NOP                             	;1 Instr. Cycles
     NOP                             	;1 Instr. Cycles
     DJNZ    R6,DELAY_100us_1		     ;3 Instr. Cycles
#pragma endasm
}

//---------------------------------------------------------------------------------------------------------------------------------------
//DELAY_10ms
//---------------------------------------------------------------------------------------------------------------------------------------
void DELAY_10ms(void) USING_0	// XiaoAo modify at 2005.03.21
{
#pragma asm
	MOV	R5,#100
DELAY_10ms_1:
     MOV     R6,#100
DELAY_10ms_2:                        	;100 * 6 * (4 / 24M) s = 100 us
     NOP                             	;1 Instr. Cycles
     NOP                             	;1 Instr. Cycles
     NOP                             	;1 Instr. Cycles
     DJNZ    R6,DELAY_10ms_2		     ;3 Instr. Cycles
     DJNZ    R5,DELAY_10ms_1		     ;3 Instr. Cycles
#pragma endasm
}

//---------------------------------------------------------------------------------------------------------------------------------------
//DELAY_100ms
//---------------------------------------------------------------------------------------------------------------------------------------
void DELAY_100ms(void) USING_0
{
#pragma asm
	MOV	R4,#010
DELAY_100ms_1:
	MOV	R5,#100
DELAY_100ms_2:
     MOV     R6,#100
DELAY_100ms_3:                        	;100 * 6 * (4 / 24M) s = 100 us
     NOP                             	;1 Instr. Cycles
     NOP                             	;1 Instr. Cycles
     NOP                             	;1 Instr. Cycles
     DJNZ    R6,DELAY_100ms_3 	     ;3 Instr. Cycles
     DJNZ    R5,DELAY_100ms_2 	     ;3 Instr. Cycles
     DJNZ    R4,DELAY_100ms_1 	     ;3 Instr. Cycles
#pragma endasm
}
//Joe@2003.3.20 9:24 add end    

⌨️ 快捷键说明

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