⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 system.c

📁 一体化锁主程序
💻 C
📖 第 1 页 / 共 5 页
字号:
    }
}
/*
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 + -