|
#include "INT.h"
void INT_Initial(void)
{
INTEDG = 0; //0 下降沿觸發(fā) 1 上升沿觸發(fā)
TRISBbits.TRISB0 = 1; //RB0設(shè)置為輸入
LATBbits.LATB0 = 1; //設(shè)置初始狀態(tài)位高電平 , 為下降沿觸發(fā)中斷做準(zhǔn)備
INTCONbits.GIE = 1; //允許所有中斷
INTCONbits.PEIE = 1; //允許外設(shè)中斷
/*外部中斷初始位*/
INTCONbits.INTE = 1; //允許外部中斷
INTCONbits.INTF = 0; //外部中斷標(biāo)志位清0
/*定時器0中斷初始位*/
INTCONbits.TMR0IE = 1; //允許定時器0溢出中斷
INTCONbits.TMR0IF = 0; //定時器0溢出中斷標(biāo)志位清0
/*定時器1中斷初始位*/
PIE1bits.TMR1IE = 1; //允許定時器1溢出中斷
PIR1bits.TMR1IF = 0; //定時器1溢出中斷標(biāo)志位清0
/*ADC中斷初始位*/
PIE1bits.ADIE = 1; //允許ADC中斷
PIR1bits.ADIF = 0; //ADC中斷標(biāo)志位清0
}
void Get_KeyValue(void)
{
if((timing_s_count2 - key_keep_time) < 1)
{
switch (key_value_buffer){
case 0xFE://S1 K1 RF0
KeyCode = KEY_ENTER;
break;
// case 0xFD://S3 K2 RF1
// KeyCode = KEY_UP;
// break;
case 0xFB://S5 K3 RF2
KeyCode = KEY_LIGHT;
break;
// case 0xF7://S7 K4 RF3
// KeyCode = KEY_DOWN;
// break;
case 0xEF://S2 K5 RF4
KeyCode = KEY_BACK;
break;
case 0xDF://S4 K6 RF5
KeyCode = KEY_FAN;
break;
// case 0xBF://S6 K7 RF6
// KeyCode = KEY_STDBY;
// break;
case 0x7F://S8 K8 RF7
KeyCode = KEY_SETUP;
break;
default:
KeyCode = 0;
break;
}
}
key_action_flag = 0;
}
void Get_key_valve_Long_press(void)
{
if((timing_s_count2 - key_keep_time) > 1)
{
switch (key_value_buffer)
{
case 0xFE:
KeyCode = KEY_SETUP;
break;
case 0xBF://S6 K7 RF6
KeyCode = KEY_STDBY;
break;
default:
key_action_flag_Long_press = 0;
break;
}
key_action_flag_Long_press = 0;
}
}
void Get_key_valve_continuty(void)
{
if(key_action_flag_continuty == 1)
{
switch (PORTF){
case 0xFD://S3 K2 RF1
test_show_num = KEY_UP;
break;
case 0xF7://S7 K4 RF3
test_show_num = KEY_DOWN;
break;
default:
test_show_num = 0;
break;
}
}
}
void interrupt ISR(void)
{
/*定時器0中斷服務(wù)程序段*/
if(TMR0IE & TMR0IF)
{
TMR0 = 0x07;
timing_ms_count1++;
timing_ms_count3++;
if(timing_ms_count1 % 300 == 0 && timing_ms_count1 != 0)
{
if(S16 == 1)
{
S15 = ~S15;
}
if(S11 == 1)
{
S12 = ~S12;
}
if(warning_flag == 1)
{
S1 = ~ S1;
}
}
if(timing_ms_count1 % 500 == 0 && timing_ms_count1 != 0)
{
timing_half_s_count1++;
}
if(timing_ms_count1 % 450 == 0 && timing_ms_count1 != 0)
{
LCD_showFanrun();
}
TMR0IF = 0;
}
/*定時器1中斷服務(wù)程序段*/
if(TMR1IE & TMR1IF)
{
TMR1H = 0xFF;
TMR1L = 0x08;
timing_ms_count2++;
if(timing_ms_count2 % 1000 == 0)
{
/*計時時間處理*/
if(S13 == 1)
{
timing_count_sec_set--;
}
Key_isrelease_time++; //按鍵釋放時間計時
timing_s_count1++; //秒計時器1(未用)
/*系統(tǒng)運(yùn)行時間處理*/
timing_s_count2++;
if(timing_s_count2 % 60 == 0)
{
timing_s_count2 = 0;
sys_time_minute++;
if(sys_time_minute % 30 == 0)
{
sys_time_minute=0;
sys_time_half_hour++; //運(yùn)行半小時計時
if(sys_time_half_hour % 1440 == 0)
{
sys_time_half_hour = 0;
sys_time_month++;//運(yùn)行月份計時
}
}
}
}
if((PORTF != 0xFF) && (key_action_flag == 1))
{
Get_KeyValue();
key_count = 0;
}
if((PORTF != 0xFF) && (key_action_flag_Long_press == 1))
{
Get_key_valve_Long_press();
}
if((PORTF != 0xFF) && (key_action_flag_continuty == 1))
{
Get_key_valve_continuty();
}
if(timing_ms_count2 % 200 == 0)
{
if((test_show_num == KEY_UP) || (test_show_num == KEY_DOWN))
KeyCode = test_show_num;
}
if(PORTF == 0xFF)
{
test_show_num = 0;
key_action_flag_continuty == 0;
}
if((KeyCode == KEY_UP) || (KeyCode == KEY_DOWN))
{
Key_isrelease_time = 0;
}
TMR1IF = 0;
}
/*外部中斷服務(wù)程序段*/
if(INTF == 1)
{
if(PORTF != 0xFF && key_action_flag == 0)
{
key_action_flag = 1;
key_action_flag_Long_press = 1;
key_action_flag_continuty = 1;
key_value_buffer = PORTF;
key_keep_time = timing_s_count2;
}
INTF = 0;
INTE = 0;
TRISBbits.TRISB0 = 0;
LATBbits.LATB0 = 1;
TRISBbits.TRISB0 = 1;
}
/*ADC中斷服務(wù)程序段*/
// if(ADIE & ADIF)
// {
// ADIF = 0;
// }
}
|
|