好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

基于at89C51电子密码锁.docx

11页
  • 卖家[上传人]:飞***
  • 文档编号:7649610
  • 上传时间:2017-09-22
  • 文档格式:DOCX
  • 文档大小:232.57KB
  • / 11 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 32. 电子密码锁设计 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)%256; 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; 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

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.