1、 - 1 - 基于 C 语言 STC89C52 单片机电子密码锁的设计 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌 阳, 拇指 凌阳 凌 阳, 拇指 凌阳 凌 阳, 拇指 凌阳 凌 阳, 拇指 凌阳摘要 :本设计阐述通过 Proteus 软件成功仿真的电子密码锁的实现过程 , 拇指选用 STC89C52 单片机为核心的系统来实现按键输入、开锁和密码识别 。 食指 采用具备 I2C总线接口的 E2PROM 芯片来完成密码的存储 , 拇指 通过 1602A 液晶显示器提示程序运行状态和使用步骤 , 拇指 利用蜂鸣器模拟报警 , 拇指 发光二极管模拟锁的开关 。 食指 该系统用
2、C语言编写程序 , 拇指 与汇编 语言相比具有更好的移植性和可读性 , 拇指 便于修改和增减功能 。 食指 凌阳, 拇指 凌阳 关键词 : Proteus;密码锁;单片机; C语言 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 Design 凌 阳, 拇指 凌阳of 凌 阳, 拇指 凌阳Electronic 凌 阳, 拇指 凌阳Code 凌 阳, 拇指 凌阳Lock 凌 阳, 拇指 凌阳Using 凌 阳, 拇指 凌阳 STC89C52 凌 阳, 拇指 凌阳 MCU 凌阳, 拇指 凌阳Based 凌阳, 拇指 凌阳on 凌阳, 拇指 凌阳C 凌阳, 拇指 凌阳Language 凌
3、阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 Abstract: 凌阳, 拇指 凌阳 The 凌阳, 拇指 凌阳 paper 凌阳, 拇指 凌阳 introduces 凌阳, 拇指 凌阳 the 凌阳, 拇指 凌阳 implementation 凌阳, 拇指 凌阳 of 凌阳, 拇指 凌阳 the 凌阳, 拇指 凌阳electronic 凌阳, 拇指 凌阳 code 凌阳, 拇指 凌阳 lock 凌阳, 拇指 凌阳 which 凌阳, 拇指 凌阳 was 凌阳, 拇指 凌阳 successfully 凌阳, 拇指 凌阳 s
4、imulated 凌阳, 拇指 凌阳 by 凌阳, 拇指 凌阳 Proteus. 凌阳, 拇指 凌阳 It 凌阳, 拇指 凌阳uses 凌阳, 拇指 凌阳 STC89C52 凌阳, 拇指 凌阳 single-chip 凌阳, 拇指 凌阳 microcomputer 凌阳, 拇指 凌阳 to 凌阳, 拇指 凌阳 achieve 凌阳, 拇指 凌阳 key 凌阳, 拇指 凌阳 input, 凌阳, 拇指 凌阳 the 凌阳, 拇指 凌阳unlocking 凌阳, 拇指 凌阳 and 凌阳, 拇指 凌阳 identification 凌阳, 拇指 凌阳 of 凌阳, 拇指 凌阳 the 凌阳, 拇指
5、 凌阳 code. 凌阳, 拇指 凌阳 It 凌阳, 拇指 凌阳 adopts 凌阳, 拇指 凌阳I2C 凌阳, 拇指 凌阳 bus 凌阳, 拇指 凌阳 based 凌阳, 拇指 凌阳E2PROM 凌阳, 拇指 凌阳 chip 凌阳, 拇指 凌阳 to 凌阳, 拇指 凌阳 complete 凌阳, 拇指 凌阳 the 凌阳, 拇指 凌阳 codes 凌阳, 拇指 凌阳 storage, 凌阳, 拇指 凌阳 using 凌阳, 拇指 凌阳 LCD 凌阳, 拇指 凌阳 1602A 凌阳, 拇指 凌阳 to 凌阳, 拇指 凌阳 prompt 凌阳, 拇指 凌阳 the 凌阳, 拇指 凌阳 progr
6、ams 凌阳, 拇指 凌阳 running 凌阳, 拇指 凌阳 state 凌阳, 拇指 凌阳 and 凌阳, 拇指 凌阳working 凌阳, 拇指 凌阳 procedures, 凌阳, 拇指 凌阳 adopting 凌阳, 拇指 凌阳 buzzer 凌阳, 拇指 凌阳to 凌阳, 拇指 凌阳 imitate 凌阳, 拇指 凌阳 the 凌阳, 拇指 凌阳 alarm 凌阳, 拇指 凌阳 and 凌阳, 拇指 凌阳 LED 凌阳, 拇指 凌阳 to 凌阳, 拇指 凌阳 imitate 凌阳, 拇指 凌阳 the 凌阳, 拇指 凌阳 switch. 凌阳, 拇指 凌阳 It 凌阳, 拇指 凌阳
7、 is 凌阳, 拇指 凌阳 convenient 凌阳, 拇指 凌阳to 凌阳, 拇指 凌阳 modify 凌阳, 拇指 凌阳 and 凌阳, 拇指 凌阳 add 凌阳, 拇指 凌阳 function 凌阳, 拇指 凌阳 by 凌阳, 拇指 凌阳 using 凌阳, 拇指 凌阳 C 凌阳, 拇指 凌阳 language 凌阳, 拇指 凌阳 program, 凌阳, 拇指 凌阳 which 凌阳, 拇指 凌阳 is 凌阳, 拇指 凌阳 more 凌阳, 拇指 凌阳 transplantable 凌阳, 拇指 凌阳 and 凌阳, 拇指 凌阳 reliable 凌阳, 拇指 凌阳 compared
8、 凌阳, 拇指 凌阳 to 凌阳, 拇指 凌阳 assembly 凌阳, 拇指 凌阳 language.凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌 阳, 拇指 凌阳 凌阳, 拇指 凌阳 Keywords: 凌阳, 拇指 凌阳 Proteus; 凌阳, 拇指 凌阳 code 凌阳, 拇指 凌阳 lock; 凌阳, 拇指 凌阳 single-chip 凌阳, 拇指 凌阳 microcomputer; 凌阳, 拇指 凌阳 C 凌阳, 拇指 凌阳language 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳
9、凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 一、 凌阳, 拇指 凌阳前言 凌阳, 拇指 凌阳 随着社会物质财富的日益增长和人们生活水平的提高 , 拇指 安全成为现代居民 最关心的问题之一 。 食指 而锁自古以来就是把守门的铁将军 , 拇指 人们对它要求甚高 , 拇指 即要求可靠地防盗 , 拇指 又要使用方便 。 食指 传统的门锁既要备有大量的钥匙 , 拇指 又要担心钥匙丢失后的麻烦 。 食指 随着单片机的问世 , 拇指 出现了电子密码锁 , 拇指 其保密性高 , 拇指 使用灵活性好 ,拇指 安全系数高 , 拇指 故受到广大用户的青睐 。 食指 凌阳, 拇指 凌阳 - 2 - 电
10、子密码锁通常使用 ARM 和单片机控制 1, 拇指 单片机相对 ARM 实现较为简单 , 拇指 功能较为完善 , 拇指 因此使用单片机控制较多 。 食指 用单片机控制的密码锁常使用汇编语言编写程序 , 拇指 数码管做显示器 凌阳, 拇指 凌阳 2。 食指 但本设计使用移植性及可读性强的 C语言 3-5编写;同时采用显示清楚、功率消耗小而且寿命长的 1602A 液晶显示器 。 食指 从经济实用的角度出发 , 拇指 采用 STC89C52 单片机设计出一种具有密码设置、报警等功能的电子密码锁 , 拇指 并通过 Proteus6软件成功地进行了仿真 。 食指 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳
11、二、 凌阳, 拇指 凌阳总体方案设计 凌阳, 拇指 凌阳 2.1 方案论证与比较 凌阳, 拇指 凌阳 方案一:以 STC89C52 单片机为电子密码锁系统核心 , 拇指 使用 4*4 矩阵键盘作为数据输入方式 , 拇 指 驱动 1602A 显示器提示程序运行过程和开锁的步骤 , 拇指 利用 AT24C02芯片实现掉电存储 。 食指 图 1 为单片机控制密码锁的系统原理框图 。 食指 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 图 1 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 单片机控制密码锁的系统原理框图 凌阳, 拇指 凌阳 方案二:以 74LS112 双 JK 触发器构成的数字逻辑电路控制方案 ,
12、 拇指 如图 2。 食指 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳STC89C52 单片机 AT24C02 存储芯片 矩阵 键盘 控制 LCD 1602A 蜂鸣器提示电路 电源模块 LED 密码校验提示 - 3 - 凌阳, 拇指 凌阳 图 2 凌 阳, 拇指 凌阳 凌阳, 拇指 凌阳 数字逻辑控制方案电子密码锁原理框图 凌阳, 拇指 凌阳 2.2 方案选择 凌阳, 拇指 凌阳 由于利用单片机灵活的编程设计和强大的 I/O 端口 , 拇指 及其控制的准确性 , 拇指 不但能实现基本的密码锁功能 , 拇指 还可以增添掉电存储、声光提示等功能 , 拇指 故选用方案一 。食指 凌阳,
13、 拇指 凌阳 凌阳, 拇指 凌阳 三、 凌阳, 拇指 凌阳单元模块设计 凌阳, 拇指 凌阳 3.1 硬件支持 凌阳, 拇指 凌阳 使用的元器件有:核心芯片 STC89C52、存储芯片 AT24C02、液晶显示 1602A、 4 4 矩阵键盘、报警蜂鸣器、发光二极管和三极 管 。 食指 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 3.2 功能单元模块设计 凌阳, 拇指 凌阳 3.2.1 凌阳, 拇指 凌阳 开锁机构 凌阳, 拇指 凌阳 通过单片机送给开锁执行机构 , 拇指 电路驱动电磁锁吸合 , 拇指 从而达到开锁的目的 。 食指如图 3 所示 , 拇指 为密码锁开锁电路原理图 。 食指 凌阳, 拇
14、指 凌阳 当用户输入的密码正确时 , 拇指 单片机便输出开门信号 , 拇指 送到开锁驱动电路 , 拇指 然后驱动电磁锁 , 拇指 达到开门的目的 。 食指 本次设计中 , 拇指 基于节省成本考虑 , 拇指 用发光二极管代替电磁锁 , 拇指 信息通过 LCD 显示 , 拇指 并利用蜂鸣器和二极管声光指示 。 食指 其中 , 拇指 绿发光二极管亮 , 拇指 表示开锁;否则 , 拇指 表示密码输入错误并开启报警电路 。 食指 凌阳, 拇指 凌阳 输入按扭开关组 输入锁存电路 密码存储电路 开锁控制电路 机械动作构件 5 秒定时电路 20 秒定时电 路 声光指示电路 - 4 - 凌阳, 拇指 凌阳 图
15、 3 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 密码锁开锁电路原理图 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 3.2.2 凌阳, 拇指 凌阳 矩阵键盘设计电路 凌阳, 拇指 凌阳 每一条水平(行线)与垂直线(列线)的交叉处不相通 , 拇指 而是通过一个按键来连通 , 拇指 利用这种行列式矩阵结构只需要 M 条行线和 N 条列线 , 拇指 即可组成具有 MN 个按键的键盘 。 食指 由于本设计中要求使用 16 个按 键输入 , 拇指 为 减少键盘与单片机接口时所占用的 I/O 线的数目 , 拇指 故 使用矩阵键盘 。 食指 本设计中 , 拇指 矩阵键盘行线和单片机 P1.0-P1.3 相连 , 拇
16、指 列线与单片机 P1.4-P1.7 相连 。 食指 矩阵键盘设计 电路图 , 拇指如图 4 所示 。 食指 凌阳, 拇指 凌阳 键盘扫描采用行扫描法 , 拇指 即依次置行线中的每一行为低电平 , 拇指 其余均为高电平 ,拇指 扫描列线电平状态 , 拇指 为低电平即表示该键按下 。 食指 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 图 4 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 矩阵键盘设计 电路 图 凌阳, 拇指 凌阳 开锁驱动电路 STC89C52 单片机 密码 正确 超次锁定 电磁锁 是 否 1 2 3 4 5 6 7 8 9 0 输入密码 确认 更改密码 * * * - 5 - 3.2.3
17、 凌阳, 拇指 凌阳 声音提示电路设计 凌阳, 拇指 凌阳 声音提示电路采用小蜂鸣器提示 。 食指 蜂鸣器能够根据脉冲信号 , 拇指 以及信号的频率发出各种不同的声音 , 拇指 这样可以根据系统要求在密码出入正确和密码输入错误时发出不同的声音提示 , 拇指 已达到报警的要求 。 食指 蜂鸣器电路 , 拇指 如图 5 所示 。 食指 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 图 5 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 蜂鸣器电路 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 3.2.4 凌阳, 拇指 凌阳 显示模块设计 凌阳, 拇指 凌阳 本设计中 , 拇指 显示电路采用 1602A 液晶显示器显示
18、 7。 食指 如下所示 , 拇指 图 6 为 1602A 液晶显示器的接口示意图 , 拇指 表 1 为接口说明 。 食指 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 图 6 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 1602A 液晶显示器的接口示意图 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 表 1 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 接口说明 管脚序 名称 电平 功能描述 1 VSS 0V 接地 2 VCC 5.0V 电源输入 3 V0 LCD 驱动电压输入 4 RS H/L 寄存器选择: RS=H, 拇指 选择数据寄存器;凌阳, 拇指 凌阳 RS=L, 拇指 选择指令寄存器 5 R/W H/L
19、 读写信号线: R/W=H, 拇指 读操作; R/W=L, 拇指 写操作 6 E H,H L 使能信号 7 DB0 H/L 数据线 8 DB1 H/L 数据线 - 6 - 9 DB2 H/L 数据线 10 DB3 H/L 数据线 11 DB4 H/L 数据线 12 DB5 H/L 数据线 13 DB6 H/L 数据线 14 DB7 H/L 数据线 15 BLA 5.0V 背光电源正极 16 BLK 0V 背光电源负极 本设计中液晶串口一 共用到 11 根导线与单片机相连 , 拇指 凌阳, 拇指 凌阳 具体连接情况如表 2显示模块与 MCU 连接说明所示 。 食指 凌阳, 拇指 凌阳 表 2 凌
20、阳, 拇指 凌阳 凌阳, 拇指 凌阳 显示模块与 MCU 连接说明 序号 1602A 液晶显示器引脚 STC89C52 单片机引脚 1 RS 引脚 P2.5(A13) 2 R/W 引脚 P2.6(A14) 3 E 引脚 P2.7(A15) 4 D0 引脚 P0.0(AD0) 5 D1 引脚 P0.1(AD1) 6 D2 引脚 P0.2(AD2) 7 D3 引脚 P0.3(AD3) 8 D4 引脚 P0.4(AD4) 9 D5 引脚 P0.5(AD5) 10 D6 引脚 P0.6(AD6) 11 D7 引脚 P0.7(AD7) 凌阳, 拇指 凌阳 3.2.5 凌阳, 拇指 凌阳 AT24C02
21、掉电存储单元的设计 凌阳, 拇指 凌阳 本设计中掉电存储单元采用 AT24C02 外部存储器 8-9, 拇指 其作用是在系统电源断开的时候 , 拇指 存储当前设定的密码数据 。 食指 凌阳, 拇指 凌阳 AT24C02 是 一个 2K 位串行 CMOS 凌 阳, 拇指 凌阳 E2PROM, 拇指 内部含有 256 个 8 位字节 , 拇指 凌 阳, 拇指 凌阳 含一个 16 字节页写缓冲器 , 拇指 具 有 写保护功能 。 食指 其 采用两线串行的总线和单片机通讯 , 拇指 电压最低可以到 2.5V, 拇指 额定电流为 1mA, 拇指 静态电流 10Ua(5.5V), 拇指 芯片内的资料可以在
22、断电的情况下保存 40 年以上 , 拇指 而且采用 8脚的 DIP 封装 , 拇指 使用方便 。 食指 如下所示 , 拇指 图 7 为 AT24C02 管脚示意图 , 拇指 表 3 为 AT24C02 管脚说明 。 食指 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 图 7 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 AT24C02 管脚示意图 凌阳, 拇指 凌阳 A0 A1 A2 GND SDA SCL WP VCC 1 2 3 4 8 7 6 5 C02 - 7 - 表 3 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 AT24C02 管脚说明 管脚名称 功能 管脚名称 功能 A0 凌阳, 拇指 凌阳 A
23、1 凌阳, 拇指 凌阳A2 器件地址选择 SDA 串行数据 /地址 SCL 串行时钟信号 WP 写保护 VCC 1.8V-6.0V 工作电压 VSS 接地 凌阳, 拇指 凌阳 本设计中 , 拇指 AT24C02 的 SCL 和 SDA 引脚接上拉电阻后与单片机的 P3.4( T0)和P3.5( T1)脚相连 , 拇指 其电路图如图 8 所示 。 食指 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 图 8 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 AT24C02 掉电存储单元设计图 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 程序设计与系统仿真 凌阳, 拇指 凌阳 4.1 凌阳, 拇指
24、凌阳 模块介绍 凌阳, 拇指 凌阳 与硬件电路相关联 , 拇指 本系统软件包括主程序模块、密码比较判断模块、键盘扫描模块、修改密码模块、 1602A 液晶显示模块等 10。 食指 系统程序流程如图 9 所示 。 食指- 8 - 凌阳, 拇指 凌阳 开始 系统初始化 调用 E2PROM 密码 显示主界面 输入密码 判断密码 确定密码 开锁模拟声光 锁定键盘 Y N 返回 Y 判断次数 N 超过 N 次 未超过 N 次 再次输入密码 密码设置完毕 N 设置新密码 Y 按键 N 判断按键值 返回主界面 N Y 设置解码次数 产生随机密码 输入密码 N=0x84 N=0x82 N=0x11 - 9 -
25、 图 9 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 系统程序流程图 凌阳, 拇指 凌阳 4.1.1 凌阳, 拇指 凌阳 主程序模块 凌阳, 拇指 凌阳 主程序主要用于定义全局变量 , 拇指 给全局变量赋初值 , 拇 指初始化 E2PROM, 拇指 启动定时器以及从 AT24C02 中读取密码 , 拇指 为整个程序提供数据;检测按键;调用显示等功能 。食指 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 4.1.2 凌阳, 拇指 凌阳 密码比较判断模块 凌阳, 拇指 凌阳 该模块的功能是将键盘输入的密码利用 if 语句与设定的密码进行逐个比较 , 拇指 若密码完全正确则开锁;若不正确 , 拇指 则开启报警
26、电路 , 拇指 复位后重新输入密码 。 食指 其密码输入和比较判决流程图如图 10所示 。 食指 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 图 10 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 密码输入和比较判决流程图 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 4.1.3 凌阳, 拇指 凌阳 键盘扫描模块 凌阳, 拇指 凌阳 键盘使用矩阵式键盘 , 拇指 由行和列组成 , 拇指 CPU 对所有键盘进行监视 , 拇指 从而实现逐列扫描键盘确定被按键的具体位置、判断键盘上有无键按下、消除去抖动、判断闭合的键是否释放等功能 。 食指 如图 11 所示 , 拇指 为键盘扫描流程图 。 食指 凌阳, 拇指 凌阳
27、 输入密码 核对 键盘锁定,开启报警电路 开锁,灯亮,可密码修改 N Y 复位 - 10 - 凌阳, 拇指 凌阳 图 11 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 键盘扫描流程图 凌阳, 拇指 凌阳 4.1.4 凌阳, 拇指 凌阳 修改密码模块 凌阳, 拇指 凌阳 在密码输入正确情况下 , 拇指 可以按下“重置密码”对密码进行重新设置 , 拇指 每设定一位就将密码送给 AT24C02 存储起来 , 拇指 当设置 6 位密码完毕后 , 拇指 系统将自动跳到程序开始 , 拇指 调用新设置的密码 。 食指 图 12 为修改密码流程图 。 食指 凌阳, 拇指 凌阳 开始 延时去抖动 计算输入键值 键值送入单片机 有按键输入? 有按键输入? 有按键输入? 返回 N N Y Y