中国IEEE
关于我们 | 会员登陆 | 收藏本站 | 留 言 薄
 

 | 网站首页 | 电子知识 | 单片机知识 | 电路设计 | 微电子技术 | SCADA系统 | 资源下载 | 给我留言 | 谷歌商城 | 视频教程 | ieee | 
热门搜索关键字: 单片机教程 | 三极管 | 二极管 |  C语言汇编语言SCADA元器件模拟电子 |
cnieee.com baidu
栏目导航  
栏目更新推荐  
·51单片机C语言学习
·自制51单片机试验板
·AT89S51单片机下载器软件使用说明
·用MCS51做电子钟(附源程序)
·MCS-51单片机实用子程序库(七)
·MCS-51单片机实用子程序库(六)
·MCS-51单片机实用子程序库(五)
·MCS-51单片机实用子程序库(四)
点击TOP(10)  
·自制51单片机试验板
图片文章  

51单片机C语言学习

自制51单片机试验板

AT89S51单片机下载器…

用MCS51做电子钟(附…
 
您现在的位置: 中国IEEE中国电气电子工程师网 >> 单片机知识 >> 硬件知识 >> 51单片机 >> 正文

电子密码锁设计实验
文章来源:网络 点击数: 更新时间:2008-3-25 【字体:
(欢迎光临中国IEEE,希望本文能对您有所帮助http://www.cnieee.com)


相关文章:

没有相关文章

  • 上一个文章:

  • 下一个文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     
    关于〖电子密码锁设计实验〗的最新评论:

    1.实验任务
      根据设定好的密码,采用二个按键实现密码的输入功能,当密码输入正确之后,锁就打开,如果输入的三次的密码不正确,就锁定按键3秒钟,同时发现报警声,直到没有按键按下3种后,才打开按键锁定功能;否则在3秒钟内仍有按键按下,就重新锁定按键3秒时间并报警。
    2.电路原理图

     

     

     

     



                     图4.32.1
    3.系统板上硬件连线
    (1).把“单片机系统”区域中的P0.0/AD0用导线连接到“音频放大模块”区域中的SPK IN端子上;
    (2).把“音频放大模块”区域中的SPK OUT端子接喇叭和;
    (3).把“单片机系统”区域中的P2.0/A8-P2.7/A15用8芯排线连接到“四路静态数码显示”区域中的任一个ABCDEFGH端子上;
    (4). 把“单片机系统“区域中的P1.0用导线连接到“八路发光二极管模块”区域中的L1端子上;
    (5). 把“单片机系统”区域中的P3.6/WR、P3.7/RD用导线连接到“独立式键盘”区域中的SP1和SP2端子上;
    4.程序设计内容
    (1). 密码的设定,在此程序中密码是固定在程序存储器ROM中,假设预设的密码为“12345”共5位密码。
    (2). 密码的输入问题:
      由于采用两个按键来完成密码的输入,那么其中一个按键为功能键,另一个按键为数字键。在输入过程中,首先输入密码的长度,接着根据密码的长度输入密码的位数,直到所有长度的密码都已经输入完毕;或者输入确认功能键之后,才能完成密码的输入过程。进入密码的判断比较处理状态并给出相应的处理过程。
    (3).按键禁止功能:初始化时,是允许按键输入密码,当有按键按下并开始进入按键识别状态时,按键禁止功能被激活,但启动的状态在3次密码输入不正确的情况下发生的。
    5.C语言源程序
    #include
    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)%6;
      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
                  {
                    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)%6;
      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;
                  }
              }
        }
    }

    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明网站地图 | 名站导航 | 管理登录 | 
    本站资源部分来自互联网,如侵犯您的权利,我们将予以删除  鲁ICP备08006092号
    本站欢迎同类网站做友情链接,QQ留言
    中国IEEE 中国电气电子工程师网 版权所有