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

📄 messege.c

📁 采用430单片机完成的门禁控制器程序
💻 C
字号:
/*************************************************/
/**********储存一条记录***************************/
/*************************************************/
void WRITEMESGE()
{
  if(FLAG1 & gb_wrmsg)
  {
    FLAG1 &= ~gb_wrmsg;
    uchar record_buf[14];
    uint  i;
    uchar buf;
    ulong addr39;
    ulong j;
    record_buf[0] = recordbuf;                //卡号最高位
    record_buf[1] = (cardnum>>24)&0xff;       //卡号
    record_buf[2] = (cardnum>>16)&0xff;       //卡号
    record_buf[3] = (cardnum>>8)&0xff;        //卡号
    record_buf[4] = cardnum & 0xff;           //卡号
    record_buf[5] = 0x20;                     //年高位  
    record_buf[6] = clock[6];                 //年低位
    record_buf[7] = clock[4];                 //月
    record_buf[8] = clock[3];                 //日
    record_buf[9] = clock[2];                 //时
    record_buf[10] = clock[1];                //分
    record_buf[11] = clock[0];                //秒
    record_buf[12] = STATUS;                  //状态字
    record_buf[13] = REMARK;                  //备注字
    addr39 = 0x60000 + save_cnt * 14;
    for(i=0; i<14; i++)
    {
      write040pre();
      write040(addr39,record_buf[i]);
      addr39++;
    }
    save_cnt++;
    SAVEP++;
    if(save_cnt >= 4000)
    {
      save_cnt = 0;
      switch(msg_flag)
      {
        case 0:  addr39 = 0x10000; msg_flag = 2;  break; 
        case 2:  addr39 = 0x20000; msg_flag = 4;  break;
        case 4:  addr39 = 0x30000; msg_flag = 8; break;
        case 8:  addr39 = 0x40000; msg_flag = 16; break;
        case 16: addr39 = 0x50000; msg_flag = 32; break;
        case 32: addr39 = 0x10000; msg_flag = 0;  break;
        default: 
          break;
      }
      erasesector040(addr39);
      j = 0x60000;
      for(i=0; i<56000; i++)
      {
        buf = read040(j++); 
        write040pre();
        write040(addr39++,buf);
      }
      erasesector040(0x60000);
    }
    if(SAVEP >= 20000)
    {
      SAVEP =0;
      MF = 128;
    }
    FLAG1 |= gb_flashw;
  }
}
/********************************************************/
/***顺序读取一条历史记录*********************************/
/********************************************************/
void readmsg()
{
  if(FLAG1 & gb_remsg)
  {
    FLAG1 &= ~gb_remsg;
    uchar i;
    uint  j;
    uchar buf;
    ulong addr39;
    uint  addrbuf;
    set_tx();
    if(LOADP == SAVEP)
    {
      TX_DATA[7]  = 'E';
      TX_DATA[8]  = '4';
      TX_DATA[9]  = '0';
      TX_DATA[10] = '0';
      TX_DATA[11] = '0';
      TX_DATA[12] = '0';
      TX_DATA[13] = 'F';
      TX_DATA[14] = 'D';
      TX_DATA[15] = '9';
      TX_DATA[16] = 'D';
      TX_DATA[17] = 0X0D;
      tx_len      = 18;
      FLAG       |= gb_tx;
    }
    else
    {
      TX_DATA[7] = '0';
      TX_DATA[8] = '0';
      TX_DATA[9] = '3';
      TX_DATA[10] = '0';
      TX_DATA[11] = '1';
      TX_DATA[12] = 'C';
      j = 13;
      switch(msg_flag)
      {
        case 0:  addrbuf = 0;     break;
        case 2:  addrbuf = 4000;  break;
        case 4:  addrbuf = 8000;  break;
        case 8:  addrbuf = 12000; break;
        case 16: addrbuf = 16000; break;
        case 32: addrbuf = 20000; break;
        default:
          break;
      }
      if(LOADP >= addrbuf)
      {
        addr39 = 0x60000 + (LOADP - addrbuf) * 14;
      }
      else
      {
        switch(LOADP / 5)
        {
          case 0: addr39 = 0x10000 + (LOADP % 4000) * 14; break;
          case 1: addr39 = 0x20000 + (LOADP % 4000) * 14; break;
          case 2: addr39 = 0x30000 + (LOADP % 4000) * 14; break;
          case 3: addr39 = 0x40000 + (LOADP % 4000) * 14; break;
          case 4: addr39 = 0x50000 + (LOADP % 4000) * 14; break;
        }
      }
      for(i=0; i<14; i++)
      {
        buf = read040(addr39);
        TX_DATA[j++] = c_hex((buf>>4)&0x0f);
        TX_DATA[j++] = c_hex(buf&0x0f);
        addr39++;
      }
      jisuanhe(41);
      LOADP++;
      if(LOADP >= 20000)
      {
        LOADP = 0;
      }
      FLAG1 |= gb_flashw;
    }
  }
}
/****************************************************/
/***读取历史记录参数*********************************/
/****************************************************/
void readmsgpar()
{
  if(FLAG1 & gb_repar)
  {
    FLAG1 &=~gb_repar;
    set_tx();
    TX_DATA[7]  = 0x30;
    TX_DATA[8]  = '0';
    TX_DATA[9]  = 'D';
    TX_DATA[10] = '0';
    TX_DATA[11] = '1';
    TX_DATA[12] = '2';
    TX_DATA[13] = '0';
    TX_DATA[14] = '0';
    TX_DATA[15] = '0';
    TX_DATA[16] = '0';
    TX_DATA[17] = c_hex((SAVEP>>4) & 0X0F);
    TX_DATA[18] = c_hex(SAVEP & 0X0F);
    TX_DATA[19] = c_hex((SAVEP>>12) & 0X0F);
    TX_DATA[20] = c_hex((SAVEP>>8) & 0X0F);
    TX_DATA[21] = c_hex((LOADP>>4) & 0X0F);
    TX_DATA[22] = c_hex(LOADP & 0X0F);
    TX_DATA[23] = c_hex((LOADP>>12) & 0X0F);
    TX_DATA[24] = c_hex((LOADP>>8) & 0X0F);
    TX_DATA[25] = c_hex((MF>>4) & 0X0F);;
    TX_DATA[26] = c_hex(MF & 0X0F);
    TX_DATA[27] = '2';
    TX_DATA[28] = '0';
    TX_DATA[29] = '4';
    TX_DATA[30] = 'E';
    jisuanhe(31);
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -