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

📄 uart0.c

📁 采用430单片机完成的门禁控制器程序
💻 C
📖 第 1 页 / 共 2 页
字号:
    }
    else if(RX_DATA[18] == 2)
    {
      FLAG |= gb_delnom;
      set_par_re();
    }
  }
}
/******************************************/
/********接收设置第一控制字命令************/
/******************************************/
void uart_set_diyi()
{
  uchar i;
  i = 24;
  if(uart_set_re(i))
  {
    conone = (RX_DATA[17] << 4);
    conone |= RX_DATA[18];
    FLAG1  |= gb_flashw;
    set_par_re();
  }
}
/******************************************/
/********启用或关闭手动开门按键输入************/
/******************************************/
void uart_set_keyc()
{
   uchar i;
   i = 24;
   if(uart_set_re(i))
   {
     if(RX_DATA[18] ==0)
     {
       conone &= ~BIT4;
     }
     else
     {
       conone |= BIT4;
     }
     FLAG1  |= gb_flashw;
     set_par_re();
   }
}
/******************************************/
/********红外监控的布防与撤防************/
/******************************************/
void uart_set_irc()
{
  uchar i;
   i = 24;
   if(uart_set_re(i))
   {
     if(RX_DATA[18] ==0)
     {
       conone &= ~BIT6;
     }
     else
     {
       conone |= BIT6;
       FLAG2  |= gb_concon;
     }
     FLAG1  |= gb_flashw;
     set_par_re();
   }
}
/******************************************/
/********开关监控的布防与撤防************/
/******************************************/
void uart_set_dorc()
{
  uchar i;
  i = 24;
  if(uart_set_re(i))
  {
    if(RX_DATA[18] ==0)
    {
      conone &= ~BIT7;
    }
    else
    {
      conone |= BIT7;
      FLAG2  |= gb_concon;
    }
    FLAG1  |= gb_flashw;
    set_par_re();
  }
}
/**********************************************************/
/********设定门开关感应器在开门状态是的有效电平************/
/**********************************************************/
void uart_set_dors()
{
  uchar i;
  i = 24;
  if(uart_set_re(i))
  {
    if(RX_DATA[18] ==0)
    {
      conone &= ~BIT3;
    }
    else
    {
      conone |= BIT3;
    }
    if(conone & BIT3)
    {
      door_close = 0x00;
    }
    else
    {
      door_close = 0x20;
    }
    FLAG1  |= gb_flashw;
    set_par_re();
  }
}
/*****************************************/
/********设定门控电磁锁的特性*************/
/*****************************************/
void uart_set_suoc()// 设定门控电磁锁的特性
{
  uchar i;
  i = 24;
  if(uart_set_re(i))
  {
    if(RX_DATA[18] ==0)
    {
      conone &= ~BIT5;
    }
    else
    {
      conone |= BIT5;
    }
    FLAG1  |= gb_flashw;
    set_par_re();
  }
}
/********************************/
/********设定红外感应器在报警时的有效电平************/
/********************************/
void uart_set_irs()
{
  uchar i;
  i = 24;
  if(uart_set_re(i))
  {
    if(RX_DATA[18] ==0)
    {
      conone &= ~BIT2;
    }
    else
    {
      conone |= BIT2;
    }
    FLAG1  |= gb_flashw;
    set_par_re();
  }
}
/********************************/
/********设定开启红外后的等待延时************/
/********************************/
void uart_set_irdly()
{
  uchar i;
  i = 24;
  if(uart_set_re(i))
  {
    irdly_cnt = (RX_DATA[17] << 4);
    irdly_cnt |= RX_DATA[18];
    FLAG1  |= gb_flashw;
    set_par_re();
  }
}
/**************************************************/
/********接收设置命令******************************/
/**************************************************/
void uart_set()
{		
  uint i;
  uint j;
  for(i=9; i<17;i++)
  {
    while (!(IFG1 & URXIFG0));
    RX_DATA[i]=U0RXBUF;
  }
  i=hex_c(RX_DATA[13]);
  j=hex_c(RX_DATA[14]);
  j |= i<<4;
  if(j == 0xf1)
  {
    i=hex_c(RX_DATA[15]);
    j=hex_c(RX_DATA[16]);
    j |= i<<4;
    switch(j)
    {
      case 0xe0: uart_set_time();   break;//设置时间
      case 0xe1: uart_set_work();   break;//设置工作日时段
      case 0xe2: uart_set_nowork(); break;//设置非工作日时段
      case 0xe3: uart_set_addcd();  break;//增加一个用户
      case 0xe4: uart_set_delcd();  break;//删除一个用户
      case 0xe5: uart_set_diyi();   break;//设置第一控制字
      case 0xe6: uart_set_delay();  break;//设置门锁执行时间
      case 0xe7: uart_set_opde();   break;//设置开门延时
      case 0xe8: uart_set_iren();   break;//设置红外
      case 0xe9: uart_set_alarmde();break;
      case 0xea: uart_set_rest();   break;//设置休息日
      case 0xeb: uart_set_holiday();break;//设置节假日
      case 0xec: uart_set_delhol(); break;//删除节假日
      case 0xed: uart_set_opdr();   break;//远程开门
      case 0xef: uart_set_irdly();  break;//设定开启红外的等待延时
      case 0xf0: uart_set_par();    break;//设置参数     
      case 0xf1: uart_set_week();   break;//设置星期时段
      case 0xf6: uart_set_irs();    break;//设定红外感应器在报警时的有效电平
      case 0xf7: uart_set_dors();   break;//设定门开关感应器在开门状态是的有效电平
      case 0xf8: uart_set_keyc();   break;//启用或关闭手动开门按键输入
      case 0xf9: uart_set_suoc();   break;// 设定门控电磁锁的特性
      case 0xfa: uart_set_irc();    break;//红外监控的布防与撤防
      case 0xfb: uart_set_dorc();   break;//门开关监控的布防与撤防
    }
  }
}

/*******接收读取时间命令********/
void uart_read_time()
{
  uchar i;
  i = 24;
  if(uart_set_re(i))
  {
    FLAG |=gb_re1302;
    FLAG |=gb_time_re;
  }
}
/*****************************************************/
/****读取卡号数目*************************************/
/*****************************************************/
void uart_read_cdnum()
{
  uint i;
  i = 24;
  if(uart_set_re(i))
  {
    set_tx();
    TX_DATA[7] = 0x30;
    TX_DATA[8] = 0x30;
    TX_DATA[9] = 0x43;
    TX_DATA[10] = 0x30;
    TX_DATA[11] = 0x30;
    TX_DATA[12] = 0x34;
    i = nvip + nnom;
    TX_DATA[13] = c_hex((i>>4) & 0x0f);
    TX_DATA[14] = c_hex(i & 0x0f);
    TX_DATA[15] = c_hex((i>>12) & 0x0f);
    TX_DATA[16] = c_hex((i>>8) & 0x0f);
    jisuanhe(17);
  }
}
/*************************/
/***顺序读取一条记录******/
/*************************/
void uart_read_meg()
{
  uchar i;
  i = 22;
  if(uart_set_re(i))
  {
    FLAG1 |=gb_remsg;
  }
}
/*************************************/
/*********读取历史记录参数************/
/*************************************/
void uart_read_megpar()
{
  uchar i;
  i = 24;
  if(uart_set_re(i))
  {
    FLAG1 |=gb_repar;
  }
}
/**************************************************/
/********读取一组工作日准进时段********************/
/**************************************************/
void uart_read_work()
{
  uchar i;
  i = 24;
  if(uart_set_re(i))
  {
    FLAG1 |= gb_rework;
  }
}
/********************************************************/
/**************读取非工作日时段**************************/
/********************************************************/
void uart_read_nowork()
{
  uchar i;
  i = 24;
  if(uart_set_re(i))
  {
    FLAG1 |= gb_renowork;
  }
}
/********************************************************/
/*****读取星期准进时段***********************************/
/********************************************************/
void uart_read_week()
{
  uchar i;
  i = 26;
  if(uart_set_re(i))
  {
    FLAG1 |= gb_reweek;
  }
}
/********************************************************/
/******读取指定位置的卡号********************************/
/********************************************************/
void uart_read_card()
{
  uchar i;
  uint  j;
  uchar buf[5];
  ulong addr39;
  i = 26; 
  if(uart_set_re(i))
  {
    RX_DATA[17] = (RX_DATA[17] << 4) | RX_DATA[18];
    j = (RX_DATA[19] << 4) | RX_DATA[20];
    j = (j << 8) | RX_DATA[17];
    addr39 = (j - 1) * 5;
    for(i=0; i<5; i++)
    {
      buf[i] = read040(addr39);
      addr39++;
    }
    set_tx();
    TX_DATA[7] = 0X30;
    TX_DATA[8] = 0X30;
    TX_DATA[9] = 0X45;
    TX_DATA[10]= 0X30;
    TX_DATA[11]= 0X32;
    TX_DATA[12]= 0X30;
    TX_DATA[13] = 0X30;
    TX_DATA[14] = 0X30;
    j = 15;
    for(i=0; i<4; i++)
    {
      TX_DATA[j++] = c_hex((buf[i] >> 4) & 0x0f);
      TX_DATA[j++] = c_hex(buf[i] & 0x0f);
    }
    for(i=0; i<20; i++)
    {
      TX_DATA[j++] = 0x30;
    }
    TX_DATA[j++] = c_hex((buf[4] >> 4) & 0x0f);
    TX_DATA[j++] = c_hex(buf[4] & 0x0f);
    jisuanhe(j);
  }
}
/***************************************************/
/*********读取星期内的休息日************************/
/***************************************************/
void uart_read_rest()
{
  uchar i;
  i = 24;
  if(uart_set_re(i))
  {
    set_tx();
    TX_DATA[7] = 0X30;
    TX_DATA[8] = 0X30;
    TX_DATA[9] = 0X43;
    TX_DATA[10]= 0X30;
    TX_DATA[11]= 0X30;
    TX_DATA[12]= 0X34;
    TX_DATA[13]= c_hex((restday1>>4) & 0x0f);
    TX_DATA[14]= c_hex(restday1 & 0x0f);
    TX_DATA[15]= c_hex((restday2>>4) & 0x0f);
    TX_DATA[16]= c_hex(restday2 & 0x0f);
    jisuanhe(17);
  }
}
/*************************************************/
/********读取节假日*******************************/
/*************************************************/
void uart_read_holi()
{
  uchar i;
  uint  j;
  uint  x;
  i = 24;
  if(uart_set_re(i))
  {
    if(holiday[0][0] == 0xff)
    {
      set_tx();
      TX_DATA[7] = 0X30; 
      TX_DATA[8] = 0X30;
      TX_DATA[9] = 0X45;
      TX_DATA[10] = 0X30;
      TX_DATA[11] = 0X30;
      TX_DATA[12] = 0X32;
      TX_DATA[13] = 0X30;
      TX_DATA[14] = 0X30;
      TX_DATA[15] = 0X46;
      TX_DATA[16] = 0X44;
      TX_DATA[17] = 0X33;
      TX_DATA[18] = 0X46;
      TX_DATA[19] = 0X0D;
      tx_len = 20;
      FLAG |= gb_tx;
    }
    else
    {
      for(i=0; i<40; i++)
      {
        if(holiday[i][0]==0xff)
        {
          j = i;
          break;
        }        
      }
      x = chklen((j<<2)+2);
      set_tx();
      TX_DATA[7] = 0x30;
      TX_DATA[8] = 0X30;
      TX_DATA[9] = c_hex((x>>12)&0X0F);
      TX_DATA[10] = c_hex((x>>8)&0X0F);
      TX_DATA[11] = c_hex((x>>4)&0X0F);
      TX_DATA[12] = c_hex(x&0X0F);
      TX_DATA[13] = c_hex((j>>4)&0X0F);
      TX_DATA[14] = c_hex(j&0X0F);
      x = 15;
      for(i=0; i<j; i++)
      {
        TX_DATA[x++] = c_hex((holiday[i][0]>>4)&0x0f);
        TX_DATA[x++] = c_hex(holiday[i][0]&0x0f);
        TX_DATA[x++] = c_hex((holiday[i][1]>>4)&0x0f);
        TX_DATA[x++] = c_hex(holiday[i][1]&0x0f);
      }
      jisuanhe(x);
    }
  }
}
void uart_read_jian()
{
  uchar i;
  i = 24;
  if(uart_set_re(i))
  {
    FLAG2 |= gb_rejian;
  }
}
/*****************************************************/
/***********读取控制信息******************************/
/*****************************************************/
void uart_read_conmsg()
{
  uchar i;
  i = 24;
  if(uart_set_re(i))
  {
    FLAG2 |= gb_conmsg;
  }
}
/************************************************************/
/***接收读取信息命令*****************************************/
/************************************************************/
void uart_read()
{
  uint i;
  uint j;
  for(i=9; i<17;i++)
  {
    while(!(IFG1 & URXIFG0));
    RX_DATA[i]=U0RXBUF;
  }
  i=hex_c(RX_DATA[13]);
  j=hex_c(RX_DATA[14]);
  j |= i<<4;
  if(j == 0xf2)
  {
    i=hex_c(RX_DATA[15]);
    j=hex_c(RX_DATA[16]);
    j |= i<<4;
    switch(j)
    {
      case 0xe0: uart_read_time();  break;
      case 0xe5: uart_read_cdnum(); break;
      case 0xe6: uart_read_card();  break;
      case 0xe2: uart_read_meg();   break;
      case 0xe1: uart_read_megpar();break;
      case 0xe3: uart_read_work();  break;
      case 0xe4: uart_read_nowork();break;
      case 0xeb: uart_read_week();  break;
      case 0xe9: uart_read_rest();  break;
      case 0xea: uart_read_holi();  break;
      case 0xe7: uart_read_jian();  break;
      case 0xe8: uart_read_conmsg();break;
    }
  }
}

⌨️ 快捷键说明

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