您好,欢迎光临本网站![请登录][注册会员]  
文件名称: 用单片机设计的4位密码锁
  所属分类: C
  开发工具:
  文件大小: 256kb
  下载次数: 0
  上传时间: 2010-07-01
  提 供 者: sun8*****
 详细说明: 目 录 摘要..........................................(03) 关键字........................................(03) 1 前言..........................................(04) 2 系统设计......................................(04) 2.1 电子密码锁的工作原理......................(04) 2.2 系统硬件组成..............................(04) 2.3 矩阵键盘扫面工作原理......................(05) 2.4 LED数码管动态显示原理.....................(05) 2.5 电子密码锁系统硬件设计..... ..............(06) 2.6 电子密码锁系统软件设计....... ............(07) 3 设计体会与结论................................(07) 4附录................................ ...........(08) 5参考文献.......................................(13) 摘要 电子密码锁是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。它的种类很多,有简易的电路产品,也有基于芯片的性价比较高的产品。现在应用较广的电子密码锁是以芯片为核心,通过编程来实现的。其性能和安全性已大大超过了机械锁,特点如下: 1.保密性好,编码量多,远远大于弹子锁。随机开锁成功率几乎为零。 2.密码可变。 用户可以经常更改密码,防止密码被盗,同时也可以避免因人员的更替而使锁的密级下降。 3.误码输入保护。当输入密码多次错误时,报警系统自动启动。 4. 电子密码锁操作简单易行,一学即会。 关键字;单片机 LED数码管 矩阵键盘 密码锁 Abstract Electronic Code Lock is a password input through the control circuit, or chip, thus controlling the closed mechanical switch to complete the lock, closed the task of electronic products. It is of many types, have a simple circuit products, but also the higher cost chip-based products. Now the widely used electronic code lock is a chip at the core, achieved through programming. Performance and safety have greatly exceeded the mechanical lock, the following features: 1. Privacy is good, coding quantity is far greater than the spring lock. Random unlocking success rate is almost zero. 2. Password variable. Users can always change the password, to prevent password theft, but also avoids the lock because of staff turnover Er Shi and drawing down. 3. Error input protection. When you enter your password wrong several times, the alarm system started automatically. 4. E-lock operation is simple, a school that will. Keywords; MCU LED digital tube matrix keypad lock 1 前言 随着人们生活水平的提高,如何实现家庭防盗这一问题也变的尤其的突出,传统的机械锁由于其构造的简单,被撬的事件屡见不鲜,电子锁由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的亲呢。 设计本课题时构思了两种方案:一种是用以AT89s51为核心的单片机控制方案;另一种是用以74LS112双JK触发器构成的数字逻辑电路控制方案。考虑到数字电路方案原理过于简单,而且不能满足现在的安全需求,所以本文采用前一种方案。 2 系统设计 2.1电子密码锁的工作原理 电子密码锁是以51系列单片机(AT89C51)为核心,配以相应硬件电路,完成密码的识别和显示、驱动电磁执行器并检测其驱动电流值。 单片机接收键入的代码,并与存贮在EEPROM中的密码进行比较,如果密码正确,则驱动电磁执行器开锁;如果密码不正确,则允许操作人员重新输入密码,单片机将每次开锁操作和此时电磁执行器的驱动电流值作为状态信息发送给智能监控器,同时将接收来自传感器接口的报警信息也发送给智能监控器,作为智能化分析的依据。 2.2系统硬件组成 如图(1)所示,系统采用单片机ATC89C51作为控制的核心,完成系统的控制操作。单片机核心接受来自键盘扫面电路的道德键值,判断是数字键还是操作键,并送相应的处理程序。单片机提供动态扫描电路的显示码和位选信号,使动态显示电路正常工作。 键盘扫面电路采用4*4键盘,编号0~9做为数字键“0~9”,编号14做为关锁操作功能键,编号15做为确定功能键。编号13为修改密码键,编号12作为电子锁报警后的解锁键,编号11为清除显示屏键。 动态扫描电路采用4块LED数码管,利用人眼的延迟效应通过合理的软件设计使显示电路显示数字。 供电采用5V直流电压电源 2.3矩阵键盘扫描工作原理 矩阵式键盘又成为行列式键盘,是将I/O线的一部分作为行线,另一部分作为列线,按键设置在行线和列线的交叉点上,如图()所示。这种设计减少键盘与单片机I/O接线的数目。只需要N个行线和M个列线就可以实现N*M个键的操作。 行扫描法识别键值的原理 (1) 将第0 行变为低电平,其余行为高电平,输出编码为1110.然后读取列的电平,判别第0行是否有键按下。在第0行上若有键按下,则相应的列被拉低为低电平,则表示第0行和此列相交的位置上有键按下,进而判别哪一列有键按下。若没有任一条列线为低电平,则说明0行上无键按下。 (2) 用此方法扫描第1行,第2行,第3行,判断是哪个键按下。 由此指出,按键的位置码比不等于按键的实际定义键值,因此还需要进行转换。 2.4 LED数码管动态显示原理 将所有的位选线并联在一起,由一个8位I/O口控制,实现各位的分时选通。如图()所示。 2.5电子密码锁系统硬件设计 键盘部分 如图()所示,采用行列式键盘,P1口作为与行列式键盘的接口。低四位做为行选线,高四位作为列选线。采用逐行扫描的方法完成。 LED动态显示部分 采用7SEG-MPX4-CC 八段数码管,总共有四个八段数码管,共阴极的方法,未选信号为低电平有效。数据接口与P2相连,P2.0~P2.7对应a~dp。未选信号与P3相连,P3.0~P3.3对应4~1. 仿真电灯一端与P0.0相连,另一端与5V的直流电源相连。 2.6电子密码锁系统软件设计 软件是系统的核心,控制硬件的工作。对于单片机的开发,可以采用C语言,也可以采用汇编语言。本次设计中,开发了两套软件分别使用C语言和汇编语言。从可读性来讲C语言相对要好一点。从简洁性来说汇编要好一点。详细代码参见附录。流程图参见附录图(9) 软件分析: 以C语言为例。系统的参数传递采用全局变量的形式 全局变量有: uchar output[4]; uchar input[4]; uchar led[16]={0x3f,0x06,0x5B,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x00}; uchar f0=1; uchar pass[4]={4,3,2,1}; sbit p0_0=P0^0; 数组output用于存储用于数码管输出的码值,input用于存储按键的键值led用于查表,存储数码管的对应编码,f0为密码配对标志,为1表示密码正确,否责密码不正确,pass用于存放密码,p0_0为P0.0口。 采用C语言与汇编混合编程,C作为主函数调用汇编子程序scan(),通过寄存器传递参数。 主要函数为scan(),完成对键盘的扫描并返回扫描的键值。Sodesw(),完成从键值到显示数码管码值的转换。display(),完成动态显示数码管。cmp (),完成输入密码与系统密码的比较,正确则开锁,错误不开。clean(),完成对输入的密码的清除。 各部分的工作,如流程图所示,图() 3.体会与结论 4.附录 方案一:C程序中有一个小错误,但是是致命的。作为学习只用,请你找出来。若是找不到,请联系红狐狸,zhaowei153@126.com。但是方案二的汇编实现是可以用的。 c语言代码: //mimasuo.c #include #define uchar unsigned char #define uint unsigned int extern uchar scan(void); uchar output[4]; uchar input[4]; uchar led[16]={0x3f,0x06,0x5B,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x00}; uchar f0=0; uchar pass[4]={4,3,2,1}; uchar toppass[4]={ 8,8,6,6}; sbit p0_0=P0^0; sbit p0_1=P0^1; sbit p0_2=P0^2; sbit p0_3=P0^3; void codesw(void) { int i; for(i=0;i<4;i++) { output[i]=led[input[i]]; } } void display(void) { char i; char k,j; uchar select; codesw(); select=0xfe; for(i=0;i<4;i++) { P3=select; P2=output[i]; for(k=0;k<=70;k++) { for(j=0;j<=10;j++); } select=~select; select<<=1; select=~select; } } void cmp(void) { char i; if(p0_3==0) { for(i=0;i<4;i++) { if(input[i]!=toppass[i]) break; } if(i>=4){f0=1;} else f0=0; } else { for(i=0;i<4;i++) { if(input[i]!=pass[i]) break; } if(i>=4){f0=1;} else f0=0; } } void clean(void) { int i; for(i=0;i<4;i++) input[i]=10; } void main(void) { uchar keyno; uchar keyno1; uchar counter=0; uchar expass=0; uchar extoppass=0; p0_0=1; p0_1=1; p0_2=1; clean(); while(1) { while(1) { display(); keyno=scan(); if((keyno>=0x0)&&(keyno<=0xf)) break; else ; } while(1) { keyno1=scan(); if((keyno>=0x0)&&(keyno1<=0xf)); else break; } if(keyno==0xe) { p0_0=1; f0=0; clean(); } if(keyno==0xf) { if(expass==2) { pass[3]=input[3]; pass[2]=input[2]; pass[1]=input[1]; pass[0]=input[0]; p0_1=1; expass=0; } else if((p0_3==0x0)&&(f0==0)) { cmp(); if(f0!=1){clean();} if(f0==1){counter=0;p0_3=1;p0_0=0; clean();} } else { counter++; if((counter)<=3) { cmp(); if(f0!=1) {clean();} if(f0==1){p0_0=0; clean();counter=0x0; } } else if(p0_0==0){counter=0;} else { for(keyno1=0;keyno1<=254;keyno1++) { for(counter=5;counter<=200;counter++) { p0_2=0; } p0_2=1; } clean(); } } } if(keyno==0xd) { if(f0==1) { expass=1; p0_1=0; } } if(keyno==0x0c) { if(counter>=4) { p0_3=0; extoppass=1; } } if(keyno==0xb) { clean(); } if((keyno>=0)&&(keyno<=9)) { input[3]=input[2]; input[2]=input[1]; input[1]=input[0]; input[0]=keyno; if(expass==1){expass++;} if(extoppass==1){extoppass++;} } } } 汇编代码: ;scan.asm $NOMOD51 NAME SCAN P0 DATA 080H P1 DATA 090H P2 DATA 0A0H P3 DATA 0B0H T0 BIT 0B0H.4 AC BIT 0D0H.6 T1 BIT 0B0H.5 EA BIT 0A8H.7 IE DATA 0A8H RD BIT 0B0H.7 ES BIT 0A8H.4 IP DATA 0B8H RI BIT 098H.0 INT0 BIT 0B0H.2 CY BIT 0D0H.7 TI BIT 098H.1 INT1 BIT 0B0H.3 PS BIT 0B8H.4 SP DATA 081H OV BIT 0D0H.2 WR BIT 0B0H.6 SBUF DATA 099H PCON DATA 087H SCON DATA 098H TMOD DATA 089H TCON DATA 088H IE0 BIT 088H.1 IE1 BIT 088H.3 B DATA 0F0H ACC DATA 0E0H ET0 BIT 0A8H.1 ET1 BIT 0A8H.3 TF0 BIT 088H.5 TF1 BIT 088H.7 RB8 BIT 098H.2 TH0 DATA 08CH EX0 BIT 0A8H.0 IT0 BIT 088H.0 TH1 DATA 08DH TB8 BIT 098H.3 EX1 BIT 0A8H.2 IT1 BIT 088H.2 P BIT 0D0H.0 SM0 BIT 098H.7 TL0 DATA 08AH SM1 BIT 098H.6 TL1 DATA 08BH SM2 BIT 098H.5 PT0 BIT 0B8H.1 PT1 BIT 0B8H.3 RS0 BIT 0D0H.3 TR0 BIT 088H.4 RS1 BIT 0D0H.4 TR1 BIT 088H.6 PX0 BIT 0B8H.0 PX1 BIT 0B8H.2 DPH DATA 083H DPL DATA 082H REN BIT 098H.4 RXD BIT 0B0H.0 TXD BIT 0B0H.1 F0 BIT 0D0H.5 PSW DATA 0D0H ?PR?scan?SCAN SEGMENT CODE PUBLIC scan RSEG ?PR?scan?SCAN scan: USING 0 MOV R3, #0FEH MOV R4, #0H MOV R1, #4H CLR PSW.5 L1: MOV A, R3 MOV P1, A MOV R5, #50 D1: MOV R6, #100 DJNZ R6, $ DJNZ R5, D1 MOV A, P1 ANL A, #0F0H MOV R2, #4 L2: JB ACC.4, N1 MOV 7EH, R4 SETB PSW.5 N1: INC R4 RR A DJNZ R2, L2 MOV A, R3 RL A MOV R3, A DJNZ R1, L1 BACK: JNB PSW.5, NO_KEY AJMP SCANOUT NO_KEY: MOV 7EH, #20H SCANOUT: MOV R7,7EH ?C0001: RET END 方案二: REL EQU 60H RELBUF EQU 61H KEYNO EQU 62H FKEY EQU 20H.0 F0_0 EQU 20H.1 ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV SP, #6FH ACALL CLEAN START: ACALL DISPLAY CLR FKEY ACALL SCAN JB FKEY, G1 SJMP START G1: ACALL SCAN JB FKEY, G1 MOV A, KEYNO CJNE A, #14, G2 AJMP G4 G2: CJNE A, #15, G3 ACALL CMP JNB F0_0, G4 CLR P0.0 LCALL DELAY1 CLR F0_0 ACALL CLEAN AJMP START G3: MOV 43H, 42H MOV 42H, 41H MOV 41H, 40H MOV 40H, KEYNO AJMP START G4: SETB P0.0 ACALL CLEAN AJMP START CMP: MOV REL, #00H MOV R0, #40H MOV R7, #4H CMP1: MOV DPTR, #PASS MOV RELBUF, @R0 MOV A, REL MOVC A, @A+DPTR CJNE A, RELBUF, CMPOUT INC REL INC R0 DJNZ R7, CMP1 SETB F0_0 CMPOUT: MOV REL, #00H RET SCAN: MOV R3, #0FEH MOV R4, #0H MOV R1, #4H CLR PSW.5 L1: MOV A, R3 MOV P1, A MOV R5, #1 ACALL DELAY MOV A, P1 ANL A, #0F0H MOV R2, #4 L2: JB ACC.4, N1 MOV KEYNO, R4 SETB PSW.5 N1: INC R4 RR A DJNZ R2, L2 MOV A, R3 RL A MOV R3, A DJNZ R1, L1 BACK: JNB PSW.5, NO_KEY SETB FKEY AJMP SCANOUT NO_KEY: CLR FKEY SCANOUT: RET CODESW: MOV R0, #40H MOV R1, #50H MOV R7, #4 SW1: MOV DPTR, #TAB MOV A, @R0 MOVC A, @A+DPTR MOV @R1, A INC R0 INC R1 DJNZ R7, SW1 RET DISPLAY: ACALL CODESW MOV A, #0FEH MOV R5, #4 MOV R0, #50H DIS1: MOV P3, A MOV P2, @R0 ACALL DELAY INC R0 SETB C RLC A DJNZ R5, DIS1 RET CLEAN: MOV 40H, #0AH MOV 41H, #0AH MOV 42H, #0AH MOV 43H, #0AH RET DELAY: MOV R7, #25 D1: MOV R6, #100 DJNZ R6, $ DJNZ R7, D1 RET DELAY1: MOV R7, #245 D11: MOV R6, #225 D12: DJNZ R6, D12 DJNZ R7, D11 RET PASS: DB 4,3,2,1 TAB: DB 3FH,06H,5BH,4FH,66H DB 6DH,7DH,07H,7FH,6FH DB 40H,40H,40H,40H,86H,8EH END 图(1)系统硬件组成图 显示的数字 LED码 0 3FH 1 06H 2 5BH 3 4FH 4 66H 5 6DH 6 7DH 7 07H 8 7FH 9 6FH - 40H 图(2)LED编码表 参考电路图: 图(3)总体电路图 图(4)键盘接口电路 图(5)LED显示接口电路 图(6)开锁显示等电路 图(7)输入密码演示 图(8)锁开启电路 5.参考文献 ...展开收缩
(系统自动生成,下载前可以参看下载内容)

下载文件列表

相关说明

  • 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
  • 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度
  • 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
  • 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
  • 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
  • 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.
 相关搜索: 8051 LCD1602
 输入关键字,在本站1000多万海量源码库中尽情搜索: