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

📄 keyproc.c

📁 philip RTC 芯片的驱动程序 8563
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "reg52.h"
#include "intrins.h"
#include "globedef.h"
#include "keyproc.h"
#include "delay.h"
#include "m62429.h"
#include "keydef.h"
#include "i2c.h"
#include "Lcd.h "

unsigned char h,m;
unsigned char adj_counter;
unsigned char clock_flag;
unsigned char source_select_bak;
extern	unsigned char	hour;	 
extern	unsigned char	minute;

unsigned char ff_key_flag;
unsigned char fb_key_flag;

extern	unsigned char sector_erase(unsigned int sector_addr);
extern	unsigned char byte_program(unsigned int byte_addr, unsigned char original_data);
extern	unsigned char byte_read(unsigned int byte_addr);

code BYTE POWER_ON_TBL[] = {0x05, 0x02, 0x0, 0x0, 0x0, 0x02, 0xF7};
code BYTE POWER_OFF_TBL[] ={0x05, 0x02, 0x0, 0x0, 0x0, 0x04, 0xF5};
code BYTE PLAYPAUSE_TBL[] ={0x03, 0x02, 0x0, 0x01,0xFA};
code BYTE KeyBound_TBL[] = {0x03, 0x02, 0x0, 0x0, 0xFB};

code BYTE NEXT_KEY_TBL[] ={0x03, 0x02, 0x0, 0x08,0xF3};
code BYTE PREVIOUS_KEY_TBL[] ={0x03, 0x02, 0x0, 0x10,0xEB};
code BYTE FF_KEY_TBL[] ={0x05, 0x02, 0x0, 0x0, 0x0, 0x10, 0xE9};
code BYTE FB_KEY_TBL[] ={0x05, 0x02, 0x0, 0x0, 0x0, 0x20, 0xD9};

code BYTE IR_KEY_TBL[] =
{
	NO_KEY, NO_KEY, NO_KEY, NO_KEY, NO_KEY, NO_KEY, NO_KEY, CLOCK_KEY, NO_KEY, NO_KEY,
	VOLUME_UP_KEY, NEXT_KEY, NO_KEY, NO_KEY, VOLUME_DOWN_KEY, PLAYPAUSE_KEY, NO_KEY, NO_KEY, NO_KEY, IPOD_OFF_KEY,
	NO_KEY, NO_KEY, NO_KEY, POWER_KEY, NO_KEY, NO_KEY, NO_KEY, PREVIOUS_KEY, NO_KEY, NO_KEY,
	NO_KEY, KEY_MUTE, NO_KEY, NO_KEY, NO_KEY, NO_KEY, NO_KEY, NO_KEY, NO_KEY, NO_KEY, 
	NO_KEY, NO_KEY,	NO_KEY, NO_KEY, NO_KEY, NO_KEY, NO_KEY, NO_KEY, NO_KEY, NO_KEY,
	NO_KEY, NO_KEY,	NO_KEY, NO_KEY, NO_KEY, NO_KEY, NO_KEY, NO_KEY, NO_KEY, NO_KEY, 
	NO_KEY, NO_KEY,	NO_KEY, NO_KEY, NO_KEY, NO_KEY, NO_KEY, NO_KEY, NO_KEY, NO_KEY,
	NO_KEY, NO_KEY,	NO_KEY, NO_KEY, NO_KEY, NO_KEY, NO_KEY, NO_KEY, NO_KEY, NO_KEY,
	NO_KEY, NO_KEY,	NO_KEY, NO_KEY, NO_KEY, NO_KEY, NO_KEY, NO_KEY, NO_KEY, NO_KEY,
	NO_KEY, NO_KEY,	Source_Select
};

void KEY_Proc(void)
{	
	unsigned char Send_Count;
	if((Panel_KeyAct == 1 ) || (IR_KeyAct == 1))
	{	
		if(IR_KeyAct == 1 )
		{
			Current_Key  =  IR_KEY_TBL[Remote_Key];
			IR_KeyAct = 0;
		}
		else if(Panel_KeyAct == 1)
		{
			Current_Key = Panel_Key;
			Panel_KeyAct = 0;
		}		
		if(Current_Key == POWER_KEY)
		{
			Need_Button_up = 0;
			Power_Proc();
		}
		else if(POWER_Status == 1)
		{			
			Need_Button_up = 0;
			switch(Current_Key)
			{
				case VOLUME_UP_KEY:	
					//调整音量时解除静音
//					MUTE_DETECT1 = 1;
                    MUTE_DETECT2 = 1;//写1准备读
				    if((AV_MUTE == 1)&&(MUTE_DETECT2 != 0)/*&&(MUTE_DETECT1 != 0)*/)
  				    {
				    AV_MUTE = 0;		
					mute_flag =(unsigned char)AV_MUTE;				
					display_mute(lcd_unmute);
				    }
					else{
					if(Current_Volume < Volume_Max)
					 {
					 	Current_Volume++;	
				//		DelayX1ms(200);//improve esd				
						Volume_Tune(Current_Volume);
						Volume_Need_Record = 1;					
						//显示音量进度条
						switch(Current_Volume / 5)
						{
							case 0:									
							break;
							case 1:
							display_1bar();
							break;
							case 2:
							display_2bar();
							break;
							case 3:
							display_3bar();
							break;
							case 4:
							display_4bar();
							break;
							case 5:
							display_5bar();
							break;
							case 6:
							display_6bar();
							break;
							case 7:
							display_7bar();
							break;
							case 8:
							display_8bar();
							break;
							case 9:
							display_9bar();
							break;
							case 10:
							display_10bar();
							break;
							
							default:
							break;
						}		
						//显示音量数码值						
						display_68(Current_Volume % 10 );
						display_58(Current_Volume / 10);						
					 }
					 }
					 break;
				case VOLUME_DOWN_KEY:
					//调整音量时解除静音
//					 MUTE_DETECT1 = 1;
                     MUTE_DETECT2 = 1;//写1准备读
					 if((AV_MUTE == 1)&&(MUTE_DETECT2 != 0)/*&&(MUTE_DETECT1 != 0)*/)
					{
					AV_MUTE = 0;		
					mute_flag =(unsigned char)AV_MUTE;				
					display_mute(lcd_unmute);
					}
					else{
					 if(Current_Volume > Volume_Min)
					 {
					 	Volume_Need_Record = 1;
					  	Current_Volume--;
					//	DelayX1ms(200);//improve esd
						Volume_Tune(Current_Volume);
						//显示音量进度条
						switch(Current_Volume / 5)
						{
							case 0:
							display_0bar();							
							break;
							case 1:
							display_1bar();
							break;
							case 2:
							display_2bar();
							break;
							case 3:
							display_3bar();
							break;
							case 4:
							display_4bar();
							break;
							case 5:
							display_5bar();
							break;
							case 6:
							display_6bar();
							break;
							case 7:
							display_7bar();
							break;
							case 8:
							display_8bar();
							break;
							case 9:
							display_9bar();
							break;
							case 10:
							display_10bar();
							break;
							
							default:
							break;
						}
						//显示音量数码值				
					
						display_68(Current_Volume % 10 );
						display_58(Current_Volume / 10);								
					}	
				    }
					break;

				case KEY_MUTE:
						
						AV_MUTE = ~AV_MUTE;		
						mute_flag =(unsigned char)AV_MUTE;
						if(AV_MUTE == 1)
				    	display_mute(lcd_mute);
						else
						display_mute(lcd_unmute);			
					break;	
			
				case Source_Select:					 
					Channel_Select++;
					
					if (Channel_Select >= 3)					   
						Channel_Select = 0;	 				    
					if (Channel_Select == 0)
					{						
						Volume_Tune(0);	
				        DelayX1ms(255);

						C4052_A = 1;
						C4052_B = 0;
						
						display_aux2();	//显示	
						P1_6 = 0;
						P3_3 = 1;
						P1_7 = 1;
					}
					else if (Channel_Select == 1)
					{						
						Volume_Tune(0);	
						DelayX1ms(255);

						C4052_A = 0;
						C4052_B = 1;
						
						display_main();//显示		
                        P3_3 = 0;
						P1_6 = 1;
						P1_7 = 1;
	
					}
					else if (Channel_Select == 2)
					{						
						Volume_Tune(0);	
						DelayX1ms(255);

						C4052_A = 1;
						C4052_B = 1;
						display_aux1();//显示	
						P1_7 = 0;
						P1_6 = 1;
 					    P3_3 = 1;
					}
					Volume_Tune(Current_Volume);	
				    break;						
				case IPOD_OFF_KEY:	
				if (Channel_Select == 1)		 	
					{
						Keypointer = POWER_OFF_TBL;
				 		SendKeyToiPod(); 
					}
				 break;	
			
				case PLAYPAUSE_KEY:	
				if (Channel_Select == 1)
	 			{
					Keypointer = PLAYPAUSE_TBL;
				 	SendKeyToiPod();	
				}
				 break;

				case PREVIOUS_KEY:	
				if (Channel_Select == 1)
				{
                    if(fb_key_flag == 1)
					{
						Need_Button_up = 1;
					 	for(Send_Count = 0; Send_Count < 3; Send_Count++)
					 	{
						 	Keypointer = PREVIOUS_KEY_TBL;
						 	SendKeyToiPod();
					 	}	
						fb_key_flag = 0;
					}
					else
					{
					 	Keypointer = PREVIOUS_KEY_TBL;
					 	SendKeyToiPod();
					}
				}
					 break;

				case NEXT_KEY:	
				if (Channel_Select == 1)
				{	if(ff_key_flag == 1)
					{
						Need_Button_up = 1;
					 	for(Send_Count = 0; Send_Count < 3; Send_Count++)
					 	{
					 		Keypointer = NEXT_KEY_TBL;
					 		SendKeyToiPod();
					 	}	
					    ff_key_flag = 0;
					}
					else
					{			 	
						Keypointer = NEXT_KEY_TBL;
					 	SendKeyToiPod();
					}
				}
					 break;
			/*	case FF_KEY:
	
				if (Channel_Select == 1)
				{ 
				 	Need_Button_up = 1;
				 	for(Send_Count = 0; Send_Count < 3; Send_Count++)
				 	{
				 		Keypointer = NEXT_KEY_TBL;
				 		SendKeyToiPod();
				 	}	
				}
					 break;
              
				case FB_KEY:
				if (Channel_Select == 1)
				{	
				 	Need_Button_up = 1;
				 	for(Send_Count = 0; Send_Count < 3; Send_Count++)
				 	{
					 	Keypointer = PREVIOUS_KEY_TBL;
					 	SendKeyToiPod();
				 	}
				}
					 break;
				*/
				case BUTTON_UP_KEY:	
				if (Channel_Select == 1)
	 		    {
				 	Keypointer = KeyBound_TBL;
					SendKeyToiPod();
					Need_Button_up = 0;
				}
					 break;
				default:
					 break;
			}
		}		
		//add ir clock			
		else if(POWER_Status == 0)
		{
			if(Current_Key == CLOCK_KEY)
			{	
				clock_flag = 1;				
				h = hour;
				m = minute;		
			}
			while(clock_flag)				
			{	/*						
				minute = get_pcf8563(0x03) & 0x7f;//分
				minute = (minute >> 4) * 10 + (minute & 0x0f);
				hour = get_pcf8563(0x04) & 0x3f;//时
				hour = (hour >> 4) * 10 + (hour & 0x0f);
			    if(hour >= 13)		//12小时制调整	
				hour = hour - 12;
				if(hour == 0)	
				hour = 12;
				h = hour;
				m = minute;					
				*/
 
				//set_pcf8563(0x02,0); //清零秒,()					
			    //对时闪烁
				if((flash_counter > 0 ) && (flash_counter < 280))
				{
			        display_18(h / 10);			
			        display_28(h % 10);	
				    display_38(m / 10);			

⌨️ 快捷键说明

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