www.pudn.com > M26(2M).rar > TimerSvr.c, change:2016-01-20,size:4606b


/*************************************************************************************************** 
	* Copyright (c) 2013, Biox 
	* All rights reserved. 
	* 文件名称: TA0Svr.c 
	* 摘 要:    23XX中断处理函数 
	* 当前版本: V1.0, 易建, 2013-10-21 
	* 更改记录: 
***************************************************************************************************/ 
#include "Includes.h" 
 
/************************************** 宏定义使用定义及说明 **************************************/ 
#define     N100_MS                     2 
#define     ONE_SECOND                  10 
#define     ONE_MINUTE			        60 
#define     ONE_HOUR			        60 
#define     ONE_DAY			            24 
 
 
 
/************************************** 变量使用定义及说明 ****************************************/ 
u8  TA0_100msCount; 
u8  TA0_Count; 
 
struct time 
{ 
    u8 Hour; 
    u8 Minute; 
    u8 Second; 
}; 
struct time TimeCount;                               //时间计数器 
 
u16  KeyDelayCount = 0;								    		//按键持续时间计数 
u8   KeyCode;									    		    //按键值 
u8   KeyCodeBuff;									    		//按键值备份 
u8   KeyDealDone;									    		//按键值备份 
u8   KeyPressed;									    		//按键被按下标识 
 
 
/************************************* 函数使用定义及说明 *****************************************/ 
void KeyHandler(void);                                          //按键处理 
void SampData(void); 
void CheckData(void); 
 
/*************************************************************************************************** 
 * 函 数 名: Timer1_A0_ISR 
 * 功能描述: 定时器A0中断处理函数 
 * 函数说明: 主要用于时钟单元刷新,按键识别 
 * 输  入: 无 
 * 返  回: 无 
***************************************************************************************************/ 
#pragma vector = TIMERA1_VECTOR 
__interrupt void Timer0_A0_ISR (void) 
{ 
    if (TAIV == 0x0A) 
    { 
        TA0_Count++; 
        //P2OUT ^=  BIT3; 
        if (TA0_Count == N100_MS) 
        { 
            TA0_Count = 0; 
            P1OUT ^= BIT6; 
            TA0_100msCount++; 
            if (TA0_100msCount == ONE_SECOND)					        //100ms计数 
            { 
                TA0_100msCount = 0; 
                TimeCount.Second++; 
                if (TimeCount.Second == ONE_MINUTE)					    //分计数 
                { 
                    TimeCount.Second = 0; 
                    TimeCount.Minute++; 
                    if (TimeCount.Minute == ONE_HOUR)				    //时计数 
                    { 
                        TimeCount.Minute = 0; 
                        TimeCount.Hour++; 
                    } 
                } 
                if (g_u16OverTimeCnt) 
                    g_u16OverTimeCnt--; 
            } 
        } 
        KeyHandler(); 
    } 
} 
 
/*************************************************************************************************** 
 * 函 数 名: TimerInit 
 * 功能描述: 计时初始化 
 * 函数说明: 无 
 * 输  入: 无 
 * 返  回: 无 
***************************************************************************************************/ 
void TimerAInit(void) 
{ 
    TimeCount.Hour = 0; 
    TimeCount.Minute = 0; 
    TimeCount.Second = 0; 
    TA0_100msCount = 0; 
    TA0_Count = 0; 
    //TA0_Init(TIMER_FREQUENCY);                                  //时基定时器 
} 
 
/*************************************************************************************************** 
 * 函 数 名: KeyHandler 
 * 功能描述: 按键处理,松手有效,及用户事件等特殊操作 
 * 函数说明: 处理后的按键值保存在KeyCode, KeyPressed表示有按键信息,要求至少每10ms执行一次 
 * 输  入: 无 
 * 返  回: 无 
***************************************************************************************************/ 
void KeyHandler(void) 
{ 
    u8 KeyTemp; 
    KeyTemp = P1IN; 
    KeyTemp = ~KeyTemp; 
    KeyTemp = (KeyTemp & 0x30) >> 4; 
    if (KeyTemp == BIT0) 
        KeyTemp = LEFT_KEY; 
    else if (KeyTemp == BIT1) 
        KeyTemp = OK_KEY; 
    else 
        KeyTemp = NO_KEY; 
     
    if (KeyTemp != NO_KEY) 
    { 
        if (KeyTemp == KeyCodeBuff) 
        { 
            KeyDelayCount++; 
            if (KeyDelayCount > 3) 
            { 
                KeyDelayCount = 0; 
                KeyCode = KeyCodeBuff; 
                KeyPressed = 1; 
                return; 
            } 
        } 
        else 
        { 
            KeyCodeBuff = KeyTemp; 
            KeyDelayCount = 0; 
        } 
    } 
    else 
    { 
        if (KeyDealDone) 
        { 
            KeyDealDone = 0; 
            KeyCodeBuff = 0; 
        } 
        KeyDelayCount = 0; 
    } 
}