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

📄 interrupt.c

📁 凌阳SPDA1000 MP3开发资料
💻 C
字号:
//===========================================================
//   Project Name(项目名称):  SPCA755 rebuild
//   File Name(模块名称): interrupt.c
//   Built Date(创建日期):2004-09-14
//   Abstract(模块描述): 中断功能函数模块
//   Revision History(版本信息):
//   Rev      Date           Author       Comment(修改说明)
//   1.0      2004-09-14      XYQ         created
//================================================================================================
#include "..\userdefine.h"
#include "interrupt.h"
#include "userinit.h"
#include "user.h"
#include "main.h"
//================================================================================================
data U8 gc_KeyValue=0;
data U8 gc_BatteryValue=0xff;
data U8 gc_ADCOldKey=0;
data U8 gc_LongKeyDelay=0;
data U8 gc_LongKeyTimer=0;
data U8 gc_QuarterTimer=0;
data U8 gc_BlinkTimer;
data U8 gc_SysSecondTimer;
//================================================================================================
data U8 gc_SecondTimer;
data U8 gc_minuteTimer;
data U8 gc_basetimerx4;//lyh add
//================================================================================================
#define K_USE_SPCA759_KEYB

//================================================================================================
void UserExtInterrupt() interrupt 0 using 1
{

	INTR_Int0();	
	
}

void User_Timer() interrupt 1 using 2
{//每7.8ms会进行中断一次(into this intterrupt per 7.8ms)
	//该函数用户不能删除,否则定时器会不准确
	

	TIMER0_Routine();//the function must call here(该函数在此必须调用,该函数为设置定时器初值)

	gc_QuarterTimer = (gc_QuarterTimer >= 3)?0:gc_QuarterTimer+1;

	switch(gc_QuarterTimer)
	{
		case 0:
			if (gc_SysSecondTimer)
			{
				gc_SysSecondTimer--;
			}else{
				gc_SysSecondTimer = SECONDTIMER_VALUE;
			}
			break;
		case 1:			
	
			gc_BatteryValue = USER_READSAR(2);  //read SAR output
			
			if (USB_PlugDetect())
    		{
     			gc_BatteryValue = 0xff;
    		}

			if (gc_BlinkTimer)gc_BlinkTimer--;

			if (gc_LongKeyTimer) gc_LongKeyTimer++;			
			break; 
		case 2:
			if (!gc_KeyValue)
			{//if oldevent haven't been deal with, not to get new keyValue
			 
				if (1)
				{
					data U8 tc_ADCCurrentKey;
	
					tc_ADCCurrentKey = USER_READSAR(0);  //read SAR output
					
			#if 0
				#ifdef K_USE_SPCA759_KEYB
					if (tc_ADCCurrentKey>240) tc_ADCCurrentKey=0;
					else if(tc_ADCCurrentKey>171) tc_ADCCurrentKey=1;
					else if(tc_ADCCurrentKey>149) tc_ADCCurrentKey=2;
					else if(tc_ADCCurrentKey>124) tc_ADCCurrentKey=3;
					else if(tc_ADCCurrentKey>96) tc_ADCCurrentKey=4;
					else if(tc_ADCCurrentKey>66) tc_ADCCurrentKey=5;
					else if(tc_ADCCurrentKey>36) tc_ADCCurrentKey=6;
					else if(tc_ADCCurrentKey>11) tc_ADCCurrentKey=7;
					else tc_ADCCurrentKey = 8;
				/*	if (tc_ADCCurrentKey>240) tc_ADCCurrentKey=0;
					else if(tc_ADCCurrentKey>217) tc_ADCCurrentKey=1;
					else if(tc_ADCCurrentKey>182) tc_ADCCurrentKey=2;
					else if(tc_ADCCurrentKey>139) tc_ADCCurrentKey=3;
					else if(tc_ADCCurrentKey>104) tc_ADCCurrentKey=4;
					else if(tc_ADCCurrentKey>75) tc_ADCCurrentKey=5;
					else if(tc_ADCCurrentKey>41) tc_ADCCurrentKey=6;
					else if(tc_ADCCurrentKey>14) tc_ADCCurrentKey=7;
					else tc_ADCCurrentKey = 8;*/
				#else
					if (tc_ADCCurrentKey>240) tc_ADCCurrentKey=0;
					else if(tc_ADCCurrentKey>220) tc_ADCCurrentKey=1;
					else if(tc_ADCCurrentKey>202) tc_ADCCurrentKey=2;
					else if(tc_ADCCurrentKey>181) tc_ADCCurrentKey=3;
					else if(tc_ADCCurrentKey>147) tc_ADCCurrentKey=4;
					else if(tc_ADCCurrentKey>105) tc_ADCCurrentKey=5;
					else if(tc_ADCCurrentKey>61) tc_ADCCurrentKey=6;
					else if(tc_ADCCurrentKey>20) tc_ADCCurrentKey=7;
					else tc_ADCCurrentKey = 8;
				#endif
			#else//MoonBox key value V2.0

					if (tc_ADCCurrentKey>240) tc_ADCCurrentKey=0;
					else if(tc_ADCCurrentKey>217) tc_ADCCurrentKey=7;
					else if(tc_ADCCurrentKey>182) tc_ADCCurrentKey=8;
					else if(tc_ADCCurrentKey>139) tc_ADCCurrentKey=5; 
					else if(tc_ADCCurrentKey>104) tc_ADCCurrentKey=4; //VOL+
					else if(tc_ADCCurrentKey>75) tc_ADCCurrentKey=6;  //MODE
					else if(tc_ADCCurrentKey>41) tc_ADCCurrentKey=2;  //LAST
					else if(tc_ADCCurrentKey>14) tc_ADCCurrentKey=1;  //NEXT
					else tc_ADCCurrentKey = 3;                        //PLAY
/*
					if (tc_ADCCurrentKey>240) tc_ADCCurrentKey=0;					
					else if(tc_ADCCurrentKey>210) tc_ADCCurrentKey=1;
					else if(tc_ADCCurrentKey>180) tc_ADCCurrentKey=2;
					else if(tc_ADCCurrentKey>140) tc_ADCCurrentKey=3;
					else if(tc_ADCCurrentKey>96) tc_ADCCurrentKey=4;
					else if(tc_ADCCurrentKey>66) tc_ADCCurrentKey=5;
					else if(tc_ADCCurrentKey>36) tc_ADCCurrentKey=6;
					else if(tc_ADCCurrentKey>11) tc_ADCCurrentKey=7;
					else tc_ADCCurrentKey = 8;*/
			#endif
				
				
					if ((gc_ADCOldKey & 0x0f) == tc_ADCCurrentKey)
					{//按键未释放
						if (tc_ADCCurrentKey != KEY_NONEKEY)
						{
							if (gc_LongKeyTimer > gc_LongKeyDelay)
							{
								gc_ADCOldKey = gc_ADCOldKey | 0x10;		//长按键
								gc_KeyValue = gc_ADCOldKey & 0x7f;
								gc_LongKeyTimer = REPEATKEY_DELAYVALUE;	//设置重复按键延时起始值
								gc_LongKeyDelay = (gc_LongKeyDelay < MIN_REPEATKEYDELAY)?MIN_REPEATKEYDELAY:gc_LongKeyDelay-3;	//加速重复按键
							}
							else
							{
								gc_ADCOldKey |= 0x80; 
							}
						}
					}
					else if (tc_ADCCurrentKey == KEY_NONEKEY){//按键释放
						if ((gc_ADCOldKey & 0x90) == 0x80)
						{
							gc_KeyValue = gc_ADCOldKey & 0x7f;		//获取短按键值
						}else if ((gc_ADCOldKey & 0x90) == 0x90){
							gc_KeyValue = (gc_ADCOldKey | 0x20) & 0x7f;//key value will be 0x3x
						}
						gc_ADCOldKey = KEY_NONEKEY;
						gc_LongKeyTimer = 0;			//关闭按键计时器
						gc_LongKeyDelay = 0;			//复位重复按键延时值
					}
					else{//有键按下
						gc_ADCOldKey = tc_ADCCurrentKey;
						gc_LongKeyTimer = 1;			//触发按键计时器
						if (!gc_LongKeyDelay) gc_LongKeyDelay = MAX_REPEATKEYDELAY;  //若外部未初始化重复按键延时初始值则默认初始化
					}
				}else{
					gc_ADCOldKey = KEY_NONEKEY;
				}
			}			
			break;
		case 3:
			gc_SecondTimer--;
			if (!gc_SecondTimer)
			{
				gc_SecondTimer = SECONDTIMER_VALUE;
				if(gw_PowerOffTimer)
				{
                   // printf("gw_PowerOffTimer =%x \n",gw_PowerOffTimer); 
					gw_PowerOffTimer--;//lizhn modify      
				}
		
				if(gc_Busy_Timer)
				{
					gc_Busy_Timer--;//lyh add 		
				}         
		        if(gc_FileNameRollTimer)
				{
					gc_FileNameRollTimer--;//lyh add    0.125s 
				}
			 	if (gc_minuteTimer)
				{
					gc_minuteTimer--;
				}else{
					gc_minuteTimer = MINUTETIMER_VALUE;
				}
		    }
		    gb_UIEvent=TRUE;//lyh add
		    gc_basetimerx4--;//lyh add
		    if(!gc_basetimerx4)
		    {
		       gc_basetimerx4=BASETIMERX4_VALUE;
			   /*
		       if(gc_Busy_Timer)gc_Busy_Timer--;//lyh add           0.125s  
		       if(gc_FileNameRollTimer)gc_FileNameRollTimer--;//lyh add    0.125s*/ 
		       if(gc_Battery_Detect_Timer)gc_Battery_Detect_Timer--;//lyh add 0.125s
		    }	
		    break;
	}
	
}

⌨️ 快捷键说明

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