单片机密码锁实验报告
- 格式:docx
- 大小:4.62 MB
- 文档页数:22
山东交通学院单片机原理与应用课程设计院(部):轨道交通学院班级:自动化121学生姓名:学号:指导教师:时间: 2015.6.1—2015.6.12课程设计任务书题目电子密码锁设计系 (部) 轨道交通学院专业班级自动化121学生姓名学号06 月 01 日至 06 月 12 日共 2 周指导教师(签字)系主任(签字)年月日一、设计内容及要求本实验基于51单片机利用矩阵按键、步进电机、lcd1602等模块实现电子密码锁的输入密码、密码比对、步进电机的驱动、修改密码等功能。
设计内容包括:1)lcd1602显示;2)矩阵按键的输入;3)24C08的储存于读取;4)步进电机的驱动;5)线路的链接。
设计要求:1)能演示;2)能回答答辩过程中提问的问题;3)完成设计报告。
二、设计原始资料单片机原理及接口技术李全利 2010年 1月单片机原理及应用教程范立南 2006年 1月单片机原理及应用教程刘瑞新 2003年07月三、设计完成后提交的文件和图表1.计算说明书部分1)方案论证报告打印版或手写版2)程序流程图3)具体程序2.图纸部分:具体电路原理图打印版四、进程安排教学内容学时地点资料查阅与学习讨论 2天 406实验室分散设计 4天 406实验室编写报告 2天 406实验室成果验收 2天 406实验室按分组选择不同的实验台,每组3人,题目可重复选择,但每题目不得超过10人。
五、主要参考资料《电子设计自动化技术基础》马建国、孟宪元编清华大学出版2004年4月《单片机原理及接口技术》张毅刚人民邮电出版社.2008年《实用电子系统设计基础》姜威 2008年1月《单片机系统的PROTEUS设计与仿真》张靖武 2007年4月指导老师成绩答辩小组成绩总成绩目录摘要 (1)1.设计要求 (2)2.功能概述 (2)3.总体设计 (2)4.硬件设计 (3)4.1矩阵按键设计 (3)4.2 LCD显示设计 (4)4.3步进电机模块设计 (5)4.4密码修改设计 (5)4.5密码比较模块 (6)5.软件设计及流程图 (6)6.个人体会 (8)7.参考文献 (9)附录 (10)摘要设计运用了ATMEL公司的AT89S52芯片系统,将微处理器、总线、蜂鸣器、矩阵键盘、存储器和I/O口等硬件集中一块电路板上,通过读取键盘输入的数据(密码)并储存到ATMEL912 24C08存储器中,然后判断之后键盘输入的数据与已存储的数据是否相同来决定打开密码箱或锁键盘或报警。
基于51单片机的密码锁设计报告课程:单片机原理学院:电子与信息工程学院专业:班级:姓名:学号:指导老师:完成日期:目录一、矩阵按键 (1)(1)按键接口 (1)(2)按键开关的抖动问题 (1)二、LCD1602液晶 (2)(1)1602 液晶的介绍 (2)(2)液晶的读写时序介绍 (4)(3)1602 液晶的指令介绍 (6)三、设计 (7)(1)输出密码后,显示LCD1602 (7)(2)输出密码后,交替亮灭显示LED (7)四、程序设计 (7)(1)主程序 (7)(二)LCD1602程序 (9)(3)矩阵键盘程序 (10)五、仿真截图 (12)(1)输出密码后,显示LCD1602 (12)(2)输出密码后,交替亮灭显示LED (15)基于51单片机的密码锁设计一、矩阵按键(1)按键接口键盘是由若干按键组成的开关矩阵,它是微型计算机最常用的输入设备,用户可以通过键盘向单片机输入指令、地址和数据。
一般单片机系统中采和非编码键盘,非编码键盘是由软件来识别键盘上的闭合键,它具有结构简单,使用灵活等特点,因此被广泛应用于单片机系统。
(2)按键开关的抖动问题组成键盘的按键有触点式和非触点式两种,单片机中应用的一般是由机械触点构成的。
在下图1、图2中,当按键被按下时,P1.0输入为高电平;当按键按下后,P1.0输入为低电平。
由于按键是机械触点,当机械触点断开、闭合时,会有抖动动,P1.0输入端的波形如图2所示。
这种抖动对于人来说是感觉不到的,但对单片机来说,则是完全可以感应到的,因为单片机处理的速度是在微秒级,而机械抖动的时间至少是毫秒级,对单片机而言,这已是一个“漫长”的时间。
图1图2按键抖动波形为使CPU能正确地读出P1口的状态,对每一次按键只作一次响应,就必须考虑如何去除抖动,常用的去抖动的方法有两种:硬件方法和软件方法。
单片机中常用软件法,因此,对于硬件方法我们不介绍。
软件法,就是在单片机获得P1.0口为低的信息后,不是立即认定按键已被按下,而是延时10毫秒或更长一些时间后再次检测P1.0口,如果仍为低,说明按键的确按下了,这实际上是避开了按键按下时的抖动时间。
信息工程学院51单片机的密码锁控制器的设计实验报告专业:电气工程及其自动化班级:10040921基于51单片机的密码锁控制器设计一、设计目的:要求设计的电子密码锁的密码用键盘上的数字按键产生的6位数字码构成的密码。
如果输入密码正确开锁(发光二极管量),如果密码不正确,发出报警信号。
二、实验要求:1、显示位数:6位密码显示2、键盘设置密码三、设计方案:本设计包括矩阵键盘接口电路、密码锁的控制电路和输出显示电路等三部分。
键盘部分包括键盘扫描时序产生电路;键盘扫描;弹跳消除;键盘译码;按键存储。
程序控制包括数字按键的数字输入;存储及清除;功能按键的功能设计;移位寄存器的设计与控制;密码清除、变更、存储;激活开锁电路;密码核对;解除电锁电路。
输出显示电路的设计包括:数据选择;BCD对显示译码;七段显示扫描。
(1)密码数据输入:每按一个数字键,在显示器上显示一个“-”最多可设置6位密码。
(2)密码设置:每按一个数字键,就输入一个数值,并在显示器上的最右方显示出该数值,并将先前已经输入的数据依序左移一个数字位置。
注意:密码设置必须是在开锁状态下设置。
(3)数码清除:按下此键可清除前面所有的输入值,清除成为“000000”。
(4)密码更改:按下此键时将目前的数字设定成新的密码。
(5)激活电锁:按下此键可将密码锁上锁。
(6)解除电锁:按下此键会检查输入的密码是否正确,密码正确即开锁。
(7)密码错误:声光报警四、实验电路及连线:1、实验接线2、LED电平显示电路实验仪上装有8只发光二极管及相应驱动电路。
见下图,L0―L7为相应发光二极管驱动信号输入端,该输入端为高电压电平“1”时发光二极管点亮。
我们可以通过P1口对其直接进行控制,点亮或者熄灭发光二极管。
LED电平显示电路3、键盘及LED显示电路键盘和LED显示的地址译码见下图,做键盘和LED实验时,需要将KEY/LED CS接到相应的地址译码上。
位码输出的地址为0X002H,段码输出的地址为0X004H,键盘行码读回的地址为0X001H,此处X是由KEY/LED CS决定,参见地址译码。
单片机密码锁实习报告一、前言随着科技的不断发展,单片机技术在各个领域得到了广泛的应用。
本次实习,我选择了单片机密码锁的设计与实现作为课题,旨在掌握单片机的原理与应用,提高自己的动手实践能力。
二、实习目的1. 学习单片机的原理与编程方法,了解单片机在实际应用中的优势。
2. 掌握密码锁的设计原理,学会使用单片机实现密码锁功能。
3. 培养自己的团队协作能力和解决问题的能力。
三、实习内容1. 单片机密码锁的原理与功能介绍2. 单片机密码锁的硬件设计3. 单片机密码锁的软件编程4. 单片机密码锁的系统调试与优化四、实习过程1. 单片机密码锁的原理与功能介绍单片机密码锁是一种利用单片机作为控制核心,通过密码输入来控制电路或芯片工作的安全设备。
它具有安全性高、成本低、功耗低、易操作等优点,广泛应用于各种场合。
本次设计的单片机密码锁采用4x4矩阵键盘输入密码,当密码输入正确时,锁打开,否则锁定按键3秒钟并发出报警。
2. 单片机密码锁的硬件设计硬件设计是实现单片机密码锁功能的基础。
本次设计中,硬件部分主要包括4x4矩阵键盘、LED显示、蜂鸣器报警、电磁锁等。
其中,4x4矩阵键盘用于输入密码,LED显示用于显示输入的密码,蜂鸣器报警用于发出报警声音,电磁锁用于实现锁的开关。
3. 单片机密码锁的软件编程软件编程是实现单片机密码锁功能的关键。
本次设计中,软件部分主要实现以下功能:(1)键盘扫描:检测按键是否按下,并获取按键值。
(2)密码输入:将键盘输入的按键值转换为密码,并在LED显示上显示。
(3)密码判断:判断输入的密码是否正确,正确则开锁,错误则锁定按键3秒钟并发出报警。
(4)密码修改:提供一种方式修改密码,以提高安全性。
4. 单片机密码锁的系统调试与优化在完成硬件设计和软件编程后,进行系统调试与优化。
通过反复测试,发现并解决可能存在的问题,提高系统的稳定性和可靠性。
五、实习收获通过本次实习,我学到了很多关于单片机密码锁的知识,收获如下:1. 掌握了单片机的原理与编程方法,了解了单片机在实际应用中的优势。
单片机综合设计实验单片机密码锁单片机综合设计实验一、实验目的掌握嵌入式系统的设计原理、程序编写与调试的开发过程。
二、实验内容电子密码锁设计(A类):根据设定好的密码,采用8个按键实现密码的输入功能,当密码输入正确之后,锁就打开,显示某个字符;如果输入的三次的密码不正确,就锁定按键3秒钟,同时发出报警声显示另一个字符,直到没有按键按下3秒后,才打开按键锁定功能;否则在3秒钟内仍有按键按下,就重新锁定按键3秒时间并报警。
在单片机实验板上实现二、实验要求1、根据给定题目设计Proteus仿真原理图;2、根据给定题目设计有关的51汇编语言(或C语言)源程序,并编译成可执行文件;3、在Proteus仿真界面下运行程序实现给定的功能。
三.程序设计内容(1).密码的设定,在此程序中密码是固定在程序存储器ROM中,假设预设的密码为“21213232”共8位密码。
(2).密码的输入问题:由于采用按键来完成密码的输入,首先输入密码的长度,接着根据密码的长度输入密码的位数,直到所有长度的密码都已经输入完毕,才能完成密码的输入过程。
进入密码的判断比较处理状态并给出相应的处理过程。
(3).按键禁止功能:初始化时,是允许按键输入密码,当有按键按下并开始进入按键识别状态时,按键禁止功能被激活,但启动的状态在3次密码输入不正确的情况下发生的。
Proteus 仿真原理图:开始 初始化 有键按下?调用显示启动定时 识别按键按键数=8? 超时?比较密码 开门 开始自动清除<3次?报警NNYYYYNN主程流程图程序TIM EQU -2000DISP DATA 30H ; 30-34HDIS DATA 35HKEY DATA 36HWRONG DATA 50HCNT DATA 51HCLK BIT P0.0DAT BIT P0.1STR BIT P0.2BEEP BIT P0.7S4 BIT P2.7S3 BIT P2.6S2 BIT P2.5S1 BIT P2.4K1 BIT P2.3K2 BIT P2.2K3 BIT P2.1K4 BIT P2.0ORG 0000HLJMP MAINORG 000BHLJMP TIM0ORG 001BHLJMP DT1MAIN: MOV SP,#60H;MOV IE,#82HSETB EASETB ET0SETB ET1MOV TMOD,#11HMOV TH0,#HIGH(TIM)MOV TL0,#LOW(TIM)MOV TH1,#70H ;定时20msMOV TL1,#00H ;SETB TR0MOV KEY,#0MOV R5,#08HMOV R0,#40HMOV WRONG ,#00HMOV DISP+0,#0FFHMOV DISP+1,#0FFHMOV DISP+2,#0FFHMOV DISP+3,#0FFH ;............................................;大循环;............................................START: MOV R5,#08HMOV R0,#40HLCALL INPUTLCALL COMPARELJMP START ;............................................LOOP: INC WRONGMOV DISP+1,#0EH ;第二个数码管显示"E"表示密码输入错误,锁没有打开MOV KEY,#0SJMP START ;............................................;输入8位密码;............................................INPUT: MOV A,KEYJZ INPUTMOV @R0,AMOV A,@R0;MOV DISP+3,AMOV DISP+3,ALCALL DELAY_S ;消抖INC R0MOV KEY,#0DJNZ R5,INPUTMOV KEY,#0RET ;.............................................;判断输入的密码是否正确;.............................................COMPARE: MOV R1,#00HMOV R5,#08HMOV R0,#40HMOV A,WRONGCJNE A,#2,NEXT ;判断输入错误次数是否等于3,不等于跳转NEXTMOV WRONG,#00H ;等于3调用按键锁定子程序MOV KEY,#0LCALL LOCK ;调用键盘锁定程序SJMP NEXT_1 ;子程序返回NEXT: MOV DPTR,#TAB ;输入的密码与预先设定的密码相比较MOV A,R1MOVC A,@A+DPTR;MOV A,R1MOV B,@R0CJNE A,B, LOOPINC R1INC R0DJNZ R5, NEXT ;判断8位有没有比较完; MOV DISP+3,#0FFH; MOV DISP+2,#0FFHMOV DISP+1,#0AH ;密码正确显示A; MOV DISP+0,#0FFHNEXT_1: RET ;...........................................;锁定按键3秒钟;...........................................LOCK: MOV KEY,#00HMOV DISP+1,#0FH ;第二个数码管显示"F"表示三次密码输入错误,锁定按键锁定三秒过后第二个数码管显示关SETB TR1MOV CNT,#00HLOCK_N:CLR BEEPMOV A,KEYJNZ LOCK ;A=0说明没有按键按下,不需要重新锁定,程序顺序执行,A!=0说明有键按下,重新锁定MOV A,CNTMOV KEY,#0CJNE A,#150,LOCK_N ;判断锁定时间是否到3秒CLR TR1 ;关中断SETB BEEP ; 关蜂鸣器MOV DISP+1,#0ffhMOV CNT,#00H ;计数器清零RET ;中断返回;............................................;中断0的子程序;............................................TIM0: PUSH ACCPUSH PSWMOV TH0,#HIGH(TIM)MOV TL0,#LOW(TIM)MOV A,DISLCALL GETDISMOV A,DISADD A,#DISPMOV R1,AMOV A,@R1LCALL GETSEGKEY0P: JB K1,KEY1PMOV A,DISADD A,#1MOV KEY,AKEY1P: JB K2,KEY2PMOV A,DISADD A,#5MOV KEY,AKEY2P: JB K3,KEY3PMOV A,DISADD A,#9MOV KEY,AKEY3P: JB K4,KEYPMOV A,DISADD A,#13MOV KEY,AKEYP: INC DISMOV A,DISCJNE A,#4,TIMEMOV DIS,#0TIME: POP PSWPOP ACCRETI ;.............................................;中断服务程序2DT1: MOV TH1,#70HMOV TL1,#00HINC CNTRETI ;............................................;延时子程序1 ;............................................DLYTIM: MOV R6,#200 DLYR7: MOV R7,#200DJNZ R7,$DJNZ R6,DLYR7RET ;.............................................;延时子程序2 ;............................................. DELAY_S:MOV R4,#10MOV R6,#200DLYR8: MOV R7,#200DJNZ R7,$DLAY1: DJNZ R6,DLYR8DJNZ R4, DLAY1RET ;........................................... ;........................................... GETSEG: MOV R1,ALCALL DISPLAYRET ;.......................................... ;.......................................... GETDIS: MOV DPTR,#NUMTAB MOVC A,@A+DPTRCPL AMOV P2,ARET ;.........................................;......................................... DISPLAY:MOV A,R1MOV DPTR,#TABLEMOVC A,@A+DPTRCPL AMOV R2,#8CLR CLK ;......................................... ;......................................... DLP: RRC AMOV DAT,CCLR CLKSETB CLKDJNZ R2,DLPSETB STRCLR STRRET ;........................................... ;...........................................;数码管译码;...........................................TABLE: DB 0F5H,05H,0E3H,67H,17H,76H,0F6H,25HDB0F7H,77H,0B7H,0D6H,0F0H,0C7H,0F2H,0B2H ;...........................................;数码管的位选通;............................................NUMTAB: DB 10H,20H,40H,80H ;............................................;初始密码为2,1,2,1,3,2,3,2 ;............................................TAB: DB 02H,01H,02H,01H,03H,02H,03H,02H ;......................................END。
基于单片机的电子密码锁实验报告题目:基于16F877的电子密码锁班级:班内序号:实验组号:学生姓名:指导教师:基于16F877的电子密码锁实验摘要在日常的生活和工作中, 住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的储存多以加锁的方法来解决。
假设使用传统的机械式钥匙开锁,人们常需携带多把钥匙, 使用极不方便, 且钥匙丢失后安全性即大打折扣。
具有防盗报警等功能的电子密码锁代替密码量少、安全性差的机械式密码锁已是必定趋势。
随着科学技术的不断进展,人们对日常生活中的安全保险器件的要求越来越高。
为满足人们对锁的使用要求,增加其安全性,用密码代替钥匙的密码锁应运而生。
密码锁具有安全性高、成本低、功耗低、易操作、记住密码即可开锁等优点。
目前使用的电子密码锁大部分是基于单片机技术,以单片机为要紧器件,其编码器与解码器的生成为软件方式。
本系统由16F877单片机系统〔要紧是16F877单片机最小系统〕、4×4矩阵键盘、LCD1602显示和报警系统等组成,具有设置、修改四位用户密码、输入提示音、密码错误报警等功能〔本设计由单片机操纵LCD显示,密码正确显示password ok!密码错误显示wrong,please reset!用户reset后进行重新输入。
由单片机操纵矩阵键盘含有0-9数字键和A-F功能键。
按F键,那么进行密码重置功能〕。
本系统成本低廉,功能有用。
〔宋体五号〕A b s t r a c tIn daily life and work, the department of housing and security, unit documents, financial statements and some personal information to save more in order to lock the ways to solve. If use the traditional mechanical key to open the lock, people often need to carry multiple keys, use very convenient, and the key missing after security is compromised. With anti-theft alarm function such as electronic combination lock instead of password quantity is little, security, poor mechanical combination lock is inevitable trend. With the continuous development of science and technology, people in daily life the demand is higher and higher safety insurance device. To meet the requirements of people on the use of the lock, increase its safety, use the password instead of the key combination lock arises at the historicmoment. Combination lock with high safety, low cost, low power consumption, easy operation, remember password lock, etc.Currently use electronic combination lock is mostly based on single chip microcomputer technology, single chip microcomputer as the main device, the encoder and decoder for software.This system consists of 16 f877 microcontroller system (mainly minimum 16 f877 microcontroller system), 4 * 4 matrix keyboard, LCD1602 display and alarm system, etc, and has set up four, modify user password, password, input prompt error alarm functions (this design by the single chip microcomputer control LCD display, the password correctly display the password ok! Wrong password shows wrong, both please reset! The user to enter again after reset. By single-chip microcomputer control matrix keyboard contains 0-9 number keys and A - F function keys. Press the F key, then carries on the password reset function). This system is low cost, function and practical.WM function to control its turn. And this is so called navigating aptitudinally .关键字单片机——microcontroller 芯片——CMOS chip16F877一、PIC16F877系列单片机简介PIC16F87X ( 含873P874P876P877) 是美国微芯(Microchip) 公司推出的高性能单片机,除具有单片机的通用资源外,该系列单片机还采纳哈佛总线结构、二级指令流水线取指方式、精简指令集(RISC)和内部具有E2 PROM 数据储备器及FLASH 结构的程序储备器、仅35 条单字节单周期指令、在系统串行编程技术和在线调试技术。
一、前言随着科技的不断发展,单片机技术在各个领域得到了广泛的应用。
密码锁作为一种安全可靠的开锁方式,也逐渐成为了人们生活中不可或缺的一部分。
本报告主要介绍了我在单片机实习期间,基于51单片机设计的电子密码锁的过程和实践。
二、实习目的和意义本次实习的目的是学习和掌握单片机原理及应用,提高自己的动手能力和创新能力。
通过设计电子密码锁,了解并掌握单片机在实际应用中的电路设计、编程和调试技巧。
此外,电子密码锁在生活中的应用广泛,具有较高的实用价值,可以为人们提供便捷、安全的生活环境。
三、实习内容1. 电路设计本次实习的电子密码锁主要由51单片机、4x4矩阵键盘、LCD1602液晶显示屏、AT24C02存储模块、报警系统和继电器等组成。
电路设计过程中,首先对各个模块进行选型,然后绘制原理图,最后搭建实物电路。
2. 编程设计根据电路设计,编写相应的程序代码,实现密码的输入、存储、比较和报警等功能。
程序设计过程中,采用C语言进行编程,通过Keil软件进行编译和调试。
3. 系统调试将编写好的程序烧录到单片机中,对整个系统进行调试。
调试过程中,检查各个模块是否正常工作,并对可能出现的问题进行排查和优化。
四、实习过程1. 电路设计首先,根据实习要求,选用AT89C52型51单片机作为核心控制器。
然后,设计4x4矩阵键盘,用于密码的输入。
接着,选用LCD1602液晶显示屏,显示密码输入界面和开锁状态。
为了实现密码的存储,选用了AT24C02存储模块。
最后,设计报警系统和继电器,实现密码错误报警和开锁功能。
2. 编程设计根据电路设计,编写相应的程序代码。
首先,实现矩阵键盘扫描函数,用于检测按键输入。
然后,编写密码存储和读取函数,将输入的密码存储到AT24C02模块中,并在下次开机时读取。
接下来,实现密码比较函数,判断输入的密码是否正确。
最后,编写报警和开锁函数,当密码错误时发出报警,正确时驱动继电器开锁。
3. 系统调试将编写好的程序烧录到单片机中,对整个系统进行调试。
密码锁实验报告篇一:电子密码锁实验报告密码锁实验报告一,实验目的1. 学习8051定时器时间计时处理、跑马灯、按键扫描及LED数码管显示的设计方法。
2. 设计任务及要求利用实验平台上8个LED数码管,按键,跑马灯实现设置密码,密码锁的功能二,实验要求基本要求:1:用4×4矩阵键盘组成0-9数字键及确认键和删除键。
2:可以自行设定或删除8位密码。
3:用5位数码管组成显示电路提示信息,当输入密码时,只显示“8.”,当密码位数输入完毕按下确认键时,对输入的密码与设定的密码进行比较,若密码正确,则门开,此处用绿色led发光二极管亮一秒钟做为提示,若密码不正确,禁止按键输入3秒,同时用红色led发光二极管亮三秒钟做为提示;若在3秒之内仍有按键按下,则禁止按键输入3秒被重新禁止。
三,实验基本原理利用单片机定时器完成计时功能,定时器0计时中断程序每隔0.05s中断一次并当作一个计数,设定定时1秒的中断计数初值为20。
为了将时间在LED数码管上显示,可采用静态显示法和动态显示法,由于静态显示法需要译码器,数据锁存器等较多硬件,可采用动态显示法实现LED显示,通过对每位数码管的依次扫描,使对应数码管亮,同时向该数码管送对应的字码,使其显示数字。
由于数码管扫描周期很短,由于人眼的视觉暂留效应,使数码管看起来总是亮的,从而实现了各种显示。
四,实验设计分析针对要实现的功能,采用AT89S51单片机进行设计,AT89S51 单片机是一款低功耗,高性能CMOS8位单片机,片内含4KB在线可编程(ISP)的可反复擦写1000次的Flash 只读程序存储器,器件采用高密度、非易失性存储技术制造,兼容标准MCS- 51指令系统及80C51引脚结构。
这样,既能做到经济合理又能实现预期的功能。
1在程序方面,采用分块设计的方法,这样既减小了编程难度、使程序易于理解,又能便于添加各项功能。
程序可分为闹钟的声音程序、时间显示程序、日期显示程序,秒表显示程序,时间调整程序、闹钟调整程序、定时调整程序,延时程序等。
单片机系统设计实训报告专业:生产过程自动化姓名:李某班级学号:。
指导教师:。
实训期间:。
目录一.实验目的: (3)二.实验要求: (3)三.实验基本原理: (3)四.实验设计分析: (4)1.设计思想: (4)五.实验要求实现: (5)1. 电路设计: (5)2.主流程图: (7)3.4x4键盘行列式键盘原理电路图: (8)4. 显示模块 (9)五.总电路设计如下 (9)六.程序 (11)七.实验心得 (16)一.实验目的:1.熟悉单片机定时器的编程方法。
2.灵活运用单片机C语言程序中的字符串、数组、指针。
3.熟悉数码显示、LCM1602液晶显示器、YJD12864液晶显示器的编程方法。
4.熟悉掌握4x4矩阵键盘的C语言编程。
二.实验要求:1:用4×4矩阵键盘组成0-f数字键及。
2:可以自行设定或删除8位密码,3:用8位数码管组成显示电路提示信息,当输入密码时,只显示“8.”,当密码位数输入完毕按下确认键时,对输入的密码与设定的密码进行比较,若密码正确,则显示PASS,若密码显示错误时,显示ERR.4:自由发挥其他功能.5:要求有单片机硬件系统框图,电路原理图,软件流程图。
三.实验基本原理:这个密码锁的功能是使用矩阵键盘中的十六个键输入密码0到F还有,输入的同时在八位数码管上显示用户所输入的密码,未输入的位置用横杆填补表述未输入。
当输入的密码超出设置的位数时,数据溢出,清零。
用8位数码管组成显示电路提示信息,当输入密码时,只显示“8.”,当密码位数输入完毕按下确认键时,对输入的密码与设定的密码进行比较,若密码正确,则显示pass,若密码不正确,则显示err;模拟密码锁,密码固化到ROM 不能通过按键输入更改。
四.实验设计分析:1.设计思想:1. 本系统采用单片机AT89S51作为核心元件的一款具有本机开锁,加锁,修改密码和错误2.报警的电子密码锁。
3. 电子密码锁的原理是:从键盘输入一组密码,CPU把该密码和设置密码比较,对则将锁打开,错则要求重新输入,并记录错误次数,如果三次错误,则被强制锁定并报警。
二○一六~二○一七学年第一学期电子信息工程系电子综合设计II报告书班级:电信(产业)1401班设计时间:2016/12/29学生姓名:曹子龙学号:201404135024指导教师:赵敏二○一六年十二月一、设计要求.题目内容:设计一个基于51单片机的电子密码锁:1.可以使用4*4的矩阵键盘与红外遥控器输入密码。
2.可以通过按特殊组合键重设开锁密码。
3.显示通过1602液晶屏显示电子密码锁界面,输入密码时显示输入个数显示为‘*’,如果密码正确,进入欢迎界面。
4.密码连续输入3次错误报警,LCD显示报警,倒计时十秒后重新进入密码输入界面。
5.可以通过特殊的按键组合跳过输入界面直接进入欢迎界面。
实现方法:1.通过红外接收头,连接单片机的P3.2外部中断INT0口,可以实现单片机接收遥控器的信号输入。
2.通过矩阵键盘扫描函数,可以实现对键盘输入的响应。
3.通过引脚的高低电平变化频率,控制蜂鸣器的输入占空比和频率(低电平时间固定,通过输入给函数值的不同改变高电平时间,固定响300个周期),对不同按键实现不同声音响应。
4.1602显示屏有16*2个单元格,每个单元格由5*8个像素点组成,可以很好的显示数字,符号,英文字符。
功能需求分析:液晶屏显示:根据题意,需要设计并显示输入密码界面、修改密码界面、欢迎界面、错误警告界面密码输入:根据题意,每次输入一个数字,则显示一个‘*’符号代替,只能看出输入的位数,若输入密码位数达到六位,则与正确密码比较,若正确,进入系统。
根据日常的手机使用习惯,默认长度为6位,且第六位输入之后立即判断,正确则进入,错误则清空重输。
组合键实现密码修改:密码修改必须通过不易被他人发现的特殊方法改变,所以设计为,若同时按住矩阵键盘的5,10 或6,9两个键,则进入密码修改函数。
输入密码错误三次则报错:一般的密码系统对密码输入错误次数过多的情况进行了限制,所以在密码锁里设置,若密码输入错误三次,则进入警报界面,显示10s倒计时,必须在倒计时结束后才能再次输入密码。
组合键实现跳过密码:如果系统主人临时忘记了密码,则需要一些补救的备用措施,所以在电子锁里设计了,如果同时按下0,15或3,12键,则跳过密码输入阶段,直接进入欢迎界面。
红外控制:在很多时候,需要通过远程通信输入密码,进入某个远程服务器系统。
所以,通过红外设备模拟远程通信就显得很有必要。
再此系统中,通过把红外接收引脚接到外部中断INT0口,实现接收红外遥控器的数据。
重新输入:如果密码输入的过程中,发现输错了一位数,方便起见,要设置重新输入的功能,即矩阵按键为11,或红外遥控键值为12时,重新输入密码,并且不计入输错次数。
二、 系统总体设计框架系统模块分布图:电子密码锁系统密码输入及显示蜂鸣器模块重设密码跳过密码输入过程警告音1602显示模块按键音管理员模块输入密码界面警告界面重设密码界面欢迎界面详细流程框图:开始若为重置密码指令红外外部中断键盘扫描错误警报进入欢迎界面输入界面是否为特殊组合键输入是否达到6位是否与正确密码相同错误次数达到三次?系统锁定,并倒计时十秒将输入密码暂存在数组用*显示密码位数是否是否是否是否将输入的六位六位密码数组与正确值比较若为跳过密码指令输入密码界面重置密码界面输入是否达到6位将输入密码存入正确密码数组中,完成重置否是三、运行结果密码输入:每次输入一个数字,则显示一个‘*’符号。
密码修改:通过特殊组合按键,进入密码修改函数。
三次报错:若密码输入错误三次,则进入警报界面。
特殊键清除:通过特殊组合按键,进入密码修改函数。
红外控制:通过红外遥控器输入密码。
重新输入:通过红外遥控器的12号按键或矩阵键盘的11号按键可以重新输入密码。
四、实验小结本次实验,用51单片机实现了电子密码锁系统,虽然内容较基础,但是还是新学到了一些新知识,如红外线的数据传输方式,外部中断的合理使用。
同时也遇到了一些问题:用红外遥控器输入密码的时候,总会在短时间内把一个键值发给单片机发送两次,但是原因不是太清楚,可能是红外遥控器的抬起也算一个命令,然后我再判断主函数的红外线标志位判断的地方,加了0.5秒的延迟,解决了问题。
以后有时间再把红外接收器的数据手册详细看看,研究问题出在哪里。
总体来说,这一次的动手设计还是让自身能力提高了不少,但其实我学习的东西还远远不够,在以后的学习里,我会抓紧课外时间多学习知识,才能将自身解决实际问题的能力快速提高。
五、参考文献[1] 谭浩强,C语言程序设计,清华大学出版社,2005[2] 张毅刚,单片机原理及接口技术,人民邮电出版社,2011六、附录:源程序/******************************************************************************* * 电子密码锁系统 Designed By 曹子龙 2016/12/29 * *******************************************************************************/#include<reg51.h>#include"lcd.h" //包含控制1602的初始化程序及写入命令的程序#define GPIO_KEY P1 //矩阵键盘接口sbit IRIN=P3^2; //红外线接口sbit Beep = P2^0; //蜂鸣器接口unsigned char code CDIS0[16]={" Set Code: "}; //用来初始化1602屏幕显示内容的字符串数组unsigned char code CDIS1[16]={" Enter Code: "};unsigned char code CDIS2[16]={" Code: "};unsigned char code CDIS3[16]={" Welcome to "};unsigned char code CDIS4[16]={" My System!"};unsigned char code CDIS5[16]={" Warning: "};unsigned char code CDIS6[16]={" Please Wait s!"};unsigned int RIGHTCODE[6]={9,7,0,2,2,9};//初始正确密码unsigned int Code[6]; //用来存放输入密码unsigned intKeyValue; //用来储存键值unsigned intKey_Flag=0; //有按键按下时置为1unsigned intHongwaiValue; //用来储存键值unsigned intHongwai_Flag=0; //有红外信号时置为1unsigned int Annum=0; //用来储存按键次数unsigned intWrongnum=0; //用来储存错误次数unsigned intCodeFlag=0; //用来标识密码是否输入正确unsigned intCodeDel=0; //特殊组合键可以清除密码unsigned char IrValue[6]; //暂存接收到的红外信号unsigned char Time;unsigned char WrongTime; //用来储存错误等待时间void SetCode(); //重置密码函数void hongwai(); //将红外接收的值变为对应的按键值void IrInit(); //红外初始化void DelayMs(unsigned int );void beep(unsigned int); //可让蜂鸣器实现不同频率声音的函数void KeyScan(); //键盘扫描函数/******************************************************************************* * 函数名 : main* 函数功能 : 主函数*******************************************************************************/void main(){unsigned char i;IrInit();LcdInit();LcdWriteCom(0x80); //初始化LCD1602显示,展示密码输入界面for(i=0;i<16;i++){LcdWriteData(CDIS1[i]);}LcdWriteCom(0x80+0x40);for(i=0;i<16;i++){LcdWriteData(CDIS2[i]);}while(1){KeyScan(); //扫描键盘if(CodeDel==4) //若输入正确的组合按键,可重设密码SetCode();else if(CodeDel==2) //若输入正确的组合按键,则清除密码,直接进入系统{Wrongnum=0; //若输入正确,错误次数清零Annum=0; //密码计数器清零CodeDel=0; //组合键标志位清0Key_Flag=0; //按键标志位清0Hongwai_Flag=0; //红外标志位清0LcdWriteCom(0x80); //进入欢迎界面 5sfor(i=0;i<16;i++){LcdWriteData(CDIS3[i]);}LcdWriteCom(0x80+0x40);for(i=0;i<16;i++){LcdWriteData(CDIS4[i]);}DelayMs(50000);LcdWriteCom(0x80);for(i=0;i<16;i++) //等待结束后,次数清零,显示输入密码界面{LcdWriteData(CDIS1[i]);}LcdWriteCom(0x80+0x40);for(i=0;i<16;i++){LcdWriteData(CDIS2[i]);}}if(Key_Flag==1){Key_Flag=0;Code[Annum-1]=KeyValue; //将输入值存入密码数组中beep(KeyValue * 30);LcdWriteCom(0xc0+6+Annum);LcdWriteData(42);}if(Hongwai_Flag==1) //若接受到了红外数据{DelayMs(500);if(Hongwai_Flag==1) //不知道因为什么原因,红外接收的中断会开启两次,为了防止数据重复,写了此次延时判断{Annum++; //按键次数加1Hongwai_Flag=0;Code[Annum-1]=HongwaiValue;//将输入值存入密码数组中beep(HongwaiValue * 40);LcdWriteCom(0xc0+6+Annum);LcdWriteData(42);}}if(Annum>=6) //6位密码输入完毕或检测到特殊组合按键{CodeFlag=1; //暂时令标志位为1,若密码有错误,则再置0for(i=0;i<6;i++){if(Code[i]!=RIGHTCODE[i]) //若密码与正确密码不相等CodeFlag=0;}if(CodeFlag==0) //若输入错误,清零重新输入,并将错误输入次数加一{Wrongnum++;if(Wrongnum==3) //若错误次数达到三次{beep(100); //警报LcdWriteCom(0x80); //显示错误信息,等待10sfor(i=0;i<16;i++){LcdWriteData(CDIS5[i]);}LcdWriteCom(0x80+0x40);for(i=0;i<16;i++){LcdWriteData(CDIS6[i]);}WrongTime='9'; //等待时间while(WrongTime!='0'){LcdWriteCom(0x80+0x40+13);LcdWriteData(WrongTime);DelayMs(10000);WrongTime--;}Wrongnum=0;}Annum=0;Key_Flag=0; //按键标志位清0Hongwai_Flag=0; //红外标志位清0LcdWriteCom(0x80);for(i=0;i<16;i++) //等待结束后,次数清零,显示输入密码界面{LcdWriteData(CDIS1[i]);}LcdWriteCom(0x80+0x40);for(i=0;i<16;i++){LcdWriteData(CDIS2[i]);}}if(CodeFlag==1) //密码输入正确{Wrongnum=0; //若输入正确,错误次数清零Annum=0; //密码计数器清零LcdWriteCom(0x80); //进入欢迎界面 5sfor(i=0;i<16;i++){LcdWriteData(CDIS3[i]);}LcdWriteCom(0x80+0x40);for(i=0;i<16;i++){LcdWriteData(CDIS4[i]);}DelayMs(50000);LcdWriteCom(0x80);for(i=0;i<16;i++) //等待结束后,次数清零,显示输入密码界面{LcdWriteData(CDIS1[i]);}LcdWriteCom(0x80+0x40);for(i=0;i<16;i++){LcdWriteData(CDIS2[i]);}/*标志清零需放在后面,因为在密码输入正确后的显示时间内,外部中断或按键都会使标志位为1,进而在再次显示密码时弹出一位密码值*/Key_Flag=0; //按键标志位清0Hongwai_Flag=0; //红外标志位清0}}}}/******************************************************************************* * 函数名 : SetCode()* 函数功能: 设置密码*******************************************************************************/ void SetCode(){inti,j=0;Wrongnum=0; //错误次数清零Annum=0; //密码计数器清零CodeDel=0; //组合键标志位清0Key_Flag=0; //按键标志位清0Hongwai_Flag=0; //红外标志位清0LcdWriteCom(0x80);for(i=0;i<16;i++) //初始化LCD1602显示,显示设置密码界面{LcdWriteData(CDIS0[i]);}LcdWriteCom(0x80+0x40);for(i=0;i<16;i++){LcdWriteData(CDIS2[i]);}DelayMs(1000);while(j<6){KeyScan(); //扫描键盘if(Key_Flag==1){Key_Flag=0;RIGHTCODE[j]=KeyValue;beep(KeyValue * 30);LcdWriteCom(0xc0+7+j);LcdWriteData(42);j++;DelayMs(1000);}if(Hongwai_Flag==1) //若接受到了红外数据{DelayMs(500);if(Hongwai_Flag==1) //不知道因为什么原因,红外接收的中断会开启两次,为了防止数据重复,写了此次延时判断{Hongwai_Flag=0;RIGHTCODE[j]=HongwaiValue;beep(HongwaiValue * 40);LcdWriteCom(0xc0+7+j);LcdWriteData(42);j++;DelayMs(1000);}}}LcdWriteCom(0x80);for(i=0;i<16;i++) //初始化LCD1602显示,展示密码输入界面{LcdWriteData(CDIS1[i]);}LcdWriteCom(0x80+0x40);for(i=0;i<16;i++){LcdWriteData(CDIS2[i]);}Wrongnum=0; //错误次数清零Annum=0; //密码计数器清零Key_Flag=0; //按键标志位清0Hongwai_Flag=0; //红外标志位清0}/******************************************************************************* * 函数名 : DelayMs()* 函数功能 : 延时*******************************************************************************/void DelayMs(unsigned int x) //0.14ms误差 0us{unsigned char i;while(x--){for (i = 0; i<13; i++){}}}/******************************************************************************* * 函数名 : IrInit()* 函数功能 : 初始化红外线接收*******************************************************************************/void IrInit(){IT0=1;//下降沿触发EX0=1;//打开中断0允许EA=1; //打开总中断IRIN=1;//初始化端口}/******************************************************************************* * 函数名 : ReadIr()* 函数功能 : 读取红外数值的中断函数*******************************************************************************/void ReadIr() interrupt 0{unsigned char j,k;unsigned int err;Time=0;DelayMs(70);if(IRIN==0) //确认是否真的接收到正确的信号{err=1000; //1000*10us=10ms,超过说明接收到错误的信号/*当两个条件都为真是循环,如果有一个条件为假的时候跳出循环,免得程序出错的时侯,程序死在这里*/while((IRIN==0)&&(err>0)) //等待前面9ms的低电平过去{DelayMs(1);err--;}if(IRIN==1) //如果正确等到9ms低电平{Hongwai_Flag=1; //正确收到信号,标志位置1err=500;while((IRIN==1)&&(err>0)) //等待4.5ms的起始高电平过去{DelayMs(1);err--;}for(k=0;k<4;k++) //共有4组数据{for(j=0;j<8;j++) //接收一组数据{err=60;while((IRIN==0)&&(err>0))//等待信号前面的560us低电平过去{DelayMs(1);err--;}err=500;while((IRIN==1)&&(err>0)) //计算高电平的时间长度。