基于单片机的语音电子门锁论文_第1页
基于单片机的语音电子门锁论文_第2页
基于单片机的语音电子门锁论文_第3页
基于单片机的语音电子门锁论文_第4页
基于单片机的语音电子门锁论文_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

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

文档简介

1、基于单片机的语音电子门锁摘要现今社会,随着生活的进步电子业的蓬勃发展, 单片机应用已经成为电子产 品研制以及开发中首选的微控制器。 随着人们的生活水平不断提高, 怎样实现家 庭的防盗这一问题也就变的尤为突出,采用传统的机械锁结构由于其构造简单, 安全性能又低,已经无法满足人们的日常需要。本文从实用、可靠的角度出发,采用宏晶科技有限公司的单片机 STC89C52 与STC11L08X作为主控芯片,其中STC11L08X单片机主要负责语音识别处理功 能,STC89C52单片机主要负责键盘、显示及密码处理等功能,最终控制门的打 开或者关闭由STC11L08X单片机最终输出。通过这两款的单片机结合外围

2、的键 盘输入、报警、显示等电路,本文的单片机程序都用C语言编写,硬件电路设计使用protel 99se设计。设计的语音电子门锁可以多次的更改密码,并且具有报 警功能。经实验证明, 该密码锁具有设计方法合理, 安全可靠, 成本低,实用等特点, 符合住宅、办公室用锁要求,具有推广价值。关键词: 密码锁 语音识别 单片机 报警1 引言1.1 语音电子门锁简介 语音电子密码锁是一种可以通过密码输入或者语音识别来控制外扩电路工 作,从而控制门锁机械开关的打开、闭合,完成开锁或者闭锁任务的电子设备。 现在应用比较多的电子密码锁是以芯片为核心, 通过编程来实现即单片机控制外 围电路的语音电子密码锁。 其安全

3、性及可靠性已大大超过了普通的机械锁。 其特 点如下:1) 保密性好,可靠性高,远远大于机械锁。随机开锁成功的几率几乎不可能。2) 密码随意可变,用户可以随时根据需要更改密码,防止固定密码被盗,同时 也可以避免因为人员的更替等原因而使锁的保密功能下降。3) 错误密码输入保护功能,如果输入的密码错误超过三次时时,报警系统自动 启动。4) 无活动机械零件,不会有磨损,这样使用的寿命就变长了。5) 使用的灵活性好,不像机械锁那样需要必须佩带钥匙才可以开锁。6) 语音电子密码锁操作非常简单,一用即会。1.2 语音电子门锁的发展趋势在日常的生活与工作当中, 住宅、公司、单位等的安全防范以及单位的文件 档案

4、和财务报表等一些涉密资料的保存大多是以加锁的方式来解决。目前来看, 门锁主要还是用的弹子锁, 这种方式的锁的钥匙很容易丢失; 保险箱一般主要用 的是机械密码锁,这种的结构较为复杂,制造的精度要求很高,成本也就很高, 并且容易出现故障,人们常常需要随身携带多把钥匙,这样使用起来极不方便。 如果钥匙丢失了那么安全性就会大打折扣。 针对这些不同类型的锁具的缺点本设 计用密码或者语音口令的方式代替传统的钥匙锁。 它的出现给人们的生活提供了 极大的方便, 有非常广阔的市场前景。 由于电子器件的限制, 以前开发的一些电 子密码门锁, 其种类不多而且保密性又差, 最基本的就是只依靠最简单的模拟电 子开关来实

5、现的,制作简单但很不安全,其硬件电路结构繁杂,分立元件较多, 也有一些是使用早的 2051 系列的单片机来做的,这种的也是密码相对简单,很 容易被破解。随着各种锁的出现,功能上日益强大,使用方面更加简便,安全性 更强,从以前的单密码输入发展到现在的语音和电子密码双重的门锁, 实现了真 正的电子加密, 用户只有通过密码或者是语音密钥才能打开锁具, 如果用其他的 办法是不能打开锁的。针对方便、安全等方面的需要许多的电子类型密码锁已经相继问世。 但是这 类产品一般都是针对特定的有效卡、 指纹或者是声音等有效, 并且不能实现通过 远程来控制, 只能适用在保密要求高而且只供个人使用的箱子、 衣柜、房间等

6、方 面。由于字符、数字、人体生物特征、图形图像和时间等要素都可以成为钥匙的 信息,那么将这些信息组合使用就能够使电子锁具有高度的安全保密性, 比如防 范严密的金库, 需要使用各种复合信息密码的电子锁, 这样对盗贼来说是 “道高 一尺、魔高一丈”。这些组合信息的使用使电子锁得到无穷的扩展,也能让产品 多样化,对于用户来说是“千挑百选、自得其所” 。由此可以看出组合使用各种 信息是电子锁以后发展的必然趋势。1.3 本设计实现的目标本设计采用单片机STC89C52T STC11L08X为主控芯片,结合一些外围电路,组 成语音电子门锁, 用户如果想要打开门锁, 必需要先通过提供的键盘输入正确的 密码才

7、能将门锁打开, 或者通过二级语音口令识别开门。 如果密码输入错误蜂鸣 器会有提示, 为了提高实际安全性, 设计当密码输入错误超过三次后将报警并且 封锁键盘。密码可以由用户登陆后由自己随意修改设定,设定密码长度为 4 位。 修改密码只有门锁打开后才能修改密码。 修改密码时要前后两次输入的新密码一 致才能修改成功, 修改成功后会有指示灯提示。 语音识别开门时要首先说出一级 加密的口令,其次再说出二级加密口令才能将门打开。1.4 设计方案的设计由于现在市面上的单片机种类很多, 每种单片机都具有一定的优缺点, 因此 在选用时做了很多比较,最后比较合理的选择了 STC单片机,以期获得最高的性 价比。通常

8、情况来说在选取单片机时要从以下几个方面考虑:存储器、性能、运 行速度、定时 / 计数器、 I/O 口、模拟电路功能、串行接口、功耗、工作电压、 抗干扰性、封装形式、保密性等,除了以上方面还有一些最基本参数比如:中断 源的优先级和数量、有没有低电压检测功能、 工作温度范围、有无上电复位功能、 单片机内有无时钟振荡器等。 在开发过程中项目的开发还受到: 编程器、开发工 具、开发人员的适应性、开发成本、技术服务和支持等等因素。基于以上一些因 素本设计选用单片机STC89C52T STC11L08X两个单片机作为主控单片机。其中 STC89C52单片机主要负责的功能是四位数码管的显示、按键设置密码、蜂

9、鸣器 报警。一些操作时的指示状态等;单片机 STC11L08X主要负责语音部分识别, 及门锁控制的输出。本设计之所以选择用两个芯片是因为如果用一个芯片来完 成,就需要用一个比较高端的芯片, 而且管脚资源要足够多, Flash 等要足够大, 这样处理起来才更容易, 但是如果选择了这种芯片成本就会提高很多。 而向本设 计这样采用两个简单的单片机来做就既能照顾到成本,又能保证硬件资源够用。 性价比还是很高的。 当用户开锁时, 先按键盘的开锁键, 之后再按键盘的确定键 来调整要设置密码的位, 再通过增加键或者减小键来调整密码, 当调整好后按下 确定键,继续调整下一位, 直到四位密码都输入完, 按确定键

10、瑞出键盘输入程序。 如果密码输入正确则开锁,不正确蜂鸣器会发出短暂的一生响动要重新输入密 码,如果连续输入三次密码错误那么就会发出报警。如果用户需要修改密码时, 需要在输入密码正确后, 继续输入两次新密码, 只有这两次新密码一致时, 新密 码才修改成功。密码修改成功时会有绿色的 LED指示。2 单片机介绍2.1 单片机 STC89C52STC89C52R这个单片机是宏晶科技公司推出的新一代的低功耗、高速并且 有很强抗干扰的能力,它的指令代码兼容传统的老 8051 单片机,可以 12 时钟 / 机器周期或者是 6 时钟/ 机器周期的任意选择。2.1.1单片机STC89C52勺主要特性1. 这是一

11、款增强型的 8051单片机,6 时钟/机器周期或者是 12 时钟/机器 周期可以任意选择,其指令代码完全兼容传统 8051 单片机的指令代码。2. 这种单片机的工作电压范围:5.5V3.3V (5V单片机)或者3.8V2.0V (3V单片机)。3. 它的工作频率范围:040MHz相对于普通8051的080MHz实际上 其工作频率可达 48MHz。4. 用户的应用程序存储空间为8K字节(Flash )。片上集成了 512字节数 据存数区( RAM)。6. 通用 I/O 口有 32 个,复位后为: P1/P2/P3/P4 是准双向口 / 弱上拉的, P0 口是漏极开路输出口,当在作为总线扩展用时是

12、不用加上拉电阻的,当作为I/O 口用时,需加若上拉电阻。7. ISP (在系统可编程) /IAP (在应用可编程) ,不需要专用的编程器和专 用仿真器,就可以通过串口( RxD/P3.0,TxD/P3.1 )将用户程序直接下载到单片 机里,数秒即可完成一片数据的写入操作。8. 新增了 EEPRO功能。9. 具有看门狗功能。10. 片上共有3个16位定时器/计数器。即定时器T0、T1、T2定时器。11. 有 4 路外部中断,包括低电平触发电路或下降沿中断, Power Down 模式 可以由外部的中断低电平方式触发进行中断唤醒。12. 片上有通用的异步通信串行口( UART,它还可以用定时器实现

13、多个UARTT 作。13. 单片机的工作温度范围:-40+85C(工业级)/075C(商业级)2.1.2 STC89C52RC单片机的工作模式模式1. 典型功耗0.1卩A,可以由外部的中断来唤醒,中断执行并且返回后,继续 执行原来的用户程序。2. 空闲模式:此种模式的典型功耗 2mA。3. 正常工作模式:此种模式的典型功耗 4mAr 7mA。4. 掉电模式可以通过外部中断来唤醒, 这适用气表、水表等一些电池供电的 设备及一些便携的设备。STC89C52R单片机引脚功能说明。弓I脚图如图 2-1所示。T2/PI. 0T2EK/P1. 1PL 2PL 3PL 4PL* 5PL 6PL 7RSTRX

14、D加TKD/P3. 1INT0/P3.2 nm/P3.3T0/P3,4T1/P3.S/P3. 6RD/P3.7XTAL2XT AllVSS0 12 3 4 5 6 7 8 9 911111 11111PDIP405 4 3 ofc 1 o _y 8 7 & 5 4* 3 1 333 3J3222 O222?2j vcc卩 0. O/AEOPO. 1/AD1PO. 2/AE2PO, 3/AD3PO. 4/AD41 PO. 5/AD5:FO. 6/AD6PO. 7/AT7 EA:ALE/PRQGPSENP2. 7/A15P2, 6/A14P2. 5/A13P2. 4/A12P2. 3/A1

15、1P2, 2/A10曲】"9:P2. 0/A9图 2-1 STC89C52RC引脚图VCC(40引脚):接电源电压。VSS(20弓I脚):接地。P0端口( P0.0P0.7对应3932引脚)。P0端口是一个漏极开路的8位 双向的I/O 口。当作为输出端口用时,每个引脚可以驱动 8个TTL的负载;当 对P0端口写入“ 1”时,它又可以作为高阻抗输入。在访问外部程序和数据存储 器时,P0端口也可以提供低8位地址和8位数据的复用总线。此时,P0端口内 部的若上拉电阻有效。当在 Flash ROM编程时,由P0端口接收指令字节;在校 验程序时,则输出指令字节。在验证时,要求要外接上拉电阻。P

16、1端口( P1.0P1.7对应于18引脚)。P1端口是一个带内部上拉电阻的 8位的双向I/O端口。P1的输出缓冲器可以驱动 4个TTL的输入。当对端口写 入1时,内部的上拉电阻会把端口拉到高电平,这时端口可以当做输出使用。 当P1端口作输入口使用时,因为内部有上拉电阻,那些被外部拉低的引脚会输 出一个电流(I IL ) oP2端口( P2.0P2.7,2128弓I脚):P2 口是一个带内部上拉电阻的 8位 双向I/O端口。P2的输出缓冲器可以驱动(吸收或输出电流方式)4个TTL输 入。对端口写入1时,通过内部的上拉电阻把端口拉到高电平,这时可用作输 入口。P2端口作为输入口使用时,因为有内部的

17、上拉电阻,那些被外部信号拉 低的引脚会输出一个电流(Iil )。P3端口(P3.0P3.7对应于1017弓I脚)。P3端口是一个带有内部上拉电 阻的8位的双向I/O端口。P3端口的输出缓冲器可以驱动(吸收或输出电流方 式) 4个TTL输入的信号。当对端口写入“ 1”时,它内部的上拉电阻会把端口 拉到高电平,此时P3端口可用作输出口。当P3端口做输入口使用时,因为有内 部的上拉电阻,那些被外部信号拉低的引脚会输入一个电流(Iil)。当在对Flash ROM编程或程序校验时,P3端口还接收一些控制信号P3 口除作为一般I/O 口外,还有其他一些复用功能,如下表所示:引脚号复用功能P3.0RXD(串

18、行输入口)P3.1TXD(串行输出口)P3.2INT0(外部中断0)P3.3INT1(外部中断1)P3.4T0(定时器0的外部输入)P3.5T1(定时器1的外部输入)P3.6WR(外部数据存储器写选通)P3.7RD (外部数据存储器读选通)表2-1 P3 口引脚复用功能复用功能RST(9引脚):复位引脚。当通过此引脚给单片机连续输入两个机器周期以 上的高电平信号时为有效,此引脚的功能为用来完成单片机的复位初始化操作。 当看门狗计时完成后,RST复位引脚输出96个晶振周期的高电平信号。特殊寄 存器AUXR地址8EH上的DISRTO位可以让此功能无效。DISRTO在默认状态下, 复位高电平有效。A

19、LE/ ROG(30引脚):地址锁存控制功能:(ALE弓I脚是当访问外部程序存 储器的时候,锁存低8位地址的输出脉冲。当在Flash编程时,此引脚(ROG 也可以用作编程输入脉冲。PSEN(29引脚):(PSEN)是外部程序存储器的选通信号。当单片机从外 部程序存储器执行外部代码时,PSEN会在每个机器周期被激活两次,而访问外 部数据存储器的时候,PSEN将不被激活。EA/VPP (31引脚):访问外部程序存储器的控制信号。:为了使能从0000H 到FFFFH的外部程序存储器的读取指令,EA必须接地(GND。注意加密方式为1 时,EA将内部锁定为RESET为了执行内部程序指令,EA应该接VCC

20、在Flash 编程期间,A也接收12伏特的VPP电压。XTAL1 (19引脚):振荡器的反相放大器和内部时钟发生电路的输入端。XTAL2(18引脚):振荡器的反相放大器的输入端2.2 单片机 STC11L08XESTC11L08XE勺主要性能:1. 高速,1个时钟/机器周期,增强型8051内核,速度比普通8051快8-12 倍2. 宽电压,5.5-4.1/3.7,3.6-2.4/2.13低功耗设计,空闲模式4. 低功耗模式,掉电模式和远程唤醒模式5. 工作频率,0-35MHZ,相当于普通8051的0-420MHZ6. 时钟,外部晶振或内部晶振磕训啊7. 片内EEPRO功能,擦写次数10万次以上

21、8.2个16位定时器9.1个独立波特率发生器10. 可编程时钟输出功能11. 硬件看门狗12. 全双工异步串行口13. 先进的指令集结构14. 通用 I/O 口( 36/40 个)管脚图如图2-2-所示:CM 匸T沁E 宀7三S三二 2- A d d d d nnonDnnrinnn_ Pl. 3INT/ExD.- Pl. 6TkD Pl. 7 _ P4.7/RSTINT/TxD- P3, 0F4.3TkD.- P3TT0- P3.2 TntT/P1 3CLKOUTO/INT/TO/P3. 4aKOUTl/WTl/Pl S891011121314151617ocg百匕CM I寸g <ZN

22、 T0 寸 n TjlPLCC-44增加P4 有40个I/O并可位寻址史気©冨冒5;击爲右PO/1P0.5P0.6P0.7NA.-'P-k &F4.1ALE/P4 5NA/P4- 1P2.7 巴.6P2.5m:匸疗 a Z GJ CM n 1 d d d d 工UUUUULL JUUUiBis图2-2 STC11L08XE单片机引脚图3语音识别模块介绍语音识别模块实物如图3-1所示。本模块的主要芯片是LD3320语音识别芯 片。LD3320是一颗基于非特定人语音识别(SI-ASR : Speaker-IndependentAutomatic Speech Recogn

23、ition )技术的语音识另/ 声控芯 片。提供了真正的单芯片语音识别解决方案。LD3320芯片上集成了高精度的A/D 和D/A接口,不再需要外接辅助的 Flash和RAM即可以实现语音识别/声控/ 人机对话功能。并且,识别的关键词语列表是可以动态编辑的。基于LD3320可以在任何的电子产品中,甚至包括最简单的51作为主控芯片的系统中,轻松实现语音识别/声控/人机对话功能。为所有的电子产品增加VUI (Voice UserIn terface )语音用户操作界面。MIC音 炖入LD3320 语 音识别芯片图3-1语音识别模块实物图主要特色功能:非特定人语音识别技术:不需要用户进行录音训练可动态

24、编辑的识别关键词语列表:只需要把识别的关键词语以字符串的形式 传送进芯片,即可以在下次识别中立即生效。比如,用户在51等MCU的编程中, 简单地通过设置芯片的寄存器,把诸如“你好”这样的识别关键词的内容动态地 传入芯片中,芯片就可以识别这样设定的关键词语了。真正单芯片解决方案:不需要任何外接的辅助Flash和RAM真正降低系 统成本。内置高精度 A/D 和 D/A 通道:不需要外接 AD 芯片,只需要把麦克风接在 芯片的AD引脚上;可以播放声音文件,并提供 550mW的内置放大器。高准确度和实用的语音识别效果支持用户自由编辑 50 条关键词语 在同一时刻,最多在 50 条关键词语中进 行识别,

25、终端用户可以根据场景需要, 随时编辑和更新这 50 条关键词语的内容。模块上集成了 MIC音频输入设备及串口通信接口,论文模块还预留了 16个 I/O给用户使用。本设计中只有用到了模块的 P1.0与P1.1 口。其功能及使用方 法见后面介绍,这里不再多叙述。4硬件设计硬件设计部分电路主要包括复位电路、晶振电路、电源部分、报警部分、数 码管显示部分、按键部分、指示灯部分、语音识别模块接口部分等。4.1复位电路部分复位电路如图4-1所示。图中C103为滤波电容,S1为复位按键,电阻R101 为下拉电阻。单片机正常运行时复位管脚RST被下拉电阻R101拉到低电位,当按键S1按下时,单片机管脚RST被

26、拉倒高电平,此时单片机复位。4.2晶振电路晶振电路如图4-2所示。图中选用的是外接无源的12MHz晶振,根据单片机 的数据手册,选择晶振电容为瓷片的 33pF电容。晶振电路在系统中虽然看起来 很简单,但是在整个系统中是最重要的一部分,因为如果晶振电路不能正常运行, 那么单片机的用户程序就不能呗有效的执行。图4-2晶振电路4.3电源部分电源部分如图4-3所示。图中D201是电源指示灯,当电源有电时D201点亮, 当电源没电或者电压不够足时,D201熄灭。R201为限流电阻,其功能是限制流 过D201的电流过大烧坏二极管D201。电容C201与C202为滤波电容,作用是滤 除电源的杂波,保证单片机

27、尽量小的收到外界文波带你呀的干扰。1vcc1*JIIs1K1C201C2D2LOOii10:D201+5V11图4-3电源部分电路4.4报警部分电路报警部分电路如图4-4所示。图中R401为限流电阻,三极管Q5起到扩流的 作用,因为51的单片机驱动能力都很有限,因此要用三极管扩流。 U3为报警用 的蜂鸣器,当有报警时,蜂鸣器会发出声响,当无任何报警产生时,蜂鸣器静音。4.5数码管显示电路数码管显示电路如图4-5所示。图中Q1、Q2 Q3 Q4为起到扩流作用。R306-R312,R301-R304起到限流的作用。RP1为排阻,是P0 口上啦电阻。加这个 上拉电阻是因为51单片机的P0 口都是准双

28、向口,即做输出时如果不加上拉电阻 是不可以的。数码管LG5641BH是共阳的数码管。此部分电路的工作原理是,比 如单片机的P0 口都输出低电平,P2.4输出高电平,那么此时三极管 Q1导通数 码管第一位被点亮,显示的数据因为 P0都为低电平,故现实的数据是8.其他数 码管的点亮及显示的数据原理如此一样。图4-5数码管显示电路4.6按键部分电路按键电路如图4-6所示。图中R401-R404为上拉电阻,当按键未被按下时,单片机的相应管脚为高电平,当按键按下时单片机的相应管脚变为低电平,当单片机检测到低电平时,说明按键按下。在本设计中P1.0 口的功能定义为菜单键,P1.1 口的功能定义为确定键,P

29、1.2 口的功能定义为增加键,P1.3 口的功能定义 为减小键。4.7指示灯部分电路指示灯部分电路如图4-7所示。图中D402为密码输入指示灯,R403为密码 输入指示灯的限流电阻。D403为密码修改正确指示灯,R404为密码修改指示灯 的限流电阻。在系统运行时,当用户按下菜单键后准备输入密码的过程中D402指示灯亮。如果用户密码修改正确时,用D403指示密码修改成功与否,如果修改正确,D403亮,如果修改不成功,贝U D403保持灭的状态。4.8语音识别接口语音识别接口电路如图4-8所示。因为语音识别模块的用电电压是3.3V,故如果要让两个单片机通过I/O 口连接就需要将电平信号做一些转变。

30、途中的 R201与稳压管D1就是将5V电压转变到3.3V的电路。图中语音识别模块部分的 R402与D401为最终的门控制输出指示灯。当 D401亮时表示门锁打开,当D401 灭时表示门锁关闭。5 软件部分软件部分的程序包括两个方面,STC89C52单片机的程序和STC11L08X单片 机程序。其中STC89C5单片机主要负责按键处理及密码显示、报警与一些操作 状态的处理,而STC11L08X单片机负责语音的识别及处理和检测 STC89C52单片 机的 I/O 开关门命令以及门锁控制的最终输出。5.1 STC89C52 单片机的程序STC89C52的单片机程序包括宏定义、初始化、按键处理、显示、

31、主函数等 部分。线距离来说明程序部分。5.1.1 单片机程序的宏定义及一些申明程序代码及注视如下:#include <reg52.h>/包含单片机头文件#include <intrins.h> /#define GPIO_DIG P0/定义P0 口为数码管显示接口用sbit LS1=P2A4;/定义P2.4口为数码管第一位控制sbit LS2=P2A5;/定义P2.5口为数码管第二位控制sbit LS3=P2A6;/定义P2.6口为数码管第三位控制sbit LS4=P2A7;/定义P2.7口为数码管第四位控制sbit in_led=P2A3; /定义 P2.3 口为输入

32、密码指示灯sbit password_led=P2A2;/ 定义 P2.2 口为密码设置成功指示灯sbit door_out=P2A0; /定义 P2.0 口为门锁输出sbit alarm=P1A4; /定义报警输出unsigned char Trg=0;/ 按键触发标志unsigned char Cont=0;/ 长按键标志unsigned char key_menu=0; / 菜单标志unsigned char key_enteradd=0; / 按键设置位变量unsigned char key_datadd=0; / 按键设置位变量unsigned char key_lock=0; /

33、键盘锁标志DIG_CODE10=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90;/0 、1、2、3、4、5、6、7、8、9 的显示码int ge,shi,bai,qian;unsigned char key_password=0; /unsigned int result=1234; unsigned int result1=0; unsigned int result2=0; unsigned int result3=0;unsigned int password_count=0; /unsigned int count=0; unsign

34、ed int t1_count=0; / void Delay(); / void Init(); / void data_change(); / void key_read(); / void key_set(); /密码设置标志/ 默认密码为 1234/ 输入密码/ 验证密码/ 验证密码 验证密码计数/ 输入密码错误计数 定时器 1 定时计数 延时初始化函数数据转换按键函数 按键设置函数void DigDisplay(unsigned char x); / 动态显示函数5.1.2 初始化函数/*函数名 : Init()* 函数功能: 初始化函数* 输入 : 无* 输出: 无void Ini

35、t()alarm=1; / 初始化报警关闭 in_led=1;/ 初始化,输入密码指示灯 door_out=0; / 门锁输出默认为 0,关闭状态 password_led=1; / 关闭/ 以下为定时器初始化 /EA=1; /开全局中断ET0=1; /开定时中断 0IT0=0; /外部中断0 电平触发IT1=0; /外部中断1 电平触发PT0=1; /定时中断0 高TMOD = 0x28; /T0T1方式控制TH0= 0x0c; / T0高 8 位TL0= 0x78; / T0 低 8 位/ 初始化完成 5.1.3 主程序/* 函 数 名 : main* 函数功能 : 主函数* 输入:无*

36、输出:无*/ void main(void) / unsigned char i;Init(); / 初始化函数 while(1) if(key_lock=0) / 只有键盘未锁定时,才可以操作键盘 key_set(); / 按键设置函数 5.1.4 按键处理函数*void key_set() /unsigned int i;key_read(); /if (Trg=1)TR0=1; /t1_count=0;in_led=0; /按键设置函数按键函数启动 T0输入密码指示灯亮函数名: key_set()函数功能: 按键设置函数输入: 无输出: 无*data_change(); / 调用数据变换

37、子程序 key_menu=1;while (key_menu=1) / 菜单键按下时key_read(); / 按键函数if (Trg=2) / 如果确定键按下t1_count=0; key_datadd+;/ 如果超过合法值,则if (key_datadd>=5)清零,(合法值为 0-4 )if (key_password=0) /密码设置标志result1=qian*1000+bai*100+shi*10+ge; / 保存设置结果if(result=result1)/ 如果输入密码与设置密码相同in_led=1;/ 关闭密码输入指示灯result1=0; / 输入密码清零t1_cou

38、nt=0;key_password=1;/ 设置密码标志password_count=0;/ 验证密码计数清零count=0;/ 密码错误计数清零door_out=1;/ 打开门锁elsecount+;/密码输入错误计数加一result1=0; / 输入密码清零alarm=0; / 短时间报警提示密码错误Delay();Delay();Delay();Delay();Delay();Delay();Delay();Delay(); alarm=1;if(count>=3)/ 如果密码输出错误次数超过三次,则报警并锁定键盘 in_led=1; / 关闭密码输入指示灯key_lock=1;/

39、 键盘锁定alarm=0; / 报警产生else / 设置密码password_count+;if (password_count=1)设置密码result2=qian*1000+bai*100+shi*10+ge; /else if(password_count>=2)result3=qian*1000+bai*100+shi*10+ge; / 设置密码if (result2=result3)in_led=1; / 关 闭 密 码输入指示灯password_led=0; / 打 开密码设置成功指示灯result=result2; / 设置密码成功 password_count=0;ke

40、y_menu=0; / 设置完毕,跳出设置循环 key_datadd=0;else if (Trg=4) / 如果增加键按下t1_count=0;if (key_datadd=4) /调整个位ge+;if (ge>9) / 如果超过范围,清零ge=0;else if(key_datadd=3) / 调整十位 shi+;if (shi>9) / 如果超过范围,清零 shi=0;else if(key_datadd=2) / 调整白位 bai+;if (bai>9) / 如果超过范围,清零 bai=0;else if(key_datadd=1) / 调整千位 qian+;if (

41、qian>9) / 如果超过范围,清零 qian=0;else if (Trg=8) / 如果减小键按下t1_count=0;if (key_datadd=4) / 调整个位ge-;if (ge<0) / 如果超过范围,ge=9;else if(key_datadd=3) / 调整十位shi-;if (shi<0) / 如果超过范围,shi=9;else if(key_datadd=2) / 调整白位bai-;if (bai<0) / 如果超过范围,bai=9;else if(key_datadd=1) / 调整千位qian-;if (qian<0) / 如果超过

42、范围,qian=9;for (i=0;i<5;i+)DigDisplay(key_datadd);/* 函数名 : key()* 函数功能 : 按键函数1. 无按键按下时,P仁 Oxff ; ReadData = 0 ; Trg = 0 ; Co nt = 0 ;2. P1.0 按下时,P1.0=0;ReadData = 0x01 ; Trg = 0x01(Trg 只会在这个 时候对应位的值为1,其它时候都为0); Cont = 0x01 ;3. P1.0 长按住时,P1.0=0;ReadData = 0x01 ; Trg = 0x00 ; Cont =0x01 ;如果是 P1.1 按键

43、那么 Trg,Cont 对应值都为 2;如果是 P1.2 按键那么Trg,Cont 对应值都为 4;是 P1.3 按键那么 Trg,Cont 对应值都为 8* 输入 :无* 输出: 无*void key_read() /按键设置函数输出无unsigned char temp = P1|0xf0; /将临时变量 temp 的高四位置一,低四位不变un sig ned char ReadData = tempPxff;/ 1Trg = ReadData & (ReadData A Con t);/ 2Cont = ReadData; /* 函 数 名 : data_change* 函数功能

44、 : 数据转换* 输入:无* 输出:无*/void data_change()ge=(result1%100)%10;shi=(result1%100)/10;bai=(result1%1000)/100; qian=result1/1000;5.1.5 显示函数/* 函 数 名 : DigDisplay* 函数功能 : 使用数码管显示* 输 入 : 无*/void DigDisplay(unsigned char x)if (x=0)LS1=0;LS2=1;LS3=1;LS4=1; / 显示第 0 位 GPIO_DIG=DIG_CODEqian;Delay(); / 延时LS1=1;LS2=

45、0;LS3=1;LS4=1; / 显示第 1 位GPIO_DIG=DIG_CODEbai;Delay(); / 延时LS1=1;LS2=1;LS3=0;LS4=1; / 显示第 2 位GPIO_DIG=DIG_CODEshi;Delay(); / 延时LS1=1;LS2=1;LS3=1;LS4=0; / 显示第 3 位 GPIO_DIG=DIG_CODEge;Delay(); / 延时else if (x=4)LS1=0;LS2=1;LS3=1;LS4=1; / 显示第 0 位 GPIO_DIG=DIG_CODEqian;Delay(); / 延时LS1=1;LS2=0;LS3=1;LS4=1

46、; / 显示第 1 位GPIO_DIG=DIG_CODEbai;Delay(); / 延时LS1=1;LS2=1;LS3=0;LS4=1; / 显示第 2 位GPIO_DIG=DIG_CODEshi;Delay(); / 延时LS1=1;LS2=1;LS3=1;LS4=0; / 显示第 3 位 GPIO_DIG=DIG_CODEge;Delay(); / 延时Delay(); / 延时Delay(); / 延时Delay(); / 延时Delay(); / 延时Delay(); / 延时Delay(); / 延时Delay(); / 延时else if (x=3)LS1=0;LS2=1;LS3

47、=1;LS4=1; / 显示第 0 位 GPIO_DIG=DIG_CODEqian;Delay(); / 延时LS1=1;LS2=0;LS3=1;LS4=1; / 显示第 1 位 GPIO_DIG=DIG_CODEbai;Delay(); / 延时LS1=1;LS2=1;LS3=0;LS4=1; / 显示第 2 位GPIO_DIG=DIG_CODEshi;Delay();/延时Delay();/延时Delay();/延时Delay();/延时Delay();/延时Delay();/延时Delay(); /延时Delay(); /延时LS1=1;LS2=1;LS3=1;LS4=0; / 显示第

48、3 位 GPIO_DIG=DIG_CODEge;Delay(); / 延时else if (x=2)LS1=0;LS2=1;LS3=1;LS4=1; / 显示第 0 位 GPIO_DIG=DIG_CODEqian;Delay(); / 延时LS1=1;LS2=0;LS3=1;LS4=1; / 显示第 1 位PIO_DIG=DIG_CODEbai;Delay();/延时Delay();/延时Delay();/延时Delay();/延时Delay();/延时Delay();/延时Delay();/延时Delay();/延时LS1=1;LS2=1;LS3=0;LS4=1; / 显示第 2 位GPIO_DIG=DIG_CODEshi;Delay(); / 延时LS1=1;LS2=1;LS3=1;LS4=0; / 显示第 3 位 GPIO_DIG=DIG_CODEge;Delay(); / 延时else if (x=1)LS1=0;LS2=1;LS3=1;LS4=1; /显示第 0 位5.2GPIO_DIG=DIG_CODEDelay();/延时Delay();/延时Delay();/延时Delay();/延时Delay();/延时Delay();/延时Delay();/延时Delay();/延时LS1=1;LS2=0;LS3=1;LS4=1

温馨提示

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

评论

0/150

提交评论