为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

电子密码锁设置

2017-09-23 19页 doc 358KB 88阅读

用户头像

is_426115

暂无简介

举报
电子密码锁设置湖南人文科技学院 课程设计报告 课程名称:单片机原理及应用课程设计 设计题目:      电子密码锁设置            系    别:      通信与控制工程系        专    业:          自动化                班    级:          二班                  学生姓名:         杨珊      刘熙          学    号:       08421248  08421233        起止日期: 2010年12月20日~20...
电子密码锁设置
湖南人文科技学院 课程设计报告 课程名称:单片机原理及应用课程设计 设计目:      电子密码锁设置            系    别:      通信与控制工程系        专    业:          自动化                班    级:          二班                  学生姓名:         杨珊      刘熙          学    号:       08421248  08421233        起止日期: 2010年12月20日~2010年12月31日  指导教师:       方智文  姚毅            教研室主任:        方智文                  指导教师评语:         指导教师签名:                年    月    日 成绩评定 项      目 权重 成绩 杨珊 刘熙 1、设计过程中出勤、学习态度等方面 0.2 2、课程设计质量与答辩 0.5 3、设计报告书写及图纸规范程度 0.3 总  成  绩   教研室审核意见: 教研室主任签字:                年    月    日 教学系审核意见:                                         主任签字:                      年    月    日                                  摘  要 随着人们生活水平的提高,如何实现家庭防盗这一问题也变的尤其的突出,传统的机械锁由于其构造的简单,被撬的事件屡见不鲜。电子技术的飞速发展,报警系统已从原来的简单化、局部化向智能化、集成化发展。电子锁由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的亲呢。     本系统由单片机系统、矩阵键盘、LED显示组成。系统能完成开锁、修改用户密码基本的密码锁的功能。本文详细阐述了个模块的功能以及它们之间的联系。 关键词:单片机STC89C52;单片机控制 ;密码锁                         目  录 设计要求    1 1 对比    1 1.1方案一    1 1.2方案二    2 2 硬件电路设计    3 2.1 键盘电路设计    3 2.2 LED显示电路    4 2.3 STC89C52芯片接口电路设计    4 2.4 8255A芯片接口电路设计    7 2.5 AT24C08断电存储单元的设计    8 3 系统软件设计    10 3.1主程序设计    10 3.2 键盘程序设计    11 3.3 调电存储服务程序    12 4 系统功能测试    13 5 详细仪器清单    14 6 与致谢    15 参考文献    16 附录一:8255A与LED的连接PCB板图    17 附录二:8255A与键盘的连接PCB板图    18 附录三:程序源代码    19 基于89C52的电子密码锁 设计要求 1、密码的设定,此密码是固定在程序存储器ROM中,假设预设的密码为“12345”共5位密码。 2、密码的输入: 采用两个按键来完成密码的输入,其中一个按键为功能键,另一个按键为数字键。在输入过程中,首先输入密码的长度,接着根据密码的长度输入密码的位数,直到所有长度的密码都已经输入完毕;或者输入确认功能键之后,才能完成密码的输入过程。进入密码的判断比较处理状态并给出相应的处理过程。 1 方案对比 1.1方案一 采用一种是用以STC89C52为核心的单片机控制方案。利用单片机灵活的编程设计和丰富的IO端口,及其控制的准确性,不但能实现基本的密码锁功能,还能添加声光提示等功能。其原理如图1所示。 24C08               图1 单片机控制原理图 1.2方案二 采用数字电路控制。其原理方框图如图2所示。       图2 数字电路控制原理方框图                                                                                         采用数字密码锁电路的好处就是设计简单。用以74LS112双JK触发器构成的 数字逻辑电路作为密码锁的核心控制,共设了9个用户输入键,其中只有4个是有效的密码按键,其它的都是干扰按键,若按下干扰键,键盘输入电路自动清零,原先输入的密码无效,需要重新输入;如果用户输入密码的时间超过40秒(一般情况下,用户不会超过40秒,若用户觉得不便,还可以修改)电路将报警80秒,若电路连续报警三次,电路将锁定键盘5分钟,防止他人的非法操作。 电路由两大部分组成:密码锁电路和备用电源(UPS),其中设置UPS电源是为了防止因为停电造成的密码锁电路失效,使用户免遭麻烦。 密码锁电路包含:键盘输入、密码修改、密码检测、开锁电路、执行电路、报警电路、键盘输入次数锁定电路。 通过比较以上两种方案,单片机方案有较大的活动空间,不但能实现所要求的功能而且能在很大的程度上扩展功能,而且还可以方便的对系统进行升级,所以我们采用后一种方案。 本方案采用一种是用以89C52为核心的单片机控制方案。利用单片机灵活的编程设计和丰富的I/O端口,及其控制的准确性,实现基本的密码锁功能。 设计思路如下: (1)输入密码用矩形键盘,包括数字键和功能键; (2)LED数码管显示输入密码,用8255A驱动数码管发光显示数码; (3)用发光二极管代替开锁的电路,发光表示开锁; (4)打开电源后,显示器显示“1”,表示密码位数。按下功能键可选择密码位数,确认密码位数后,再按数字键打出密码;     (5)密码设置为“12345”,密码正确后,发光二极管发光。若密码错误,则会显示“Error”。 2 硬件电路设计 2.1 键盘电路设计 使用矩阵键盘,所以本设计就采用行列式键盘,同时也能减少键盘与单片机接口时所占用的I/O线的数目,每一条水平(行线)与垂直线(列线)的交叉处不相通,而是通过一个按键来连通,利用这种行列式矩阵结构只需要N条行线和M条列线,即可组成具有N×M个按键的键盘。本设计使用4×4矩阵键盘,如图3所示。                           图3 键盘设计电路图 2.2 LED显示电路 本系统设计的显示电路是为了给使用者以提示而设置的。本系统的显示采用串行显示的方式,用8051单片机经8255A扩展6位八段码LED显示器,用8255A的B口作为段码(字形代码)数据口,PA作为位控制端口。逻辑电路结构如图4所示。 图4 LED显示设计电路图   2.3 STC89C52芯片接口电路设计   STC89C52是MCS-51系列单片机的典型产品,以这一代表性的机型进行系统的讲解。C52单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,其内部结构如图5所示,现在分别加以说明。                 图5 STC89C52芯片内部结构图 1 中央处理器 中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。 2 数据存储器(RAM) STC89C52内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的RAM有256个,可存放读写的数据,运算的中间结果或用户定义的字型表。 3 程序存储器(ROM): STC89C52共有4096个8位掩膜ROM,用于存放用户程序、数据或表格。 4 定时/计数器: 8051有三个16位的可编程定时/计数器,以实现定时或计数产生中断,用于控制程序转向。 5 并行输入输出(I/O)口: STC89C52共有4组8位I/O口(P0、P1、P2和P3),用于对外部数据的传输。 6 全双工串行口: STC89C52内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。 7 中断系统: STC89C52具备较完善的中断功能,有两个外中断、三个定时/计数器中断和一个串行中断,可满足不同的控制要求,并具有2级的优先级别选择。 8 时钟电路: STC89C52内置最高频率达12MHz的时钟电路,用于产生整个单片机运行的脉冲时序,但STC89C52单片机需外置振荡电容。 单片机的结构有两种类型,一种是程序存储器和数据存储器分开的形式,即哈佛(Harvard)结构,另一种是采用通用计算机广泛使用的程序存储器与数据存储器合二为一的结构,即普林斯顿(Princeton)结构。INTEL的 MCS-51系列单片机采用的是哈佛结构的形式,而后续产品16位的MCS-96系列单片机则采用普林斯顿结构。 图5是MCS-51系列单片机的内部结构示意图。                                                       图5MCS-51芯片内部结构 9 STC89C52的引脚说明 MCS-51系列单片机中的8031、8051及8751均采用40Pin封装的双列直插DIP结构,下图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。引脚图如图6所示。                                                       图6 STC89C52的引脚图 2.4 8255A芯片接口电路设计 8255A是40引脚双列直插式芯片,片内有A, B, C 3个8位I/O端口,可提             供24条可编程输入/输出端口线。内部结构及引脚信号如图7所示 图7 8255A引脚信号图 1.内部结构 8255A的内部结构由三部分电路组成:与CPU的接口电路、内部控制逻辑电路和与外设连接的输入/输出接口电路。 (1)与CPU的接口电路 与CPU的接口电路由数据总线缓冲器和读/写控制逻辑组成。数据总线缓冲器是一个三态、双向、8位寄存器,8条数据线D7~D0与系统数据总线连接,构成CPU与8255A之间信息传送的通道,CPU通过执行输出指令向8255A写入控制命令或往外设传送数据,通过执行输入指令读取外设输入的数据。 (2)内部控制逻辑电路 内部控制逻辑包括A组控制与B组控制两部分。A组控制寄存器用来控制A口PA7~PA0和C口的高4位PC7~PC4;B组控制寄存器用来控制B口PB7~PB0和C口的低4位PC3~PC0。它们接收CPU发送来的控制命令,对A, B, C 3个端口的输入/输出方式进行控制。 (3)输入/输出接口电路   8255A片内有A, B, C 3个8位并行端口,A口和B口分别有1个8位的数据输出锁存/缓冲器和1个8位数据输入锁存器,C口有1个8位数据输出锁存/缓冲器和1个8位数据输入缓冲器,用于存放CPU与外部设备交换的数据。  2.引脚信号 RESET:复位输入线,当该输入端处于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成输入方式。 CS:芯片选择信号线,当这个输入引脚为低电平时,即/CS=0时,表示芯片被选中,允许8255与CPU进行通讯;/CS=1时,8255无法与CPU做数据传输. RD:读信号线,当这个输入引脚为低电平时,即/RD=0且/CS=0时,允许8255通过数据总线向CPU发送数据或状态信息,即CPU从8255读取信息或数据。 WR:写入信号,当这个输入引脚为低电平时,即/WR=0且/CS=0时,允许CPU将数据或控制字写入8255。 D0~D7:三态双向数据总线,8255与CPU数据传送的通道,当CPU 执行输入输出指令时,通过它实现8位数据的读/写操作,控制字和状态信息也通过数据总线传送。 PA0~PA7:端口A输入输出线,一个8位的数据输出锁存器/缓冲器, 一个8位的数据输入锁存器。 PB0~PB7:端口B输入输出线,一个8位的I/O锁存器, 一个8位的输入输出缓冲器。 PC0~PC7:端口C输入输出线,一个8位的数据输出锁存器/缓冲器, 一个8位的数据输入缓冲器。端口C可以通过工作方式设定而分成2个4位的端口, 每个4位的端口包含一个4位的锁存器,分别与端口A和端口B配合使用,可作为控制信号输出或状态信号输入端口。 A0,A1:地址选择线,用来选择8255的PA口,PB口,PC口和控制寄存器. 当A0=0,A1=0时,PA口被选择; 当A0=0,A1=1时,PB口被选择; 当A0=1,A1=0时,PC口被选择; 当A0=1.A1=1时,控制寄存器被选; 2.5 AT24C08断电存储单元的设计 断电存储单元的作用是在电源断开的时候,存储当前设定的信息。AT24C08是ATMEL公司的8KB字节的电可擦除存储芯片,采用两线串行的总线和单片机通讯,电压最低可以到2.5V,额定电流为1mA,静态电流10Ua(5.5V),芯片内的资料可以在断电的情况下保存40年以上,而且采用8脚的DIP封装,使用方便。其电路如图8所示。           图8断电存储单元电路图 由于AT24C08的数据线和地址线是复用的,采用串口的方式传送数据,所以只用两根线SCL(移位脉冲)和SDA(数据/地址)与单片机传送数据。 每当设定一次单价,系统就自动调用存储程序,将单价信息保存在芯片内;当系统重新上电的时候,自动调用读存储器程序,将存储器内的单价等信息,读到缓存单元中,供主程序使用。 3 系统软件设计 软件的设计主要包括键盘键值的读取,LED显示程序,密码比较程序和报警程序。 3.1主程序设计     主程序主要完成初始化、检查有无按键按下、以及调用显示等等,其流程图如9所示。 开始                       图9 主程序流程图 3.2 键盘程序设计   键扫程序的过程为:开始时,先判断是否有键闭合,无键闭合时,返回继续判断,有键闭合时,先去抖动,然后确定是否有键按下,若无键按下,则返回继续判断是否有键闭合,若有键按下,则判断键号,然后释放,若释放按键完毕,则返回,若没有释放按键,则返回继续释放。其流程图如图10所示。 N     图10 键盘程序流程图 3.3 调电存储服务程序 当比较密码的时候,需要读AT24C08程序,将存储在芯片内的数据读到RAM中,然后和输入的密码相比较。当修改密码的时候,需要把输入的密码保存到AT24C08中,并实现断电保护,其流程图如图11所示。                     图11 24C08程序流程图 4 系统功能测试 用到了Keil C软件,集成调试环境,集成了编辑器、译码器、调试器,支持软件模拟,支持项目管理功能强大的观察窗口,支持所有的数据类型。树状结构显示,一目了然,支持ASM(汇编)、C语言多模块源程序混合调试,在直接修改、编译、调试源程序,错误指令定位。功能很强大,用于对程序的调试和编辑。本系统的程序的编写就是在Keil C软件中完成的,当程序完成之后,生成HEX文件。再利用Proteus软件进行仿真。经过仿真,程序符合题目的要求。下载至学习板后输入数值调试结果如表1所示。 表格1 输入数值 LED显示 指示灯 0 Error 不亮 12340 Error 不亮 12345 12345 亮           123456           Error 不亮 123 Error 不亮 15 Error 不亮 5 详细仪器清单 表格 2 名称 参数和型号 数量 单片机 STC89C52 1块 可编程I/O 8255A 1块 电阻 1K 9个 10K 9个 数码管 共阳4位数码管 2个 瓷片电容 30PF 2个 晶振 12M 2个 电解电容 10uf 2个 开关 16个 单片机插座 40脚 1个 6 总结与致谢 因为前期制作学习板出现的一些问题和对于单片机知识的不熟悉导致在做课程设计中间走了很多的弯路。后面在老师的悉心指导下,以及同学之间的相互求教和讨论中,终于成功的完成了此次的课程设计。 在这次的设计中,让我更加深入的懂得了汇编程序该如何形成一个系统,更加熟练的运用Keil C51软件编写程序,熟悉了protues仿真软件的使用技能,丰富了各种器件常识,收获了难得的实践经验。对于在单片机设计中出现的各种问题,我们先是显得非常的茫然,哪怕是一个小小的错误,都会很难找到它错的原因,更何况去解决它。但到了最后,因为对设计的流程已经完全熟悉后,找出错误的根源是更加的容易。并且在这次的设计中我们充分的体验到了团队的力量,这还是一些小是系统,如果对于更大些的设计,那团队的作用会更大。分工合作是最好的做事原则。同时也加深了我们之间的友谊。 这次设计过程中,体现出自己设计程序的能力以及综合运用知识的能力,体会了学以致用、突出自己劳动成果的喜悦心情,从中发现自己平时学习的不足和薄弱环节,从而加以弥补。 在此感谢我们的指导老师.,老师的严谨细致、一丝不苟将是我工作、学习中的榜样;老师教导和不拘一格的思路给了我很多新的启发;这次设计的每个细节和每个数据,都离不开老师您的细心指导。而您开朗的个性和宽容的态度,帮助我能够很顺利的完成了这次课程设计。 同时感谢帮助过我的同学们,谢谢你们对我的帮助和支持,让我感受到同学之间纯真的友谊。    由于我的设计能力有限,在设计过程中难免出现错误,恳请老师们多多指教,我十分乐意接受你们的批评与指正。 参考文献 [1].康华光..电子技术基础数字部分(第五版).华中科技电子技术组 .2007      [2].华成英.模拟电子技术基础(第四版).清华大学电子学教研组.2006  [3].李光弟.单片机基础(第3版).北京航空航天大学出版社.2007.    [4].李凤霞.C语言程序设计(第二版). 北京理工大学出版社,2008. [5].楼然苗.单片机课程设计指导.北京航空航天大学出版.2007 附录一:8255A与LED的连接PCB板图 附录二:8255A与键盘的连接PCB板图   附录三:程序源代码 #include #define uchar unsigned char #define uint  unsigned int #define NO_KEY_DOWN 0XFF #define SET 0X28 #define UP  0X18 uchar xdata PA _at_ 0xD9FF,  PB _at_ 0XDBFF,  PC _at_ 0XDDFF,    //定义外部变量,强制分配地址                    EX_PORT_CON _at_ 0XDFFF;                                    uchar code LED_CODE[]={0XA0,0XBB,0X62,0X2A,0X39,0X2C,0X24,0XBA,    //LED段码(0~9)                       0X20,0X28}; uchar code SECRATE[3]={12,34,56}; uchar data INPUT_NUM[3]={0,0,0}; uchar data DISPLAY_BUF[6]; uchar code ERROR[6]={0X64,0X77,0X77,0X27,0X77,0XFF}; uchar *PP; uchar BIT_PLACE=0,COUNT=0,KEY,S=0,LENGH=1; bit X=0,Y=0; void Input_Secret(); void Display(); void Delay(uint A); uchar Key_Scan(); void Num2_Buf(); void main() {     EX_PORT_CON=0X81;     PA=0XFE;     PB=0XFF;     EA=ET0=TMOD=1;     TR0=1;     TH0=0X3C;     TL0=0XB2;        PP=DISPLAY_BUF;     BIT_PLACE=0;     goto START;     while(1)     {            Display();         if(Key_Scan()==SET)         { START:            while(1)             {    Y=0;                 KEY=Key_Scan();                 Display();                 if(KEY==UP)                 {                     if(LENGH>=6)LENGH=1;                     else LENGH++;                 }                 if(KEY==SET){Y=1;break;}             }             PP=DISPLAY_BUF;             X=1;             S=0;             while(1)             {                 Num2_Buf();                 KEY=Key_Scan();                 Display();                        if((KEY==SET)||((S>=4)&&X))                     {                            if(PP=ERROR)PP=DISPLAY_BUF;                       ///  if(BIT_PLACE==0XFF){BIT_PLACE=0;}                     //    else                         {                             if(BIT_PLACE=9)INPUT_NUM[BIT_PLACE/2]-=9;             else INPUT_NUM[BIT_PLACE/2]++;                            }     else    //在十位         {             if(INPUT_NUM[BIT_PLACE/2]>=90)INPUT_NUM[BIT_PLACE/2]-=90;             else INPUT_NUM[BIT_PLACE/2]+=10;                            } } void Display() {    uchar I,J=0X01;     if(Y)     {         for(I=0;I20)COUNT=0;       if(COUNT>=20)       S++; } void Delay(uint A) {     while(A--); }    uchar Key_Scan()    {        uchar A=4,ROW=0x08,T=NO_KEY_DOWN;     if(PC!=0XF0)                      //是否有键按下     {Delay(200);                      //消抖       if(PC!=0XF0)         while(A--)                      //查询,逐列         {    ROW<<=1;             PC=ROW;             T=(PC&0X0F);             if(T!=0X00)                  //但前列是否有键被按下             {                T=(T+(ROW&0XF0));      //计算键值                 do {Display();}          //防止数码管在按键按下时闪烁                 while((PC&0X0F)!=0);  //松手检测                                        break;                  //跳出循环             }                                  }      PC=0xf0;                //键盘初始化     }      return T;                          //返回键值 }
/
本文档为【电子密码锁设置】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索