📄 zd8212.c
字号:
}
if(lastbit)
{
lastbit = 0;
}
else
{
lastbit = 1;
}
}
flag_head = 1;
TaskCARDEND:
TMR1H = 0XF4;
TMR1L = 0X2F;
return;
}
/*********************************************************************************************************
** Function name : TASKHEAD()
** Descriptions : 获取卡号头信号
** Input : 无
** Output : 无
** Created Date : 2009-02-16
********************************************************************************************************/
void TASKHEAD(void)
{
if(flag_head)
{
uchar i;
uint temp;
flag_head = 0;
err_cnt = 0;
line_num = 0;
vir_num = 0;
CLRWDT();
gethead();
CLRWDT();
if(err_cnt == 0)
{
for(i=0; i<54; i++)
{
switch(vir_num)
{
case 0: rfdecode[i] = decode[line_num].onebit.b0; vir_num++; break;
case 1: rfdecode[i] = decode[line_num].onebit.b1; vir_num++; break;
case 2: rfdecode[i] = decode[line_num].onebit.b2; vir_num++; break;
case 3: rfdecode[i] = decode[line_num].onebit.b3; vir_num++; break;
case 4: rfdecode[i] = decode[line_num].onebit.b4; vir_num++; break;
case 5: rfdecode[i] = decode[line_num].onebit.b5; vir_num++; break;
case 6: rfdecode[i] = decode[line_num].onebit.b6; vir_num++; break;
case 7: rfdecode[i] = decode[line_num].onebit.b7; vir_num = 0; line_num++; break;
}
}
CLRWDT();
for (i=0;i<10;i++)
{
if(!(rfdecode[i*5]^rfdecode[i*5+1]^rfdecode[i*5+2]^rfdecode[i*5+3]==rfdecode[i*5+4]))
{
err_cnt++;
}
}
for (i=0;i<4;i++)
{
if (!(rfdecode[i]^rfdecode[i+5]^rfdecode[i+10]^rfdecode[i+15]^rfdecode[i+20]^rfdecode[i+25]^rfdecode[i+30]^rfdecode[i+35]^rfdecode[i+40]^rfdecode[i+45] == rfdecode[i+50]))
{
err_cnt++;
}
}
if(err_cnt == 0)
{
temp = 20;
for(i=1; i<25; i++)
{
if(temp % 5 == 4)
{
temp++;
}
cardinfo[i] = rfdecode[temp++];
}
CLRWDT();
temp = 0;
for(i=1; i<13; i++)
{
temp += cardinfo[i];
}
if(temp%2)
{
cardinfo[0] = 1;
}
else
{
cardinfo[0] = 0;
}
CLRWDT();
temp = 0;
for(i=13; i<25; i++)
{
temp += cardinfo[i];
}
if(temp%2)
{
cardinfo[25] = 0;
}
else
{
cardinfo[25] = 1;
}
if(flag_card == 0)
{
flag_card = 1;
flag_out = 1;
flag_beep = 1;
buzzer_cycle = 2;
clk_2s = 0;
}
else
{
clk_2s = 0;
}
}
}
}
}
/*********************************************************************************************************
** Function name : TASKIO
** Descriptions : 驱动IO端口
** Input : 无
** Output : 无
** Created Date : 2009-02-16
********************************************************************************************************/
void TASKIO(void)
{
BEEP = beep_buf;
DOOR_I_BUF = DOOR_I;
SW_I_BUF = SW_I;
DOOR_O = DOOR_O_BUF;
MOTOR_F = MOTOR_F_BUF;
MOTOR_R = MOTOR_R_BUF;
L_BUF = L;
WD00 = 1;
WD10 = 1;
}
/*********************************************************************************************************
** Function name : TASK5S
** Descriptions : 门磁判断程序
** Input : 无
** Output : 无
** Created Date : 2009-02-16
********************************************************************************************************/
void TASK5S(void)
{
if(flag_5s)
{
clk_5s_cnt++;
if(clk_5s_cnt > 10)
{
flag_5s = 0;
clk_5s_cnt = 0;
flag_di = 1;
}
}
}
/*********************************************************************************************************
** Function name : TASKDOOR
** Descriptions : 门磁判断程序
** Input : 无
** Output : 无
** Created Date : 2009-02-16
********************************************************************************************************/
void TASKDOOR(void)
{
if(door == DOOR_I_BUF)
{
door_cnt++;
if(door_cnt >= 10)
{
if(door)
{
flag_door = 0;
}
else
{
flag_door = 1;
}
}
}
else
{
CLRWDT();
door = DOOR_I_BUF;
door_cnt =0;
}
if(sw == SW_I_BUF)
{
sw_cnt++;
if(sw_cnt >= 10)
{
if(sw)
{
flag_sw = 0;
}
else
{
flag_sw = 1;
if(flag_open || flag_close)
{
flag_5s = 0;
}
else
{
if(flag_5s == 0)
{
flag_5s = 1;
clk_5s_cnt = 0;
}
}
// open_cnt = 0;
// flag_open = 1;
// flag_sw = 1;
}
}
}
else
{
CLRWDT();
sw = SW_I_BUF;
sw_cnt =0;
}
if(flag_door || flag_sw)
{
DOOR_O_BUF = 0;
}
else
{
DOOR_O_BUF = 1;
}
}
/*********************************************************************************************************
** Function name : TASKL
** Descriptions : 开门判断程序
** Input : 无
** Output : 无
** Created Date : 2009-02-16
********************************************************************************************************/
void TASKL(void)
{
// if(flag_l == 0)
// {
if(l_pre == L_BUF)
{
l_cnt++;
if(l_cnt >= 5)
{
if(l_pre)
{
flag_l = 0;
MOTOR_F_BUF = 0;
MOTOR_R_BUF = 0;
}
else
{
if(flag_l == 0)
{
open_cnt = 0;
MOTOR_F_BUF = 0;
MOTOR_R_BUF = 1;
flag_open = 1;
flag_l = 1;
}
}
}
}
else
{
CLRWDT();
l_pre = L_BUF;
l_cnt =0;
}
// }
}
/*********************************************************************************************************
** Function name : TASKOPEN
** Descriptions : 开门判断程序
** Input : 无
** Output : 无
** Created Date : 2009-02-16
********************************************************************************************************/
void TASKOPEN(void)
{
if(flag_open)
{
open_cnt++;
if(open_cnt <= 10)
{
MOTOR_F_BUF = 0;
MOTOR_R_BUF = 1;
}
else
{
MOTOR_F_BUF = 0;
MOTOR_R_BUF = 0;
}
if(open_cnt >= 40)
{
if(flag_sw)
{
close_cnt = 0;
}
else
{
open_cnt = 0;
}
}
if(open_cnt >= 100)
{
open_cnt = 0;
flag_di = 1;
close_cnt = 0;
flag_open = 0;
}
}
}
/*********************************************************************************************************
** Function name : TASKCLOSE
** Descriptions : 关门判断程序
** Input : 无
** Output : 无
** Created Date : 2009-02-16
********************************************************************************************************/
void TASKCLOSE(void)
{
if(flag_close)
{
close_cnt++;
if(close_cnt <= 20)
{
MOTOR_F_BUF = 1;
MOTOR_R_BUF = 0;
}
else
{
if(flag_sw)
{
close_cnt = 0;
}
else
{
MOTOR_F_BUF = 1;
MOTOR_R_BUF = 1;
close_cnt = 0;
flag_close = 0;
}
}
}
}
/*********************************************************************************************************
** Function name : TASKDI
** Descriptions : 判断门磁信号以确定是否关门
** Input : 无
** Output : 无
** Created Date : 2009-02-16
********************************************************************************************************/
void TASKDI(void)
{
if(flag_di)
{
if(flag_door)
{
MOTOR_F_BUF = 1;
MOTOR_R_BUF = 0;
flag_close = 1;
flag_di = 0;
}
}
}
/*********************************************************************************************************
** Function name : VGOUT
** Descriptions : 韦根输出
** Input : 无
** Output : 无
** Created Date : 2009-02-16
********************************************************************************************************/
void VGOUT(void)
{
uchar i;
CLRWDT();
for(i=0; i<26; i++)
{
CLRWDT();
switch(cardinfo[i])
{
case 0: WD00 = 0; time_dly(4); WD00 = 1; time_dly(4); break;
case 1: WD10 = 0; time_dly(4); WD10 = 1; time_dly(4); break;
}
}
CLRWDT();
}
/*********************************************************************************************************
** Function name : UARTOUT
** Descriptions : 485输出卡号
** Input : 无
** Output : 无
** Created Date : 2009-02-16
********************************************************************************************************/
void UARTOUT(void)
{
char i;
uchar j;
CLRWDT();
for(i=0; i<4; i++)
{
card[i] = 0;
}
CLRWDT();
for(i=0; i<8; i++)
{
card[0] |= cardinfo[i] << i;
}
CLRWDT();
for(i=8; i<16; i++)
{
card[1] |= cardinfo[i] << (i-8);
}
CLRWDT();
for(i=16; i<24; i++)
{
card[2] |= cardinfo[i] << (i-16);
}
CLRWDT();
for(i=24; i<26; i++)
{
card[3] |= cardinfo[i] << (i-24);
}
CLRWDT();
while(TXIF==0);
TX_E();
for(i=0; i<4; i++)
{
CLRWDT();
TXREG = card[i] ;
while(TXIF == 0);
}
RX_E();
}
/*********************************************************************************************************
** Function name : TASKOUT
** Descriptions : 输出卡号
** Input : 无
** Output : 无
** Created Date : 2009-02-16
********************************************************************************************************/
void TASKOUT(void)
{
if(flag_out)
{
flag_out = 0;
if(flag_vg)
{
VGOUT();
}
if(flag_uart)
{
UARTOUT();
}
}
}
/*********************************************************************************************************
** Function name : main
** Descriptions : 主程序
** Input : 无
** Output : 无
** Created Date : 2009-02-16
********************************************************************************************************/
void main(void)
{
GIE = 0;
initial();
WDTCON = 0X0E;
SWDTEN = 1;
GIE = 1;
while(1)
{
CLRWDT();
TASKIO();
if(flag_20ms)
{
flag_20ms = 0;
TASKDI();
TASKDOOR();
TASKL();
}
if(flag_50ms)
{
flag_50ms = 0;
TASKOPEN();
TASKCLOSE();
TASKHEAD();
TaskBEEP();
}
if(flag_100ms)
{
flag_100ms = 0;
TASKOUT();
}
if(flag_500ms)
{
flag_500ms = 0;
TASK5S();
TaskCARD();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -