AT89S51单片机电子密码柜设计.doc_第1页
AT89S51单片机电子密码柜设计.doc_第2页
AT89S51单片机电子密码柜设计.doc_第3页
AT89S51单片机电子密码柜设计.doc_第4页
AT89S51单片机电子密码柜设计.doc_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

毕业设计 基于at89s51的密码柜控制器设计 基于at89s51的密码柜控制器设计邹佳辉摘要:随着社会物质财富的日益增长和科技文明的高速发展,安全防盗已成为一个备受关注的社会问题。而互开率极高的机械锁泛滥成灾,有诸多安全隐患。本文使用单片机设计了一个密码柜控制器。设计中,使用单片机at89s51作为主控芯片,e2prom at24c02作为数据存储器,并结合外围电路进行设计。该控制器具有密码输入、密码比对、密码修改、错误报警和状态显示等功能。论文详细描述了控制器的设计方案,给出了各功能模块的程序流程图和代码清单。经测试表明,该控制器的软件运行正常,可以实现设计目标。关键词:密码柜;单片机;led显示;at89s51;at24c024design of code cabinet controller based on at89s51li liangcollege of physics and electronic information electrical engineering and automation no:070544*tutor: cui *abstract: with the growing material wealth of the society and the rapid development of science and technology, security has become a social problem which should be paid more attention. the mechanical locks can be opened mutually which has become a safety hazard. in this paper, a design of the code cabinet controller based on mcu is proposed. the design is accomplished by using at89s51 and at24c02 as the main controller chip and the data memory. in addition, external circuit is also adopted to finished the design. the controller has many functions such as password inputting, password comparing, password modifying, error warning and state displaying etc. in this thesis, the design method of the controller is described in detail, and the program flow chart and code list of function blocks are presented respectively. the debugging indicated that the software works well and can achieve the design goal. key words: code cabinet; mcu; led display; at89s51; at24c02 目 录摘要11 引言42 密码柜控制器的功能与设计方案42.1 密码柜控制器的功能42.2 密码柜控制器的设计方案43 芯片介绍53.1 单片机at89s5153.2 存储器芯片at24c02463.3 译码器74ls13873.4 集成稳压模块mc780574 密码柜控制器硬件设计74.1 电源电路设计74.2 输入键盘电路设计84.3 复位电路设计94.4 时钟电路设计94.5 信息存储电路设计104.6 数码管显示电路设计104.7 报警电路设计114.8 开锁电路设计115 密码柜控制器软件设计125.1 软件工作流程125.2 键盘输入子程序125.3 密码比对子程序125.4 密码修改子程序135.5 密码错误报警子程序135.6 开锁子程序135.7 程序存储器读写子程序135.8 状态显示子程序146 软件编译与调试156.1 keil c51 编译156.2 开发板调试157 结束语16参考文献16附录117附录218 1 引言 锁自古以来就是把守门户不可或缺的法宝,古代能工巧匠对于机械锁的研究至今仍让世人叹为观止。但是,由于高保密性能的机械锁工艺复杂、成本较高,一直未能推广使用,大多使用的还是传统的简单机械锁。同时,假冒伪劣的机械锁也已泛滥成灾,互开率非常高,极不安全。现在,在大型超市、娱乐场所等,员工个人物品的存放和顾客随身物品的寄存都需要储物柜。而一些工厂、企事业单位保密文件的安全存放,更需要保密设施完备的文件柜。传统的箱柜多采用机械锁,而传统机械锁有诸多不安全因素。随着电子产品的普及和自动化时代的到来,机械产品由于其高繁复性和高废材性,已不能适应人们的需求,慢慢退出市场。而电子产品则以其轻便、快捷、高性价比的特点迅速占领市场。采用电子电路设计的密码锁应运而生,并逐渐引领潮流。本设计采用单片机at89s51设计了一个密码柜控制器,该控制器可用一个电路控制多个密码柜,通过输入密码对密码柜进行开启和锁闭,操作简便,防盗性强。2 密码柜控制器的功能与设计方案2.1 密码柜控制器的功能本次设计的,密码柜控制器的功能如下:系统初始化后,进入等待密码输入阶段,当有6位密码输入时(前2位为箱号,后4位为密码),则进行密码比对。密码正确,则显示“p-”,此时,若按下“开锁”按钮,对应的柜门打开;若按下“修改密码”按钮,则进入密码修改状态。完成相应操作后,系统会进行初始化,可重新输入密码。密码错误,则进入密码错误环节,提示重新输入。当密码输入错误三次时,就不再读取按键,并进行报警,同时屏幕显示“error”。2.2 密码柜控制器的设计方案密码柜控制器设计方案如图1所示,电路分为九个部分:电源电路、led数码管显示、复位电路、时钟电路、键盘输入、密码储存、报警电路、led指示、开锁控制电路。本设计以单片机at89s51为核心设计密码柜的控制器。单片机具有编程方式灵活、i/o端口丰富、控制性能准确等优点。设计中,使用at24c02作为程序存储器,与单片机p1.0p1.2相连;输入键盘作为密码输入终端,与单片机p3口相连;数码管电路作为状态显示终端,与单片p0口及p2.0p2.2口相连;开锁电路用来控制开锁动作,与单片机p2.3p2.7相连。图1 密码柜控制器设计方案3 芯片介绍3.1 单片机at89s51 at89s51是美国 atmel 公司生产的低功耗、高性能的8位单片机,采用 atmel 公司的高密度、非易失性存储技术生产,兼容标准 8051 指令系统及引脚。片内含有4k字节的可编程flash程序存储器,既可在线编程(isp),也可用传统方法进行编程。 at89s51的封装形式如图2所示, 提供以下标准功能:4k字节 flash存储器,128 字节内部 ram,4个i/o 口,看门狗(wdt),两个数据指针,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,at89s51可降至0hz的静态逻辑操作,并支持两种软件可选的节电工作模式:空闲方式和掉电方式。空闲方式停止cpu的工作,但允许ram、定时/计数器、串行通信口及中断系统继续工作。掉电方式保存ram中的内容,但振荡器停止工作,并禁止其它所有部件,直到下一个硬件复位1。图2 at89s51封装图3.2 存储器芯片at24c024at24c02是支持i2c总线数据传送协议的cmos e2prom,其容量为256字节,擦写次数可达10万次以上,写入数据的有效保存时间可达100年2。其封装形式如图3所示。图3 at24c02封装图scl:串行时钟,at24c02串行时钟输入管脚用于产生器件所有数据发送或接收的时钟,这是一个输入管脚。 sda:串行数据/地址,at24c02 双向串行数据/地址管脚用于器件所有数据的发送或接收,sda 是一个开路输出管脚,可与其它开路输出或集电极开路输出进行线或(wire-or)。 a0、a1、a2:地址输入端,这些输入脚用于多个器件级联时设置器件地址,当这些脚悬空时默认值为0。当使用at24c02 时最大可级联8个器件。如果只有一个at24c02被总线寻址,这三个地址输入脚(a0、a1、a2 )可悬空或连接到vss,如果只有一个at24c02被总线寻址这三个地址输入脚(a0、a1、a2 )必须连接到vss。 wp:写保护,如果wp管脚连接到vcc,所有的内容都被写保护只能读。当wp管脚连接到vss 或悬空时,允许器件进行正常的读/写操作3,4。3.3 译码器74ls138 74ls138 为3 线8 线译码器,其封装形式如图4所示。该译码器有3位二进制输入a1、a2、a3,共有8种状态组合,可编译出8个输出信号。此外,还设置了3个使能输入端和和5。3.4 集成稳压模块mc7805设计中,需要一个能提供精确+5v电压的稳压电源,这里使用motorola公司的电压芯片mc7805,它能将12v左右的电压转变为精确+5v的电压输出6,7。其封装形式如图5所示。 图4 74ls138 封装图 图5 mc7805封装图4 密码柜控制器硬件设计4.1 电源电路设计在单片机系统中,电源电路入侵是干扰入侵的主要途径,为增加系统的稳定性,采用抗干扰稳压电源。电源电路由变压器、整流桥、三端集成稳压电路和滤波电路组成。电源通过低通滤波器和隔离变压器接入电网,如图6所示。在市电与变压器间并联两个0.01f电容构成低通滤波器,用以吸收市电中的“毛刺”。经变压后得到8v-12v的交流电,并通过桥式整流得到直流电压。然后,由并联100f的电解电容和0.33f的瓷片电容构成的滤波器进行滤波,最后使用mc7805将12v左右的电压转变为精确+5v输出。为了进一步降低干扰,在单片系统的vcc处并联电容滤波网络1,7。图6 电源电路图4.2 输入键盘电路设计本设计采用44矩阵式键盘,与独立式键盘相比,这种键盘可节省很多i/o口线。矩阵式键盘由行线和列线组成,按键位于行列的交点上。矩阵式键盘的按键识别方式有两种:一是行扫描法,二是线反转法。行扫描法中,首先由行线发出低电平信号,此时,若有按键按下,则相应列线为“0”;无按键按下,则相应列线为“1”。逐行扫描完毕后,若只有一个键按下,则读入键值;若多键按下则按键无效。线反转法中,首先由单片机向列线输出全“0”,读入行线值后,若某行有键按下,则该行线值为“0”。然后再将读取的行线值经行线输出,同时将所有列线置“1”。随后,读取列线值,有键按下的列线值为“0”。这样通过行列交叉定位,可识别出按键的位置。因此线反转法的识别速度比行扫描快很多,本设计采用线反转识别方法。键盘电路如图7所示,按键设置在行列线交点上,行、列线分别接到按键开关两端。其中,行、列线通过上拉电阻接到+5v上,并连接到单片机的p3口1,8。图7 输入键盘电路图4.3 复位电路设计单片机的复位电路如图8所示。在通电瞬间,rc电路充电,reset端出现正脉冲,从而使单片机复位。在系统的运行过程中,只要按下开关,reset就能得到高电位,复位有效1,9,10。复位脉冲要持续10ms以上,才能保证有效复位。4.4 时钟电路设计在单片机的xtal1引脚和xtal2引脚之间接12m石英晶体振荡器和30pf的电容,组成并联谐振回路,如图9所示1,9。 图8 单片机复位电路图 图9 时钟电路4.5 信息存储电路设计存储器芯片at24c02的a0、a1、a2是三条地址线,用于确定芯片的硬件地址。本设计只用到了一片at24c02,因此a0、a1、a2均接至高电平。wp、scl、sda分别接单片机的p1.0、p1.1、p1.2,通过p1.0、p1.1、p1.2来模拟实现i2c的功能3,11。图10 程序储存电路图4.6 数码管显示电路设计数码管显示电路如图11所示。由单片机p2.0、p2.1、p2.2依次输出000b111b,经74hc138译码后得到位选通信号,顺次选通8个数码管。然后,单片机的p0口的输出数据显示在被选通的数码管上12。 图11 数码管显示电路4.7 报警电路设计报警电路如图12所示,由蜂鸣器和外围电路组成。密码输入正确时,蜂鸣器不发声,直接开锁,指示灯亮;密码输入错误时,蜂鸣器发声报警,指示灯熄灭。图12 报警电路4.8 开锁电路设计开锁电路的功能是将单片机内部信号转化成开锁信号。由于本设计采用集成控制,由一个单片机来控制16个箱体的门锁,因此采用译码器来扩展控制数目。开锁电路如图13所示,使用2片74hc138组合成4线-16线的译码系统,其中p1.5是连接防止误开锁的选通信号。图13 开锁电路5 密码柜控制器软件设计5.1 软件工作流程密码柜控制器的工作流程如图14所示,软件设计主要完成密码比对、密码修改、错误报警、存储器读写、键盘输入、开锁和显示等功能。其中显示功能利用单片机的内部时钟中断完成,中断间隔为10ms。其它功能均通过调用相应子程序实现。主程序流程图如图15,程序代码见附录2。图14 软件工作流程图 图15 主程序流程图 5.2 键盘输入子程序键盘设计采用了44矩阵键盘,采用反线法扫描键盘,得到键盘按键的返回值后,再通过比对来辨别按键的具体功能。键盘输入子程序流程图如图16,程序代码见附录2。5.3 密码比对子程序密码比对子程序对键盘输入的密码和密码存储器中的密码进行比对,并根据结果修改相关的标志位,返回给主程序。密码比对子程序流程图如图17,程序代码见附录2。图16 键盘输入子程序流程图 图17 密码比对子程序流程图5.4 密码修改子程序密码修改子程序是通过修改密码存储器中的内容,实现密码修改功能。密码修改子程序流程图如图18,程序代码见附录2。5.5 密码错误报警子程序密码错误报警子程序的功能是:当错误次数不超过三次时,提示错误,并转入密码输入程序,输入新密码;当输入错误次数达到三次时,进行报警并锁定键盘3分钟。密码错误报警子程序流程图如图19,程序代码见附录2。5.6 开锁子程序开锁子程序实现开锁功能,当输入密码正确并按下开锁时,通过p2.4p2.7口和p1.5的输出开锁信号,控制箱柜的门开启或锁闭。开锁子程序流程图如图20,程序代码见附录2。5.7 程序存储器读写子程序程序存储器读写子程序实现对密码存储器访问。当进行密码修改时,需进行写入操作;当进行密码比对时,需进行读出操作。写入程序和读出程序流程图如图21和图22所示,程序代码见附录2。图18 密码修改流程图 图19 密码错误报警流程图 图20 开锁流程图5.8 状态显示子程序状态显示子程序显示系统运行状态,采用内部时钟中断实现,即先通过程序将要显示的数据存入显示缓冲数组内,再通过中断将缓冲数组内的数据显示到数码管上。状态显示子程序流程图如图23,程序代码见附录2。图21 写密码流程图 图22 读密码流程图 图23 显示流程图 6 软件编译与调试6.1 keil c51 编译keil c51是美国keil software公司出品的51系列兼容单片机c语言软件开发系统。与汇编相比,c语言在功能上、结构性、可读性、可维护性上有明显的优势。将程序代码添加到工程中,点击“编译”,通过错误提示修改程序的语法错误与逻辑错误,并再次编译。编译无错误提示后,点击“汇编”,生成16进制的可执行程序。结果如图23所示。6.2 开发板调试在万用单片机实验开发板上,将程序通过usb在线下载器下载到单片机中,其下载过程如图24所示。在开发板中调试各程序模块,直到各模块运行正常。密码柜控制器部分功能运行过程如图25-28所示。 图23 keil c51编译结果 图24 程序烧写过程 图25 等待输入密码 图26 密码错误报警 图27 比对正确 图28 开启01号箱 7 结束语本次设计以单片机at89s51为核心,设计了一个密码柜控制器。该密码柜控制器具有电路结构简单、成本低等优点,能够完成密码比对、密码修改、错误报警等功能。测试结果表明,各程序模块运行正常。本次设计比较简单,还有一些不足之处。例如,密码存储器在读写过程中没有采取加密措施,密码有被破解的风险,今后将进一步解决此问题。参考文献1 余锡存, 曹国华. 单片机原理及接口技术m. 西安: 西安电子科技大学出版社, 2007. 第二版: 178-186; 159-163; 130-133; 24-25.2 于会山, 崔学礼. 一种新型红外线遥控智能密码锁j. 电子技术, 2005, 10: 45-49.3 卢旭锦. 基于keil c的at24c02串行e2prom的编程j. 现代电子技术, 2007, 8: 154-160.4 季宏锋, 吴军辉, 徐立辉. i2c总线技术及应用实例j. 自动化仪表, 2002, 4. 21-23.5 康华光. 电子技术基础数字部分(第五版) m. 北京: 高等教育出版社, 2006, 1. 第五版: 144-153.6 陈开文. 基于at89c51的安全密码锁应用设计a. 科技资讯, 2006, 9: 2-3.7 康华光. 电子技术基础模拟部分(第五版) m. 北京: 高等教育出版社, 2006, 1. 第五版: 485-511.8 周文龙. 基于单片机控制的电子密码锁设计j. 大众商务, 2009, 3: 108-109.9 张陪仁. 基于c语言编程mcs-51单片机原理与应用m. 北京: 清华大学出版社,2003, 1: 12-13.10 邱关源, 罗先觉. 电路(第五版) m, 高等教育出版社. 2006. 5. 第五版: 147-152.11 卜登立. 基于优先级编码器的非编码矩阵键盘接口设计j. 化工自动化及仪表, 2010, 37 (4): 93 -95. 12 管小明, 雷伯录, 曾凡锦, 吴邦国. 具有激活功能的实用型密码系统的设计j. 设计参考, 2008, 10 (12): 33-38.附录1电路原理图附录226/*- 名称:基于at89s51单片机的16箱密码柜 学校:洛阳师范学院 编写:李良 日期:2011年5月 指导老师:崔 版本号:1.0 内容:通过键盘输入密码来完成对16箱密码 柜控制。-*/#include #include #include#define uint unsigned int#define uchar unsigned char#define key p3 /定义键盘接口 #define no_key 20 /定义键盘无按键键值 #define addwr 0xae /定义写24c02地址 #define addrd 0xaf /定义读24c02地址 sbit sda=p12; /定义i2c总线sbit scl=p11;sbit wp=p10; /定义写保护 sbit light= p13; /定义密码正确标示灯sbit light1= p14;/定义错误报警接口sbit km=p15;/定义开锁允许接口uchar j ;/数据输入个数uchar aa; /记录键盘锁定时间uchar xh;/箱号uchar dispcode8=0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40;/显示缓存uchar dispbit8=0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7;/显示位选uchar code table= 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40;uchar code table1=0x73,0x40,0x40,0x40,0x40,0x40,0x40,0x40 ;uchar code table2=0x79,0x31,0x31,0x3f,0x31,0x00,0x00,0x00 ;uchar code table3=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;uchar code ks=0x1f,0x2f,0x3f,0x4f,0x5f,0x6f,0x7f,0x8f,0x9f,0xaf,0xbf,0xcf,0xdf,0xef,0xff;uchar password4 ; /密码缓存uchar save6; /输入数据缓存 uchar conflag ; / 密码正确标志 uchar lockflag; /锁定键盘标志 uchar startflag; /开始标志 void mdelay(uchar yy); /延时子程序 void init(); /初始化子程序 void display_ok();/密码真确显示void display_enter();/等待输入密码显示void display_error(); /密码错误显示void delete(); /删除子函数void change();/更改密码子函数uchar keyscan() ; /键盘扫描子函数 uchar keyscanxz(void) ;/键值选择子函数void enter_code(uchar t); /输入数据记录子函数void kaisuo(uchar h);/开锁子函数void confirm();/密码比对子函数void succeed_an(); /密码正确响应void fail_an(); /密码错误响应void lockkey(); /键盘锁定子函数 void alarm(); /错误报警子函数void reset(); /数据复位子函数 void start(void);/开启i2c总线void stop(void);/关闭i2c总线void ack(void);/应答void noack(void);/非应答void send(unsigned char data);/发送一个数据unsigned char read(void);/读取一个数据void wrtorom(unsigned char data,unsigned char address,unsigned char num);/写数据void rdfromrom(unsigned char data,unsigned char address,unsigned char num);/读数据/*主程序*/void main(void) uchar temp; init(); /初始化 while(1) if(lockflag) temp=keyscanxz(); if(temp!=no_key) aa=0; /锁定键盘是扫描键盘 else temp=keyscanxz(); if(temp!=no_key) /判断键值赋予不同的功能 if(temp=10) reset();/数据复位 startflag=1;/置位开始标志 di if(startflag) enter_code(temp); if(temp=13) confirm();/调用密码比对 if(conflag) succeed_an();/调用密码正确响应 reset(); memcpy(dispcode, table, sizeof(dispcode);/将要显示数据存入显示缓存数组 else fail_an();/密码错误响应 reset(); if(temp=14) delete();/调用删除子函数,进行数据修改 /*初始化*/void init(void)/初始化设置内部计时器t0,t1tmod = 0x11;th0=(65536-50000)/256;tl0=(65536-50000)%256;th1 = 0xb1;tl1 = 0xe0;et0=1;tr0=1;et1 = 1; tr1 = 1;ea = 1;/* 对各种变量进行复位*/void reset()uchar num;for(num=0;num8;num+) dispcodenum=0;/复位显示缓存数组 savenum=0;/复位显示缓存数组lockflag=0; /复位锁键盘标志conflag=0;/复位密码正确标志j=0;/复位数据个数记录display_enter();/* 显示子程序*/void display_enter()dispcode7=0x80;void display_ok()memcpy(dispcode, table1, sizeof(dispcode);void display_error()memcpy(dispcode, table2, sizeof(dispcode);void timer1interrupt(void) interrupt 3 uchar ii,jj; th1 = 0xb1; tl1 = 0xe0; km=1;/关闭开锁允许for(ii=0;ii4) goto loop; loop1: reset(); xmflag=1; while(xmflag) temp=keyscanxz(); if(temp!=no_key) enter_code(temp); if(temp=14) delete(); if(temp=13) xmflag=0; if(j4) goto loop1; else for(k=0;k2) /错误三次进行报警 bb0=0; wrtorom(bb,70,1); wp=1; alarm(); lockkey();void alarm() /密码报警 uchar s=50,ss=250,sss=20; while(sss-) while(ss-) while(s-); light1=light1; light1=1;/*锁键盘子程序*/void lockkey() /锁键盘lockflag=1;void timer0() interrupt 1 th0=(65536-50000)/256; tl0=(65536-50000)%256; if(lockflag) aa+; light1=0; if(aa=60) aa=0; light1=1; lockflag=0; reset(); /*对比密码子程序*/void confirm() uchar k; xh=save0*10+save1-1;/计算箱号 if(xh16 ) goto cc;/输入箱号大于16退出比对 rdfromrom(password,xh*4,4);/读取原始密码 for(k=0;k=0&t0;yy-) for(i=0;i125;i+) ; /*密码存储器读写子程序*/void start(void) /开启总线 sda=1; _nop_();_nop_(); scl=1; _nop_();_nop_();_nop_();_nop_();_nop_(); sda=0; _nop_();_nop_();_nop_();_nop_();_nop_(); scl=0; void stop(void) /关闭总线 sda=0; _nop_(); scl=1; _nop_();_nop_();_nop_();_nop_();_nop_(); sda=1; _nop_();_nop_();_nop_();_nop_();_nop_(); scl=0; void ack(void) /总线应答 sda=0;_nop_();_nop_();_nop_();scl=1;_nop_();_nop_();_nop_();_nop_();_nop_();scl=0;_nop_();_nop_();void noack(void) /总线非应答 s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论