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

📄 lcm16864zk.c

📁 一个基于51单片机的报警系统。包含有电路图
💻 C
📖 第 1 页 / 共 4 页
字号:
{
 WritCommand(0x91);
 WritData(0xb4);WritData(0xf2);WritData(0xd3);WritData(0xa1);   //打印中请等待
 WritData(0xd6);WritData(0xd0);WritData(0xc7);WritData(0xeb);
 WritData(0xb5);WritData(0xc8);WritData(0xb4);WritData(0xfd);

}
void ShowPart21(void)
{
 WritCommand(0x91);
 WritData(0xc3);WritData(0xbb);WritData(0xd3);WritData(0xd0);   //没有记录可打印
 WritData(0xbc);WritData(0xc7);WritData(0xc2);WritData(0xbc);
 WritData(0xb4);WritData(0xf2);WritData(0xd3);WritData(0xa1);
}
////////////////////////////////////报警

//////////////////////////////////////////////////////////////////
void RobSet(void)                                                 //防抢设置
{
 WritCommand(0x01);                     //清零
 WritCommand(0x0c);
 WritCommand(0x92);
 WritData(0xb7);WritData(0xc0);WritData(0xc7);WritData(0xc0);    //防抢设置
 WritData(0xc9);WritData(0xe8);WritData(0xd6);WritData(0xc3);
 ShowPart5();                                                //显示  进入 另选
 while(1)
 {
 if(RKEY==0)
  {
  Delay_ms(10);
  if(RKEY==0)
   {
   while(1){if(RKEY==1) break; }
   }
   break;
  }
  if(LKEY==0)
  {
   Delay_ms(10);
   if(LKEY==0)
   {
   while(1) {if(LKEY==1)break;}
   RobData=0x00;                //报警处警向量初始化为00
   TeleAlarm();                 //报警处警设置     电话报警:Y
   WhistleAlarm();              //报警鸣笛:Y
   AlarmRelay();                //报警接力:Y
   BlankLocal();                //封锁现场:Y
   EjectFog();                  //喷射眠雾:Y
   pdx=0x0101;
   *pdx=RobData;
   AnlTime();         //设置与等待时间
   AnlNum();          //设置最少与数
   RobSetNext();      //设置向量
   break;
   }
  }
  ShowTime();
 }
}
void RobSetNext(void)         //设置向量
{
   uchar i;
   WritCommand(0x0e);
   i=EjectorNum();         //发射器编号
   EmployeeNum();          //员工编号
   AnlSet();               //逻辑关系
   RobSet1();              //继续 填写
}
void TeleAlarm(void)
{
 bit i=1;
 WritCommand(0x01);
 WritCommand(0x0e);
 ShowPart3();              //电话报警:Y
 ShowPart4();               //显示 确认 选择
 while(1)
 {
  if(LKEY==0)
  {
   Delay_ms(10);
   if(LKEY==0)
   {
    while(1)
    {if(LKEY==1) break;}
    if(i==1)                        //如果选确认后 是Y ROBDATA的第一位为1
    {
     RobData=RobData|0x01;
     }
     else
     {                              //否则为0
     RobData=RobData&0xfe;
     }
   }
   break;
  }                                  //选择是Y  还是N
  if(RKEY==0)
  {
   Delay_ms(10);
   if(RKEY==0)
   {
    while(1)
     {if(RKEY==1) break;}
     i=~i;
     if(i==1)
     {
     WritCommand(0x95);
     WritData(0xa3);WritData(0xd9);
     WritCommand(0x10);
      }
      else
      {
       WritCommand(0x95);
       WritData(0xa3);WritData(0xce);
       WritCommand(0x10);
      }
    }
  }
  WritCommand(0x95);
 }
}

void WhistleAlarm(void)                    //鸣警笛设置
{
 bit i=1;
 WritCommand(0x01);
 ShowPart6();                     //鸣警笛 :Y
 ShowPart4();
 while(1)
 {
  if(LKEY==0)
  {
   Delay_ms(10);
   if(LKEY==0)
   {
    while(1)
    {if(LKEY==1) break;}
    if(i==1)                          //确认后如果是Y 则ROBDATA的第二位为1
    {
     RobData=RobData|0x02;
     }                                //否则为0
     else
     {
      RobData=RobData&0xfd;
     }

   }
   break;
  }                                    //选择是Y或N
  if(RKEY==0)
  {
   Delay_ms(10);
   if(RKEY==0)
   {
    while(1)
     {if(RKEY==1) break;}
    WritCommand(0x95);
     i=~i;
     if(i==1)
     {
     WritCommand(0x95);
     WritData(0xa3);WritData(0xd9);
     WritCommand(0x10);
      }
      else
      {
       WritCommand(0x95);
       WritData(0xa3);WritData(0xce);
       WritCommand(0x10);
      }
    }
   }
   WritCommand(0x95);
 }
}
                                 //设置接力报警
void AlarmRelay(void)
{
 bit i=1;
 WritCommand(0x01);
 ShowPart7();                   //接力报警:Y
 ShowPart4();
 while(1)
 {
  if(LKEY==0)
  {
   Delay_ms(10);
   if(LKEY==0)
   {                                       //确认后是Y 则第三位为1
    while(1)
    {if(LKEY==1) break;}
    if(i==1)
    {
     RobData=RobData|0x04;
     }                                      //否则为0
     else
     {
      RobData=RobData&0xfb;
     }

    }
   break;
   }                                         //选择是Y或是N
  if(RKEY==0)
  {
   Delay_ms(10);
   if(RKEY==0)
   {
    while(1)
     {if(RKEY==1) break;}
    WritCommand(0x95);
     i=~i;
     if(i==1)
     {
     WritCommand(0x95);
     WritData(0xa3);WritData(0xd9);
     WritCommand(0x10);
      }
      else
      {
       WritCommand(0x95);
       WritData(0xa3);WritData(0xce);
       WritCommand(0x10);
      }
   }
  }
  WritCommand(0x95);
 }

}


void BlankLocal(void)
{
 bit i=1;
 WritCommand(0x01);
 ShowPart8();                                          //封锁现场:Y
 ShowPart4();
 while(1)
 {                                                 //如果选确认后 是Y ROBDATA的第4位为1
  if(LKEY==0)
  {
   Delay_ms(10);
   if(LKEY==0)
   {
    while(1)
    {if(LKEY==1) break;}
    if(i==1)
    {
     RobData=RobData|0x08;
     }
     else                                      //否则为0
     {
      RobData=RobData&0xf7;
     }

   }
   break;
  }
  if(RKEY==0)
  {                                             //选择是Y或是N
   Delay_ms(10);
   if(RKEY==0)
   {
    while(1)
     {if(RKEY==1) break;}
    WritCommand(0x95);
     i=~i;
     if(i==1)
     {
     WritCommand(0x95);
     WritData(0xa3);WritData(0xd9);
     WritCommand(0x10);
      }
      else
      {
       WritCommand(0x95);
       WritData(0xa3);WritData(0xce);
       WritCommand(0x10);
      }
   }
   WritCommand(0x95);
  }
 }

}
void EjectFog(void)
{
  bit i=1;
 WritCommand(0x01);
 ShowPart9();                                          //喷射眠雾:Y
 ShowPart4();
 while(1)
 {
  if(LKEY==0)
  {
   Delay_ms(10);
   if(LKEY==0)
   {
    while(1)                                        //第五位是否为1 或 0
    {if(LKEY==1) break;}
    if(i==1)
    {
     RobData=RobData|0x10;
     }
     else
     {
      RobData=RobData&0xef;
     }

   }
   break;
  }
  if(RKEY==0)
  {
   Delay_ms(10);
   if(RKEY==0)
   {
    while(1)
     {if(RKEY==1) break;}
     WritCommand(0x95);
     i=~i;
     if(i==1)
     {
     WritCommand(0x95);
     WritData(0xa3);WritData(0xd9);
     WritCommand(0x10);
      }
      else
      {
       WritCommand(0x95);
       WritData(0xa3);WritData(0xce);
       WritCommand(0x10);
      }
     }
   }
   WritCommand(0x95);
  }

}


void EmployeeNum(void)
{
 uchar k=0,j;
 uchar CodeN[4]={0,0,0,0};
 WritCommand(0x01);
 ShowPart10();                        //员工编号 0
 ShowPart1();
 while(k<4)
     {
     if(LKEY==0)
       {
        Delay_ms(10);
        if(LKEY==0)
         {
          CodeN[k]=j;
            while(1)
            {
            if(LKEY==1) break;
            }
            break;
          }
        }
     if(MKEY==0)                              //按MKEY数字从0~9循环显示
              {
                 Delay_ms(5);
                 if(MKEY==0)
                  {
                    j++;
                    if(j>9) j=0;
                    WritData(0xa3);
                    WritData(0xb0+j);         //显示下个数
                    WritCommand(0x10);
                    while(1)
                    {
                    if(MKEY==1) break;
                    }
                  }
                }
      if(RKEY==0)
              {                               //光标移动到下一位 进行选择
                Delay_ms(10);          //延时去抖动
                if(RKEY==0)
                {
                    CodeN[k]=j;
                    WritCommand(0x14);
                    k++;
                    if(k>=4)
                    {k=0;WritCommand(0x94);}
                    WritData(0xa3);
                    WritData(0xb0);
                    WritCommand(0x10);
                    j=0;
                    while(1)
                     {
                      if(RKEY==1) break;
                     }
                  }
                 }
        ShowTime();
        WritCommand(0x94+k);
        Delay_ms(10);
     }
   k=(CodeN[0]<<4)+CodeN[1];                 //存入员工编号到相应的位置
   pdx++;
   *pdx=k;
   pdx++;
   k=(CodeN[2]<<4)+CodeN[3];
   *pdx=k;
}

void AnlNum(void)         //最少与数
{
 uchar k=0,j;
 WritCommand(0x01);
 ShowPart11();                        //最少与数 0
 ShowPart1();
 while(k<2)
     {
     if(LKEY==0)
       {
        Delay_ms(10);
        if(LKEY==0)
         {
            pdx++;
            *pdx=j;
            RobNum=j;
            while(1)
            {
            if(LKEY==1) break;
            }
            break;
          }
        }
     if(MKEY==0)                        //0~9个数字循环显示
              {
                 Delay_ms(5);
                 if(MKEY==0)
                  {
                    j++;
                    if(j>9) j=0;
                    WritData(0xa3);
                    WritData(0xb0+j);         //显示下个数
                    WritCommand(0x10);
                    while(1)
                    {
                    if(MKEY==1) break;
                    }
                  }
                }
      if(RKEY==0)                      //进入下一个位置选择
              {
                Delay_ms(10);          //延时去抖动
                if(RKEY==0)
                {
                     WritCommand(0x96);
                     WritData(0xa3);
                     WritData(0xb0);
                     WritCommand(0x10);
                  }
                 }
        ShowTime();
        WritCommand(0x95);
        Delay_ms(10);
     }

}

void AnlSet(void)          //逻辑关系
{
  bit i=1;
 WritCommand(0x01);
 ShowPart12();                        //逻辑关系: A
 ShowPart4();
 while(1)
     {
     if(LKEY==0)
       {
        Delay_ms(10);
        if(LKEY==0)                     //1表示是与的关系  0表示不是
         {                              //1表示是低级     0表示是高级可以直接产生报警
            pdx++;
            *pdx=i;
            while(1)
            {
            if(LKEY==1) break;
            }
            break;
          }
        }

      if(RKEY==0)                       //A 循环显示 B
              {
                Delay_ms(10);          //延时去抖动
                if(RKEY==0)
                {
                  WritCommand(0x95);
                  i=~i;
                  if(i==1)
                   {
                    WritCommand(0x95);
                    WritData(0xa6);WritData(0xa1);
                    WritCommand(0x10);
                    }
                     else
                       {
                       WritCommand(0x95);
                       WritData(0xa6);WritData(0xa2);
                       WritCommand(0x10);
                       }

                  }
                 }
        ShowTime();
        WritCommand(0x95);
        Delay_ms(10);
     }
}

void AnlTime(void)        //与等待时间
{
 uchar j=0,k=0;
 uchar CodeN[3]={0,0,0};
 WritCommand(0x01);
 ShowPart13();                        //与等时间:000S
 ShowPart1();
 WritCommand(0x94);
 while(k<3)
     {
     if(LKEY==0)
       {
        Delay_ms(10);
        if(LKEY==0)
         {

            CodeN[k]=j;
            while(1)
            {
            if(LKEY==1) break;
            }
            break;
          }
        }
             if(MKEY==0)                //0~9数字循环显示
              {
                 Delay_ms(5);
                 if(MKEY==0)
                  {
                    j++;
                    if(j>9) j=0;
                    WritData(0xa3);
                    WritData(0xb0+j);         //显示下个数
                    WritCommand(0x10);
                    while(1)
                    {
                    if(MKEY==1) break;
                    }
                  }
                }
      if(RKEY==0)                      //进入下一个位置选择
              {
                Delay_ms(10);          //延时去抖动
                if(RKEY==0)
                {
                    CodeN[k]=j;
                    WritCommand(0x14);
                    k++;
                    if(k>=3)
                    {k=0;WritCommand(0x94);}
                    WritData(0xa3);
                    WritData(0xb0);
                    WritCommand(0x10);
                    j=0;
                    while(1)
                     {
                      if(RKEY==1) break;
                     }

                  }
                 }
        ShowTime();
        WritCommand(0x94+k);
        Delay_ms(10);
     }
 k=CodeN[0]*100+CodeN[1]*10+CodeN[2];
 pdx++;
 *pdx=k;
}

void RobSet1(void)             //填写  不填  继续
{
 uchar i;
 WritCommand(0x0c);
 ShowPart14();
 while(1)
   {
     if(LKEY==0)                  //填写则把刚输入完的数据写入外部RAM中
       {
        Delay_ms(10);
        if(LKEY==0)
         {
          while(1)
            {
            if(LKEY==1) break;
            }
            pdx=0x0100;
            i=*pdx;
            *pdx=i+1;
            break;
          }
        }                        //不填则放弃刚设定的数据
        if(MKEY==0)
       {
        Delay_ms(10);
        if(MKEY==0)
         {

         RobSetNext();

⌨️ 快捷键说明

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