[摘要] 科技正在不断地发展之中,人们的生活水平跟随着科技的进步也在不断提升,
处于物质时代的今天,人们对安全保险器件有着相对较高的要求,财产安全以及家庭防盗等安全问题已经成为人们重点关注的对象,传统的机械锁使用钥匙打开,其构造十分简单,运用一些简易工具就能轻松撬开,而电子锁有着很好的灵活性,并且保密性极高,安全系数良好,已经在各个场所有着相当不错的应用。
目前大部分电子密码锁都是用单片机技术开发制作的,本文向大家介绍的就是一种基于单片机的红外线遥控电子密码锁的设计方案。该密码锁是通过控制电路和芯片工作来确定输入的密码正确与否,然后控制电磁锁的开启或关闭。
本设计分为硬件部分和程序部分。硬件部分主要由STC89C51单片机系统、4*4矩阵键盘、LCD1602液晶显示、红外遥控系统和蜂鸣器报警系统等组成。可通过本机的矩阵键盘来进行密码输入或是红外遥控进行密码输入来开锁。程序部分是用Keil4软件进行编写的。此方案设计的密码锁保密强,灵活性高,能够满足大部分需求,并且能够在泄漏密码的情况下及时修改,能够用于家庭、宾馆、仓库等场所,对于一些特殊场所也能应对。
[关键词] 单片机 红外 密码锁
I
Infrared remote electronic combination lock based on MCU
[Abstract]Technology is developing continuously, with the people's standard of living with th
e progress of science and technology are also rising, in the age of material today, people have a relatively high requirements for safety insurance device, property security and family security and other safety problem has become the people focus on the object, the traditional mechanical lock using keys to open, its structure is very simple, use some simple tools can pry open easily, has good flexibility and electronic lock, and high confidentiality, good safety factor, already has a good application in various places.
At present most of the electronic combination lock is made of single-chip computer technology development, this article is to introduce you to is a kind of design scheme based on single-chip computer infrared remote control electronic combination lock. And the combination lock is through the control circuit to determine the input password is correct or not, and then control the electromagnetic lock open or closed.
This design is divided into hardware part and software part. The hardware part is mainly composed of STC89C51 microcontroller system, 4 * 4 matrix keyboard, LCD1602 LCD display, infrared remote control system and a buzzer alarm system, etc. It can be password by native matrix keyboard input password to unlock or infrared remote control.The software part program is written in Keil4 software. The scheme design of combination lock secrecy is strong, high flexibility, can satisfy most requirements, and be able to in the case of a leak password change in time, can be used in home, hotel, warehouse and other places, also can deal with for some special places.
[Keywords]Microcontrollers, Infrared, Combination lock
II
目录
引言 ........................................................................ 1 第1章概论 .................................................................. 2
1.1 单片机概述 .......................................................... 2 1.2 红外通信基本原理 .................................................... 2 1.3电子密码锁的特点与发展趋势 ........................................... 3 第2章总体设计方案 .......................................................... 5
2.1 红外遥控电子密码锁设计的总体要求 .................................... 5 2.2 设计原理 ............................................................ 5 第3章硬件构成 .............................................................. 6
3.1 单片机的选用 ........................................................ 6 3.2 存储芯片AT24C02 ..................................................... 7 3.3 LCD1602液晶显示 ..................................................... 8 3.4 行列式矩阵键盘设计 .................................................. 9 3.5 继电器控制模块 ..................................................... 10 3.6 红外接收模块 ....................................................... 11 3.7声音提示模块 ........................................................ 12 第4章程序设计 ............................................................. 14
4.1主程序模块 .......................................................... 14 4.2 键盘扫描子程序 ..................................................... 15 4.3 红外接收子程序 ..................................................... 16 4.4 系统模块密码设置子程序 ............................................. 17 4.5 开锁子程序 ......................................................... 18 第5章制作与调试 ........................................................... 19
5.1 成品制作的焊接注意事项 ............................................. 19 5.2 调试 ............................................................... 19 结论 ....................................................................... 20 致谢语 ..................................................................... 21 参考文献 ................................................................... 22 附录 ....................................................................... 23
III
引言
随着生活质量的不断提升,人们对于安全的关注也不断加强,尤其是有关财产安全和人生安全的事项。锁一向都是给我们把守护们的铁门神,人们对它有着很高的标准,在防盗的功能上要安全,使用操作上也要简单,这也成为锁具生产人员长期以来研发的重心。现如今人们已经从电气时代走向信息时代了,电子信息技术和计算机技术正在蓬勃地发展中,电子产品层出不穷,总类繁多,电子密码锁就随着潮流应运而生。由于单片机具有体积小、重量轻、价格便宜、耗能低、控制功能强及处理速度快等特点,因而广泛地应用于各种电子密码锁。本设计主要利用单片机以及其他不同的电子元器件通过数据采集和控制算法,设计了一个基于单片机的红外遥控电子密码锁,该设计不但拥有一般电子按键式密码锁的功能,并且还增加了远程红外遥控功能,有着相当不错的应用价值,所包含的技术主要有:单片机控制技术、红外远程遥控技术、编码及译码技术、电路分析和设计、电子系统设计、电路板焊接等。
据相关的资料说明,关于电子密码锁的研究已经有快一百年的历史了,早期的人们将电子密码锁应用于一些特别的场所,这种类型的锁和现在的一些密码锁类似,是通过键盘输入一组作为密码的数字而完成开锁的。密码锁发展创新的过程,有着很长的一段路程,但可以预见的是,随着人们对财产安全的关注度越来越高,更加安全方便的锁会成为人们的需求。现在锁的种类繁复多样,应用范围最广的还是普通的机械锁,但电子锁也已经在多种多样的场合使用了,比如宾馆酒店,大型仓库,地下车库等。由于电子锁有着极大的密码量,简单的六位密码就有一百万种组合方式。将电子密码锁与传统的金属机械锁配合使用,能够防止因为钥匙被仿造而留下许多安全的隐患。
电子密码锁以其安全可靠的优点,被用于各种各样的场所,譬如,家庭住宅、银行金库,酒店宾馆,地下车库等等。随着财富的积累,人们生活水平逐渐提高,财产安全的保障也越来越重要,红外遥控电子密码锁恰好能够满足人们对生活财产安全的保护的需求,必定会有越来越多的人接受和喜爱,其前景非常乐观。
1
第1章 概论
1.1 单片机概述
单片机(Microcontrollers)是一种集成了各种微型硬件在一块硅片上的小型电路芯片,它的本质结构就是一个微型计算机系统,其中包含了能够处理各类数据的中央处理器CPU,可随时读取和写入信息的随机存取存储器RAM,只能读取而不能写入和修改信息的只读存储器ROM等。单片机不仅在工业控制方面有着极大的应用[1],在我们的日常生活中也随处可见。小至电子玩具,大至航空航天,单片机在其中都有着至关重要的作用。
单片机产生于上世纪80年代,由于技术水平较低,早期SCM阶段的单片机都是4位或者8位的,当时最受关注的是Intel公司生产的8051单片机,而后在8051的基础上发展创新,就产生了MCS51系列的MCU系统,得到了相当不错的评价。由于工业的发展,控制领域的要求也越来越高,16位的单片机开始产生,但其性价比相对较低并没有得到大规模的应用。到了90年代,人们的消费观念和模式的改变,多种电子产品得到不同程度的发展,单片机的技术也长足的进步。由于Intel i960系列的普及,尤其是随后ARM类型的大力推广,32位单片机以迅猛的姿态占领市场,逐渐取代16位单片机,并且开始被广泛地应用于各类领域[2]。
1.2 红外通信基本原理
公元1666年,艾萨克·牛顿通过实验发现了太阳光中包含着多种颜色,太阳光是多种颜色光的混合,并发现光颜色的不相同是因为光的波长不相同,揭示出了光的色学性质。1800年,威廉·赫歇尔通过简单的实验发现了太阳光除了可见光的光谱之外还包含着一种看不见的光谱,并且这种光有着热效应性质。他用温度计测量通过棱镜色散后光的不同颜色点的温度,从紫色到红色,温度在渐渐地升高。然而把温度计放置于红光之外的部份,温度并没有下降而是在逐渐地上升,说明有肉眼看不见的光照射在温度计上,因此表明有红外光的存在。
红外线(Infrared Radiation),即红外光,是一种电磁波,不能被肉眼识别,它的波长处于微波和可见光之间,在光谱中处于可见光的红色光外侧,在770纳米到1毫米的范围内,由于红外线有着很强的热效应,一般被用来作为热源。
红外通信是一种特殊的通信方式,它利用红外线来进行传输文字、数据、声音、图像等信息,是无线通信方式中的一种。红外通信是通过红外线作为媒介来传输信息。红外通信通过将二进制信号转换成为一连串的红外脉冲信号,然后在发射端通过红外发射管将该脉冲信号发送至接收端[3]。接收端在接收到红外脉冲信号后将其转换成为电信号,然后再
2
将电信号进行放大、滤波等一些处理之后在调制解调电路中进行还原,转换成为原来的二进制数字信号输出,完成整个红外通信的过程。简单来说,红外通信原理的实质就是通过调制解调电路来将二进制的数字信号转换成为电信号再转换回二进制的数字信号的过程。
红外通信有性价比高,操作简单,抗干扰能力强等诸多特点,在家庭,商业,军事等领域都有着十分广泛的应用。如普通的遥控器,红外测速器、红外夜视仪等。红外通信随处可见,并且让我们的生活更加美好。
本次红外遥控电子密码锁的设计中的红外遥控部分利用的就是简单的红外通信技术,通过一个小小的HS0038红外接收探头来实现,通过接收遥控器发送的密码来进行控制电子锁的开启关闭,简单方便,安全性也高,十分适合本设计。
1.3电子密码锁的特点与发展趋势
电子密码锁是智能锁中的一种,所谓智能锁,就是将各类的电子元器件通过电子技术、集成电路技术、计算机技术、识别技术等多种创新的技术综合在一起所研发出来一种产品类型。上世纪90年代,电子信息技术的快速发展和微机技术的进步,使得电子密码锁有了技术上的支持,渐渐地促使电子密码锁逐渐应用于实际。
到了21世纪初,西方国家的电子密码锁技术相比于国内较为领先,多种电子密码锁已经成为安全可靠的守门神,在智能门禁系统中被普遍地应用。而我国对密码锁的研发不仅吸取了国外的经验技术,还有自己的创新发展。虽然起步较晚,但是到目前为止,跟随着电子技术发展的脚步,我国的电子密码锁的技术领域已发展的十分成熟了。
从目前电子密码锁的生产水平和用户需求程度看,键盘式的电子密码锁是相对比较受到用户喜爱的,键盘式的密码锁主要应用于一些商住楼或者小区的门禁系统,还有一些应用于银行,如保险柜、金库、运钞车等。而其他类型的密码锁如遥控式电子密码锁,以及卡片式密码锁等也应用于其他不同的领域。卡片式的密码锁最常见于酒店宾馆,而遥控式密码锁则在汽车行业较为流行。由于这种随身携带的“钥匙”相较于普通的金属钥匙有着安全保密性更高的特点,并且使用也方便,受到人们的普遍欢迎。卡片式密码锁这类接触式电子锁不仅能够作为钥匙,还可将个人信息等载入保存在卡片中,能够发挥多种用途,在未来的可以发展中有着极大的用武之地。而遥控密码锁这种非接触式电子锁使用更为安全方便,大有后来居上之势。
如今,生物特征技术也在迅速地发展中,如指纹识别,面部扫描、DNA技术等。但是由于研发成本高以及市场应用程度低等一些原因对推广有一定程度的限制之外,生物特征电子密码锁在以金融业为首的一些保密性需求高的领域被人们普遍看好,有着相当不错的发展前景。由于字符数字、图形声音、人体的生物特征甚至于DNA等因素有着极大的信息量,将这些信息组合转换成为电子密码使用,可以使电子锁有着极高的保密性能,也能够使电子密码锁的产品类型多样化。因此,电子密码锁取代普通的金属机械锁是一个必然的
3
趋势。电子密码锁将以其技术优势,能够满足人们对财产安全甚至人生安全的需求,会使我们的未来有着更高的安全保障。
4
第2章 总体设计方案
2.1 红外遥控电子密码锁设计的总体要求
1.电子锁的开锁密码位为六位数字密码。
2.输入密码的时候LCD液晶显示屏显示“*”号,能够防止密码被窃取。
3.如果输入密码正确时在LCD液晶显示屏显示“OPEN”,反之则显示“ERROR”,输入密码时显示“INPUT PASSWORD”。
4.若输入密码错误超过限制的三次,蜂鸣器会报警并且系统锁定。
5.密码可自己修改设定,只有在开锁状态才能够修改密码,在修改密码前要先进行旧密码确认,设定新密码时要进行两次的新密码输入,从而预防一些误操作。
2.2 设计原理
本设计选用单片机STC89C51 作为核心元件,STC单片机有加密性强、高抗静电、不怕电源抖动等特点,稳定性良好,适合单片机的一些简易学习和开发制作。单片机的编程设计方式非常灵活,多种类的I/O端口,以及优秀的控制性,延展性高,能够较为轻松地完成密码锁的功能要求。主要将矩阵键盘、LCD1602液晶显示屏、HS0038红外接收探头等接入外围电路。矩阵键盘的主要功能是用于数字密码的输入和更改等。通过与单片机相连接的矩阵键盘将6位密码输入,然后将输入的密码与系统保存的密码在单片机中进行比对,若密码一致,则表明密码正确,反之则表明密码错误,而后将引脚的高低电平信号传送至继电器所在的开锁电路或者是蜂鸣器所在的报警电路来控制电磁锁开启还是系统报警自锁,红外接收部分的功能和矩阵键盘相同。本设计的硬件结构示意如图2.1所示。
键盘输入 STC89C51 单片机 液晶显示 红外接收 AT24C02 存储器 开锁电路 图2.1 结构示意图
5
第3章 硬件构成
3.1 单片机的选用
STC89C51是宏晶科技公司生产的一种能耗低、性能好的增强型8位单片机,在单芯片上有着灵活的可编程Flash存储器以及灵巧的8 位CPU,在多种嵌入式系统中能够提供高灵活的控制[4]。STC89C51有着多样的标准功能:8k字节Flash存储器,512字节RAM,32位I/O 口线,2个16位定时器/计数器,看门狗定时器,EEPROM 功能等。并且该STC89C51单片机可降至0Hz静态逻辑操作。在CPU 停止工作时,能够容许RAM、定时器/计数器、串口、中断持续工作。拥有掉电保护方式,RAM内容会在掉电保护时进行保存,振荡器被冻结,单片机停止工作,到下一个中断或硬件复位,单片机重新开始工作。STC89C51的最高运作频率为35Mhz,6T/12T可选。STC89C51单片机的引脚图如图3.1所示。 STC89C52引脚介绍
1.主电源引脚(2根)
VCC(Pin40):电源输入,接+5V电源。 VSS(Pin20):接电源地线。 2.外接晶振引脚(2根)
XTAL1(Pin19):片内振荡电路输入端口。 XTAL2(Pin20):片内振荡电路输出端。 3.控制引脚(4根)
RST/VPP(Pin9):复位信号输入端。 ALE/PROG(Pin30):地址锁存允许信号。 PSEN(Pin29):外部程序存储器读选通信号。
EA/VPP(Pin31):程序存储器的内外部方位控制信号。 4.可编程输入/输出引脚(32根)
STC89C52单片机有4组8位的可编程I/O口,分别位P0、P1、P2、P3口,每个口有8位(8根引脚),共32根。
P0.0~P0.7(Pin39~Pin32):双向I/O 口P0。 P1.0~P1.7(Pin1~Pin8):双向I/O口P1。 P2.0~P2.7(Pin21~Pin28):双向I/O口P2。 P3.0~P3.7(Pin10~Pin17):双向I/O口P3。
6
图3.1 STC89C51引脚图
3.2 存储芯片AT24C02
AT24C02是美国Atmel公司生产的低功耗CMOS型E²PROM,其内部含有256*8位的存储空间,工作电压最低可达2.5V,最高可达5.5 V,大于一万次的擦写次数,小于10 毫秒的写入速度,强大的抵抗干扰能力,存储的数据不容易丢失,而且体积很小。AT24C02是采用了I2C总线式来处理数据读取和写入的器件,资源和I/O线的占用率低,而且能够进行在线编程,有着非常方便的实时数据存取功能。AT24C02芯片中有着自带的片内地址寄存器,因此该芯片每次写入或者是读取一个字节的数据之后,该片内地址寄存器都会自动加1,以便进行对接下来的一个存储单元的读写功能。I2C总线是一种二进制总线,用于集成电路的器件连接。它通过串行数据线(SDA)和串行时钟线(SCL)这两根线在一些连接至总线上的元器件中间进行信息的传递,并且能够通过地址识别不同的器件。正是因为AT24C02运用了I²C串行总线规程,使用主机和从机能够实现双向通信,作为主机的单片机和作为从机的AT24C02芯片都能够作为接收器和发送器。主机和从机,在接收到一个字节后都必须发出一个ACK确认控制信号,用来选择从机并且可以控制总线传输的方向[5]。AT24C02引脚图如图3.2所示。 AT24C02芯片的管脚描述。
7
VCC(Pin8):电源接入。 GND(Pin4):接地引脚。 SCL(Pin6):串行时钟信号引脚。 SDA(Pin5):串行数据输入/输出引脚。 A0、A1、A2(Pin1~Pin3):器件地址输入端。 WP(Pin7):写保护引脚。
图3.2 AT24C02引脚图
3.3 LCD1602液晶显示
LCD1602 是一种用于显示英文字母、阿拉伯数字和一些符号的工业字符型液晶,能够同时显示32个字符(16列2行)。液晶显示器在我们的平常的生活中十分常见,作为多种类型电子产品的应用器件,有着重量轻,体积小、成本低等特点,并且功耗极低[6],在计算器、万用表、以及许多电子产品中都能够见到,主要用来显示一些简单的数字、字母和字符等。
将LCD1602晶液显示器应用于单片机系统中有着以下多个优点。
LCD液晶显示器本身并不主动发光,只是通过调节光的亮度。因此LCD液晶屏上的每个点在接收到电信号之后便能够持续保持住一种色彩和亮度,稳定发光。而阴极射线管显示器这种类型的显示器是通过电子束来激发屏幕上的荧光点来发光,需要进行不断地刷新。由此可见,液晶显示器画质高,并且比较稳定。
LCD液晶显示器是一种数字式的显示器类型,与单片机的引脚相连十分简单,使用方便,且不容易发生故障。
8
LCD液晶显示器是通过电极来控制液晶分子状态来控制显示屏的亮暗,其重量相比于传统的显示器要轻便得多。
LCD液晶显示器的主要耗能为显示屏内部电路的电极和驱动,耗电量相比于其他的显示器要少很多,因此使用寿命也相对于其他显示器要长。显示器的引脚图如图3.3所示。
LCD1602的引脚说明。 VSS(Pin1):接电源地。 VCC(Pin2):接+5V正电源。 VL(Pin3):对比度调整端。 RS(Pin4):寄存器选择引脚。 R/W(Pin5):读写信号线。
EN(Pin6):EN端为使能端,通过高低电平执行命令。 D0~B7(Pin7~Pin14):8位双向数据线引脚。 BLA(Pin15):背光源正极。 BLK(Pin16):背光源负极。
图3.3 LCD1602引脚图
3.4 行列式矩阵键盘设计
本设计所采用的键盘为行列式矩阵键盘,采用这种键盘能够减少键盘与单片机接口所连接的I/O口线的数目,这种方法常用于按键相对较多的时候。在行列式矩阵键盘中,用一个按钮来连接电路中每一条水平线和垂直线的交点。这样能够使一个端口构成4*4=16个按键,而如果每个按键单独使用一个引脚只能构成8个按键,相比起来按键数多出了一倍。因此,如果需要较多的按键数时,采用矩阵行列式键盘是一种相当合理的方式。
4×4矩阵键盘电路图如图3.4所示,我们可以用简单的两个步骤来描述矩阵式键盘的工作原理。
9
第一步,识别是否有按键被按下。
首先让列线P1.0~P1.3处于输入的状态,行线P1.4~P1.7处于输出的状态,所有的列线输入高电平,当某个键被按下时,则按键对应的行线和列线短接。如当S1按下时,P1.0和P1.4发生短接,此时P1.0的输入电平变成P1.4的电平,即P1.0变为高电平。
所以,在检测是否有按键按下时,使4条行线接入低电平,然后读取4条列线的状态,如果4条列线都为高电平,则表明没有按键被按下。如果其中有一个按键被按下时,由于列线是弱上拉到VCC,则列线上读取到的将是一个非全“1”的值。
第二步,找出被按下按键的位置。
首先将行线上的P1.7设置为低电平,其余全部设置为高电平,读取列线P1.0~P1.3上的值,如果这一行上有按键被按下,则P1.0~P1.3上读回的值就有一个为低电平。反之,如果没有按键按下,则P1.0~P1.3上读回的值全部为“1”。接着将P1.6设置为低电平,其余设置为高电平。同理,读取P1.0~P1.3上的值,查看P1.0~P1.3读回的值是低电平还是高电平,来确定该行的按键是否有被按下。同样的,依次将P1.5和P1.4的设置为低电平,来准确定位按键按下的位置[7]。
图3.4 矩阵键盘电路图
3.5 继电器控制模块
电磁继电器的构成主要是电磁铁、线圈、静态触点、动态触点、衔铁等。将固定的电压附加在线圈的两侧,线圈内会产生固定的电流流通,进而发生电磁感应,产生电磁作用力,电磁作用力大于弹簧的拉力,使衔铁吸向铁芯,将衔铁的动触点和静触点相互吸合。而当线圈两侧电压消失,线圈断电之后,电磁感应所产生的作用力消失,弹簧本身的拉力大于电磁的作用力,将衔铁拉回到起始的位置,令衔铁的动触点与静触点失去电磁力的作用得到释放。通过反复进行这样吸合和释放的过程,令继电器在电路中起到了导通和关闭
10
的作用。继电器的静触点和动触电的区分方式,主要是看触点的常开、常闭状态。继电器线圈在没有通电的状态下是断开的,为静触点。相反的,如果继电器在通电的状态下是闭合的,即为动触点 [8]。
继电器主要是通过电路中的PNP型三极管来驱动的,当数值超过系统的设定值时,单片机WR引脚将会从高电平跳变成为低电平,PNP型三极管导通,使得继电器吸合,继电器便起到了开关的作用,能够驱动负载。继电器的控制负载电路如图3.5所示。
图3.5 继电器控制负载电路
3.6 红外接收模块
红外遥控技术是目前使用十分广泛的一种技术,主要是基于红外通信原来,红外遥控在我们日常生活中随处可见,比如家里的电视机,空调、还有音响设备等都是通过红外遥控器控制。
红外接收模块的构成主要是由接收红外信息的接收电路,放大信号的放大电路,信号转换的调制解调电路,以及指令译码电路,执行电路等组成。接收电路通过接收发射器发送出的编码指令信号,然后进行放大并传输至送调制解调电路,而调制解调电路能够将编码指令信号还原成为编码信号[9]。指令译码电路的作用是通过指令译码器将编码指令信号译码,最后再通过驱动电路来操作控制执行电路中的各种指令。
红外接收电路用的是HS0038一体化红外接收探头,是标准IR遥控接收器系列,支持所有主要的传输码,有着很高的性价比。普通红外接收头的构成一般是由集成电路外加一些阻容性元件、红外线接收元件及滤波光片等,电路组成复杂,并且设计相对繁琐,不适合应用于实际开发设计中。HS0038是一种既能够进行红外线接收,也能够放大整形的元器件,不需要其他辅助的外接元件,就能够接收红外遥控器的输入数据,完成红外线接收等一系列工作,其功耗低,抗干扰能力强,并且能够进行连续的数据传输,最高可达到
11
800比特/秒,使用寿命高。连适合用于多种红外线通信遥控和数据传输。一体化红外接收电路如图3.6所示。
图3.6 一体化红外接收电路
3.7 声音提示模块
蜂鸣器是一种一体化结构类型的电子讯响器,其主要的供电方式为直流电压供电,市场上常见的蜂鸣器体积都很小,直径只有11毫米,并且价格便宜,受到各方面人士的喜爱。基本上有关声音提示的电子设备都会应用到蜂鸣器,如电脑、传真机、电子门铃、电动玩具、计数器等多种多样的电子设备。蜂鸣器一般分为两种,一种是压电式蜂鸣器,另一种是电磁式蜂鸣器。
压电式蜂鸣器主要是通过压电陶瓷的压电效应,导致机械变形,进而触发金属片的振动而发出声音。其主要由多谐振荡器、压电陶瓷片、阻抗匹配器、共鸣腔等部件构成。多谐振荡器一般是由晶体管或者集成电路构成,利用深度正反馈,当接通直流电压电源之后,利用阻容耦合使元器件交叉导通和关闭,令多谐振荡器开始发生振动,能够产生并输出1.5Hz~2.5kHZ的音频信号,通过阻抗匹配器的配合,压电陶瓷片振动发声。压电陶瓷片相对于比较常见的是用锆、铅的氧化物配制后烧结制成的钛、压电陶瓷片料。一般将谐振频率设计在人耳比较敏感的3KHz左右。
本设计应用的是电磁式蜂鸣器。电磁式蜂鸣器的主要构成是多谐振荡器、电磁感应线圈、小型磁铁、振动膜片等部分。系统通电后,振荡器振动产生信号,该信号通过电流流过电磁线圈,能够在电磁线圈周围引发磁场。磁铁在电磁线圈产生的磁场中引发振动膜片振动发出声音。
典型的蜂鸣器驱动电路通常都是由蜂鸣器、三极管、以及限流电阻组成。蜂鸣器作为发声元件,三极管主要用于控制蜂鸣器电流的导通,起到开关的作用,而限流电阻用于保护电路。
12
本设计采用的是有源蜂鸣器,在蜂鸣器的一端接电源,另一端接三极管,并且在三极管基极接入限流电阻,另一端接地线。当作为开关的三极管的基极接收到单片机发出的低电平信号后导通,蜂鸣器两端产生电压差,内部的电磁线圈有电流流通,电磁线圈产生的磁场引发振动膜片振动从而使蜂鸣器发声。而当基极接收到高电平信号时,三极管截止,蜂鸣器无电流流过,停止发声。声音报警电路如图3.7所示。
图3.7声音报警电路
13
第4章 程序设计
4.1主程序模块
在硬件支持的环境下,通过Keil4软件编程(详细程序见附录),将编写好的程序编译保存并生成芯片可识别的Hex文件,并且将程序文件导入Proteus仿真软件来进行仿真测试,将仿真出现的一些程序错误进行修正。
主程序的流程图如图4.1所示,接通电源后开机,初始化程序,通过主机键盘或是红外遥控输入密码,经过开锁程序完成开锁操作。密码输入正确完成开锁,如果密码输入三次错误,则报警自锁。并且在成功开锁后可通过密码设置程序更改密码。
开机 初始化 密码输入程序 开锁程序 成功开锁? Y Y N 报警自锁 密码设置程序 更改密码? N 返回
图4.1 主程序的流程图
14
4.2 键盘扫描子程序
键盘扫描程序的流程图如图4.2所示,输入密码时,通过键盘扫描是否有键闭合和定位闭合键来建立有效标志,确定输入的六位密码。
键盘扫描 N 有键闭合? Y 延时去键抖动扫描键盘 N 找到闭合键? Y 计算键值 N 闭合键释放? Y 建立有效标志 建立无效标志 返回
图4.2 键盘扫描程序流程图
15
4.3 红外接收子程序
红外接收子程序的流程图如图4.3所示,通过遥控器输入密码,HS0038红外接收头接收,在单片机中将输入的密码与系统中存储的密码进行比较,如果密码一致,则成功开锁,如果密码错误超过三次,则系统报警自锁。
开始 遥控输入密码 红外接收 确认程序 Y 是否正确? Y 开锁 N 返回 错误次数+1 N 错误三次? Y 报警程序 返回
图4.3 红外接收流程图
16
4.4 系统模块密码设置子程序
更改密码的流程图如图4.4所示,当系统处于开锁状态时,再次输入正确的密码,确定后按进入密码设置程序,输入新密码并按下设置键,为防止误操作需再次输入新密码,听到两声提示,表明新密码设置完成。
设置程序 开锁状态 输入旧密码 确认程序 是否正确? Y 输入新密码 N 错误次数+1 错误三次? Y N 再输入新密码 报警程序 N 两次密码是否相同 返回 Y 设置成功 返回
图4.4 设置密码子程序
17
4.5 开锁子程序
开锁程序的流程图如图4.5所示,开机后通过主机键盘或者红外遥控器输入密码,将输入的密码与保存在系统中的密码进行比对,若密码一致,则实现开锁。若密码错误,则重新输入,密码错误三次后,系统报警并锁定。
开始 初始化 输入密码 密码对比 是否一致? N 错误次数+1 Y 开锁 返回 N 错误三次? Y 报警自锁 返回
图4.5 开锁程序流程图
18
第5章 制作与调试
5.1 成品制作的焊接注意事项
完成软件设计的仿真调试之后,确认程序可以,便可进行电路板的焊接制作,焊接操作的主要注意以下几点。
1.焊接上锡时,锡的用量要注意不能太多,也不能太少。用量太多可能会使焊点相碰导致短路,用量太少可能焊接不牢靠,导致短路。
2.焊接时最好使焊锡堆叠为锥形,焊点周围焊锡稍微密集,防止虚焊。
3.焊接的温度通常在200度上下最佳,不能长时间地将电烙铁靠在电路板上,不然容易烧坏电路元件和焊盘。最好通过牵引的方法将焊锡添加到焊盘上。
4.对于一些引脚较长的电器元件,如电容器、电阻、三极管等,在焊接完成后,要将这些元件的引脚漏出的部分剪断。
5.单片机芯片与AT24C02芯片及其底座都是有方向的,在焊接底座时应注意缺口的方向,确保插入芯片的时候方向正确,防止因方向错误导致芯片烧毁。
6.在插入芯片前应先将芯片的针脚稍微弯曲,使其比较容易插入底座的插槽中,防止用力过度导致针脚弯曲折断。
5.2 调试
接通电源按下开机按钮,系统没用通电,通过万用表检查后发现开关虚焊,完成修复后系统正常开机。
进行调试的时候,发现单片机不工作,经检查发现电源引出线接错。正确接线后,再次调试单片机仍然不工作,检查后发现复位开关出现故障,RST引脚一直处于高电平状态,更换复位开关后单片机开始正常工作。
开机后LCD液晶显示屏无法显示,检查后发现P0口没有接入上拉电阻,将电阻与P0口连接后LCD正常显示。
蜂鸣器无声音,无论是按键按下还是密码输入错误,蜂鸣器都不工作,仔细检查过后发现蜂鸣器正负极接反,重新焊接蜂鸣器后正常工作。
19
结论
本设计是一种基于单片机的红外遥控电子密码锁,将单片机STC89C51作为主要控制芯片,AT24C02芯片作为数据存储器单元,通过外接电路的4*4矩阵键盘和红外遥控电路控制密码输入、LCD1602液晶显示屏单元显示系统状态、声音提示模块电路控制系统报警发声、继电器电路单元控制电磁锁开启关闭等,通过Keil4软件编程,成功设计并制作完成了一个能够修改密码,发声报警电子密码锁。单片机有着成本低廉,开发简单,安全可靠等诸多优点,能够通过不同的外接电路和编程设计出多种多样的功能。
红外遥控密码锁的成本相对较低,并且操作简单,体积小。该密码锁有两种开锁方式,既能够本机按键解锁,同时也能红外遥控解锁,只需要用户记住简单的六位数密码,便可轻松地完成开锁功能,而且能够随时修改密码,有着很高的保密性和灵活性,能够应付各种场合的需求,有不错的市场价值。
通过本次的毕业设计,对大学四年所学习的知识有了更加深刻的认识,能够将学习到的知识应用于实际中,是一件很有成就的事情。但是完成一个简单的设计都需要如此繁复的准备工作以及制作周期,可见在走上社会之后所完成更加困难的工作需要极大的耐心和信心,这对于我接下来的工作学习有着极大的帮助。
在本次的毕业设计中,我发现自己在知识理解以及动手水平方面都有所欠缺,但在指导老师的悉心教导下,设计制作过程中遇到的难题都迎刃而解,经过几个月的设计制作,最终完成了该红外遥控电子密码锁的毕业设计。
20
致谢语
经过几个月来的努力,终于完成了本次红外遥控电子密码锁的毕业设计。首先要感谢就是我的指导老师阳宾老师。在设计的选题,资料收集,焊接制作以及论文的撰写上,阳宾老师都给予了我极大的帮助。在老师的悉心指导下,我对于这四年来所学习的知识有了更加深刻的理解,从老师那学习了很多课堂中学习不到的小技巧,同时在电路板的焊接制作中锻炼了动手能力。这对于我毕业后的工作生活都是非常宝贵的经验。
其次要感谢学校,感谢学校提供了如此多宝贵的资源,藏书量丰富的图书馆,设备齐全的实验室,干净整洁的教学楼和宿舍,最重要的就是有这么多优秀的老师,感谢他们四年来孜孜不倦地向我们传授知识。正是老师们兢兢业业地工作,让我们知道如何去做人,如何去做事,如何为社会出力,为国家出力。感谢老师,感谢学校。
感谢我的舍友以及同学,这四年来有了他们的陪伴,我才会有这样一个丰富多彩的大学生活。这四年来我们有过欢笑有过矛盾,在学业上互相帮助,在生活上互相关心,这些都让我感受到朋友的重要性,明白合作的重要性。
弹指一挥间,大学四年匆匆而去,接来下的便是走向社会开始工作了,有了这四年大学生活的学习,我积累了很多宝贵的经验,我相信在未来的工作生活中,我会走出更加精彩的人生路!
21
参考文献
[1]钟端玮. 浅谈单片机的基本原理及应用研究[J]. 科学导报,2014,19:207-207.
[2]庹先国,余小平,奚大顺. 电子系统设计-基础篇[M]. 北京:北京航空航天大学出版社,2014. [3]叶蓁. 通用红外遥控码的单片机直接接收方法[J]. 漳州师范学院学报,2002,2:45-47. [4]司冬雨. 基于单片机控制的电子密码锁[J]. 中国科技财富,2012,17:33-36.
[5]卢旭锦. 基于Keil C的AT24C02串行E2PROM的编程[J]. 现代电子技术,2007,8: 154-157. [6]白木子荫. 液晶显示器技术全揭示[J]. 有线电视技术,2002,16:73-78.
[7]徐爱钧,徐阳. 单片机原理于应用-基于Proteus虚拟仿真技术[M]. 北京: 机械工业出版社,2013. [8]张唯一. 继电器在电气工程及其自动化低压电器中的应用[J]. 价值工程,2013,13: 38-P39. [9]张爱全. 红外线遥控的基本原理和应用范围[J]. 山西电子技术, 2003,6:40-41. [10]闫迎利. 压电效应及其在家电中的应用[J]. 物理与工程,2002,6: 43-45.
22
附录
仿真图
图1 Proteus仿真图
23
原理图
图2 密码锁原理图
24
实物图
图3 实物图正面 图4 实物图反面
图5 红外遥控器
25
电子密码锁程序
#include #define uchar unsigned char #define uint unsigned int #define Imax 14000 #define Imin 8000 #define Inum1 1450 #define Inum2 700 #define Inum3 3000 sbit lcd1602_rs=P2^7; sbit lcd1602_rw=P2^6; sbit lcd1602_en=P2^6; sbit Scl=P2^0; sbit Sda=P2^1; sbit ALAM = P3^3; sbit KEY = P3^2; bit operation=0; bit pass=0; bit ReInputEn=0; bit s3_keydown=0; sbit open_led=P2^2; bit key_disable=0; unsigned char countt0,second; unsigned char Im[4]={0x00,0x00,0x00,0x00}; uchar f; unsigned long m,Tc; unsigned char IrOK; unsigned char code a[]={0xFE,0xFD,0xFB,0xF7}; unsigned char code name[] unsigned char code start_line[] = {\"password: \ = {\"===Coded Lock===\ unsigned char code Correct[] = {\" correct \ 26 unsigned char code Error[] = {\" error \unsigned char code codepass[] = {\" pass \unsigned char code LockOpen[] = {\" open \ unsigned char code SetNew[] = {\"SetNewWordEnable\ unsigned char code Input[] = {\"input: \ unsigned char code ResetOK[] = {\"ResetPasswordOK \unsigned char code initword[] = {\"Init password...\unsigned char code Er_try[] unsigned char code again[] unsigned char InputData[6]; unsigned char TempPassword[6]; unsigned char N=0; unsigned char ErrorCont; = {\"error,try again!\= {\"input again \ unsigned char CurrentPassword[6]={1,3,1,4,2,0}; unsigned char CorrectCont; unsigned char ReInputCont; unsigned char code initpassword[6]={0,0,0,0,0,0}; void Delay5Ms() { unsigned int TempCyc = 5552; while(TempCyc--); } void Delay400Ms() { unsigned char TempCycA = 5; unsigned int TempCycB; while(TempCycA--) { TempCycB=7269; while(TempCycB--); } } void mDelay(uint t) { uchar i; 27 while(t--) { for(i=0;i<125;i++) {;} } } void Nop() { _nop_(); _nop_(); _nop_(); _nop_(); } void Start(void) { Sda=1; Scl=1; Nop(); Sda=0; Nop(); } void Stop(void) { Sda=0; Scl=1; Nop(); Sda=1; Nop(); } void Ack(void) { Sda=0; Nop(); Scl=1; Nop(); 28 Scl=0; } void NoAck(void) { Sda=1; Nop(); Scl=1; Nop(); Scl=0; } void Send(uchar Data) { uchar BitCounter=8; uchar temp; do { temp=Data; Scl=0; Nop(); if((temp&0x80)==0x80) Sda=1; else Sda=0; Scl=1; temp=Data<<1; Data=temp; BitCounter--; } while(BitCounter); Scl=0; } uchar Read() { uchar temp=0; uchar temp1=0; 29 { uchar BitCounter=8; Sda=1; do{ Scl=0; Nop(); Scl=1; Nop(); if(Sda) temp=temp|0x01; else temp=temp&0xfe; if(BitCounter-1) { temp1=temp<<1; temp=temp1; } BitCounter--; } while(BitCounter); return(temp); } void WrToROM(uchar Data[],uchar Address,uchar Num) uchar i; uchar *PData; PData=Data; for(i=0;i Send(*(PData+i)); Ack(); 30 Stop(); mDelay(20); } } void RdFromROM(uchar Data[],uchar Address,uchar Num) { uchar i; uchar *PData; PData=Data; for(i=0;i *(PData+i)=Read(); Scl=0; NoAck(); Stop(); } } #define yi 0x80 (100000000=80) #define er 0x80+0x40 void delay(uint xms) { uint x,y; for(x=xms;x>0;x--) for(y=110;y>0;y--); } void write_1602com(uchar com) 31 { } void write_1602dat(uchar dat) { } void lcd_init() { } unsigned char coding(unsigned char m1,unsigned char hh) { unsigned char k; if(IrOK==1) { IrOK=0; switch(m1) { case (0x0c): k=1;break; case (0x18): k=2;break; case (0x5e): k=3;break; 32 lcd1602_rs=0; P0=com; delay(1); lcd1602_en=1; delay(1); lcd1602_en=0; lcd1602_rs=1; P0=dat; delay(1); lcd1602_en=1; delay(1); lcd1602_en=0; write_1602com(0x38); write_1602com(0x0c); write_1602com(0x06); write_1602com(0x01); case (0x08): k=4;break; case (0x1c): k=5;break; case (0x5a): k=6;break; case (0x42): k=7;break; case (0x52): k=8;break; case (0x4a): k=9;break; case (0x43): k='*';break; case (0x16): k=0;break; case (0x15): k='#';break; case (0x0d): k='D';break; case (0x45): k='A';break; case (0x47): k='A';break; case (0x44): k='A';break; case (0x40): k='A';break; case (0x07): k='A';break; case (0x09): k='A';break; case (0x19): k='A';break; } } else { switch(hh) { case (0): k=1;break; case (1): k=2;break; case (2): k=3;break; case (3): k='A';break; case (4): k=4;break; case (5): k=5;break; case (6): k=6;break; case (7): k='B';break; case (8): k=7;break; case (9): k=8;break; case (10): k=9;break; case (11): k='C';break; 33 case (12): k='*';break; case (13): k=0;break; case (14): k='#';break; case (15): k='D';break; } } return(k); } unsigned char KeyMemory; sbit KeyLine_1 = P1^7; sbit KeyLine_2 = P1^5; sbit KeyLine_3 = P1^3; sbit KeyLine_4 = P1^1; sbit Keylist_1 = P1^0; sbit Keylist_2 = P1^2; sbit Keylist_3 = P1^4; sbit Keylist_4 = P1^6; void KeyOut(unsigned char i) { KeyLine_1 = 1; KeyLine_2 = 1; KeyLine_3 = 1; KeyLine_4 = 1; switch(i) { case 0: KeyLine_1 = 0; break; case 1: KeyLine_2 = 0; break; case 2: KeyLine_3 = 0; break; case 3: KeyLine_4 = 0; break; } } unsigned char KeyIn(unsigned char i) { static unsigned char a=1; switch(i) 34 } { case 0: a=Keylist_1; break; case 1: a=Keylist_2; break; case 2: a=Keylist_3; break; case 3: a=Keylist_4; break; } return a; unsigned char keynum(void) { unsigned char key_rt=0xff; unsigned char i, j; for(i = 0; i < 4; i++) { } for(i = 0; i < 4; i++) { if((KeyMemory/16)>>i==0x01) { for(j = 0; j < 4; j++) { 35 KeyOut(i); for(j = 0; j < 4; j++) { } if(KeyIn(j) == 0) { } while(KeyIn(j) == 0); Delay5Ms(); Delay5Ms(); if(KeyIn(j) == 0) { } KeyMemory=(1<if((KeyMemory%16)>>j==0x01) { KeyMemory=0; key_rt=i*4+j; } } } } return key_rt; } void OneAlam() { ALAM=0; Delay5Ms(); ALAM=1; } void TwoAlam() { ALAM=0; Delay5Ms(); ALAM=1; Delay5Ms(); ALAM=0; Delay5Ms(); ALAM=1; } void ThreeAlam() { ALAM=0; Delay5Ms(); ALAM=1; Delay5Ms(); ALAM=0; Delay5Ms(); ALAM=1; 36 Delay5Ms(); } void DisplayOne() { } void DisplayChar() { unsigned char i; if(pass==1) { } else { if(N==0) { } else { write_1602com(er); for(i=0;i<16;i++) 37 ALAM=0; Delay5Ms(); ALAM=1; write_1602com(yi+5+N); write_1602dat('*'); { } write_1602com(er); for(i=0;i<16;i++) write_1602dat(LockOpen[i]); write_1602com(er); for(i=0;i<16;i++) { } write_1602dat(Error[i]); { write_1602dat(start_line[i]); } } } } void DisplayInput() { unsigned char i; if(CorrectCont==1) { write_1602com(er); for(i=0;i<16;i++) { write_1602dat(Input[i]); } } } void ResetPassword() { unsigned char i; unsigned char j; if(pass==0) { pass=0; DisplayChar(); ThreeAlam(); } else { if(ReInputEn==1) { if(N==6) { ReInputCont++; 38 if(ReInputCont==2) { } 39 for(i=0;i<6;) { } if(i==6) { } ReInputCont=0; CorrectCont=0; write_1602com(er); for(j=0;j<16;j++) { } TwoAlam(); ReInputEn=0; WrToROM(TempPassword,0,6); write_1602dat(ResetOK[j]); if(TempPassword[i]==InputData[i]) else { } write_1602com(er); for(j=0;j<16;j++) { } ThreeAlam(); pass=0; ReInputEn=0; ReInputCont=0; DisplayChar(); break; write_1602dat(Error[j]); i++; } } else { } OneAlam(); write_1602com(er); for(j=0;j<16;j++) { write_1602dat(again[j]); } { } TempPassword[i]=InputData[i]; for(i=0;i<6;i++) N=0; } } void Alam_KeyUnable() { } void Cancel() { unsigned char i; unsigned char j; //DisplayListChar(0, 1, start_line); write_1602com(er); for(j=0;j<16;j++) { 40 P1=0x00; { } ALAM=~ALAM; Delay5Ms(); } } write_1602dat(start_line[j]); TwoAlam(); { } KEY=1; ALAM=1; pass=0; for(i=0;i<6;i++) InputData[i]=0; operation=0; ReInputEn=0; CorrectCont=0; ReInputCont=0; open_led=1; s3_keydown=0; key_disable=0; N=0; void Ensure() { unsigned char i,j; RdFromROM(CurrentPassword,0,6); { if(ReInputEn==0) { for(i=0;i<6;) { { } else { 41 if(N==6) if(CurrentPassword[i]==InputData[i]) i++; } i=7; { ErrorCont++; if(ErrorCont>=3&&KEY==1) } write_1602com(er); for(i=0;i<16;i++) { } Alam_KeyUnable(); TR0=1; pass=0; break; key_disable=1; write_1602dat(Error[i]); } if(i==6) { CorrectCont++; if(CorrectCont==1) { write_1602com(er); for(j=0;j<16;j++) { } TwoAlam(); ErrorCont=0; KEY=0; pass=1; TR0=1; write_1602dat(LockOpen[j]); open_led=0; { for(j=0;j<6;j++) InputData[i]=0; 42 } } } else { } //DisplayListChar(0,1,SetNew); write_1602com(er); for(j=0;j<16;j++) { } TwoAlam(); ReInputEn=1; CorrectCont=0; write_1602dat(SetNew[j]); else { if((InputData[0]==1)&&(InputData[1]==3)&&(InputData[2]==1)&&(InputData[3] { } else 43 ==4)&&(InputData[4]==2)&&(InputData[5]==0)) WrToROM(initpassword,0,6); write_1602com(er); for(j=0;j<16;j++) { } TwoAlam(); Delay400Ms(); TwoAlam(); N=0; write_1602dat(initword[j]); //DisplayListChar(0,1,initword); } } } } { } //DisplayListChar(0,1,Error); write_1602com(er); for(j=0;j<16;j++) { } ThreeAlam(); pass=0; write_1602dat(Error[j]); else { } write_1602com(er); for(j=0;j<16;j++) { } ThreeAlam(); write_1602dat(Er_try[j]); else { } N=0; operation=1; write_1602com(er); for(j=0;j<16;j++) { } ThreeAlam(); pass=0; write_1602dat(Error[j]); 44 void main() { unsigned char KEY,NUM; unsigned char i,j; P1=0xFF; EA=1; TMOD=0x11; IT1=1; EX1=1; TH0=0; TL0=0; TR0=0; TL1=0xB0; TH1=0x3C; ET1=1; TR1=0; Delay400Ms(); lcd_init(); write_1602com(yi); for(i=0;i<16;i++) { write_1602dat(name[i]); } write_1602com(er); for(i=0;i<16;i++) { write_1602dat(start_line[i]); } write_1602com(er+9); write_1602com(0x0f); Delay5Ms(); N=0; while(1) { if(key_disable==1) 45 Alam_KeyUnable(); ALAM=1; else KEY=keynum(); if(KEY!=0xff||IrOK==1) { if(key_disable==1) { } else { NUM=coding(Im[2],KEY); { switch(NUM) { case ('A'): ; case ('B'): case ('C'): ; break; break; break; break; break; ; second=0; case ('D'): ResetPassword(); case ('*'): Cancel(); default: { write_1602com(er); for(i=0;i<16;i++) { } case ('#'): Ensure(); break; write_1602dat(Input[i]); operation=0; if(N<6) { OneAlam(); { 46 for(j=0;j<=N;j++) } write_1602com(er+6+j); write_1602dat('*'); InputData[N]=NUM; N++; } else { N=6; break; } } } } } } } } void time1_int() interrupt 3 { TL1=0xB0; TH1=0x3C; countt0++; if(countt0==20) { countt0=0; second++; if(pass==1) { if(second==1) { open_led=1; TR1=0; TL1=0xB0; TH1=0x3C; 47 second=0; } } else { if(second==3) { TR1=0; second=0; key_disable=0; s3_keydown=0; TL1=0xB0; TH1=0x3C; } else TR1=1; } } } void intersvr1() interrupt 2 using 1 { TR0=1; Tc=TH0*256+TL0; TH0=0; TL0=0; if((Tc>Imin)&&(Tc } if(f==1) { if(Tc>Inum1&&Tc { Im[m/8]=Im[m/8]>>1|0x80; m++; } if(Tc>Inum2&&Tc if(m==32) { m=0; f=0; if(Im[2]==~Im[3]) { IrOK=1; TR0=0; } else IrOK=0; } } } 49 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- banwoyixia.com 版权所有 湘ICP备2023022004号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务