计算机控制系统课程设计论文 .doc
基于单片机实现的电子密码锁一:电子密码锁的特点 电子密码锁是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。它的种类很多,有简易的电路产品,也有基于芯片的性价比较高的产品。现在应用较广的电子密码锁是以芯片为核心,通过编程来实现的。其性能和安全性已大大超过了机械锁,主要特点如下: 1.保密性好,编码量多,远远大于弹子锁。随机开锁成功率几乎为零。2.密码可变。 用户可以经常更改密码,防止密码被盗,同时也可。3.以避免因人员的更替而使锁的密级下降。 4.误码输入保护。当输入密码多次错误时,报警系统自动启动,防止试探密码。二.设计目标 本次设计使用ATMEL公司的AT89C51实现一基于单片机的电子密码锁的设计,其主要具有如下功能: 1.设置6位密码,密码通过键盘输入,若密码正确,则将锁打开。 2.密码可以由用户自己修改设定(只支持6位密码),锁打开后才能修改密码。修改密 3.码之前必须再次输入旧密码,在输入新密码。 4.报警、锁定键盘功能。密码输入错误数码显示器会出现错误提示,若密码输入错误次数超过3次,蜂鸣器报警并且锁定键盘。三. 设计的具体体现1. 系统概述 电子密码锁的设计主要由三部分组成:4×4矩阵键盘接口电路、密码锁的控制电路、输出八段显示电路。另外系统还有LED提示灯,报警蜂鸣器等。 密码锁设计的关键问题 1.密码输入功能:按下一个数字键,一个“”就显示在最右边的数码管上,同时将先前输入的所有“”向左移动一位。 2.密码清除功能:当按下清除键时,清除前面输入的最后一位值,并清对应显示。 3.密码更改功能:将输入的值作为新的密码。 4.开锁功能:当按下开锁键,系统将输入与密码进行检查核对,如 AT89C 51数码管蜂鸣器LED4×4键盘复位电路果正确锁打开,否则不打开。电源系统结构 图一 系统组成如图二所示系统主要由AT89C51(51系列)、六位位数码管、蜂鸣器、LED、4×4矩阵键盘、复位电路等组成。系统可行性分析系统工作原理分析:使用AT59C51单片机、4×4矩阵键盘、LED、蜂鸣器等。矩阵键盘分别为0、1、2、3、4、5、6、7、8、9、BACK、ENTER、SZ、CLOSE、TCSZ。输入密码时,LED显示电路显示为“”,当密码输入完毕按下ENTER键时,对输入密码与设定的密码进行比较,若密码正确则LED显示电路显示为“开锁指示灯亮”提示锁打开;若密码不正确,LED显示电路显示提示“密码错误指示灯亮”,若连续3次输入不正确,则发出警报声同时锁定键盘。在输入正确密码后,按下修改键时,输入旧密码,此时输入正确的旧密码,则显示“”电路会有提示输入新密码在输入新密码后,输入新密码后按“ENTER”在修改密码的过程中,如果一开始输入的旧密码错误显示电路会显示提示。 系统中CEL键用于退格,在输入密码时,若输入错误且未按下Enter键,按下CLE可以删除刚输入的密码,然后再次输入。为了防止恶意尝试,系统才用若连续输入3次错误密码则发出报警声,且锁定键盘,可以提高系统的安全系数,同时也能够保护合法用户的正常使用。2.单元电路设计、仿真与分析(1)AT89C51 主要特性 8031 CPU与MCS-51 兼容 4K字节可编程FLASH存储器(寿命:1000写/擦循环) 全静态工作:0Hz-24KHz 三级程序存储器保密锁定 128*8位内部RAM 32条可编程I/O线 两个16位定时器/计数器 6个中断源 可编程串行通道 低功耗的闲置和掉电模式 片内振荡器和时钟电路 管脚说明VCC:供电电压。 GND:接地。 图二 P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。 P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。 P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。 P3口也可作为AT89C51的一些特殊功能口,如下表所示:管脚 备选功能:P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 /INT0(外部中断0)P3.3 /INT1(外部中断1)P3.4 T0(记时器0外部输入)P3.5 T1(记时器1外部输入)P3.6 /WR(外部数据存储器写选通)P3.7 /RD(外部数据存储器读选通) P3口同时为闪烁编程和编程校验接收一些控制信号。 RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效 /PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。 /EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。 XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入 XTAL2:来自反向振荡器的输出。(2)4×4矩阵键盘图三如图所示,本系统采用4×4矩阵键盘,16个按键分为输入数字键:0、1、2、3、4、5、6、7、8、9;功能键BACK、ENTER、SZ、CLOSE、TCSZ。矩阵键盘。(3)复位电路 图四单片机的复位电路非常重要,一般单片机刚开始工作时需要复位以完成内部的初始化,而当程序出错误,程序跑飞,死机等非正常状态时,更需要使单片机重新工作。时钟电路工作后,在REST管脚上加两个机器周期的高电平,芯片内部开始进行初始复位如图四。该复位电路还兼有手动复位,在通电的瞬间,在RC微分过程中,RST端出现正脉冲,从而使单片机复位。C3和R6的值随时钟频率的变化而变化,当采用6MHz时钟频率时,C3=22uF,R6=2K(一般常取C3=10uF,R6=10K)当采用12MHz时钟频率时,一般常取C3=0.47uF,R6=1K.(4)振荡电路 图五时钟电路用于产生单片机工作所需的时钟信号,而时序是指令执行中各个信号的相互关系。单片机本身就如一个复杂的同步时钟电路,为了保证单片机同步工作的实现,电路应在唯一的时钟信号控制下严格的按时序进行工作。所以时钟电路的质量会直接形象单片机的工作稳定性和可靠性。本设计晶振选择频率为12MHZ,电容选择30pF如图(34)。经计算得单片机工作胡机器周期为:12×(1÷12M)=1us。(5)数码管 图六本设计采用两个4位8段共阴极数码管。由于由单片机直接驱动的直流电流不够,数码管亮度显得不足,所以加上74LS373用以放大电流。(6)发光二极管LED 图七由于LED使用P3口驱动 3.元器件列表元器件规格/型号数量四位八段共阴数码管3461AFR1-B102电阻4.7k8电阻5108电阻1k2电解电容0.47uF/50V1瓷片电容30pF2单片机AT89C511驱动芯片74LS3731三.系统软件设计开始初始化开锁修改密码正确输入旧密码开锁出错报警原密码相同返回设新密码1.主程序流程图 N Y N Y 图八2.键功能程序流程图如图键功能程序键值=09?键值=开锁?键值=确认?键值=设置? 返回密码输入程序确认程序设置程序开锁程序 Y N Y N Y N Y N 图九3.存储单元分配30H-35H 显示缓冲区41H-45H 输入暂存区50H-55H 原始密码存储单元36H 临时单元,存储位码内容37H、39H 在按键子程序中用于内外循环计数38H 按键子程序存放查表后得到的编码3AH 临时单元,存放逐行开的编码3BH 密码错误次数计数器40H 在按键子程序中存放键盘的值R0 在显示子程序中作显示缓冲区的指针R2 数字键输入次数计数器R4 在中断中作计数器R5、R6 延时子程序循环计数器R7 显示子程序六个数码管逐个显示计数器20H.0=1 密码正确标志位20H.1=1 设置键按下标志位20H.2=1 当前输入的是新密码标志位20H.3=1 密码三次错误报警开启标志位源程序 ;主程序ORG 0000HAJMP STARTORG 000BHAJMP DISTORG 0030HSTART:MOV TMOD, #01HMOV TH0, #3CHMOV TL0, #0B0HSETB EASETB ET0 ACALL XSCSH ;显示缓冲区初始化显示6个横线ACALL CSHMOV 3BH, #0MOV 50H, #1MOV 51H ,#2MOV 52H, #3MOV 53H, #4MOV 54H, #5MOV 55H,#6 ;原始密码设置为123456LOOP: ACALL DISPACALL AJAJMP LOOP;显示子程序DISP:MOV R7, #6MOV R0, #30HMOV DPTR, #TABMOV 36H, #01HLOOP1:MOV A,R0MOVC A, A+DPTRMOV P0, AMOV P2, 36HACALL DELAYINC R0MOV A, 36HRL AMOV 36H,ADJNZ R7,LOOP1RET;按键判断子程序,4*4循环 AJ:MOV P1, #0F0HMOV A, P1CJNE A, #0F0H, D1AJMP D16 D1:ACALL DISPMOV A, P1CJNE A, #0F0H, D2AJMP D16 D2:MOV 3AH, #0FEHMOV 40H, #0MOV DPTR, #DABMOV 39H, #4 D3:MOV 37H, #4MOV P1, 3AH D4:MOV A, 40HMOVC A, A+DPTRMOV 38H, AMOV A, P1CJNE A, 38H, D5AJMP D14 D5:INC 40HDJNZ 37H, D4MOV A, 3AHRL AMOV 3AH, ADJNZ 39H, D3SJMP D16 D14:ACALL PD D15:ACALL DISPMOV P1, #0F0HMOV A,P1CJNE A, #0F0H, D15D16:RET;按键功能子程序 PD:MOV A, 40HCJNE A,#0,F1ACALL DINAJMP F16 F1:CJNE A, #1, F2ACALL DINAJMP F16 F2:CJNE A, #2, F3ACALL DINAJMP F16 F3:CJNE A, #3, F4ACALL DINAJMP F16 F4:CJNE A, #4, F5ACALL DINAJMP F16 F5:CJNE A, #5, F6ACALL DINAJMP F16 F6:CJNE A, #6, F7ACALL DINAJMP F16 F7:CJNE A, #7,F8ACALL DINAJMP F16 F8:CJNE A, #8, F9ACALL DINAJMP F16 F9:CJNE A, #9, F10ACALL DINAJMP F16 F10: CJNE A, #10, F11ACALL BACKAJMP F16 F11:CJNE A, #11, F12ACALL ENTERAJMP F16 F12:CJNE A, #12, F13ACALL SZAJMP F16 F13:CJNE A, #13, F14ACALL CLOSEAJMP F16 F14:CJNE A, #14, F15ACALL TSZAJMP F16 F15:CJNE A,#15,F16 F16:RET;数字键输入子程序 DIN:JB 20H.3, F21 ;定时开始,按键不起作用CJNE R2, #6, F20 ;已输入六个数,数字键无效AJMP F21 F20: INC R2;输入数字个数+1MOV 35H, 34HMOV 34H, 33HMOV 33H, 32HMOV 32H, 31HMOV 31H, 30HMOV 30H, 40H F21:RET;退格键子程序 BACK:JB 20H.3, L1 ;定时开始,按键不起作用CJNE R2, #0, L0;有数字输入,按键起作用AJMP L1 L0:DEC R2MOV 30H, 31HMOV 31H, 32HMOV 32H, 33HMOV 33H, 34HMOV 34H, 35HMOV 35H, #17 L1:RET;确定键输入子程序 ENTER:JB 20H.3, L5 ;定时开始,按键不起作用CJNE R2, #6, L5 ;数字输入不满6个,按键无效MOV R2, #0;可以重新输入数字MOV 41H, 30H ;输入数字存入输入暂存区MOV 42H, 31HMOV 43H, 32HMOV 44H, 33HMOV 45H, 34HMOV 46H, 35HACALL XSCSHJNB 20H.2,D6;判断当前是否为新密码输入ACALL XMM AJMP L5 D6:MOV A, 41H;输入暂存区与密码比较CJNE A, 50H, L3MOV A, 42HCJNE A,51H,L3MOV A, 43HCJNE A, 52H, L3MOV A, 44HCJNE A, 53H, L3MOV A, 45HCJNE A, 54H, L3MOV A, 46HCJNE A, 55H, L3MOV R2, #6 ;锁开状态,不允许输入数字CLR P3.1SETB P3.0SETB P3.4 SETB 20H.0;密码正确标志位JB 20H.1, L2;判断设置键是否按下CLR 20H.2 AJMP L5 L2:SETB 20H.2 ;输入新密码状态标志位MOV R2, #0 ;允许输入数字AJMP L5 L3:INC 3BH;密码错误次数+1MOV A, 3BHCJNE A, #3, L4 ;判断密码输入错误几次CLR P3.3SETB TR0;密码输入错误3次,启动定时SETB 20H.3 ;定时开始标志位AJMP L5 L4:CLR P3.5CLR P3.4 L5:RET;关门键子程序 CLOSE:JB 20H.3, L6 ;定时开始,按键不起作用JNB 20H.0, L6 ;该按键只在开门状态有效ACALL XSCSHACALL CSH L6: RET;设置键输入子程序 SZ:JB 20H.3, L7 ;定时开始,按键不起作用JNB 20H.0, L7 ;该按键只在开门状态有效SETB 20H.1 ;设置键有效标志位MOV R2, #0 ;按下设置键,允许数字输入CLR P3.2 L7: RET;退出设置键子程序 TSZ:JB 20H.3, L8;定时开始,按键不起作用JNB 20H.1, L8 ;该按键在设置状态有效ACALL XSCSHSETB P3.2SETB P3.3SETB P3.4CLR 20H.1 ;退出设置状态MOV R2, #6 ;回到开门状态,不允许数字输入L8: RET;新密码输入子程序 XMM:MOV 50H, 41HMOV 51H, 42HMOV 52H, 43HMOV 53H, 44HMOV 54H, 45HMOV 55H, 46H ;CLR P3.1SETB P3.0SETB P3.2CLR 20H.2 MOV R2, #6 ;开门状态,不允许数字输入RET;显示缓冲区初始化子程序 XSCSH:MOV 30H, #17MOV 31H, #17MOV 32H, #17MOV 33H, #17MOV 34H, #17MOV 35H, #17RET;密码锁基本功能初始化 CSH:MOV R2, #0MOV R4, #200CLR 20H.0CLR 20H.1CLR 20H.2CLR 20H.3CLR P3.0SETB P3.1SETB P3.2SETB P3.3SETB P3.4RET;中断子程序 DIST:MOV TH0, #3CHMOV TL0, #0B0H ;初值重装DJNZ R4, L9ACALL XSCSHACALL CSHCLR TR0 ;关中断 L9:RETI;延时子程序,延时2ms DELAY:MOV R6, #5 D17:MOV R5, #200 D18:DJNZ R5, D18DJNZ R6, D17 RET TAB:DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 6FH, DB 77H, 7CH, 39H, 5EH, 79H, 71H, 08H, 40H, 0BFH, 086H,DB 0DBH, 0CFH, 0E6H, 0EDH, 0FDH, 087H, 0FFH, 0EFH DAB:DB 0EEH, 0DEH, 0BEH, 7EH, 0EDH, 0DDH, 0BDH, 7DH, DB 0EBH, 0DBH, 0BBH, 7BH, 0E7H, 0D7H, 0B7H, 77HEND四.心得体会及建议 对于本次课程设计基本上达到了课题的要求。因为在该电路中用到了AT89C51单片机,74LS373,数码管作为密码显示,LED作为状态指示灯,单片机的震荡电路和复位电路均为常用的电路模型。系统在这但是我们对每一个模块的分析还是分析的非常的透彻的。其中有4×4矩阵键盘接口电路、密码锁的控制电路、输出八段显示电路、另外系统还有LED提示灯、报警蜂鸣器等。在这些模块分析中感到最困惑的就是元器件的选择和参数的确定。也就是考虑接近实际的情况。在实际中选择最合适电路阻值元件不是最好的选择,因为要考虑到该元件的成本问题,比如说在电路中需要一个无穷大的电阻,但我们平时选择兆欧级的电阻。还有每一级运算产生的误差分析。都是和纯粹理论有区别的。 在本次课程设计中最主要应用的是关于AT89C51的相关知识,而且对其中的中断调用应、驱动链接、最小模式系统、对传输端口的分配和存储单元分配应是这次课程设计的重点和难点。在本次课程设计中遇到了多个变量控制输出结果时,在思维方法上应用了控制变量法思路进行分析问题的。 通过这几周的课程设计,我对一些专业知识和电子设计有了更深的了解,同时也尝试着去应用自己的所掌握的知识。本次电子课程设计主要是对本学年学习的微型计算机控制系统和单片机技术及应用的综合应用,同时加上电路等知识,设计一些简单的模块电路。经过几天的奋战,我感受很深。 电子课程设计不仅给我们提供了一个很好的展现应用自己所掌握的知识的平台,又是检验自己所学知识的一次考核。我们运用各自在各方面的优势中和起来,形成了一个团队。通过团队力量,才使设计得以完成。可以说,我们两个人是一个不可或缺的整体,少了任何一个人都是无法完成任务的。 总之,通过这次电子课程设计,我不仅对自己的知识有了更好的掌握和应用,更了解到团队精神的力量。参考文献:1. 杨振江,冯军单片机原理与实践指导北京:中国电力出版社,20082.