单片机电子密码锁源代码

#include <reg51.h> 
 
sbit P0_0=P0^0;
sbit P0_1=P0^1;
sbit P3_6=P3^6;
sbit P3_7=P3^7;

unsigned char code ps[]={1,2,3,4,5}; 
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66, 
                               0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40}; 
  
unsigned char pslen=9; 
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; 
unsigned int bb; 
bit alarmflag; 
bit exchangeflag; 
unsigned int cc; 
unsigned int dd; 
bit okflag; 
unsigned char oka; 
unsigned char okb; 
  
void main(void) 
{ 
  unsigned char i,j; 
    
  P2=dispcode[digitcount]; 
  TMOD=0x01; 
  TH0=(65536-500)/256; 
  TL0=(65536-500)%256; 
  TR0=1; 
  ET0=1; 
  EA=1; 
  
  while(1) 
    { 
      if(cmpflag==0) 
        { 
          if(P3_6==0) //function key 
            { 
              for(i=10;i>0;i--) 
              for(j=248;j>0;j--); 
              if(P3_6==0) 
                { 
                  if(hibitflag==0) 
                    { 
                      funcount++; 
                      if(funcount==pslen+2) 
                        { 
                          funcount=0; 
                          cmpflag=1; 
                         } 
                       P1=dispcode[funcount]; 
                    } 
                    else 
                      { 
                         second3=0; 
                      } 
                  while(P3_6==0); 
                } 
            } 
  
          if(P3_7==0) //digit key 
            { 
              for(i=10;i>0;i--) 
              for(j=248;j>0;j--); 
              if(P3_7==0) 
                { 
                  if(hibitflag==0) 
                    { 
                      digitcount++;                      
                      if(digitcount==10) 
                        { 
                          digitcount=0; 
                        } 
                      P2=dispcode[digitcount]; 
                      if(funcount==1) 
                        { 
                          pslen=digitcount; 
                          templen=pslen; 
                        } 
                        else if(funcount>1) 
                          { 
                            psbuf[funcount-2]=digitcount; 
                          } 
                    } 
                    else 
                      { 
                        second3=0; 
                      } 
                  while(P3_7==0); 
                } 
            } 
        } 
        else 
          { 
            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; 
          }   
    } 
} 
  
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) 
        { 
          P0_0=~P0_0; 
        } 
  
      aa++; 
      if(aa==800) 
        { 
          aa=0; 
          P0_1=~P0_1; 
        } 
      second3++; 
      if(second3==6400) 
        { 
          second3=0; 
          hibitflag=0; 
          errorflag=0; 
          rightflag=0; 
          cmpflag=0; 
          P0_1=1; 
          alarmflag=0; 
          bb=0; 
          aa=0; 
        } 
    }   

  if((errorflag==0) && (rightflag==1)) 
    { 
      P0_1=0; 
      cc++; 
      if(cc<1000) 
        { 
          okflag=1; 
        } 
        else if(cc<2000) 
          { 
            okflag=0; 
          } 
          else 
            { 
              errorflag=0; 
              rightflag=0; 
              hibitflag=0; 
              cmpflag=0; 
              P0_1=1; 
              cc=0; 
              oka=0; 
              okb=0; 
              okflag=0; 
              P0_0=1; 
            } 
      if(okflag==1) 
        { 
          oka++; 
          if(oka==2) 
            { 
              oka=0; 
              P0_0=~P0_0; 
            } 
        } 
        else 
          { 
            okb++; 
            if(okb==3) 
              { 
                okb=0; 
                P0_0=~P0_0; 
              } 
          } 
    } 
}

 
  • 2
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值