📄 time_event.c
字号:
#include <sys_parameter.h>
volatile bit Count_direction,sixteenth_flag;
volatile Timer_Parameter_s xdata Sys_Timer;
byte data tick_count3 = 0;
byte data T15s_Count = 0;
unsigned char data real_pulse_high_timer;
unsigned char key_prog_count = 0, key_page_count = 0;
void timer0(void) interrupt 1 using 2
{
if (TH0!=TIMER0_H) TH0=TIMER0_H;
if (TL0!=TIMER0_L) TL0=TIMER0_L;
Timer0_Count++;
/* 15秒计时判断,每15秒清零一次TICK计数 */
if(Timer0_Count >= TIMER_SLOW_JOB)
{
Timer0_Count = 0;
_sys_evt_add_in_interrupt(EVENT_15_SEC);
T15s_Count++;
if(T15s_Count >= OVERLOAD_CHK_TIME) /* 24次15秒计时判断 */
{
T15s_Count=0;
_sys_evt_add_in_interrupt(EVENT_6_MIN);
}
}
/* 16次TICK中断指示1秒(62.5ms*16=1s) */
if(!(Timer0_Count&0x0f))
{
_sys_evt_add_in_interrupt(EVENT_SECOND);
}
_sys_evt_add_in_interrupt(EVENT_SYS_TIMER);
sixteenth_flag=1;
}
void timeint1(void) interrupt 3 using 3
{
static unsigned char *ExtIoState = _drv_led_digit_array;
unsigned char data k;
//检测继电器当前状态
FHASE_OUT=1;
if(!FHASE_OUT)
{
phase_voltage_out = OPEN;
relay_status_count = 0;
}
else
{
if(relay_status_count < 56)
{
relay_status_count++;
}
else
{
phase_voltage_out = CLOSE;
}
}
P0 |= 0x07;
for( k = 0; k < 8; k++ )
{
if( (*ExtIoState) & (0x80>>k) )
LED_A2 = 1;
else
LED_A2 = 0;
HC_CLK = 1;
HC_CLK = 0;
}
P0 &= (0xf8|(ExtIoState - _drv_led_digit_array));
if((++ExtIoState) >= (_drv_led_digit_array + LED_DIGIT_NUM))
{
ExtIoState = _drv_led_digit_array;
}
if(pulse_tally)//90mS
{
tick_count3++;
switch (tick_count3)
{
case 1:
if(Count_direction)
{
JDQ0 = 1;
JDQ1 = 0;
}
else
{
JDQ0 = 0;
JDQ1 = 1;
}
Count_direction=~Count_direction;
break;
case 37:
JDQ0 = 1;
JDQ1 = 1;
break;
case 73:
tick_count3=0;
pulse_tally--;
break;
}
}
if(Pulse_Pin)
{
if(real_pulse_high_timer<4)
{
real_pulse_high_timer++;
if(4 == real_pulse_high_timer)
{
real_pulse_count++;
if(real_pulse_count >= pulse_constant_1_percent)
{
if(pulse_counter<255)
{
pulse_counter++;
pulse_tally++;
}
real_pulse_count = 0;
}
}
}
}
else
{
real_pulse_high_timer=0;
}
//2.5ms
if (TH1 != 0xFC) TH1 = 0xFC;
if (TL1 != 0x18) TL1 = 0x18;
}
uchar key_press_check(uchar AD_addr, uchar *timer,uchar max_timer)
{
EXT_ADR = AD_addr;
if(EXT_DAT < 0x65)
{
if(*timer < 32) //防止计数溢出,最大只计计到200
{
(*timer)++;
}
if( max_timer == *timer) //about 250ms的键盘去抖时间
{
return KEY_PRESS;
}
}
else
{
*timer=0;
}
return KEY_NOT_PRESS;
}
void key_check(void)
{
if(CHG == 0)
{
if( KEY_PRESS == key_press_check(0x0B,&key_page_count,1) )
{
if(0x00 == display_power)
{
epmPowerDisplaySw();
}
if(display_item >= DISP_ITEM_NUMBER)
{
display_item=0;
}
display_step = 0;//显示下一个显示内容
epmDisplayRefresh();
}
if( KEY_PRESS == key_press_check(0x09,&key_prog_count,7) )
{
if(PROG_ENABLE)
{
LAMP_OFF();
Sys_Timer.Prog_enable_Timer =0;
}else
{
Sys_Timer.Prog_enable_Timer = PROG_ENABLE_CONTINUE_TIME;
LAMP_ON();
}
}
CHG = 1;
}
}
void Sys_Tick_Proc(void)
{
//62.5 mS
key_check();
WDI_RESET();
ICCard_Polling();
WDI_RESET();
epmPowerRecord();
}
void Sys_sencond_proc(void)
{
#if 0 //test
//测试代码,用来伪装外部来的电量脉冲
pulse_counter++;
#endif
epmPowerMonitor();
WDI_RESET();
epmDisplayRefresh();
WDI_RESET();
if(Sys_Timer.resume_power_supply_timer)
{
Sys_Timer.resume_power_supply_timer--;
if(0x00 == Sys_Timer.resume_power_supply_timer)
{
resume_power_supply();
}
}
}
void Sys_15_sencond_proc(void)
{
usrPhaseStateChk();
WDI_RESET();
usrPowerAlert();
WDI_RESET();
if(PROG_ENABLE)
{
Sys_Timer.Prog_enable_Timer--;
if(!PROG_ENABLE)
{
LAMP_OFF();
}
}
}
void Sys_6_minute_proc(void)
{
usrPhaseStateRect();
WDI_RESET();
epmQDDLCalculate();
WDI_RESET();
epmZDXLCalculate();
WDI_RESET();
epmOverloadOper();
WDI_RESET();
Reset_Sys();
WDI_RESET();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -