ddddddd.c

来自「两个键的电子密码锁!实验电子电路监控!含蜂鸣器警报!」· C语言 代码 · 共 201 行

C
201
字号
#include <AT89X52.H>   
unsigned char code ps[]={1,2,3,4,5}; 
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; 
unsigned char pslen=5; 
unsigned char templen; 
unsigned char digit; 
unsigned char funcount; 
unsigned char digitcount; 
unsigned char psbuf[9]; 
bit cmpflag; 
bit hibitflag; 
bit errorflag; 
bit rightflag; 
unsigned int second3; 
unsigned int aa=0; 
unsigned int bb=0; 
bit alarmflag; 
bit exchangeflag; 
unsigned int cc; 
unsigned int dd; 
unsigned int n;
bit okflag; 
unsigned char oka; 
unsigned char okb; 
  
main(void)
{
  unsigned char i,j; 
  cmpflag=0;
   n=0;
   P2_0=0;
  P0=dispcode[digitcount]; 
  TMOD=0x01; 
  TH0=(65536-500)/256; 
  TL0=(65536-500)%256; 
  TR0=1; 
  ET0=1; 
  EA=1; 
  
  while(1)
    {P1_0=1;
    P1_1=1;
      if(cmpflag==0)
        {
          if(P3_3==0)//function key 
            {
              for(i=10;i>0;i--)
              for(j=248;j>0;j--); 
              if(P3_3==0)
                 {
                   if(hibitflag==0)        //按键是否被锁
                    {
                     funcount++; 
                     digitcount=0;
                      P0=dispcode[digitcount]; 
                     if(funcount==pslen+2) //前面有按下功能键1次和按数字键1次,来完成密码长度的输入
                     {
                          funcount=0; 
                          cmpflag=1; 
                     }
                       //P1=dispcode[funcount]; //可以由灯判断按键是否按下,
                    }
                  else 
                      {
                         second3=0; 
                      }
                 while(P3_3==0);
				       }
           }
  
          if(P3_4==0)//digit key 
            {
              for(i=10;i>0;i--)
              for(j=248;j>0;j--); 
              if(P3_4==0)
                {
                  if(hibitflag==0)
                    {
                      digitcount++;                      
                      if(digitcount==10)
                        {
                          digitcount=0; 
                        }
                      P0=dispcode[digitcount]; 
                      if(funcount==1)      //按下功能键后,开始输入密码长度
                        {
                          pslen=digitcount; 
                          templen=pslen; 
                        }
                        else if(funcount>1)   //开始记录各位密码
                          {
                            psbuf[funcount-2]=digitcount; 
                          }
                    }
                    else 
                      {
                        second3=0; 
                      }
                  while(P3_4==0); 
                }
           }
      }                             //原文少了这个“}”
if(cmpflag==1)//进行比较
           {
            cmpflag=0; 
            for(i=0;i<pslen;i++)
              {
                if(ps[i]!=psbuf[i])
                  {
                    hibitflag=1; //密码输入不正确,按键禁止功能被激活
                    i=pslen; 
                    errorflag=1; 
                    rightflag=0; 
                    cmpflag=0; 
                    second3=0; 
                    goto a; 
                  }
              }
            cc=0; 
            errorflag=0; 
            rightflag=1; 
            hibitflag=0; 
a:          
cmpflag=0; 
n++;
while(n>=3)
{
//P1_2=0;
}
           }
    }
}
  
void t0(void)interrupt 1 using 0 
{
  TH0=(65536-500)/256; 
  TL0=(65536-500)%256; 
  
  if((errorflag==1)&& (rightflag==0))
    {
      bb++; 
      if(bb==800)
        {
          bb=0; 
          alarmflag=~alarmflag; 
        }
      if(alarmflag==1)
        {
          P1_2=~P1_2;            //报警声
        }
  
      aa++; 
      if(aa==800)
        {
          aa=0; 
          P1_1=~P1_1; //LED2发光二极管闪
        }
      second3++; 
      if(second3==6401) //闪4次后(8次变换),自动复位到按ENTER前的状态
        {   
          second3=0; 
          hibitflag=0; 
          errorflag=0; 
          rightflag=0; 
          cmpflag=0; 
          P0_1=1; 
          P0=0x3f;
          alarmflag=0; 
          bb=0; 
          aa=0; 
        }
   
    }
  
  if((errorflag==0)&& (rightflag==1))//发出长声
     {
          n=0;  
          P1_2=~P1_2;            //报警声
  
      aa++; 
      if(aa==800)
        {
          aa=0; 
          P1_1=~P1_1; //LED2发光二极管闪
        }
      second3++; 
      if(second3==6401) //闪4次后(8次变换),自动复位到按ENTER前的状态
        {
          second3=0; 
          hibitflag=0; 
          errorflag=0; 
          rightflag=0; 
          cmpflag=0; 
          P0_1=1; 
          P0=0x3f;
          alarmflag=0; 
          bb=0; 
          aa=0; 
        }
    }
    }

⌨️ 快捷键说明

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