📄 system.c
字号:
}
}
/*
0123456 78 9012 34567890
~100180 00 0000 FDB6\r
DataBuf[74] = "
0123456789012
~100180000000FDB6\r"
*/
void send_chk(UINT8 n)
{
UINT8 i,j;
TR = 1; //发送状态
DataBuf[0] = '~';
DataBuf[1] = '1';
DataBuf[2] = '0';
DataBuf[3] = rec_buf[2];
DataBuf[4] = rec_buf[3];
DataBuf[5] = '8';
DataBuf[6] = '0';
//DataBuf[7] = '0';
//DataBuf[8] = '0';
i = n;
if(i > 17)
{
j = i - 18;
LTH[3] = j&0x0f;
LTH[2] = (j>>4)&0x0f;
LTH[0] = (0x00 - LTH[2] - LTH[3])&0x0f;
DataBuf[9] = hex_asc(LTH[0]);
DataBuf[10] = 0x30;
DataBuf[11] = hex_asc(LTH[2]);
DataBuf[12] = hex_asc(LTH[3]);
Txsum = 0;
while(--i > 5)
Txsum += DataBuf[n - i];
Txsum = 0x10000 - Txsum;
DataBuf[n - 5] = hex_asc((Txsum >> 12) & 0x000f);
DataBuf[n - 4] = hex_asc((Txsum >> 8) & 0x000f);
DataBuf[n - 3] = hex_asc((Txsum >> 4) & 0x000f);
DataBuf[n - 2] = hex_asc(Txsum & 0x000f);
DataBuf[n - 1] = 0x0D;
uart_send1(DataBuf,n);
}
TR = 0; //接收状态
}
/***********************************************************************************
函数名称:control()
功能描述:控制子程序
参 数:无
***********************************************************************************/
void control(void)
{
UINT8 i,j,l,m;
DataBuf[0] = (DataBuf[0]<<4) + DataBuf[1];
DataBuf[2] = (DataBuf[2]<<4) + DataBuf[3];
if(CID2 == '8')
{
if(DataBuf[0] == 0xF0)
{
if(DataBuf[2] == 0xE0) //权限确认
{
purview_timer = 0x4B0;
purview_flag = 1;
DataBuf[7] = 0x30;
DataBuf[8] = 0x30;
send_chk(18);
}
else if(DataBuf[2] == 0xE1) //取消权限
{
purview_flag = 0;
DataBuf[7] = 0x30;
DataBuf[8] = 0x30;
send_chk(18);
}
else if((purview_flag)&&(DataBuf[2] == 0xE2))//更改密码
{
purview_timer = 0x4B0;
DataBuf[7] = 0x30;
DataBuf[8] = 0x30;
send_chk(18);
}
}
}
else if(CID2 == '9')
{
if(DataBuf[0] == 0xF1)
{
if(DataBuf[2] == 0xE3) //增加一个用户
{
if(user_n == 0)
{
for(i=0;i<16;i++)
user_buf[0].whole[i] = (DataBuf[4 + i*2]<<4) + DataBuf[5 + i*2];
user_n++;
I2C_rcv[0] = user_n;
AT24C128_write(0x00,I2C_rcv,1);
AT24C128_write(0x10,user_buf[0].whole,16);
purview_timer = 0x4B0;
DataBuf[7] = 0x30;
DataBuf[8] = 0x30;
send_chk(18);
}
else if(user_n < 60)
{
for(i=0;i<16;i++)
user_tmp.whole[i] = (DataBuf[4 + i*2]<<4) + DataBuf[5 + i*2];
l = 0;
for(i=0;i<60;i++)
{
if(user_buf[i].class.purview != 0xFF)
{
l++;
m = 0;
for(j=0;j<5;j++)
{
if(user_buf[i].class.card[j] != user_tmp.class.card[j])
{
break;
}
else m++;
}
if(m == 5)
{
purview_timer = 0x4B0;
DataBuf[7] = 0x45;
DataBuf[8] = 0x36;
send_chk(18);
TI = 0;
ES = 1;
return;
}
else
{
m = 0;
for(j=0;j<4;j++)
{
if(user_buf[i].class.ID[j] != user_tmp.class.ID[j])
{
break;
}
else m++;
}
if(m == 4)
{
purview_timer = 0x4B0;
DataBuf[7] = 0x45;
DataBuf[8] = 0x37;
send_chk(18);
TI = 0;
ES = 1;
return;
}
}
}
if(l == user_n)
{
for(i=0;i<60;i++)
{
if(user_buf[i].class.purview == 0xff)
{
user_buf[i] = user_tmp;
user_n++;
I2C_rcv[0] = user_n;
AT24C128_write(0x00,I2C_rcv,1);
AT24C128_write(0x10 + i*16,user_buf[i].whole,16);
purview_timer = 0x4B0;
DataBuf[7] = 0x30;
DataBuf[8] = 0x30;
send_chk(18);
TI = 0;
ES = 1;
return;
}
}
break;
}
}
}
else if(user_n == 60)
{
purview_timer = 0x4B0;
DataBuf[7] = 0x45;
DataBuf[8] = 0x32;
send_chk(18);
}
else if(user_n > 60)
{
user_n = 0;
}
}
else if(DataBuf[2] == 0xE4) //删除用户
{
DataBuf[4] = (DataBuf[4]<<4) + DataBuf[5];
if(DataBuf[4] == 0) //按卡号删除用户
{
if(user_n == 0)
{
purview_timer = 0x4B0;
DataBuf[7] = 0x45;
DataBuf[8] = 0x34;
send_chk(18);
}
else
{
for(i=0;i<5;i++)
user_tmp.class.card[i] = (DataBuf[6 + i*2]<<4) + DataBuf[7 + i*2];
for(i=0;i<60;i++)
{
if(user_buf[i].class.purview != 0xFF)
{
m = 0;
for(j=0;j<5;j++)
{
if(user_tmp.class.card[j] == user_buf[i].class.card[j])
{
m++;
}
else break;
}
if(m == 5)
{
user_n--;
I2C_rcv[0] = user_n;
AT24C128_write(0x00,I2C_rcv,1);
I2C_rcv[0] = 0xFF;
user_buf[i].class.purview = 0xFF;
AT24C128_write(0x1F + i*16,I2C_rcv,1);
purview_timer = 0x4B0;
DataBuf[7] = 0x30;
DataBuf[8] = 0x30;
send_chk(18);
TI = 0;
ES = 1;
return;
}
}
}
purview_timer = 0x4B0;
DataBuf[7] = 0x45;
DataBuf[8] = 0x35;
send_chk(18);
}
}
else if(DataBuf[4] == 1) //按ID删除用户
{
if(user_n == 0)
{
purview_timer = 0x4B0;
DataBuf[7] = 0x45;
DataBuf[8] = 0x34;
send_chk(18);
}
else
{
for(i=0;i<4;i++)
user_tmp.class.ID[i] = (DataBuf[8 + i*2]<<4) + DataBuf[9 + i*2];
for(i=0;i<60;i++)
{
if(user_buf[i].class.purview != 0xFF)
{
m = 0;
for(j=0;j<4;j++)
{
if(user_tmp.class.ID[j] == user_buf[i].class.ID[j])
{
m++;
}
else break;
}
if(m == 4)
{
user_n--;
I2C_rcv[0] = user_n;
AT24C128_write(0x00,I2C_rcv,1);
I2C_rcv[0] = 0xFF;
user_buf[i].class.purview = 0xFF;
AT24C128_write(0x1F + i*16,I2C_rcv,1);
purview_timer = 0x4B0;
DataBuf[7] = 0x30;
DataBuf[8] = 0x30;
send_chk(18);
TI = 0;
ES = 1;
return;
}
}
}
purview_timer = 0x4B0;
DataBuf[7] = 0x45;
DataBuf[8] = 0x35;
send_chk(18);
}
}
else if(DataBuf[4] == 2) //全部删除用户
{
if(user_n == 0)
{
purview_timer = 0x4B0;
DataBuf[7] = 0x45;
DataBuf[8] = 0x34;
send_chk(18);
}
else
{
user_n = 0;
I2C_rcv[0] = 0;
AT24C128_write(0x00,I2C_rcv,1);
I2C_rcv[0] = 0xFF;
purview_timer = 0x4B0;
DataBuf[7] = 0x30;
DataBuf[8] = 0x30;
send_chk(18);
for(i=0;i<60;i++)
{
user_buf[i].class.purview = 0xFF;
AT24C128_write(0x1F + i*16,I2C_rcv,1);
}
}
}
}
else if(DataBuf[2] == 0xE0) //设置时间20081115 06 210446
{
sys_year = (DataBuf[6]<<4) + DataBuf[7]; //系统时间 年
sys_mon = (DataBuf[8]<<4) + DataBuf[9]; //系统时间 月
sys_date = (DataBuf[10]<<4) + DataBuf[11]; //系统时间 日
sys_week = (DataBuf[12]<<4) + DataBuf[13]; //系统时间 星期
sys_hour = (DataBuf[14]<<4) + DataBuf[15]; //系统时间 时
sys_min = (DataBuf[16]<<4) + DataBuf[17]; //系统时间 分
sys_second = (DataBuf[18]<<4) + DataBuf[19]; //系统时间 秒
write_systime();
purview_timer = 0x4B0;
DataBuf[7] = 0x30;
DataBuf[8] = 0x30;
send_chk(18);
}
else if(DataBuf[2] == 0xF0) //初驶化记录区(清空记录)
{ //设定读指针
if(uart_rcv_len == 14) //设定整个记录区指针
{
D0_flag = 0;
D7_flag = 0;
LOADP = 0;
SAVEP = 0;
I2C_rcv[1] = 0;
I2C_rcv[2] = 0;
I2C_rcv[3] = 0;
I2C_rcv[4] = 0;
I2C_rcv[5] = 0;
AT24C128_write(0x01,I2C_rcv + 1,5);
purview_timer = 0x4B0;
DataBuf[7] = 0x30;
DataBuf[8] = 0x30;
send_chk(18);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -