欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    电子密码锁的设计.docx

    • 资源ID:11809110       资源大小:290.84KB        全文页数:24页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    电子密码锁的设计.docx

    1、电子密码锁的设计摘 要电子密码锁是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,我们采取的是单片机,它具有超大规模集成电路技术,有极强的数据处理能力,I/O口多以它为核心设计的密码锁,结构小,功能强,现在很多单位甚至家里的各个家用电器,还有保险箱都需要它。介绍一种基于在系统可编程技术和C51编译器配有集成开发的新型电子密码锁的设计方法,阐述了其工作原理和软硬件设计。在硬件上,用KEIL公司的C51大规模集成芯片对其外围电路进行集成,用1片8051实现了几十片分离元件才能实现的功能,几乎将整个系统下载于同一芯片中,实现了所谓的片上系统,从而大大简化了系统结构,增强了系统的可靠性

    2、和性价比。该密码锁特别适用于宾馆、办公大楼、公寓等场所。一种能防止多次试探密码的基于单片机的密码锁设计方案,根据基本要求规划单片机密码锁的硬件电路和软件程序,同时对单片机的型号选择、硬件设计、软件流程图、单片机存储单元的分配等都有注释。我们知道现在很多行业都需要密码锁,电子密码锁的性能和安全性大大超过了机械锁,为了提高密码的保密性,可以经常更改密码,防止密码被盗;当密码输入错误多次时,报警系统可自动启动。它们有很多扩展功能:用户可以根据实际情况随意改变密码值或密码长度,按下“密码修改键”提示用户输入原密码,通过校验后提示输入新密码,一次写入CPU存储器中,另一次写入单片机内部RAM中,以便机器

    3、确认密码的正确性。输入完毕后,按修改确认键,两次的密码完全一致时,密码修改完成。我们这可以在输入的密码与程序中设定的密码相比,若失误,会有灯亮提示,但三次后都错误,系统可自动报警。【关键字】AT89C51单片机 I/O口接线 LED显示(四位静态数码管) 复位电路 键盘 目 录一、电子密码锁的主要功能 3(1)实验任务 3(2)基本设计 3(3)系统框图 3二、硬件设计 4(1)硬件工作接线口 4(2)LED显示器结构与原理 4 (3) 复位电路 5 (4) 晶振电路 6 (5) 按键方式 7(6)电路原理图 7(7)元器件清单 8三、软件设计流程 9 (1)主要流程图 9 (2) 主函数流程

    4、图 9四、源程序代码 12五、系统调试 22六、课程设计体会 23七、参考文献 24一、电子密码锁的主要功能(1)实验任务根据设定好的密码,采用矩阵式按键实现密码的输入功能,开机时,数码管显示四根短横线,每输入一位密码,则显示一个F,当密码输入正确之后,锁就打开(即数码管显示good),如果输入错误,则数码管显示Erro,每次输完后,过5秒则又可以重新输入。错误一次亮一盏灯,当输入的三次密码不正确时,亮三盏灯,且蜂鸣器发出报警声。(2)基本设计我们将密码程序存在EPROM中,用户通过单片机上P2.0口上的按键进行选择。具体操作如下:先打开电源,然后按下P2.0口上的任一按键,逐渐输入四位密码,

    5、最后按确认键即可。设置显示初始符号“”,为了帮助用户确认是否有键按下,并且防止密码外泄,在输入显示时,并不是显示用户按下的数字符号,而是以一个特定的字母符号提醒用户是否有键按下。有键按下,就会显示字符“F”,没有键按下就是初始状态。首先按下P2.0口上的按键,输入密码,正确则显示“good”,错误则显示“Erro”,并亮一盏灯,输入三次都不正确的则亮三盏灯并蜂鸣器响。(3)系统框图图1-1 系统框图二、硬件设计 (1)硬件工作接线口P0口接数码管,用来显示按键是否按下,P1口接键盘,P1.0外接选择密码键,P2口按串行方式传送信号给数码管,P2.7口显示电磁锁开还是闭合状态。把单片机系统区域中

    6、的P0口用导线连接“四路静态数码显示”的任一端口上,把单片机系统区域中的P1口上接独立式键盘。(2)LED显示器结构与原理LED显示块是由发光显示二极管显示字段的显示器件。在单片机中我们通常用七段LED,这种显示共有共阴极和共阳极两种,本设计是用共阳极,是LED显示块的发光二极管与阳极并接,如图所示图1-2 数码管结构图通常的七段显示块中共有8个发光二极管,其中7个发光二极管构成七笔字形“8”,一个发光二极管构成小数点。七段显示块与单片机接口非常容易。只要将一个8位并行输出与显示块的发光二极管引脚相连即可。8位并行输出口输出不同的字节数据即可获得不同的数字或字符,通常将控制发光二极管的8位字节

    7、数据称为段选码。显示字符共阳极段选码0C0H1F9H2A4H3B0H499H592H682H7F8H880H990H-BFHg90HoA3HdA1HE86HrAFHF8EH表1-1 字符段选表(3)复位电路如图所示为80C51型单片机上电复位电路。RC构成微分电路,在接电瞬间,产生一个微分脉冲,其宽度若大于2个机器周期,80C51型单片机将复位,为保证微分脉冲宽度足够大,一般取10F电容、8.2K电阻。图1-3 复位电路图(4)晶振电路MC-51内部有一个用于构成振荡器的高增益反相放大器,输入端为引脚XTAL1,输出端为引脚XTAL2。这两个引脚跨接石英晶体振荡器和微调电容,就构成一个自激振荡

    8、器,如图。电路中C1和C2典型值通常选为30pF左右,对外接电容没有严格要求,但电容的大小会影响振荡器频率的高低、振荡器的稳定性和起振的快递性。振荡器的频率范围在1.2MHz-12MHz之间。30PF30PF图1-4 晶振电路(5)按键方式按键方式有独立式和行列矩阵式两种,本设计是采用行列矩阵式,共设置三行四列12个按键。当按键较多时,如果用独立式按键方式就需要较多的接品线,为节省资源,常用行列矩阵式按键盘。矩阵式按键键盘是指按键排成行和列,按键在行列交叉处,两端分别与行线和列线相连,这样,i行j列可连ij个按键,但只需要i+j条接口线。12个按键分别代表数字09、确认和清除。在没有键按下时,

    9、P2.0P2.7都是高电平1,若某个数字键被按下,相应的接口线就变为低电平0。开锁时必须先按确认键,判断从P2口读入的四个值与存储单元的设定值是否相同,相同才能开锁。(6)电路原理图图1-5 电路原理图图1-6 实物图(7)元器件清单器件名称规格数量电源189C51单片机芯片1晶振1蜂鸣器1共阳数码显示管1复位按钮1开关1电容22F1电容30PF1按键12三极管NPN5发光二极管4电阻511电阻51012电阻1k8表1-2 元器件三、软件设计流程(1)主要流程图 图1-7 主流程图(2)主函数流程图图1-8 主函数流程图四、源程序代码#include reg51.h#include / 数据类

    10、型定义typedef unsigned char uint8;typedef unsigned int uint16;typedef unsigned long uint32;typedef char int8;typedef int int16;/ 芯片引脚定义#define LED_IO P0sbit LED1 = P10; /接com1sbit LED2 = P11; /接com2sbit LED3 = P12; /接com3sbit LED4 = P13; /接com4sbit Error_1 =P14; /错误一次亮一盏灯sbit Error_2 =P15; /错误两次再亮一盏灯sb

    11、it Error_3 =P16; /错误三次再亮一盏灯sbit KeyOut1 = P20; /按键右数第一列sbit KeyOut2 = P21; /按键右数第二列sbit KeyOut3 = P22; /按键右数第三列sbit KeyOut4 = P23; /按键右数第四列sbit KeyIn1 = P24; /按键第一行sbit KeyIn2 = P25; /按键第二行sbit KeyIn3 = P26; /按键第三行sbit BEEP= P17; /蜂鸣器#define CLEAR 10#define ENTER 11#define NUL 10 /段选数组第十个,即显示“-”#def

    12、ine _E 11 /段选数组第十一个,即显示“E”#define _R 12 /段选数组第十二个,即显示“r”#define _O 13 /段选数组第十三个,即显示“o”#define _G 14 /段选数组第十四个,即显示“g”#define _D 15 /段选数组第十五个,即显示“d”#define _F 16 /段选数组第十六个,即显示“F”void delay(uint16 n);void delay_ms(uint16 n); /延时1msuint8 Code4=1,0,6,8; /正确密码code uint8 Ledcode=0xC0,0xF9,0xA4,0xB0,0x99,0x

    13、92,0x82,0xF8,0x80,0x90,0xBF,0x86,0xAF,0xA3,0x90,0xA1,0x8E; /段选总数组uint8 Led_buf4, Code_tmp4, Sit=0, Err_n=0; /存放段选数组、存储输入密码、位选标志、错误次数标志int8 K_val; /存放返回的键值/延时程序void delay_ms(uint16 n) uint8 m=120; /延时1ms while (n-) while (m-);/清屏void clear(void) Led_buf0 = LedcodeNUL; /把四个“-”段选送到Led_buf数组中 Led_buf1 =

    14、 LedcodeNUL; Led_buf2 = LedcodeNUL; Led_buf3 = LedcodeNUL; BEEP=0; /关闭蜂鸣器/初始化IOvoid IO_init(void) LED1 = 1; LED2 = 1; LED3 = 1; LED4 = 1; clear(); /按键扫描int8 scan_key(void) int8 val=-1; /键值 KeyOut1 = 0; /扫描右数第一列 KeyOut2 = 1; KeyOut3 = 1; KeyOut4 = 1; if (KeyIn1 = 0) /扫描第一行 val = 4; /键值为4 while (KeyIn

    15、1 = 0); /判断按键是否放开按键 else if (KeyIn2 = 0) /扫描第二行 val = 8; while (KeyIn2 = 0); else if (KeyIn3 = 0) /扫描第三行 val = CLEAR; /键值为CLEAR while (KeyIn3 = 0); KeyOut1 = 1; /扫描右数第二列 KeyOut2 = 0; KeyOut3 = 1; KeyOut4 = 1; if (KeyIn1 = 0) val = 3; while (KeyIn1 = 0); else if (KeyIn2 = 0) val = 7; while (KeyIn2 =

    16、0); else if (KeyIn3 = 0) val = ENTER; /键值为ENTER while (KeyIn3 = 0); KeyOut1 = 1; /扫描右数第三列 KeyOut2 = 1; KeyOut3 = 0; KeyOut4 = 1; if (KeyIn1 = 0) val = 2; while (KeyIn1 = 0); else if (KeyIn2 = 0) val = 6; while (KeyIn2 = 0); else if (KeyIn3 = 0) val = 0; while (KeyIn3 = 0); KeyOut1 = 1; /扫描右数第四列 KeyO

    17、ut2 = 1; KeyOut3 = 1; KeyOut4 = 0; if (KeyIn1 = 0) val = 1; while (KeyIn1 = 0); else if (KeyIn2 = 0) val = 5; while (KeyIn2 = 0); else if (KeyIn3 = 0) val = 9; while (KeyIn3 = 0); return val; 返回键值/数码管刷新void show_flash(void) LED_IO = Led_buf0; /把段选送给P0口 LED1 = 0; /送给com1 delay_ms(4); LED1 = 1; /位选1关闭

    18、 LED_IO = Led_buf1; LED2 = 0; delay_ms(4); LED2 = 1; LED_IO = Led_buf2; LED3 = 0; delay_ms(4); LED3 = 1; LED_IO = Led_buf3; LED4 = 0; delay_ms(4); LED4 = 1;/蜂鸣器void buzz(void) BEEP = 1; /蜂鸣器报警LED_IO = Led_buf0; /数码管显示Erro LED1 = 0; delay_ms(1); LED1 = 1; LED_IO = Led_buf1; LED2 = 0; delay_ms(1); LED

    19、2 = 1; LED_IO = Led_buf2; LED3 = 0; delay_ms(1); LED3 = 1; LED_IO = Led_buf3; LED4 = 0; delay_ms(1); LED4 = 1; /显示GOODvoid show_good(void) /把good的段选值送给段选数组 Led_buf0 = Ledcode_G; Led_buf1 = Ledcode_O; Led_buf2 = Ledcode_O; Led_buf3 = Ledcode_D;/显示ERRORvoid show_error(void) /把Erro的段选值送给段选数组 Led_buf0 =

    20、 Ledcode_E; Led_buf1 = Ledcode_R; Led_buf2 = Ledcode_R; Led_buf3 = Ledcode_O;/比较密码bit code_cmp(uint8 *code1, uint8 *code2) uint8 i; for (i=0; i= 0) & (K_val = 9) /判断键值是不是数字键 Led_bufSit = Ledcode_F;/显示F Code_tmpSit = K_val;/保存键值 if (Sit 3)/判断显示的位置 Sit+; else if (K_val = ENTER)/判断按键是否为确认键 if (code_cmp

    21、(Code, Code_tmp)/比较密码是否相同 show_error();/显示ERROR Err_n+;/错误次数加一 else show_good();/显示GOOD if (Err_n=1) Error_1 = 0; /错误一次亮一盏灯 if (Err_n=2) Error_2 = 0; /错误两次再亮一盏灯 if (Err_n=3) Error_3 = 0; /错误三次再亮一盏灯 if (Err_n = 3)/错误累计3次 buzz();/蜂鸣器响 Err_n = 0;/错误次数清零 for (i=0; i140; i+) show_flash();/刷新数码管 clear();/

    22、清除数码管显示 Sit = 0;/位置置零 else if (K_val = CLEAR) clear();/清楚数码管显示 Sit = 0;/位置清零 show_flash();/刷新数码管 五、系统调试我们这次的设计课题看似简单,可其实实行起来并不容易。一开始,我们根据我们所列的电子密码锁的功能不借助任何资料开始自己编写程序,并信心满满。根据不同的功能,我们写了不同功能的子函数,最后把它们串起来,一个完整的程序就这样在我们眼前出现了。紧接着我们就着手于在软件上的调试了。我们用Keil uVision3调试程序进行了我们第一步的检查与调试。在第一次的编译中发现了有几个语法错误和细节问题,但很

    23、快就得到了解决。然后我们就根据我们接的硬件开始步进调试。在经过一长串的步进调试检查后得出结论是我们的软件编写没有问题了。接下来我们就到实验室去烧程序了。可这时我们发现效果完全不如我们想象那般。我们就再拿出程序仔细查找问题出自何处。我们发现之所以在软件上调试成功而硬件上失败是因为我们忽略了是0有效还是1有效的问题了。于是我们就结合程序和功能先判断每个元器件是0有效还是1有效。可是当我们确定我们程序中设定的有效值已经正确时而硬件却依然乱七八糟,我们有些心浮气燥了。在后来的很久时间中我们都纠结于这个问题。通过老师的提点我们也进行了一个功能一个功能的分开检测,编写了几个小程序,但发现依然找不到原因。后

    24、又请教同学,认为硬件和软件看起来都没有问题,觉得有可能是逻辑问题。于是我们所幸抛开原来的,查找资料,从别人的程序中取经,根据规范的要求再编写一个程序。再次软件调试,没有问题。通过努力,最后我们终于成功了。六、课程设计体会作为一名测控专业的大三学生,我觉得做单片机课程设计是十分有意义的,而且是十分必要的。在已度过的大学时间里,我们大多数接触的是专业课。我们在课堂上掌握的仅仅是专业课的理论知识,如何去锻炼我们的实践能力?如何把我们所学的专业基础课理论知识运用到实践中去呢?我想做类似的课程设计就为我们提供了良好的实践平台。在做本次课程设计的过程中,我感触最深的当属查阅大量的设计资料了。为了让自己的设

    25、计更加完善,查阅这方面的设计资料是十分必要的,同时也是必不可少的。我们是在做单片机课程设计,但我们不是艺术家,他们可以抛开实际尽情在幻想的世界里翱翔,而我们一切都要有据可依,有理可寻,不切实际的构想永远只能是构想,永远无法升级为设计。其次,在这次课程设计中,我们运用到了以前所学的专业课知识,虽然过去从未独立应用过它们,但在学习的过程中带着问题去学我发现效率很高,这是我做这次课程设计的又一收获。最后,要做好一个课程设计,就必须做到:在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;要有一个清晰的思路和一个完整的的软件流程图;在设计程序时,不能妄想一次就将整个程序设

    26、计好,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便;在设计课程过程中遇到问题是很正常德,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题。两周周的课程设计结束了,但是从中学到的知识会让我受益终身。发现、提出、分析、解决问题和实践能力的提高都会受益于我在以后的学习、工作和生活中。七、参考文献1李光飞,李良儿,楼然苗单片机程序设计实例指导北京:北京航空航天大学出版 社2005.53-612朱定华单片机原理及接口技术实验北京:清华大学出版社北方交通大学出版社2002.013张毅刚,彭喜源,谭晓昀,曲春波.MCS-51单片机应用设计M.哈尔滨:哈尔滨工业大学出版社,1997.53-61.4蔡明文,冯先成单片机课程设计武汉:华中科技及大学出版社2007.03


    注意事项

    本文(电子密码锁的设计.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开