毕业论文论文范文课程设计实践报告法律论文英语论文教学论文医学论文农学论文艺术论文行政论文管理论文计算机安全
您现在的位置: 毕业论文 >> 论文 >> 正文

基于MCU的数字密码锁设计 第3页

更新时间:2010-1-6:  来源:毕业论文
基于MCU的数字密码锁设计 第3页
 case 0x44:sound();return 10;
    case 0x84:sound();return 11;
    case 0x18:sound();return 12;
    case 0x28:sound();return 13;
    case 0x48:sound();return 14;
    case 0x88:sound();return 15;
    default:return 17;
  }
}
void password()
{ uchar i;
  if(keynum<12&&keynum>=0)
  { if(hibit)
    { if(keynum<10&&keynum>=0)
      { if(keycount<4)
        {pw[keycount]=keynum;    //将输入键值赋予密码数组
         dispbuf[keycount]=11;   //输入值用字母P代替
         keycount++;
        }
      }
     if(keynum==10)
     { if(keycount>0)
       { keycount--;
         pw[keycount]=0;         //删除输入密码值
         dispbuf[keycount]=10;   //同时在数码管上删除字母'P'
       }
     }
     if(keynum==11)
     { for(i=0;i<4;i++)          //密码比较,判断输入的密码是否正确
       if(ps[i]!=pw[i])
       { error=1;right=0;wr1=0;hibit=0; //设置密码错误标志
         wr=0;goto aa; 
       }
       right=1;error=0;ok=0;ok10=0;jdq=0;   // 设置密码正确标志
       aa:_nop_();
     }
   }
   else
   {ok=0;wr=0;}
  }
}
void setpassword()
{ if(keynum<12&&keynum>=0)
  { if(keynum<10&&keynum>=0)
    { if(keycount<4)           
      { ps[keycount]=keynum;        //设置密码,将输入值送入数组内
        dispbuf[keycount]=11;       //输入键值用字母'P'代替
        keycount++;
      }
    }
    if(keynum==10)
    { if(keycount>0)               
      { keycount--;               //删除输入密码值
        ps[keycount]=0;
        dispbuf[keycount]=10;     //同时在数码管上删除字母'P'
      }
    }
    if(keynum==11)
    { if(keycount==4)
      {error=0;right=0;keycount=0;flag=1;jdq=1;buzz=0;key2=0;}  //输完密码后重新设置标志
    }
  }   
}
void set()
{
  keynum=keyscan();
  if(keynum==12)
   {flag=0;   //时间显示与密码锁切换标志
    if(buzz)
    {dispbuf[0]=12;dispbuf[1]=16;dispbuf[2]=7;dispbuf[3]=10;delayms(1000);}          //设置密码时,数码管显示'SET'
    else
    {dispbuf[0]=1;dispbuf[1]=17;dispbuf[2]=7;dispbuf[3]=0;delayms(1000);}
    dispbuf[0]=dispbuf[1]=dispbuf[2]=dispbuf[3]=10;}                                 //输入或设置密码时,清除时间显示
  if(flag)
   { switch(keynum)
     { case 13:id=~id;
            flag1=1;
               if(id)
               {TR1=0;dispbuf[0]=12;dispbuf[1]=13;dispbuf[2]=14;dispbuf[3]=10;delayms(1000);TR1=1;} //id为1时,对时操作,id为0时对分操作
               else
               {TR1=0;dispbuf[0]=15;dispbuf[1]=16;dispbuf[2]=17;dispbuf[3]=10;delayms(1000);TR1=1;}
               break;
       case 14:if(flag1)
            {if(id)                     //时间加
                {hour++;
              if(hour==24) hour=0;
             }
             else
             { min++;
               if(min==60) min=0;
             }
      }
             break;                    //时间减
       case 15:if(flag1)
            {if(id==0)
             { min--;
              if(min==255) min=59;
             }
             else
             { hour--;
          if(hour==255) hour=23;
             }
      }
             break;
       default:break;
     }
     disptime();
  }
  if(flag==1&&key2==1)
  {flag=0;dispbuf[0]=12;dispbuf[1]=16;dispbuf[2]=7;dispbuf[3]=10;delayms(1000);
   dispbuf[0]=dispbuf[1]=dispbuf[2]=dispbuf[3]=10;
  }
  if(flag==0)
  { if(!(error==0&&right==1))    //当error=0,right=1不同时成立,执行输入密码程序
    { 
      password();
    }
    else                         //密码正确后重新设置密码值
    {             
     setpassword();
    }
  }
  if(bit2)
   {bit2=0;jdq=1;right=0;error=0;buzz=0;}
}
main()
{ TMOD=0X11;                                     //定时中断初始化
  TH0=(65535-500)/256;TL0=(65535-500)%256;
  TH1=(65535-45000)/256;TL1=(65535-45000)%256;
  EA=1;ET0=1;ET1=1;hibit=1;
  TR1=1;TR0=1;dispbit=0x01;
  flag=1;
  while(1) 
  {
   set();
  }
}
void timer0() interrupt 1                       //定时中断0用于数码管显示与报警频率变化的处理
{ TH0=(65535-2000)/256;TL0=(65535-2000)%256;          
  P3=dispbit;
  P0=dispcode[dispbuf[count]];
  dispbit=(dispbit<<1);
  if(dispbit==0x10) dispbit=0x01;
  count++;
  if(count==4) count=0;
  if(error==1&&right==0)
  { wr1++;
    if(wr1==1)
    { wr1=0;
      spk=~spk;
    }
  }
 if(error==0&&right==1&&flag==0&&buzz==0)
  { ok10++;
    if(ok10==25)
    { ok10=0;
      spk=~spk;
    }
  }
}
void timer1() interrupt 3                           //定时中断1用于时,分,秒的定时,报警声音时间长短的控制
{ TH1=(65535-40000)/256;TL1=(65535-40000)%256;
  sec20++;
  if(sec20==10)
  {led1=~led1;led2=~led2;}
  if(sec20==20)
  { sec20=0;sec++;
    if(key1) keysec++;

上一页  [1] [2] [3] [4] 下一页

基于MCU的数字密码锁设计 第3页下载如图片无法显示或论文不完整,请联系qq752018766
设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优文论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。