单片机原理及应用课程设计报告课题:电子密码锁班级:学号:姓名:指导老师:设计时间:2008.9.17-10.102概述本实验利用单片机的定时器/计数器定时和记数的原理,结合DVCC实验箱上的集成电路芯片AT89C51、LED数码管以及实验箱上的按键来设计密码锁。将软、硬件有机地结合起来,使得系统能够正确地开启密码锁和更改密码,数码管能够正确地显示输入密码。本实验设计了16个开关按键,每次按下键需要检验是否确实按下,若是则输入密码;否则,反之。关键字:AT89C51、M24C01、7段LED数码管、74LS240、与非门、4*4矩阵键盘等3目录概述………………………………………………………………….2第一章设计要求………………………………………………...4第二章设计方案………………………………………………...5第三章设计程序………………………………………………...10第四章Proteus仿真…………………………………………….18第五章硬件制作………………………………………………...19收获与体会……………………………………………………….20附录.……………………………………………………….20参考文献……………………………………………………….204第一章设计要求题目:电子密码锁选题后先在proteus上进行软件仿真设计,在仿真实现的基础上,要求完成部分硬件模块的制作和系统联调,具体要求见选题。设计流程:查阅有关文献资料→拟定电路原型→依据题目功能要求,进行电路元件选择→画出原理电路→软件仿真分析验证设计方案→实际部分硬件制作、系统联调→写出设计报告。时间安排:选题结束后,自己安排时间进行课题资料查阅、原理方案设计,然后进行软件仿真(可以利用自己的PC机或利用实验室开放时间段预约后到实验室进行仿真实验),完成上述工作后预约第一阶段检查验收,验收合格后,凭指导教师验收签字单到实验中心领取器材进行硬件制作部分,完成调试后,经指导教师验收签字,最后,撰写课程设计总结报告并提交到实验中心。密码锁具体设计要求:利用单片机设计一个密码锁,要求可设定从1位到8位的密码,从键盘键入正确密码才可更改密码或开锁;输入三次错误密码电路就不断报警;开锁信号输出口用发光二极管表示。同时输入密码后要按确认键才有效。1.可设置密码,掉电密码能保存;2.按键确实被按下时发出一下提示音;3.设置新密码前需校验旧密码;发挥部分:密码用密文保存在存储器中(加密方法可采用DES算法)可选器件:51系列单片机、24C01、7段LED数码管、74LS244或74LS240、与非门等56第二章设计方案采用一种是用以AT89S51为核心的单片机控制方案。利用单片机灵活的编程设计和丰富的IO端口,及其控制的准确性,不但能实现基本的密码锁功能,还能添加调电存储、声光提示甚至添加遥控控制功能。其原理如图1-2所示。图2-1单片机控制方案各个功能单元设计如下:1.键盘功能及工作原理PC键盘功能主要有按键识别、去抖、重键处理、发送扫描码、自动重发、接收键盘命令、处理命令等。键盘有编码键盘和非编码键盘。编码键盘程序设计简单,但硬件电路复杂,价格较高;非编码键盘用软件来实现识别键、编码转换、去抖等功能,硬件电路简单,价格便宜。现代微机系统中广泛采用非编码键盘。PC键盘多采用18行×8列的二维矩阵行列结构。采用行扫描法识别按下的按键。本设计就采用行列式键盘,同时也能减少键盘与单片机接口时所占用的I/O线的数目,在按键比较多的时候,通常采用这样方法。其原理如图2-2所示。开锁控制电路89S51单片机AT24C02掉电存储串口显示电路矩阵键盘控制指示电路输入错误锁定键盘延时报警控制电路7图2-2行列式键盘原理电路图每一条水平(行线)与垂直线(列线)的交叉处不相通,而是通过一个按键来连通,利用这种行列式矩阵结构只需要N条行线和M条列线,即可组成具有N×M个按键的键盘。在这种行列式矩阵键盘非键盘编码的单片机系统中,键盘处理程序首先执行等待按键并确认有无按键按下的程序段。当确认有按键按下后,下一步就要识别哪一个按键按下。对键的识别通常有两种方法:一种是常用的逐行扫描查询法;另一种是速度较快的线反转法。对照图2-3所示的44键盘,说明线反转个工作原理。首先辨别键盘中有无键按下,有单片机I/O口向键盘送全扫描字,然后读入行线状态来判断。方法是:向行线输出全扫描字00H,把全部列线置为低电平,然后将列线的电平状态读入累加器A中。如果有按键按下,总会有一根行线电平被拉至低电平从而使行线不全为1。判断键盘中哪一个键被按下使通过将列线逐列置低电平后,检查行输入状态来实现的。方法是:依次给列线送低电平,然后查所有行线状态,如果全为1,则所按下的键不在此列;如果不全为1,则所按下的键必在此列,而且是在与零电平行线相交的交点上的那个键。按键的操作面板如图图2-3所示。共计数字键10个,功能键6个。键盘上还有3个指示灯和一个蜂鸣器。89s51D0D1D2D3D4D5D6D7D8D9D105.1KX45.1KX4VCC8图2-3按键操作面板示意图按键包括有数字键和功能键。数字键包括0-9键,用于密码的输入。功能键有密码修改键和确认键。具体的功能定义如下表。按键键名功能说明1-9键数字键输入密码A键确认键密码输入完成B键密码修改键修改密码硬件设计由实验要求采用4行×4列的矩阵行列结构。89c51单片机有4个8位I/O端口,采用P1口低四位作为行扫描线,高四位作为列扫描线。软件设计①消抖及重键处理:通过软件上延时程序来消除抖动;采用后按键优先处理,即多键同时按下时,只重复发送最后按下键的扫描码。②程序包括键盘扫描子程序、发送键码子程序、发送数据子程序、接收命令子程序、、主程序等。键盘扫描子程序用于扫描键状态,将被按键的位置号存入缓冲器中;发送键码子程序用于将缓冲区键的接通码或断开码发送给计算机键盘接口或者存在键盘密码缓冲区中;发送数据子程序用于将数据发给计算机键盘接口;接收命令子程序用于接收计算机键盘接口发来的键盘命令;主程序用于系统初始化,子程序调度,锁定状态的显示等。2.显示电路设计考虑到实验室只能提供四位一体的阴极LED显示管,所以设计时只设计了四位的密码。LED显示管电路连接图如下图所示,图中1234为位选码,低电平有效,在其每一位前加了一个反相器做驱动,再接到单片机的P2口的低四位。其9段选码接了两个74LS240做驱动,74LS240也有反相作用,因此在编程时特别做了处理,段选码的8位接到单片机的P1口。图2-4显示器面板接线图3.开锁及密码修改单元通过单片机送给开锁执行机构,电路驱动电磁锁吸合,从而达到开锁的目的。其原理如图2-5所示。图2-5密码锁开锁机构示意图当用户输入的密码正确而且是在规定的时间(普通用户要求在12s内输入正确的密码,管理员要求在5s输入正确的密码)输入的话,单片机便输出开门信号,送到开锁驱动电路,然后驱动电磁锁,达到开门的目的。其实际电路如图2-5所示。在本次设计中,基于节省材料的原则,暂时用发光二极管代替电磁锁,发光管亮,表示开锁;灭,表示没有开锁。在按下密码修改键后,系统会要求输入原始密码,正确后再输入新密码,密码修改成功则单片机P3.1所接的发光二极管会亮3秒。单片机微控制器开锁驱动电路电磁锁密码正确?Y返回N104.AT24C02掉电存储单元的设计掉电存储单元的作用是在电源断开的时候,存储当前设定的单价信息。AT24C02是ATMEL公司的2KB字节的电可擦除存储芯片,采用两线串行的总线和单片机通讯,电压最低可以到2.5V,额定电流为1mA,静态电流10Ua(5.5V),芯片内的资料可以在断电的情况下保存40年以上,而且采用8脚的DIP封装,使用方便。其电路如图2-6所示。NC1NC2NC3GND4SDA5SCL6WP7VCC8U4AT24C02AGNDVCC串行存储模块R85.1kR105.1k接P2.5接P2.6图2-6掉电存储电路原理图图中R8、R10是上拉电阻,其作用是减少AT24C02的静态功耗,由于AT24C02的数据线和地址线是复用的,采用串口的方式传送数据,所以只用两根线SCL(移位脉冲)和SDA(数据/地址)与单片机传送数据。每当设定一次单价,系统就自动调用存储程序,将单价信息保存在芯片内;当系统重新上电的时候,自动调用读存储器程序,将存储器内的单价等信息,读到缓存单元中,供主程序使用。由于实验室没有这类器件,因此在实际制作过程中这项功能省略。5.系统原理框图51系列单片机4*4键盘8位LED显示ROM存储器扬声器复位电路晶振电路发光二极管等11图2-7系统原理框图7.设计总体电路图图2-8设计总体电路图第三章设计程序1.模块介绍该计程计价系统的软件设计分为以下几个模块:(1)主程序模块主程序主要完成初始化、设置中断向量、检查有无按键按下、以及调用显示等等。主程序的流程图如下所示。(2)键盘扫描及识别子程序键盘采用查询的方式,放在主程序中,当没有按键按下的时候,单片机循环主程序,一旦有按键按下,便转向相应的子程序处理,处理结束再返回。(3)调电存储服务程序当比较密码的时候,需要读AT24C02程序,将存储在芯片内的数据读到RAM中,然后和输入的密码相比较。当修改密码的时候,需要把输入的密码保存到AT24C02中。(4)显示子程序(5)延时模块2.程序流程图(1)主程序流程图及密码修改程序流程图如图3-1、3—2所示。123.程序使用汇编编程如下:;*******************************************************;NLW电子密码锁程序;*******************************************************;以下8个字节显示存储区LED_BIT_1EQU30HLED_BIT_2EQU31HLED_BIT_3EQU32HLED_BIT_4EQU33H;以下8个字节存放初始密码WORD_1EQU34HWORD_2EQU35HWORD_3EQU36HWORD_4EQU37H;以下8个字节存放键盘输入的8位密码KEY_1EQU38HKEY_2EQU39HKEY_3EQU3AH开始初始化有键按下?调用显示启动定时识别按键全部按完?超时?比较密码开门开始自动清除3次?锁定NNYYYYNN按下F2启动定时输入密码存入缓冲再输入一次比较密码调用24C02调用显示按F2退出Y重新输入N图3-1主程序流程图图3-2修改密码流程图13KEY_4EQU3BHVALEQU3EH;键值COUNT_1EQU3FH;密码输入次数;****************************************************;以下为初始化程序,包括数据存储空间初始化,设置初始密码ORG0000HAJMPSTARTORG0100HSTART:MOVVAL,#00HMOVR0,#00HMOVR1,#00HMOVR2,#00HMOVR3,#00HMOVR4,#00HMOVR5,#00HMOVR7,#00HMOVR6,#00HMOVA,#00HMOVB,#00HMOVKEY_1,#00H;输入密码存储区清0MOVKEY_2,#00HMOVKEY_3,#00HMOVKEY_4,#00HMOVWORD_1,#00H;设置初始密码为1234MOVWORD_2,#01HMOVWORD_3,#02HMOVWORD_4,#03HMOVP3,#00H;***********************************************************;主程序开始A0:MOVLED_BIT_1,#0F9H;显示存储区开始显示1234MOVLED_BIT_2,#0A4HMOVLED_BIT_3,#0B0HMOVLED_BIT_4,#99HMOVCOUNT_1,#03H;密码错误次数置三LCALLDISP;调用数码显示子程序1234等待按键LCALLLSCAN;调用按键程序CJNER3