Example #1
0
/*
*********************************************************************************************************
*	函 数 名: SysTick_ISR
*	功能说明: SysTick中断服务程序,每隔1ms进入1次
*	形    参:无
*	返 回 值: 无
*********************************************************************************************************
*/
void SysTick_ISR(void)
{
	static uint8_t s_count = 0;
	uint8_t i;

	for (i = 0; i < TMR_COUNT; i++)
	{
		bsp_SoftTimerDec(&g_Tmr[i]);
	}

	if (++s_count >= 10)
	{
		s_count = 0;

		g_iRunTime++;	/* 全局运行时间每10ms增1 */	
		if (g_iRunTime == 0x7FFFFFFF)
		{
			g_iRunTime = 0;
		}

		/* 
			下面的代码实现所有按键的检测。按键检测每隔10ms一次就行了,一般做40ms的滤波处理就可以
			有效过滤掉机械动作造成的按键抖动。
		*/
		bsp_KeyPro();		/* 该函数在 bsp_button.c 中实现 */
	}
}
Example #2
0
void SysTick_ISR(void)
{
	static uint8_t s_count = 0;
	static uint16_t	one_second = 0;
	uint8_t i;

	/* 每隔1ms进来1次 (仅用于 bsp_DelayMS) */
	if (s_uiDelayCount > 0)
	{
		if (--s_uiDelayCount == 0)
		{
			s_ucTimeOutFlag = 1;
		}
	}

	/* 每隔1ms,对软件定时器的计数器进行减一操作 */
	for (i = 0; i < TMR_COUNT; i++)
	{
		bsp_SoftTimerDec(&s_tTmr[i]);
	}

	/* 全局运行时间每1ms增1 */
	g_iRunTime++;
	if (g_iRunTime == 0x7FFFFFFF)	/* 这个变量是 int32_t 类型,最大数为 0x7FFFFFFF */
	{
		g_iRunTime = 0;
	}

	bsp_RunPer1ms();		/* 每隔1ms调用一次此函数,此函数在 bsp.c */

	if (++s_count >= 10)
	{
		s_count = 0;

		bsp_RunPer10ms();	/* 每隔10ms调用一次此函数,此函数在 bsp.c */
	}
	if(++one_second >= 1000)
	{
			bsp_RunPer1s();
	}
}
Example #3
0
//extern void bsp_RunPer1ms(void);
//extern void bsp_RunPer10ms(void);
void TIM3_IRQHandler(void)
{
	static uint8_t s_count = 0;
	uint8_t i;
	
	if(TIM_GetITStatus(TIM3,TIM_IT_Update)!=RESET)
	{
		TIM_ClearITPendingBit(TIM3,TIM_IT_Update);  

		/* 每隔1ms进来1次 (仅用于 bsp_DelayMS) */
		if (s_uiDelayCount > 0)
		{
			if (--s_uiDelayCount == 0)
			{
				s_ucTimeOutFlag = 1;
			}
		}
	
		/* 每隔1ms,对软件定时器的计数器进行减一操作 */
		for (i = 0; i < TMR_COUNT; i++)
		{
			bsp_SoftTimerDec(&s_tTmr[i]);
		}
	
		/* 全局运行时间每1ms增1 */
		g_iRunTime++;
		if (g_iRunTime == 0x7FFFFFFF)	/* 这个变量是 int32_t 类型,最大数为 0x7FFFFFFF */
		{
			g_iRunTime = 0;
		}
	
//			bsp_RunPer1ms();		/* 每隔1ms调用一次此函数,此函数在 bsp.c */
	
		/* 全局运行时间每10ms增1 */
		if (++s_count >= 10)		
		{
			s_count = 0;
			g_iRunTime10ms++;
			if (g_iRunTime10ms == 0x7FFFFFFF)	/* 这个变量是 int32_t 类型,最大数为 0x7FFFFFFF */
			{
					g_iRunTime10ms = 0;
			} 
			//bsp_RunPer10ms();	/* 每隔10ms调用一次此函数,此函数在 bsp.c */
					
			switch(beep_status)
			{
				case BEEP_STATUS_BEEP:
				{
					beep_cnt++;
					if(beep_cnt>=beep_comp)
					{
						beep_off();
						beep_status=BEEP_STATUS_MUTE; 
					}	 
					break;
				}	
				case BEEP_STATUS_MUTE:
				{
					beep_cnt++;
					if(beep_cnt>=mute_comp)
					{
						beep_cnt=0;
						if(beep_time>1)
						{
							beep_time--; 	
							beep_status=BEEP_STATUS_BEEP;
							beep_on();
						}	
						else
						{
							beep_status=BEEP_STATUS_IDLE; 
						}	
					}	 
					break;
				}	
				case BEEP_STATUS_IDLE:
				{ 
					break;
				}
				default:
				{
					beep_off();
					beep_status=BEEP_STATUS_IDLE; 
					break;
				}	
			}
		}

	}	  
}