单片机电子密码锁设计 第3页
第四章 程序设计
一、程序设计内容 
1、密码的设定:在此程序中密码是固定在程序存储器ROM中,假设预设的密码为“11111”  共5位密码。
2、密码的输入问题:由于采用两个按键来完成密码的输入,那么其中一个按键为功能键,另一个按键为数字键。在输入过程中,首先输入密码的长度,接着根据密码的长度输入密码的位数,直到所有长度的密码都已经输入完毕;或者输入确认功能键之后,才能完成密码的输入过程。进入密码的判断比较处理状态并给出相应的处理过程。
3、按键禁止功能:初始化时,是允许按键输入密码,当有按键按下并开始进入按键识别状态时,按键禁止功能被激活,但启动的状态在3次密码输入不正确的情况下发生的。
二、C语言源程序
#include 
unsigned char code ps[]={1,1,1,1,1}; 
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)%6; 
  TR0=1; 
  ET0=1; 
  EA=1; 
  while(1) 
    { 
      if(cmpflag==0) 
        { 
          if(P3_6==0) 
{ 
              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) 
            { 
              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 
              { 
                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; 
          } 
    } 
} 
上一页  [1] [2] [3] [4] 下一页 
单片机电子密码锁设计 第3页下载如图片无法显示或论文不完整,请联系qq752018766