AVR简易密码锁课程设计报告.doc_第1页
AVR简易密码锁课程设计报告.doc_第2页
AVR简易密码锁课程设计报告.doc_第3页
AVR简易密码锁课程设计报告.doc_第4页
AVR简易密码锁课程设计报告.doc_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

深圳职业技术学院Shenzhen Polytechnic新型单片机开发与应用课程设计报告课题名称:简易六位密码锁学 院:电子与通信工程学院 班 级:11微电子1班姓 名:学 号:指导老师:2013年6月24日摘要随着科学技术的不断发展,人们对日常生活中的安全保险器件的要求越来越高。为满足人们对锁的使用要求,增加其安全性,用密码代替钥匙的密码锁应运而生。密码锁具有安全性高、成本低、功耗低、易操作、记住密码即可开锁等优点。本系统由ATmega16单片机系统(主要是ATmega16单片机最小系统)、44矩阵键盘、LCD1602显示组成,具有验证、修改六位用户密码的功能。关键词密码锁ATmega16LCD160244矩阵键盘目录绪论1一、设计方案21.1.功能简介21.2.开发测试环境选择2二、密码锁硬件设计22.1ATmega16单片机最小系统22.2矩阵按键模块32.3LCD1602显示模块42.4密码锁电路图设计5三、密码锁软件设计63.1密码锁程序流程图63.2程序模块设计63.2.1密码验证模块73.2.2密码修改模块8小结9参考文献资料9附录110 简易六位密码锁设计11微电子1班绪论20世纪80年代后,随着电子锁专用集成电路的出现,电子锁的体积缩小,可靠性提高,成本较高,是适合使用在安全性要求较高的场合,且需要有电源提供能量,使用还局限在一定范围,难以普及,所以对它的研究一直没有明显进展。目前,在西方发达国家,电子密码锁技术相对先进,种类齐全,电子密码锁已被广泛应用于智能门禁系统中,通过多种更加安全,更加可靠的技术实现大门的管理。在我国电子锁整体水平尚处于国际上70年代左右,电子密码锁的成本还很高,市场上仍以按键电子锁为主,按键式和卡片钥匙式电子锁已引进国际先进水平,现国内有几个厂生产供应市场。但国内自行研制开发的电子锁,其市场结构尚未形成,应用还不广泛。国内的不少企业也引进了世界上先进的技术,发展前景非常可观。希望通过不断的努力,使电子密码锁在我国也能得到广泛应用。1一、 设计方案1.1. 功能简介本次设计的简易6位密码锁主要包含两个功能:密码验证功能和修改密码功能。密码验证功能初始密码为6个“0”,输入6位密码并按“确定”后比对密码,正确提示“correct”,错误提示“PW error”并要求再次输入密码;设置密码时要求先输入原密码匹配后才能修改密码,密码修改完成功成后会提示“success”。1.2. 开发测试环境选择开发软件选择了HP Info Tech的CodeVisionAVR V2.05,仿真软件选择了英国Labcenter electronics公司的proteus7 professional,测试硬件选择了AVR开发箱。首先在CodeVisionAVR V2.05下进行程序设计,编译通过后用proteus7 professional进行仿真并尝试下载到开发箱中进行操作,最后下载到开发箱中进行操作演示。二、 密码锁硬件设计本次设计主要采用的硬件可以分为以下3个模块:ATmega16单片机最小系统,矩阵按键模块和LCD1602显示模块。2.1 ATmega16单片机最小系统美国ATMEL公司生产的ATmega16是基于增强的AVR RISC结构的低功耗8 位CMOS微控制器。由于其先进的指令集以及单时钟周期指令执行时间,ATmega16 的数据吞吐率高达1 MIPS/MHz,从而可以减缓系统在功耗和处理速度之间的矛盾。本芯片是以Atmel 高密度非易失性存储器技术生产的,通过将8 位RISC CPU 与系统内可编程的Flash 集成在一个芯片内, ATmega16 成为一个功能强大的单片机,为许多嵌入式控制应用提供了灵活而低成本的解决方案。ATmega16的最小系统包含了复位以及晶振电路,如图2.1所示。图2.1 ATmega16最小系统如上图所示,复位电路工作原理是当系统上电是C1电容充电使得MCU的复位端处在低电平(ATmega16为低电平复位),电容充满电后回路断开复位端处在高电平MCU正常工作。在晶振电路中为了使晶振稳定工作一般将晶振两端通过两个22Pf33pF的电容接地。2.2 矩阵按键模块本设计采用4*4行列式键盘,同时也能减少键盘与单片机接口时所占用的I/O口的数目,在按键比较多的时候,通常采用这样方法。按键模块如图2.2所示。图2.2 4*4矩阵按键模块如上图所示,把每个键都分成水平和垂直的两端接入,比如说扫描码是从垂直的入,那就代表那一行所接收到的扫描码是同一个bit,而读入扫描码的则是水平,扫描的动作是先输入扫描码,再去读取输入的值,经过比对之后就可知道是哪个键被按下。本设计使用单片机的PA口对按键进行操作。由于是机械式按键,我们必须在侦测到有按键被按下后延时一定的时间,等待按键稳定再去判读所按下的键。且在使用时为了避免连按或多按也需要采取用while()函数等来进行按键释放的判断。2.3 LCD1602显示模块显示设计采用字符型液晶屏设计,由单片机的PB口控制字符液晶显示。在包含头文件(lcd.h)前声明PB口与LCD模块通讯。方法如下:/* 使用PORTB 连接LCD模块 */#asm.equ _lcd_port=0x18;#endasmLCD模块与单片机口线连接方式如下:LCD RS(pin4) RD(pin 5) EN(pin 6) DB4(pin 11) DB5(pin 12) DB6(pin 13) DB7(pin 14) AVR Port -bit 0 bit 1 bit 2 bit 4 bit 5 bit6 bit7 连接示意图如图2.3所示。图2.3 LCD显示模块连接示意图2.4 密码锁电路图设计Proteus软件是Labcenter Electronics公司的一款电路设计与仿真软件,它包括ISIS、ARES等软件模块,ARES模块主要用来完成PCB的设计,而ISIS模块用来完成电路原理图的布图与仿真。Proteus的软件仿真基于VSM技术,它与其他软件最大的不同也是最大的优势就在于它能仿真大量的单片机芯片,比如MCS-51系列、PIC系列等等,以及单片机外围电路,比如键盘、LED、LCD等等。通过Proteus软件的使用我们能够轻易地获得一个功能齐全、实用方便的单片机实验室。 本密码锁采用proteus进行电路图设计,硬件采用AVR开发箱。密码锁电路图如图2.4所示。图2.4 密码锁电路图9三、 密码锁软件设计开发软件选择了HP Info Tech的CodeVisionAVR V2.05,开发语言为C语言,语法较为简单易懂。软件的设计首先要根据功能和工作流程设计出对应的流程图,并根据流程图编写响应部分的代码,最后再进行调试。完整源代码见附录1。3.1 密码锁程序流程图根据要求可作出主程序流程图,如图3.1所示。图3.1 主程序流程图3.2 程序模块设计根据流程图写出响应的子程序最后在主程序中调用即可。主程序代码如下(初始化部分忽略):while (1) key=keyscan(); if(key!=0xff) delay_ms(10); if(key=13)/按下设置键进入设置状态 set_pw(); set_flag=1; else /按下任意键进入密码验证状态 lcd_clear(); check_pw(); else /无按键按下时液晶显示 lcd_gotoxy(0,0); lcd_putsf(Welcome); lcd_gotoxy(0,1); lcd_putsf(Press any key); 3.2.1 密码验证模块由主程序可知,当任意键按下后及进入密码验证模块。进入该模块后程序开始识别按键进行密码输入,密码验证是先读取用户输入的密码存到临时缓存中,待用户输入完毕并确认后进行密码比对,比对完成后给出相应的提示和响应动作,仿真结果如图3.2.1所示。 图3.2.1 密码输入以及提示为方便演示,故输入密码时显示对应输入的密码。实际应用时为保护密码,输入密码是应显示对应的“*”。3.2.2 密码修改模块密码修改模块是基于密码验证模块设计,用户进入密码修改模式后先使用密码验证的方法进行旧密码的验证,验证通过后才能进密码设置。密码设置同样需要输入两次且完全匹配才能完成密码修改。密码修改完成后会给出提示。仿真结果如图3.2.2所示。 图3.2.2 密码修改及提示小结本次设计采用的是液晶显示以及矩阵按键,液晶显示属于静态显示处理起来比较简单,但矩阵按键采取的是扫描的方式,在处理按键时需要不停地扫描,处理不当就会造成按键无响应或者是死循环。在密码验证以及密码设置的代码编写时要十分注意其逻辑顺序,逻辑顺序不正确就会导致程序进入死循环。通过本次设计,我们进一步了解了ATmega16单片机的外围电路、矩阵按键和LCD1602的工作原理和使用方法。在代码的编写方面也积累了经验,同时也锻炼了自身对程序设计的能力和理解。参考文献资料a. 单片机应用技术:C语言版/王静霞主编.北京:电子工业出版社,2009.5b. 单片机原理及应用/彭同明等编著.2版.北京:中国电力出版社,2009c. 百度文库资料。附录1简易六位密码锁源代码#include #include #asm .equ _lcd_port=0x18 ;PORTB#endasm#include #define uchar unsigned charuchar keyscan(void);void set_pw(void);void reset(uchar mark);void check_pw(void);uchar pw6=0,0,0,0,0,0,pw_temp6=0,0,0,0,0,0;bit set_flag=0;void main(void) uchar key; PORTA=0x00;DDRA=0xf0; PORTB=0x00;DDRB=0x00;PORTC=0x00;DDRC=0x00; PORTD=0x00;DDRD=0x00;lcd_init(16); lcd_clear();while (1) key=keyscan(); if(key!=0xff) delay_ms(10); if(key=13) set_pw(); set_flag=1; else lcd_clear(); check_pw(); else lcd_gotoxy(0,0); lcd_putsf(Welcome); lcd_gotoxy(0,1); lcd_putsf(Press any key); void check_pw(void)/密码比对uchar key=0xFF,count=0,pw_temp26; bit q_flag=0;while(q_flag=0) lcd_clear(); lcd_gotoxy(0,0); lcd_putsf(Present PW:); /显示字符串Present PW: lcd_gotoxy(0,1); while(1)/密码验证 key=keyscan(); if(key!=0xff) if(key=0 & key10 & count6) lcd_putchar(key+48); pw_tempcount=key; count+; while(keyscan()!=0xff); if(key=15 & count=6) /确定按键 for(count=0;count=0 & key10 & count6) lcd_putchar(key+48); pw_tempcount=key; count+; while(keyscan()!=0xff); if(key=15 & count=6) /确定按键 for(count=0;count=0 & key10 & count6) lcd_putchar(key+48); pw_tempcount=key; count+; while(keyscan()!=0xff); if(key=15 & count=6) /确定按键 for(count=0;count6;count+) pwcount=pw_tempcount; if(count=6)lcd_clear(); lcd_gotoxy(0,0); lcd_putsf(Success!); set_flag=0; delay_ms(5000); reset(w); count=0;break; while(keyscan()!=0xff); if(key=12) /清除 count=0; reset(p); while(keyscan()!=0xff); if(key=14)count=0;reset(w);while(keyscan()!=0xff);break; void reset(char mark) lcd_clear(); if(mark=a) lcd_gotoxy(0,0); lcd_putsf(Again PW:); lcd_gotoxy(0,1); els

温馨提示

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

评论

0/150

提交评论