|
九齊IC實現(xiàn)按鍵長按電機工作,一分鐘內(nèi)按鍵松手就關(guān)閉電機,一分鐘后按鍵不松手也關(guān)閉電機。以下是我的代碼,目前沒法實現(xiàn)定時一分鐘電機關(guān)閉這個步驟,大佬們幫忙看下是哪里問題?定時器為啥沒起作用?
void main(void)
{
Timer1_INIT();
while(1)
{
KEY1_INIT();
MOOE_OUT();
}
}
void isr(void) __interrupt(0)
{
if(INTFbits.T1IF)
{
LED_H2++;
if(LED_H2>=4000) //1S
{
cnt_timer++;
if(cnt_timer>=60)
{
flag=1; //1分鐘定時標(biāo)志位
cnt_timer=0;
}
LED_H2=0;
}
INTF = (unsigned char)~(C_INT_TMR1); // Clear T1IF flag
}
if(INTFbits.PABIF) // 外部狀態(tài)變化中斷
{
INTFbits.PABIF = 0; // 清中斷標(biāo)志位
}
}
void KEY1_INIT(void) //按鍵長按判斷
{
if(K1){K1_SDA=0;K1_H1=0;K1_CON=0;LED_fflag=0;}
if(K2){K1_cnt=0;}
if(K1==0)
{
K1_SDA=1;
K1_H1++;
if(K1_H1>30){K1_NUM=2;}
if(K1_H1>=1000){K1_NUM=1;K1_CON=1;}
}
if(K1_NUM==1 && K1_CON)
{
K1_H1=1000;
MOOE=1;
LED_fflag=1;
K1_cnt=0;
K1_NUM=0;
K1_CON=1;
}
}
void Timer1_INIT(void) //定時器1配置
{
TMRH = 0;
TMR1 = 250;
T1CR1 = 0x02;
T1CR2 = C_TMR1_ClkSrc_Inst | C_PS1_Div4;
INTE = C_INT_TMR1 | C_INT_TMR0;
}
void MOOE_OUT(void)
{
if(MOOE==0){M1=0;L1=L2=1;}
if(MOOE==1)
{
if(K1==0 && K2==0 && let_power==0) //let_power是電壓的判斷無需理會
{
CLRWDT();
M1=1; //打開電機
LED1=L1;LED2=L2; //亮燈判斷
if(LED_fflag==1)
{
T1CR1=0x03; //開啟定時器1
LED_H2=0; //計數(shù)器清零
if(flag==1)
{
T1CR1=0X02; //關(guān)閉定時器1
// POWER=0;
M1=0; //關(guān)閉電機
MOOE=0;
L1=L2=1; //滅燈
flag=0;
}
LED_fflag=0;
}
}
else
{
M1=0;
T1CR1=0X02;
L1=L2=1;
MOOE=0;
}
}
}
|
|