《单片机_密码锁1毕业设计课程设计.doc》由会员分享,可在线阅读,更多相关《单片机_密码锁1毕业设计课程设计.doc(21页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、单片机原理及应用课程设计报告课 题:电子密码锁班 级:学 号:姓 名:指导老师:设计时间:2008.9.17-10.10概 述本实验利用单片机的定时器/计数器定时和记数的原理,结合DVCC实验箱上的集成电路芯片AT89C51、LED数码管以及实验箱上的按键来设计密码锁。将软、硬件有机地结合起来,使得系统能够正确地开启密码锁和更改密码,数码管能够正确地显示输入密码。本实验设计了16个开关按键,每次按下键需要检验是否确实按下,若是则输入密码;否则,反之。关键字:AT89C51、M24C01、7段LED数码管、74LS240、与非门、4*4矩阵键盘等目 录概述.2第一章 设计要求.4第二章 设计方案
2、.5第三章 设计程序.10第四章 Proteus仿真.18第五章 硬件制作.19收获与体会 .20附录 .20参考文献 .20第一章 设计要求题目:电子密码锁选题后先在proteus上进行软件仿真设计,在仿真实现的基础上,要求完成部分硬件模块的制作和系统联调,具体要求见选题。设计流程:查阅有关文献资料拟定电路原型依据题目功能要求,进行电路元件选择画出原理电路软件仿真分析验证设计方案实际部分硬件制作、系统联调写出设计报告。时间安排:选题结束后,自己安排时间进行课题资料查阅、原理方案设计,然后进行软件仿真(可以利用自己的PC机或利用实验室开放时间段预约后到实验室进行仿真实验),完成上述工作后预约第
3、一阶段检查验收,验收合格后,凭指导教师验收签字单到实验中心领取器材进行硬件制作部分,完成调试后,经指导教师验收签字,最后,撰写课程设计总结报告并提交到实验中心。密码锁具体设计要求:利用单片机设计一个密码锁,要求可设定从1位到8位的密码,从键盘键入正确密码才可更改密码或开锁;输入三次错误密码电路就不断报警;开锁信号输出口用发光二极管表示。同时输入密码后要按确认键才有效。1可设置密码,掉电密码能保存;2按键确实被按下时发出一下提示音;3设置新密码前需校验旧密码;发挥部分:密码用密文保存在存储器中(加密方法可采用DES算法)可选器件:51系列单片机、24C01、7段LED数码管、74LS244或74
4、LS240、与非门等第二章 设计方案采用一种是用以AT89S51为核心的单片机控制方案。利用单片机灵活的编程设计和丰富的IO端口,及其控制的准确性,不但能实现基本的密码锁功能,还能添加调电存储、声光提示甚至添加遥控控制功能。其原理如图12所示。89S51单片机矩阵键盘控制输入错误锁定键盘延时报警控制电路AT24C02掉电存储开锁控制电路指示电路串口显示电路图21单片机控制方案 各个功能单元设计如下: 1 键盘功能及工作原理PC键盘功能主要有按键识别、去抖、重键处理、发送扫描码、自动重发、接收键盘命令、处理命令等。键盘有编码键盘和非编码键盘。编码键盘程序设计简单,但硬件电路复杂,价格较高;非编码
5、键盘用软件来实现识别键、编码转换、去抖等功能,硬件电路简单,价格便宜。现代微机系统中广泛采用非编码键盘。PC键盘多采用18行8列的二维矩阵行列结构。采用行扫描法识别按下的按键。本设计就采用行列式键盘,同时也能减少键盘与单片机接口时所占用的I/O线的数目,在按键比较多的时候,通常采用这样方法。其原理如图所示。89s51D0D1D2D3D4D5D6D7D8D9D105.1K X 45.1K X 4VCC图 行列式键盘原理电路图每一条水平(行线)与垂直线(列线)的交叉处不相通,而是通过一个按键来连通,利用这种行列式矩阵结构只需要N条行线和M条列线,即可组成具有NM个按键的键盘。在这种行列式矩阵键盘非
6、键盘编码的单片机系统中,键盘处理程序首先执行等待按键并确认有无按键按下的程序段。当确认有按键按下后,下一步就要识别哪一个按键按下。对键的识别通常有两种方法:一种是常用的逐行扫描查询法;另一种是速度较快的线反转法。对照图23所示的44键盘,说明线反转个工作原理。首先辨别键盘中有无键按下,有单片机I/O口向键盘送全扫描字,然后读入行线状态来判断。方法是:向行线输出全扫描字00H,把全部列线置为低电平,然后将列线的电平状态读入累加器A中。如果有按键按下,总会有一根行线电平被拉至低电平从而使行线不全为1。判断键盘中哪一个键被按下使通过将列线逐列置低电平后,检查行输入状态来实现的。方法是:依次给列线送低
7、电平,然后查所有行线状态,如果全为1,则所按下的键不在此列;如果不全为1,则所按下的键必在此列,而且是在与零电平行线相交的交点上的那个键。按键的操作面板如图图23所示。共计数字键10个,功能键6个。键盘上还有3个指示灯和一个蜂鸣器。图 按键操作面板示意图按键包括有数字键和功能键。数字键包括09键,用于密码的输入。功能键有密码修改键和确认键。具体的功能定义如下表。按键键名功能说明19键数字键输入密码A键确认键密码输入完成B键密码修改键修改密码硬件设计由实验要求采用4行4列的矩阵行列结构。89c51单片机有4个8位I/O端口,采用P1口低四位作为行扫描线,高四位作为列扫描线。软件设计 消抖及重键处
8、理:通过软件上延时程序来消除抖动;采用后按键优先处理,即多键同时按下时,只重复发送最后按下键的扫描码。 程序包括键盘扫描子程序、发送键码子程序、发送数据子程序、接收命令子程序、主程序等。键盘扫描子程序用于扫描键状态,将被按键的位置号存入缓冲器中;发送键码子程序用于将缓冲区键的接通码或断开码发送给计算机键盘接口或者存在键盘密码缓冲区中;发送数据子程序用于将数据发给计算机键盘接口;接收命令子程序用于接收计算机键盘接口发来的键盘命令;主程序用于系统初始化,子程序调度,锁定状态的显示等。2显示电路设计考虑到实验室只能提供四位一体的阴极LED显示管,所以设计时只设计了四位的密码。LED显示管电路连接图如
9、下图所示,图中1234为位选码,低电平有效,在其每一位前加了一个反相器做驱动,再接到单片机的P2口的低四位。其段选码接了两个74LS240做驱动,74LS240也有反相作用,因此在编程时特别做了处理,段选码的8位接到单片机的P1口。图2-4 显示器面板接线图3开锁及密码修改单元通过单片机送给开锁执行机构,电路驱动电磁锁吸合,从而达到开锁的目的。其原理如图25所示。单片机微控制器开锁驱动电路电磁锁密码正确?Y返回N图25密码锁开锁机构示意图当用户输入的密码正确而且是在规定的时间(普通用户要求在12s内输入正确的密码,管理员要求在5s输入正确的密码)输入的话,单片机便输出开门信号,送到开锁驱动电路
10、,然后驱动电磁锁,达到开门的目的。其实际电路如图25所示。在本次设计中,基于节省材料的原则,暂时用发光二极管代替电磁锁,发光管亮,表示开锁;灭,表示没有开锁。在按下密码修改键后,系统会要求输入原始密码,正确后再输入新密码,密码修改成功则单片机P3.1所接的发光二极管会亮3秒。4AT24C02掉电存储单元的设计掉电存储单元的作用是在电源断开的时候,存储当前设定的单价信息。AT24C02是ATMEL公司的2KB字节的电可擦除存储芯片,采用两线串行的总线和单片机通讯,电压最低可以到2.5V,额定电流为1mA,静态电流10Ua(5.5V),芯片内的资料可以在断电的情况下保存40年以上,而且采用8脚的D
11、IP封装,使用方便。其电路如图26所示。图26 掉电存储电路原理图图中R8、R10是上拉电阻,其作用是减少AT24C02的静态功耗,由于AT24C02的数据线和地址线是复用的,采用串口的方式传送数据,所以只用两根线SCL(移位脉冲)和SDA(数据/地址)与单片机传送数据。每当设定一次单价,系统就自动调用存储程序,将单价信息保存在芯片内;当系统重新上电的时候,自动调用读存储器程序,将存储器内的单价等信息,读到缓存单元中,供主程序使用。由于实验室没有这类器件,因此在实际制作过程中这项功能省略。5系统原理框图51系列单片机4*4键盘8位LED显示ROM存储器扬声器复位电路晶振电路发光二极管等 图2-
12、7 系统原理框图7 设计总体电路图图2-8 设计总体电路图第三章 设计程序1模块介绍该计程计价系统的软件设计分为以下几个模块:(1)主程序模块主程序主要完成初始化、设置中断向量、检查有无按键按下、以及调用显示等等。主程序的流程图如下所示。(2)键盘扫描及识别子程序 键盘采用查询的方式,放在主程序中,当没有按键按下的时候,单片机循环主程序,一旦有按键按下,便转向相应的子程序处理,处理结束再返回。(3)调电存储服务程序当比较密码的时候,需要读AT24C02程序,将存储在芯片内的数据读到RAM中,然后和输入的密码相比较。当修改密码的时候,需要把输入的密码保存到AT24C02中。(4)显示子程序(5)
13、延时模块2.程序流程图 (1)主程序流程图及密码修改程序流程图如图31、32所示。开始初始化有键按下?调用显示启动定时识别按键全部按完?超时?比较密码开门开始自动清除3次?锁定NNYYYYNN按下F2启动定时输入密码存入缓冲再输入一次比较密码调用24C02调用显示按F2退出Y重新输入N图31 主程序流程图图32 修改密码流程图 3程序使用汇编编程如下:;*; NLW 电子密码锁程序;*;以下8个字节显示存储区LED_BIT_1 EQU 30HLED_BIT_2 EQU 31HLED_BIT_3 EQU 32HLED_BIT_4 EQU 33H;以下8个字节存放初始密码WORD_1 EQU 34
14、HWORD_2 EQU 35HWORD_3 EQU 36HWORD_4 EQU 37H;以下8个字节存放键盘输入的8位密码KEY_1 EQU 38HKEY_2 EQU 39HKEY_3 EQU 3AHKEY_4 EQU 3BHVAL EQU 3EH ;键值COUNT_1 EQU 3FH ;密码输入次数;*;以下为初始化程序,包括数据存储空间初始化,设置初始密码 ORG 0000H AJMP START ORG 0100HSTART: MOV VAL,#00H MOV R0,#00H MOV R1,#00H MOV R2,#00H MOV R3,#00H MOV R4,#00H MOV R5,#
15、00H MOV R7,#00H MOV R6,#00H MOV A,#00H MOV B,#00H MOV KEY_1,#00H ;输入密码存储区清0 MOV KEY_2,#00H MOV KEY_3,#00H MOV KEY_4,#00H MOV WORD_1,#00H ;设置初始密码为1234 MOV WORD_2,#01H MOV WORD_3,#02H MOV WORD_4,#03H MOV P3,#00H;*; 主程序开始A0: MOV LED_BIT_1,#0F9H ;显示存储区 开始显示1234 MOV LED_BIT_2,#0A4H MOV LED_BIT_3,#0B0H MO
16、V LED_BIT_4,#99H MOV COUNT_1,#03H ;密码错误次数置三 LCALL DISP ;调用数码显示子程序1234 等待按键 LCALL LSCAN ;调用按键程序 CJNE R3,#0AH,A4 ;是否为ENT键(#号)不相等则跳转*号重设密码键 LCALL LE0 ;检测到“ENT”不显示 等待密码输入 LCALL DISPA00: LCALL INPUT1 ;转入密码输入程序 INPUT1A1: LCALL LSCAN ;密码输入完毕 检测“ENT” LCALL DISP CJNE R3,#0AH,A1 ;检测到“ENT” 则比较 LCALL DISP ;显示 -
17、 LCALL LE0 ;显示区清空 LCALL COMPA ;转入密码比较程序COMPA CJNE R6,#01H,A2 ;返回值R6为1正确开锁否则调至A2检查密码错误次数 LCALL OPE ;密码正确 调用开锁程序 LJMP A0 ;开锁后返回A0A2: DJNZ COUNT_1,A3 ;三次错误则报警 LJMP ALARM A3: LCALL LE_NO ;错误未达三次则显示NO 返回密码输入程序 LCALL DISP LCALL LE0 ;密码输入错误显示NO后可继续输入密码 LJMP A00 ;未满三次继续调用密码输入程序A4: CJNE R3,#0BH,A0 ;是否为“CHAN”
18、修改密码键 *键 LCALL LE0 LCALL DISP A5: LCALL INPUT1A6: LCALL LSCAN CJNE R3,#0AH,A6 ;旧密码输入完毕按确认再进行比较 LCALL COMPA CJNE R6,#01H,A8 ;返回值R6 为1则正确 错误则跳至A8检测错误次数A7: LCALL LE8 LCALL DISP ;旧密码正确显示8 LCALL LE6 ;显示6后要按确认键再输入新密码 LCALL DISP LCALL LSCAN CJNE R3,#0AH,A7 ;检测确认键 LCALL LE0 LCALL DISP LCALL CHAN ;新密码输入OK1:
19、LCALL LSCAN ;新密码输入完毕按确认键 CJNE R3,#0AH,OK1 LCALL LE_OK ;显示“OK”20次 SETB P3.1 MOV 40H,#20OK1_1: LCALL DISP DJNZ 40H,OK1_1 CLR P3.1 ;绿灯亮3秒 AJMP A0 ;密码修改成功 返回A0A8: LCALL LE_NO ;密码校验错误 显示“NO” LCALL DISP A9: DJNZ COUNT_1,A10 ;校验三次错误报警 LJMP ALARM ;密码三次错误调用报警程序A10: LCALL LE0 LCALL DISP LCALL LSCAN AJMP A5;*;
20、 读键值子程序LSCAN: ACALL KS1 ;调用判别有无按键闭合子程序 CJNE A,#0FH,LK1 ;有键闭合,则转LK1 SJMP LSCANLK1: ACALL DLY_S ;调用程序延时,消除抖动 ACALL KS1 ;消抖后再次判断是否有键闭合 CJNE A,#0FH,LK2 ;有键闭合,转LK2 AJMP LSCANLK2: MOV R2,#0EFH ;键盘列扫描模式,先扫描第一列 MOV R5,#00H ;初始扫描第一列,列号为0LK3: MOV A,R2 ;使第一列为1,检测有无按键 MOV P1,A MOV A,P1 MOV B,A JB ACC.0,NEXT1 ;P
21、3第0位为1,说明无键按下,转至NEXT1,即下一行 MOV A,#0 ;P3第0位为0,有键按下,行起始行键号为0 AJMP LKP ;跳转至LKP,计算键号NEXT1: JB ACC.1,NEXT2 ;P3第1位为1,说明无键按下,转至NEXT2,即下一行 MOV A,#4 ;P3第1位为0,有键按下,行起始行键号为4 AJMP LKP ;跳转至LKP,计算键号NEXT2: JB ACC.2,NEXT3 ;P3第2位为1,说明无键按下,转至NEXT3,即下一行 MOV A,#8 ;P3第2位为0,有键按下,行起始行键号为8 AJMP LKP ;跳转至LKP,计算键号NEXT3: JB AC
22、C.3,NEXT ;P3第3位为1,说明无键按下,转至NEXT,即下一列 MOV A,#12 ;P3第3位为0,有键按下,行起始行键号为12 AJMP LKP ;跳转至LKP,计算键号LKP: ADD A,R5 ;行起始键号与列号之和为键号LK4: MOV VAL,A MOV R3,A SETB P3.0 LCALL DLY CLR P3.0 RETNEXT: INC R5 ;指向下一列,列号加1 MOV A,R2 JNB B.7,DONE ;是否4列全扫描完毕 RL A ;没有,准备扫描下一列 MOV R2,A AJMP LK3DONE: AJMP LSCAN ;回到键扫程序开始处KS1:
23、MOV P1,#0FH ;将所有的列都置1,并将低四位作为输入口 MOV A,P1 ;读取行状态 RET ;*; 新密码输入程序CHAN: MOV R0,#WORD_1 ;原始密码第一位地址赋给R0 MOV R4,#04H ;密码位数给R4CHAN1: LCALL LSCAN LCALL SHIFTL LCALL DISP MOV R0,VAL DJNZ R4,CHAN2 RETCHAN2: INC R0 ;4位密码未输入完则转回继续输入 AJMP CHAN1;*; 密码输入程序INPUT1: MOV R4,#04H MOV R0,#KEY_1INPUT: LCALL LSCAN ;没键按下时
24、处理 JNB P1.0,INPUT_3 ;无按键则转INPUTJNB P1.1,INPUT_3JNB P1.2,INPUT_3JB P1.3,INPUTINPUT_3:MOV R0,VAL ;用来保存密码 INC R0 LCALL SHIFTL ;显示左移程序 LCALL DISP ;调用显示程序 DJNZ R4,INPUT ;8位密码是否输入完毕 INPUT_2:RET;*; 密码比较程序COMPA: MOV A,KEY_1 ;输入密码暂存第一位地址给A CJNE A,WORD_1,COMPA_1 ;不相等则跳出赋R6为0 MOV A,KEY_2 CJNE A,WORD_2,COMPA_1
25、MOV A,KEY_3 CJNE A,WORD_3,COMPA_1 MOV A,KEY_4 CJNE A,WORD_4,COMPA_1 MOV R6,#01H ;密码正确则赋R6为1,返回 AJMP COMPA_2COMPA_1:MOV R6,#00H COMPA_2:RET ;*; 开锁程序OPE: SETB P3.0 ;开锁 红灯亮 同时显示 LCALL LE8 LCALL DISP LCALL DLY_L ;调用延时程序 CLR P3.0 MOV COUNT_1,#03H RET;*; 密码3次错误报警程序ALARM:SETB P3.2 LCALL LE_NO2 LCALL DISP L
26、CALL DLY_L CLR P3.2 LJMP A0;*; 以下为各种显示赋值程序LE8: MOV LED_BIT_1,#80H ;显示存储区 显示8888 MOV LED_BIT_2,#80H MOV LED_BIT_3,#80H MOV LED_BIT_4,#80H RETLE6: MOV LED_BIT_1,#82H ;显示存储区 显示6666 MOV LED_BIT_2,#82H MOV LED_BIT_3,#82H MOV LED_BIT_4,#82H RETLE_NO: MOV LED_BIT_1,#0FFH ;显示存储区 显示NO MOV LED_BIT_2,#0FFH MOV
27、 LED_BIT_3,#0C0H MOV LED_BIT_4,#0C8H RETLE_NO2:MOV LED_BIT_1,#0C0H ;显示存储区 显示NONO MOV LED_BIT_2,#0C8H MOV LED_BIT_3,#0C0H MOV LED_BIT_4,#0C8H RETLE0: MOV LED_BIT_1,#0FFH ;显示存储区 显示空 MOV LED_BIT_2,#0FFH MOV LED_BIT_3,#0FFH MOV LED_BIT_4,#0FFH RETLE_OK: MOV LED_BIT_1,#0FFH ;显示存储区 显示OCOC MOV LED_BIT_2,#0
28、FFH MOV LED_BIT_3,#0C0H MOV LED_BIT_4,#0C6H RET;*; 显示程序DISP: MOV A,#01H MOV P2,A MOV P0,LED_BIT_1 LCALL DLY RL AMOV P2,AMOV P0,LED_BIT_2 LCALL DLY RL AMOV P2,AMOV P0,LED_BIT_3 LCALL DLY RL AMOV P2,AMOV P0,LED_BIT_4 LCALL DLYRET;*; 段码,输入密码左移子程序 显示“-”SHIFTL: MOV LED_BIT_4,LED_BIT_3 MOV LED_BIT_3,LED_B
29、IT_2 MOV LED_BIT_2,LED_BIT_1 MOV LED_BIT_1,#0BFH RET;*; 延时子程序DLY_S: MOV R6,#100 ;延时25ms D1: MOV R7,#250 DJNZ R7,$ DJNZ R6,D1 RETDLY: MOV R6,#100 ;25ms延时程序 D4: MOV R7,#250 DJNZ R7,$ DJNZ R6,D4 RETDLY_L: MOV R5,#100D2: MOV R6,#100D3: MOV R7,#250 ;2.5s延时程序 DJNZ R7,$ DJNZ R6,D3 DJNZ R5,D2 RETFINI: NOP E
30、ND第四章 Proteus仿真Proteus ISIS是英国Labcenter公司开发的电路分析与实物仿真软件。它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件的特点是:实现了单片机仿真和SPICE电路仿真相结合。具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。支持主流单片机系统的仿真。目前支持的单片机类型有:68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80
31、系列、HC11系列以及各种外围芯片。提供软件调试功能。在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如Keil C51 uVision2等软件。具有强大的原理图绘制功能。总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大。本课程设计在做完方案设计和程序编辑后后就是利用Proteus进行硬件仿真,先把需要的元器件从元件库里面调出来,再按照接线原理图把线连接好,检查线路准确无误后再把用KELL生成的HEX程序文件导入单片机里,一切就绪后开始进行联调,
32、若仿真结果与设计的不同,则先找有无硬件设置错误,再检查程序,不断检查,直至仿真成功。仿真联调过程如下:1、Keil C51 v7.50 软件和 Proteus 7.0 SP 软件,分别进行安装。2、把Proteus 安装目录下 VDM51.dll ( C:ProgramFilesLabcenter ElectronicsProteus 6ProfessionalMODELS)文件复制到Keil 安装目录的 C51BIN 目录中。3、 编辑C51 里tools.ini 文件,加入TDRV1=BINVDM51.DLL(PROTEUS VSM MONITOR 51 DRIVER)4、 Keil 里设置: project-options for project-debug tab5、 选中use Proteus VSM monitor 5