break;
case 6:
if((1==KEY_IN1)&&(1==KEY_IN2))
{
key_step++;
key_lock1 = 0;
delay_cnt1 = 0;
}
else if((0==KEY_IN1)&&(1==KEY_IN2)&&(0==key_lock1))
{
++delay_cnt1;
if(delay_cnt1>CNT_DELAY_CNT1)
{
delay_cnt1 = 0;
key_lock1 = 1;
key_sec = 3;// 触发 3 号按键
}
}
else if((1==KEY_IN1)&&(0==KEY_IN2)&&(0==key_lock1))
{
++delay_cnt1;
if(delay_cnt1>CNT_DELAY_CNT1)
{
delay_cnt1 = 0;
key_lock1 = 1;
key_sec = 4;// 触发 4 号按键
}
}
break;
}
if(key_step>6)// 判断,第一组与第二组按键反复轮流扫描
{
key_step = 1;
}
}
void key_service(void)
{
switch(key_sec)
{
case 1:// 1 号按键
relay_status_clear();// 把relay_status清零
relay_status_set_1();// 把relay_status对应的第一个继电器启动
relay_drive();// 把relay_status的状态通过595驱动出来
buzzer_time_cnt = CNT_BUZZER_TIME;
key_sec = 0;// 处理完相应按键程序后,把按键选择变量清零,避免一直触发
break;
case 2: // 2 号按键
relay_status_clear();// 把relay_status清零
relay_status_set_2();// 把relay_status对应的第一个继电器启动
relay_drive();// 把relay_status的状态通过595驱动出来
buzzer_time_cnt = CNT_BUZZER_TIME;
key_sec = 0;
break;
case 3:// 3 号按键
relay_status_clear();// 把relay_status清零
relay_status_set_3();// 把relay_status对应的第一个继电器启动
relay_drive();// 把relay_status的状态通过595驱动出来
buzzer_time_cnt = CNT_BUZZER_TIME;
key_sec = 0;
break;
case 4:// 4 号按键
relay_status_clear();// 把relay_status清零
relay_status_set_4();// 把relay_status对应的第一个继电器启动
relay_drive();// 把relay_status的状态通过595驱动出来
buzzer_time_cnt = CNT_BUZZER_TIME;
key_sec = 0;
break;
}
}
void relay_status_clear(void)
{
relay_status = 0;
}
void relay_status_set_1(void)
{
relay_status |= 0x0001;
}
void relay_status_set_2(void)
{
relay_status |= 0x0002;
}
void relay_status_set_3(void)
{
relay_status |= 0x0004;
}
void relay_status_set_4(void)
{
relay_status |= 0x0008;
}
void relay_drive(void)
{
u8 tempdata = 0;
//u16 relay_status_temp = 0;
HC595_SCK_OUT = 0;
HC595_RCK_OUT = 0;
//relay_status_temp = relay_status;
for(tempdata=0; tempdata<16; tempdata++)
{
if(relay_status & 0x8000)
{
HC595_SI_OUT = 1;
}
else
{
HC595_SI_OUT = 0;
}
HC595_SCK_OUT = 0;
_nop_();
_nop_();
HC595_SCK_OUT = 1;
_nop_();
_nop_();
relay_status <= 1;
}
HC595_RCK_OUT = 0;
_nop_();
_nop_();
HC595_RCK_OUT = 1;
_nop_();
_nop_();
HC595_SCK_OUT = 0;// 拉低,增强抗干扰
HC595_RCK_OUT = 0;
HC595_SI_OUT = 0;
}
void delay(void)
{
u8 t = 0;
for(t=0; t<0x0F; t++)
{;}
}