📄 getkey.c
字号:
/*************************************************************/
/***********获取按键程序**************************************/
/*************************************************************/
void GETKEY()
{
key =P2IN;
key &= 0xc0;
if(key==key_pre)
{
key_cnt++;
if(key_cnt>=5)
{
if(key_pre == 0x40) // p2.7口作为开门按键
{
FLAG |=gb_lock;
cardnum = 0x00;
recordbuf = 0x00;
REMARK = 0X03;
STATUS =0X00;
GETSTATUS();
FLAG |= gb_re1302;
FLAG |= gb_buzzer;
buzzer_cycle = 1;
FLAG1 |= gb_wrmsg;
buzzer_cycle = 1;
FLAG2 |= gb_doorval;
}
else if(key_pre == 0x80) //p2.6口作为布防撤防按键
{
FLAG1 &= ~gb_protect;
FLAG |= gb_buzzer;
buzzer_cycle = 1;
RUNBUZZER();
Delay_ms(irdly_cnt * 100);
}
}
}
else
{
key_pre =key;
key_cnt =0;
}
}
/**************************************************/
/*****获取门的状态*********************************/
/**************************************************/
uchar GETDOORCLOSE()
{
door =P1IN;
door &= BIT5;
if(door == door_pre)
{
door_cnt++;
if(door_cnt>=5)
{
if(door == door_close)// 门关返回1
{
return 1;
}
}
}
else
{
door_pre = door;
door_cnt =0;
}
return 0;
}
/**************************************************/
/********获取红外的状态****************************/
/**************************************************/
uchar GETIRCLOSE()
{
ir = P1IN;
ir &= BIT4;
if(ir == ir_pre)
{
ir_cnt++;
if(ir_cnt>=5)
{
if(ir == ir_close)// 红外关返回1
{
return 1;
}
}
}
else
{
ir_pre = ir;
ir_cnt =0;
}
return 0;
}
/**********************************************************/
/*************获取红外和门的状态***************************/
/**********************************************************/
uchar GETIDSTATUS()
{
uchar buf = 0x03;
ir = P1IN;
ir &= 0x30;
if(ir == ir_pre)
{
ir_cnt++;
if(ir_cnt >= iren_cnt)
{
if(ir_close == (ir & BIT4))// 红外关
{
buf &= ~BIT0;
}
if(door_close == (ir & BIT5))//门关
{
buf &= ~BIT1;
}
return buf;
//0 门和红外都是关的
//1 门是开的,红外是关的
//2 门是关的,红外是开的
//3 门和红外都是开的
}
}
else
{
ir_pre = ir;
ir_cnt =0;
}
return 4;
}
/*******************************************************/
/*********************************************************/
/********************************************************/
void msg_predeal()
{
recordbuf = 0x00;
REMARK = 0X05;
ERRORSTATUS();
FLAG |= gb_re1302;
FLAG |= gb_buzzer;
buzzer_cycle = 1;
FLAG1 |= gb_wrmsg;
buzzer_cycle = 1;
}
/**************************************************/
/**********监控红外和门的状态****************************/
/**************************************************/
void GETDOOR()
{
uchar buf;
if(FLAG2 & gb_doorval) // 监测门由于刷卡、遥控、按键开门
{ //后,是否关门了已经。
if(GETDOORCLOSE())// 门关的处理程序
{
FLAG2 &= ~gb_doorval;
}
}
else if(FLAG2 & gb_concon)
{
if(FLAG2 & gb_doornval)//监测门由于监控门和红外的状态
{ //产生报警或门开所引起的记录,门和红外是否已关
if(GETDOORCLOSE())
{
FLAG2 &= ~gb_doornval;
cardnum = 0x03;
msg_predeal();
}
}
else if(FLAG2 & gb_irval)
{
if(GETIRCLOSE())
{
FLAG2 &= ~gb_irval;
cardnum = 0x01;
msg_predeal();
}
}
else if(FLAG2 & gb_concon1)//监测时段内的门和红外状态
{
buf = GETIDSTATUS();
switch(buf)
{
case 2: cardnum = 0x00; FLAG2 |= gb_irval; break;//2 门是关的,红外是开的
case 3: //3 门和红外都是开的
case 1: cardnum = 0x02; FLAG2 |= gb_doornval; break;//1 门是开的,红外是关的
case 0: //0 门和红外都是关的
case 4: goto getdoorend; // 4 程序没有进行完
}
msg_predeal();
}
else //由上位机所进行的监测
{
buf = GETIDSTATUS();
switch(buf)
{
case 2: if(conone & BIT6){cardnum = 0x00; FLAG2 |= gb_irval;} break;//2 门是关的,红外是开的
case 3: //3 门和红外都是开的
case 1: if(conone & BIT7){cardnum = 0x02; FLAG2 |= gb_doornval;} break;//1 门是开的,红外是关的
case 0: //0 门和红外都是关的
case 4: goto getdoorend; // 4 程序没有进行完
}
if((FLAG2 & gb_irval) || (FLAG2 & gb_doornval))
{
msg_predeal();
}
}
}
getdoorend:
return;
}
/********************************************/
/*****获取红外报警状态***********************/
/********************************************/
uchar GETIR()
{
uchar i;
uchar buf;
for(i=0; i<10; i++)
{
buf = P1IN;
}
buf &= 0x30;
if(conone & BIT6)
{
if(buf & 0x10)//红外状态
{
if(conone & BIT2)
{
return 1;
}
}
}
return 0;
}
/*********************************************/
/*********获取门的开关状态********************/
/*********************************************/
uchar GET_DOOR()
{
uchar i;
uchar buf;
for(i=0; i<10; i++)
{
buf = P1IN;
}
buf &= 0x30;
if(buf & 0x20)//门状态
{
if(conone & BIT3)
{
return 1;
}
}
return 0;
}
/********************************************/
/******读取监控状态**************************/
/********************************************/
void jiankong()
{
if(FLAG2 & gb_rejian)
{
FLAG2 &= ~gb_rejian;
uchar buf = 0;
if(conone & BIT7)
{
buf |= BIT2;
}
if(conone & BIT6)
{
buf |= BIT3;
}
if(FLAG & gb_lock)
{
buf |= BIT1;
}
if(GETIR())
{
buf |= BIT0;
}
set_tx();
TX_DATA[7] = '0';
TX_DATA[8] = '0';
TX_DATA[9] = 'C';
TX_DATA[10] = '0';
TX_DATA[11] = '0';
TX_DATA[12] = '4';
TX_DATA[13] = c_hex((buf >> 4) & 0x0f);
TX_DATA[14] = c_hex(buf & 0x0f);
buf = 0;
if(FLAG & gb_lock)
{
buf |= BIT0;
}
if(GETIR())
{
buf |= BIT2;
}
if(GET_DOOR())
{
buf |= BIT3;
}
TX_DATA[15] = c_hex((buf >> 4) & 0x0f);
TX_DATA[16] = c_hex(buf & 0x0f);
jisuanhe(17);
}
}
/******************************************************/
/*************读取控制信息*****************************/
/******************************************************/
void conmsg()
{
if(FLAG2 & gb_conmsg)
{
FLAG2 &= ~gb_conmsg;
set_tx();
TX_DATA[7] = '0';
TX_DATA[8] = '0';
TX_DATA[9] = '6';
TX_DATA[10] = '0';
TX_DATA[11] = '0';
TX_DATA[12] = 'A';
TX_DATA[13] = c_hex((conone >> 4) & 0x0f);
TX_DATA[14] = c_hex(conone & 0x0f);
TX_DATA[15] = c_hex((delay_cnt >> 4) & 0x0f);
TX_DATA[16] = c_hex(delay_cnt & 0x0f);
TX_DATA[17] = c_hex((wait_cnt >> 4) & 0x0f);
TX_DATA[18] = c_hex(wait_cnt & 0x0f);
TX_DATA[19] = c_hex((iren_cnt >> 4) & 0x0f);
TX_DATA[20] = c_hex(iren_cnt & 0x0f);
TX_DATA[21] = '1';
TX_DATA[22] = '0';
jisuanhe(23);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -