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

📄 timetable.c

📁 采用430单片机完成的门禁控制器程序
💻 C
字号:
/************************************************/
/*********擦除预处理*****************************/
/******进行擦除前得准备工作,并备份数据**********/
/************************************************/
void earse_pre()
{
  ulong i;
  uchar cardbuf;
  //备份正式卡号
  for(i=0; i<nvip*4; i++)
  {
    cardbuf = read040(i);
    write040pre();
    write040((i+0x70000),cardbuf);
  }
  //备份巡更卡号
  for(i=0x2000; i<(nnom*4+0x2000); i++)
  {
    cardbuf = read040(i);
    write040pre();
    write040((i+0x70000),cardbuf);
  }
  //备份星期时段
  for(i=0x9000; i<0x9348; i++)
  {
    cardbuf = read040(i);
    write040pre();
    write040((i+0x70000),cardbuf);
  }
  //擦除第一扇区
  erasesector040(0x0000);
}
/*********************************************/
/*********写入工作日时段**********************/
/******在flash中存储的地址为0x8000开始********/
/********先存入得是非工作日得时段*************/
/***接下来是四个工作日得时段******************/
/***每个时段占16个字节,一共是80个字节********/
/*********************************************/
void wrworktime()
{
  if(FLAG1 & gb_work)
  {
    FLAG1 &= ~gb_work;
    ulong i;
    uchar cardbuf;
    earse_pre();
    for(i=0; i<nvip*4; i++)
    {
      cardbuf =  read040(i+0x70000);
      write040pre();
      write040(i,cardbuf);
    }
    for(i=0x2000; i<(nnom*4+0x2000); i++)
    {
      cardbuf =  read040(i+0x70000);
      write040pre();
      write040(i,cardbuf);
    }
    for(i=0; i<80; i++)
    {
      write040pre();
      write040((i+0x8000),table_buf[i]);
    }
    for(i=0x9000; i<0x9348; i++)
    {
      cardbuf =  read040(i+0x70000);
      write040pre();
      write040(i,cardbuf);
    }
    //擦除第七扇区
    FLAG1 |=gb_era7;
  }
}
/*************************************************/
/******写入星期准进时段***************************/
/***********在flash中存储的地址为0x9000开始*******/
/****一共保存了5组时段,每组168个字节,一共840个字节*/
/*************************************************/
void wrweektime()
{
  if(FLAG1 & gb_week)
  {
    FLAG1 &= ~gb_week;
    ulong i;
    uchar cardbuf;
    //擦除前得准备工作
    for(i=0; i<nvip*4; i++)
    {
      cardbuf = read040(i);
      write040pre();
      write040((i+0x70000),cardbuf);
    }
    for(i=0x2000; i<(nnom*4+0x2000); i++)
    {
      cardbuf = read040(i);
      write040pre();
      write040((i+0x70000),cardbuf);
    }
    for(i=0x8000; i<0x8050; i++)
    {
      cardbuf = read040(i);
      write040pre();
      write040((i+0x70000),cardbuf);
    }
    erasesector040(0x0000);
    //恢复数据
    for(i=0; i<nvip*4; i++)
    {
      cardbuf =  read040(i+0x70000);
      write040pre();
      write040(i,cardbuf);
    }
    for(i=0x2000; i<(nnom*4+0x2000); i++)
    {
      cardbuf =  read040(i+0x70000);
      write040pre();
      write040(i,cardbuf);
    }
    for(i=0x8000; i<0x80B4; i++)
    {
      cardbuf =  read040(i+0x70000);
      write040pre();
      write040(i,cardbuf);
    }
    for(i=0; i<840; i++)
    {
      write040pre();
      write040((i+0x9000),table_buf[i]);
    }
    FLAG1 |=gb_era7;
  }
}
/**********************************************/
/***********读取时段预处理*********************/
/**********************************************/
void retime_pre(ulong j, ulong addr39)
{
  ulong i;
  uchar x;
  uchar m;
  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;
  x = 13;
  for(i=j; i<addr39; i++)
  {
    m = read040(i);
    TX_DATA[x++] = c_hex((m>>4)&0x0f);
    TX_DATA[x++] = c_hex(m&0x0f);
  }
  jisuanhe(45);
}
/********************************************/
/*****读取一组工作日时段*********************/
/********************************************/
void reworktime()
{
  if(FLAG1 & gb_rework)
  {
    FLAG1 &= ~gb_rework;
    ulong i;
    ulong addr39;
    i = 0x8000 + RX_DATA[18]*16;
    addr39 = i + 16;
    retime_pre(i, addr39);
  }     
}
/*****************************************************/
/********读取一组非工作日时段*************************/
/*****************************************************/
void renoworktime()
{
  if(FLAG1 & gb_renowork)
  {
    FLAG1 &= ~gb_renowork;
    retime_pre(0x8000, 0x8010);
  }
}
/***************************************************/
/***********读取星期准进时段************************/
/***************************************************/
void reweektime()
{
  if(FLAG1 & gb_reweek)
  {
    FLAG1 &= ~gb_reweek;
    ulong i;
    ulong j;
    uchar m;
    uchar x;
    TX_DATA[7] =0x30;
    TX_DATA[8] =0x30;
    TX_DATA[9] =0x44;
    TX_DATA[10] =0x30;
    TX_DATA[11] =0x33;
    TX_DATA[12] =0x30;
    x = 13;
    j = 0x9000 + RX_DATA[18]*168+(RX_DATA[20]-1)*24;
    for(i=j; i<(j+24); i++)
    {
      m = read040(i);
      TX_DATA[x++] = c_hex((m>>4)&0x0f);
      TX_DATA[x++] = c_hex(m&0x0f);
    }
    jisuanhe(61);
  }
}

⌨️ 快捷键说明

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