电子系统设计(密码锁)_第1页
电子系统设计(密码锁)_第2页
电子系统设计(密码锁)_第3页
电子系统设计(密码锁)_第4页
电子系统设计(密码锁)_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

1、电子系统综合设计实训报告题 目: 电子密码锁 指导老师: 完成时间: 2014.10.25 姓名班级学号专业组员一王波01112012012211412通信工程组员二许世玲01112012012210616通信工程组员三吴丰01112062012211442通信工程引言本系统由单片机系统、矩阵键盘、LCD显示、密码掉电保护和继电器开锁系统组成,系统能完成开锁、报警等基本的密码锁的功能。此设计具有安全性高、价格低廉、便于实现、易于改进等优点。关键词:单片机、电子密码锁、矩阵键盘、LCD显示、掉电保护一、需求分析随着人们生活水平的提高,如何实现防盗、安全这一问题也变的尤其的突出,传统的机械锁由于其

2、构造的简单,被撬的事件屡见不鲜,电子锁由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的亲呢。电子密码锁可以在日常生活和现代办公来完成,住宅与办公室的安全防范,单位的文件档案财务报表以及一些个人资料的保存等多种场合使用。大大提高了主人物资的安全性。目前使用的密码锁种类多,各具特色。二、总体设计1、设置6位密码,密码通过键盘输入,若密码正确,则将锁打开。2、报警功能。密码输入错误显示器会出现“error try again”提示,若密码错误,蜂鸣器持续相应以示报警。3、保存密码。支持掉电保存功能。4、LCD显示功能。初始显示“input the code”,输入密码显示“*”,输入密码正

3、确显示“open (_)”,若密码错误,显示屏显示“error try again”。5、插上电源后,程序自动调入初始密码,此时依次输入:123456,然后按任意键确认,此时锁打开,液晶屏显示“open (_)”,并且led灯全亮且常亮。若输入其他密码,此时锁任然处于关闭状态,液晶屏显示“error try again”,并且蜂鸣器报警,led灯闪烁。 四、硬件电路设计1、MCU控制器介绍MCS-51系列中的各种芯片引脚是互相兼容的,其中8051单片机是高性能的单片机,它具有8位微处理器,128B片内RAM,4K的片内ROM,4个八位的并行I/O接口P0-P3,两个定时/计数器及五个中断源的中

4、断控制系统。再不接任何外围电路的情况下可以实现大部分较为复杂的逻辑控制功能,进行外部RAM扩展还可以用于数据采集,点阵显示屏控制等方面应用。对于存储量要求不高的实际应用,8051是一种不可多得高性能的单片机,被广泛应用于各个领域。2、矩阵键盘说明44矩阵键盘包括09数字键和A、B、C、D、*、#六个功能键。“*”为输入确认功能键。 电路原理图如下:如图示:采用44键盘输入,键盘对应名称如下: 1 2 3 A 其中,A、B、C、D、#为无用键, 4 5 6 B “*”为确认功能键。 7 8 9 C * 0 # D3、LCD显示电路原理图如下:4、 密码存储电路原理图如下:5、总原理图五、程序设计

5、1、框图及流程图A、系统框图B、开锁流程图C、功能流程图五、调试情况遇到的问题1、 键盘最左边一列键(1、4、7、*)按下无反应解决方法:重新更换一块开发板,问题解决。问题所在即原开发板端口出现异常。2、 代码编译错误(如字符格式、形参未正确定义、所定义函数有些许错误)解决方法:逐个解决,逐个审查错误。3、 代码所生成hex文件下载失败解决方法:重新安装端口驱动,并换取一条传输功能正常的下载线进行下载。六、测试分析(1) 进入系统。此时程序已被下载到系统中,LCD显示如下:(2)开锁。当输入密码后,系统会判定密码的正确与否,LCD会根据密码的正确与否给出相应的回应:A若密码输入正确,如下:此时

6、,LCD不仅有“open (_)”的显示,如上图,LED灯全亮且常亮。B若密码输入错误,如下:此时,LCD不仅有“error try again”字样的显示,如上图,LED灯闪烁且蜂鸣器持续发声。七、心得体会及总结1、特点总结以上便是本组设计的电子密码锁电路。该设计本着便捷、经济的特征,采用STC89C52RC结合的一系列电路设计,并用C语言编写的控制程序,通过多次调整、修改、调试以及整理所得出的简易电子密码锁,它具有保护密码、自动报警等功能,在达到基本要求的同时,还具有成本低、可靠性强、灵敏度高、操作简便等特点。从按键出发,方便易懂,以LCD及LED为切入点,可提供有效提示,灵活性强,且便于

7、操作。2、心得体会单片机是我们所学专业的主要课程之一,因此,我认为单片机课程设计是十分必要而且十分重要的。尽管刚刚拿到课程设计题目时有点迷惘,不知道如何着手,但通过上网和图书馆查阅相关资料,自己认真钻研以及虚心询问同学、老师,终于解决了一个又一个的困难和障碍,成功完成了任务。通过本次的单片机课程设计,我们受益匪浅。一方面,本次课程设计极大地丰富了我的理论知识,此次单片机课程设计需要运用到许多之前所学过的知识,令我认识到自己以前学习的一些不足之处,例如对以前所学知识的理解不够深刻,掌握得不够牢固,运用不够灵活。这让我懂得了认真学习的重要性,以及要孜孜不倦地钻研所学过的知识,做得融会贯通,不能一览

8、而过,不求甚解。同时,我还体会到动手解决问题的重要,在边学习边动手的过程中,我对电子密码锁的构造以及原理有了进一步的了解,同时也加深和巩固了我对单片机编程的认识。另一方面,由于是第一次做单片机,因此在此次课程设计的过程中,无论是电路绘制还是C语言编写都难免遇到了不少困难和障碍,例如C语言编写出错、电路元件无从入手等。在面对困难和障碍时,我们组非但没有退缩、逃避,反而通过各种方法,迎难而上,以坚持、耐心和努力勇敢无畏地面对困难,克服困难,解决困难。让我发现问题、分析问题、解决问题以及动手实践的能力都有了很大的提高,并了解到理论知识与实践相结合的重要意义。从这次的课程设计中,我们真真正正的意识到,

9、在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的练习的过程中才能提高。本次课程设计尽管时间不长,但从中所获,将令我受益终生,是一次非常有价值的体验。附录:源代码名称:矩阵键盘模拟密码锁,解锁密码1-9内容:模拟密码锁,密码固化到ROM 不能通过按键输入更改-*/#include /包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#includesbit RS = P15; /定义端口 0写指令,1写数据sbit RW = P16; /写入信号? 0写数据,1读数据sbit EN = P17; /片选信号?#define RS

10、_CLR RS=0 #define RS_SET RS=1#define RW_CLR RW=0 #define RW_SET RW=1 #define EN_CLR EN=0#define EN_SET EN=1unsigned char code dofly_code=0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F;/转换成液晶显示的字符#define DataPort P0 /定义数据端口 程序中遇到DataPort 则用P0 替换#define KeyPort P3sbit LEDSWITCH=P20; /LED总开关sbit buzzer=P21;/控制蜂鸣器sbit

11、 DUAN=P26;/定义锁存使能端口 段锁存sbit WEI=P27;/ 位锁存unsigned char code password8=1,2,3,4,5,6;/可以更改此密码做多组测试void DelayUs2x(unsigned char t);/us级延时函数声明 void DelayMs(unsigned char t); /ms级延时/void Display(unsigned char FirstBit,unsigned char Num);/数码管显示函数unsigned char KeyScan(void);/键盘扫描unsigned char KeyPro(void);v

12、oid Init_Timer0(void);/定时器初始化/*- 判忙函数-*/ bit LCD_Check_Busy(void) DataPort= 0xFF; RS_CLR; RW_SET; EN_CLR; _nop_(); /? EN_SET; return (bit)(DataPort & 0x80); /*- 写入命令函数-*/ void LCD_Write_Com(unsigned char com) while(LCD_Check_Busy(); /忙则等待 RS_CLR; RW_CLR; EN_SET; DataPort= com; _nop_(); EN_CLR; /*- 写

13、入数据函数-*/ void LCD_Write_Data(unsigned char Data) while(LCD_Check_Busy(); /忙则等待 RS_SET; RW_CLR; EN_SET; DataPort= Data; _nop_(); EN_CLR; /*- 清屏函数-*/ void LCD_Clear(void) LCD_Write_Com(0x01); /? DelayMs(10); /*- 写入字符串函数-*/ void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) if (y =

14、 0) LCD_Write_Com(0x80 + x); else LCD_Write_Com(0xC0 + x); while (*s) LCD_Write_Data( *s); s +; /*- 写入字符函数-*/ void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data) if (y = 0) LCD_Write_Com(0x80 + x); else LCD_Write_Com(0xC0 + x); LCD_Write_Data( Data); /*- 初始化函数-*/ void LCD_Init(vo

15、id) LCD_Write_Com(0x38); /*显示模式设置*/ DelayMs(5); LCD_Write_Com(0x38); DelayMs(5); LCD_Write_Com(0x38); DelayMs(5); LCD_Write_Com(0x38); LCD_Write_Com(0x08); /*显示关闭*/ LCD_Write_Com(0x01); /*显示清屏*/ LCD_Write_Com(0x06); /*显示光标移动设置*/ DelayMs(5); LCD_Write_Com(0x0C); /*显示开及光标设置*/ /*- 主函数-*/void main (void

16、)unsigned char num,i,j; unsigned char temp8;bit Flag;/Init_Timer0();LCD_Init(); LCD_Write_String(i,0,input the code);while (1) /主循环 num=KeyPro(); if(num!=0xff) if(i=0) LCD_Clear(); /for(j=0;j8;j+)/清屏 / TempDataj=0; if(i6) tempi=num;LCD_Write_String(i,0,*); i+; /输入数值累加if(i=7)/正常等于8即可,由于我们需要空一个用于清屏,/清

17、屏时的按键不做输入值 i=0; Flag=1;/先把比较位置1 for(j=0;j8;j+)/循环比较8个数值, /如果有一个不等 则最终Flag值为0 Flag=Flag&(tempj=passwordj); /Flag=Flag&(tempj=dofly_DuanMapasswordj); /比较输入值和已有密码 /for(j=0;j8;j+)/清屏 / TempDataj=0; if(Flag)/如果比较全部相同,标志位置1 LCD_Clear(); LCD_Write_String(0,0, open (_); LEDSWITCH=0; while(1) P0=0; else LCD_

18、Clear(); LCD_Write_String(0,0,error try again); LEDSWITCH=0;/打开LED开关 低电平有效 while(1) /大循环 P0=0xff; DelayMs(500); P0=0x00; DelayMs(500); buzzer=buzzer; DelayMs(1);/延时1MS /*- uS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是 0255 这里使用晶振12M,精确延时请使用汇编,大致延时 长度如下 T=tx2+5 uS -*/void DelayUs

19、2x(unsigned char t) while(-t);/*- mS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是 0255 这里使用晶振12M,精确延时请使用汇编-*/void DelayMs(unsigned char t) while(t-) /大致延时1mS DelayUs2x(245); DelayUs2x(245); /*- 显示函数,用于动态扫描数码管 输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示 如输入0表示从第一个显示。 Num表示需要显示的位数,如需要显示99两位数值则该值输入2-*/*-按键扫描函数,返回扫描键值-*/unsigned char KeyScan(void) /键盘扫描函数,使用行列反转扫描法 unsigned char cord_h,cord_l;/行列值中间变量 KeyPort=0x0f; /行线输出全为0 cord_h=KeyPort&0x0f; /读入列线值 if(cord_h!=0x0f) /先检测有无按键按下 DelayMs(10); /去抖 if(KeyPort&0x0f)!=0x0f) cord_h=KeyPort&0x0f; /读入列线值 KeyPort=

温馨提示

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

最新文档

评论

0/150

提交评论