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

📄 vfd_portable.c

📁 OSD显示,单片机实现,ICCAVR! 代码风格严谨,为高人所写.我仅为了上传换取资料
💻 C
📖 第 1 页 / 共 2 页
字号:
            PrintOsdMsg(STR_OS_OPEN,REGION1,0,0);
          }   
        }
        else
        {
            if(CDOpened())
              call_ir_func(IRC_EJECT);
        }
    	#endif    
        
    #ifdef TFT_VIDEO_INOUT
    }
    #endif //end #ifdef TFT_VIDEO_INOUT
        
        

#if defined(GBM_PORTABLE_DVD)||defined(SUNPLUS_8202P_DEMOBOARD)     //rbhung for GBM Portable DVD
    #ifdef TFT_VIDEO_INOUT 
    if(!AVin_step)
    #endif //end #ifdef TFT_VIDEO_INOUT 
    {
        #ifdef HOLD_KEY_DETECT    
        temp=regs0->gpio_in[HOLD_GPIO / 16] & (1 << (HOLD_GPIO % 16));  //get (HOLD)
        if(temp)
        	hold_state=1;
        else
        	hold_state=0;		 	
        #endif
        
        temp=regs0->gpio_in[TFT_SW_GPIO / 16] & (1 << (TFT_SW_GPIO % 16));  //get (TFT_SW)
        if(temp)
            regs0->gpio_out[CTR_TFT_GPIO /16]|= (1 << (CTR_TFT_GPIO % 16));
        else
            regs0->gpio_out[CTR_TFT_GPIO /16]&= ~(1 << (CTR_TFT_GPIO % 16));
    }
    	
    temp=regs0->gpio_in[MCU_POWER_DET_GPIO / 16] & (1 << (MCU_POWER_DET_GPIO % 16));  //get gpio41(MCU_POWER_DET)
    if(temp)
    {
    	powerdown_timer=0;
    }
    else
    {
    	powerdown_timer++;
    	if(powerdown_timer>100)
    	{
            regs0->gpio_out[CTR_GLED_GPIO/16]|= (1 << (CTR_GLED_GPIO % 16));      //CTR_GLED->H,GREEN LED OFF
            regs0->gpio_out[DSP_RLED_GPIO/16]&= ~(1 << (DSP_RLED_GPIO % 16));     //DSP_RLED->L,RED LED ON    
	    	call_ir_func(IRC_POWER);
		}
    }	
        	
    	
    temp=regs0->gpio_in[LOWBAT_DET_GPIO / 16] & (1 << (LOWBAT_DET_GPIO % 16));  //get gpio42(LOWBAT_DET)
    if(temp)
    {	
        if(lowbat_timer==0)
			ClearOsdMsg(2);
    	lowbat_timer=1;
        regs0->gpio_out[CTR_GLED_GPIO/16]&= ~(1 << (CTR_GLED_GPIO % 16));     //CTR_GLED->L,GREEN LED ON
        regs0->gpio_out[DSP_RLED_GPIO/16]|= (1 << (DSP_RLED_GPIO % 16));      //DSP_RLED->H,RED LED OFF
    }
    else
    {
    	if(lowbat_timer<100)
    	{
    		PrintOsdMsg(STR_OS_LOWBAT,REGION2,0,0);
    		lowbat_timer++;
            regs0->gpio_out[CTR_GLED_GPIO/16]|= (1 << (CTR_GLED_GPIO % 16));  //CTR_GLED->H,GREEN LED OFF
            regs0->gpio_out[DSP_RLED_GPIO/16]&= ~(1 << (DSP_RLED_GPIO % 16)); //DSP_RLED->L,RED LED GLITTER ON
    	}	
    	else
    	{
    		if((lowbat_timer>=100) & (lowbat_timer<150))
    		{
    			ClearOsdMsg(2);
    			lowbat_timer++;
                regs0->gpio_out[DSP_RLED_GPIO/16]|= (1 << (DSP_RLED_GPIO % 16));  //DSP_RLED->H,RED LED GLITTER OFF
    		}	
    		else	
    			lowbat_timer=0;
    	}	
    }	
#endif //end #ifdef GBM_PORTABLE_DVD
}
#endif
     
#ifdef PDVD_USE_IO_SCAN_KEY
    
#ifdef APEX_PORTABLE_DVD  //liulilifeng add for apex portable dvd eth1007

const BYTE gpio[5]={KEY_A,KEY_B,KEY_C,KEY_D,KEY_E};

void check_portable_key(void)
{
    BYTE i,j,keydata,press_key=0;
    static BYTE keyprev=0;
    #ifdef HOLD_KEY_DETECT
    if(hold_state)
        return;
    #endif

    //GPIO_E_SET (23 , 1 );
    //GPIO_O_SET (23 , 1 );

    for (i=5;i>0;i--)
    {

        for (j=0;j<5;j++)
        {
            if ( j<i )
                GPIO_E_SET( gpio[j] , 0); //set as input port
            else if (j>i)
            {
                GPIO_E_SET( gpio[j] , 1); //set as output port
                GPIO_O_SET( gpio[j] , 1);
            }
            else
            {
                GPIO_E_SET( gpio[j] , 1); //set as output port
                GPIO_O_SET (gpio[j] , 0);
            }

        }
       
        for (j=0;j<i;j++)
        {
            keydata = GPIO_I_GET( gpio[j] );
            if (keydata ==0 )
            {
                press_key =1;
                keydata = i*5 + j;
                if (keyprev != keydata)
                {
                    keyprev = keydata;
                    call_ir_func(vfd_keycode[keydata - 1]);
                    printf ("key %d x,y %d ,%d \n",keydata , i , j );
                }
                
            }
        }
        if (press_key ==1 )
            break ;
    }

    for (j=0;j<5;j++)
    {
        GPIO_E_SET (gpio[j] , 1);
        GPIO_O_SET (gpio[j] , 1);
    }
    
  	if(press_key==0) keyprev=0;
}

#else //#ifdef APEX_PORTABLE_DVD 
   
const BYTE gpio[8]={46,47,48,49,50,51,52,18};
#ifdef USE_COMBINED_KEY
#define LONG_PRESS_KEY_TIME 12  
#endif
    
//#define PORTABLE_IOKEY_DEBUG
        
void check_portable_key(void)
{
#ifdef USE_COMBINED_KEY
    BYTE i,j,keydata;
    static BYTE column_dot = 4;
    static BYTE row_dot = 0;
    static BYTE keyprev = 0;
    static BYTE key_press_times = 0 ;

    #ifdef HOLD_KEY_DETECT
    if(hold_state)
        return;
    #endif
	
    regs0->gpio_oe[3]&= 0xffcf;     //jhuang org 011f
    
    for(i=0;i<4;i++)
    {
        for(j=0;j<4;j++)
          GPIO_O_SET(gpio[j],1);
          
        GPIO_O_SET(gpio[i],0);
    
        for(j=4;j<8;j++)
        {
            keydata=GPIO_I_GET(gpio[j]);
            
            if(keydata == 0)
            {//have key pressing                  
                keydata=i*4+(j-4)+1;
                column_dot = j;
                row_dot = i;
                
                if(keyprev != keydata)
                {//first press key!                         
                    keyprev = keydata;
                    #ifdef PORTABLE_IOKEY_DEBUG
                    printf("%d key press at the first time\n",keydata);
                    #endif
                }
                else 
                {//count the key press times
                    #ifdef D02_9_10INCH
                    if((keydata == 8) || (keydata == 10))
                    #else 
                    if((keydata == 4) || (keydata == 6)
                        #ifdef D02_A_10INCH
                        ||(keydata == 10) || (keydata == 16)
                        #endif
                      )
                    #endif
                    {
                        key_press_times++;
                        #ifdef PORTABLE_IOKEY_DEBUG
                        printf("key press times:---->%d\n",key_press_times);
                        #endif
                    }
                }           
                break;
            }
            else if((j == column_dot) && (i == row_dot) && (keyprev != 0))
            {//key is released
                if(key_press_times >= LONG_PRESS_KEY_TIME)
                {//long press key 
                    #ifdef PORTABLE_IOKEY_DEBUG
                    printf("call long key:%d!press %d times\n",keyprev,key_press_times);
                    #endif  
                 
                    #ifdef D02_9_10INCH
                    if(keyprev == 8)
                    #else
                    if(keyprev == 4)
                    #endif
                    {
                        #ifdef D02_A_10INCH
                        call_ir_func(IRC_LEFT); 
                        #else
                        call_ir_func(IRC_PREV); 
                        #endif
                    }
                    else
                    {
                        #ifdef D02_A_10INCH
                        if(keyprev == 10)
                            call_ir_func(IRC_DOWN);
                        else if (keyprev == 16)
                            call_ir_func(IRC_UP); 
                        else
                            call_ir_func(IRC_RIGHT);
                        #else
                        call_ir_func(IRC_NEXT);
                        #endif
                    }
              }
              else
              {//short key press
                  call_ir_func(vfd_keycode[keyprev - 1]);
                  #ifdef PORTABLE_IOKEY_DEBUG
                  printf("call short key:%d\n",keyprev);
                  #endif
              }
              
              key_press_times = 0;
              keyprev = 0;
              column_dot = 4;
              row_dot = 0;
           } 
        }       
    }
#else
    BYTE i,j,k,keydata,press_key=0;
    static BYTE keyprev=0;
	
    #ifdef HOLD_KEY_DETECT
    if(hold_state)
        return;
    #endif
    
    regs0->gpio_oe[3]&= 0xffcf;     //jhuang org 011f
	
	for(i=0;i<4;i++)
	{
		for(j=0;j<4;j++)
			GPIO_O_SET(gpio[j],1);
	    GPIO_O_SET(gpio[i],0);
	
  		for(k=4;k<8;k++)
  		{  		 
        	keydata=GPIO_I_GET(gpio[k]);
    		if(keydata==0)
    		{    	       	  
    			press_key=1;
    			keydata=i*4+(k-4)+1;    			
    			if(keyprev!=keydata)
    			{    			  			
    			    keyprev=keydata;
    			    call_ir_func(vfd_keycode[keydata - 1]);
    			    printf("key %d SW %d,%d.\n",keydata,i,k-4);
    			}  
    			break;
    		}    		    		
  		}  		
  	}
  	if(press_key==0) keyprev=0;
#endif //end #ifdef USE_COMBINED_KEY

}
#endif//#else //#ifdef APEX_PORTABLE_DVD 
#endif //#ifdef PDVD_USE_IO_SCAN_KEY

⌨️ 快捷键说明

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