




已阅读5页,还剩24页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一一 设计目的设计目的 在日常的生活和工作中 住宅与部门的安全防范 单位的文件档案 财务 报表以及一些个人资料的保存多以加锁的办法来解决 若使用传统的机械式钥 匙开锁 人们常需要携带多把钥匙 使用极不方便 且钥匙丢失后安全性即大 打折扣 随着科学技术的不断发展 人们对日常生活中的安全保险器件的要求 越来越高 为了满足人们对锁的使用要求 增加其安全性 用密码代替钥匙的 密码锁应运而生 密码锁具有安全性高 成本低 功耗低 易操作等优点 在安全技术防范领域 具有防盗报警功能的电子密码锁逐渐代替传统的机 械式密码锁 克服了机械式密码锁密码量少 安全性能差的缺点 使密码锁无 论在技术上还是在性能上都大大提高一步 随着大规模集成电路技术的发展 特别是单片机的问世 出现了带微处理器的只能密码锁 它除了具有电子密码 锁的功能外 还引入了智能化管理 专家分析系统等功能 从而使密码锁具有 很高的安全性 可靠性 应用日益广泛 本设计采用单片机为主控芯片 结合外围电路 组成电子密码锁 用户想 要打开锁 必先通过提供的键盘输入正确的密码才能将锁打开 密码输入错误 就有提示 为了提高安全性 当密码输入错误次将报警 密码可以由用户自己 修改设定 锁开后才能修改密码 修改密码前必须再次输入密码 在输入新密 码时候需要二次确认 以防止误操作 二 二 设计要求和方案选择设计要求和方案选择 1 方案 用 AT89C52 设计的多功能密码锁 以单片机作为微控制器 可以实 现基于以上优点 按键有效指示 输入错误 控制开锁 错误报警 密码修 改等功能 工作稳定可靠 保密性高 实用性强 2 电子密码锁总体设计 三 三 硬件部分硬件部分 AT89C52 键盘输入 复位电路 密码存储 晶振电路 电源输入 显示电路 报警电路 开锁电路 AT89C52 简介 单片机 AT89C52 简介 AT89C52 是美国 ATMEL 公司生产的低电压 高性能 CMOS 8 位单片机 片内含 4K bytes 的可反复擦写的只读程序存储器 EPROM 和 128bytes 的随机存取数据 序存器 RAM 器件采用 ATMEL 公司的高密度 非易失性存储技术生产 兼容标 准 MCS 51 指令系统 片内置通用 8 位中央处理器 CPU 和 FLASH 存储单元 AT89C52 单片机为许多嵌入式控制系统提供了 一种灵活行高且价廉的方案 主要特性 与 MCS 51 兼容 4K 字节可编程 FLASH 存储器 寿命 1000 写 擦循环 全静态工作 0Hz 24KHz 三级程序存储器保密锁定 128 8 位内部 RAM 32 条可编程 I O 线 两个 16 位定时器 计数器 5 个中断源 可编程串行通道 低功耗的闲置和掉电模式 片内振荡器和时钟电路 1 总电路图 2 键盘电路 AT89C52 按键与家庭电话式的按键方式 3 复位电路 4 晶振电路 5 显示电路 显示容量芯片工作电压工作电流字符尺寸 16 2 个字符 4 5 5 5V2 0mA 5v 3 95 4 35mm 时刻显示输入输出的内容以及操作过程 6 报警电路 当输入密码错误次数大于等于 3 次时 会发出声响报警 7 开锁电路 四 四 软件设计软件设计 1 程序设计流程图 开始 输入密码 正确 开锁 判断按键 上锁键 上锁 修改密码键 输入新密码 修改密码 结束 2 程序代码 include include define LCM Data P0 define uchar unsigned char define uint unsignedint define w 6 定义密码位数 sbit lcd1602 rs P2 5 sbit lcd1602 rw P2 6 sbit lcd1602 en P2 7 sbitScl P3 4 24C02 串行时钟 sbitSda P3 5 24C02 串行数据 sbit ALAM P2 1 报警 sbit KEY P2 0 开锁 sbitopen led P2 2 开锁指示灯 bit operation 0 操作标志位 bit pass 0 密码正确标志 bit ReInputEn 0 重置输入充许标志 bit s3 keydown 0 3 秒按键标志位 bit key disable 0 锁定键盘标志 unsigned char countt0 second t0 中断计数器 秒计数器 void Delay5Ms void unsigned char code a 0 xFE 0 xFD 0 xFB 0 xF7 控盘扫描控制表 unsigned char code b 0123456789 unsigned char code start line password unsigned char code name Coded Lock 显示名 称 unsigned char code Correct correct 输入正 确 unsigned char code Error error 输入错 误 unsigned char code codepass pass unsigned char code LockOpen open OPEN unsigned char code SetNew SetNewWordEnable unsigned char code Input input INPUT unsigned char code ResetOK ResetPasswordOK unsigned char code initword Init password unsigned char code Er try error try again unsigned char code again input again unsigned char InputData 6 输入密码暂存区 unsigned char CurrentPassword 6 1 3 1 4 2 0 当前密码值 unsigned char TempPassword 6 unsigned char N 0 密码输入位数记数 unsigned char ErrorCont 错误次数计数 unsigned char CorrectCont 正确输入计数 unsigned char ReInputCont 重新输入计数 unsigned char code initpassword 6 0 0 0 0 0 0 5ms 延时 void Delay5Ms void unsignedintTempCyc 5552 while TempCyc 400ms 延时 void Delay400Ms void unsigned char TempCycA 5 unsignedintTempCycB while TempCycA TempCycB 7269 while TempCycB 24C02 void mDelay uint t 延时 uchari while t for i 0 i 125 i void Nop void 空操作 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 应答位 voidAck void Sda 0 Nop Scl 1 Nop Scl 0 反向应答位 voidNoAck void Sda 1 Nop Scl 1 Nop Scl 0 发送数据子程序 Data 为要求发送的数据 void Send uchar Data ucharBitCounter 8 uchar temp do temp Data Scl 0 Nop if temp else Sda 0 Scl 1 temp Data 1 Data temp BitCounter while BitCounter Scl 0 读一字节的数据 并返回该字节值 uchar Read void uchar temp 0 uchar temp1 0 ucharBitCounter 8 Sda 1 do Scl 0 Nop Scl 1 Nop if Sda temp temp 0 x01 else temp temp if BitCounter 1 temp1 temp 1 temp temp1 BitCounter while BitCounter return temp voidWrToROM uchar Data ucharAddress ucharNum uchari uchar PData PData Data for i 0 i Num i Start Send 0 xa0 Ack Send Address i Ack Send PData i Ack Stop mDelay 20 voidRdFromROM uchar Data ucharAddress ucharNum uchari uchar PData PData Data for i 0 i0 x for y 110 y 0 y 写指令 write 1602com uchar com 液晶写入指令函数 lcd1602 rs 0 数据 指令选择置为指令 lcd1602 rw 0 读写选择置为写 P0 com 送入数据 delay 1 lcd1602 en 1 拉高使能端 为制造有效的下降沿做准备 delay 1 lcd1602 en 0 en 由高变低 产生下降沿 液晶执行命令 写数据 write 1602dat uchardat 液晶写入数据函数 lcd1602 rs 1 数据 指令选择置为数据 lcd1602 rw 0 读写选择置为写 P0 dat 送入数据 delay 1 lcd1602 en 1 en 置高电平 为制造下降沿做准备 delay 1 lcd1602 en 0 en 由高变低 产生下降沿 液晶执行命令 初始化 voidlcd init void write 1602com 0 x38 设置液晶工作模式 意思 16 2 行显示 5 7 点 阵 8 位数据 write 1602com 0 x0c 开显示不显示光标 write 1602com 0 x06 整屏不移动 光标自动右移 write 1602com 0 x01 清显示 将按键值编码为数值 unsigned char coding unsigned char m unsigned char k switch m case 0 x18 k 1 break case 0 x28 k 2 break case 0 x48 k 3 break case 0 x88 k A break case 0 x14 k 4 break case 0 x24 k 5 break case 0 x44 k 6 break case 0 x84 k B break case 0 x12 k 7 break case 0 x22 k 8 break case 0 x42 k 9 break case 0 x82 k C break case 0 x11 k break case 0 x21 k 0 break case 0 x41 k break case 0 x81 k D break return k 按键检测并返回按键值 unsigned char keynum void unsigned char row col i P1 0 xf0 if P1 Delay5Ms if P1 确定行线 i 0 P1 a i 精确定位 while i 4 if P1 确定列线 break 已定位后提前退出 else i P1 a i else return 0 while P1 return row col 行线与列线组合后返回 else return 0 无键按下时返回 0 一声提示音 表示有效输入 voidOneAlam void ALAM 0 Delay5Ms ALAM 1 二声提示音 表示操作成功 voidTwoAlam void ALAM 0 Delay5Ms ALAM 1 Delay5Ms ALAM 0 Delay5Ms ALAM 1 三声提示音 表示错误 voidThreeAlam void ALAM 0 Delay5Ms ALAM 1 Delay5Ms ALAM 0 Delay5Ms ALAM 1 Delay5Ms ALAM 0 Delay5Ms ALAM 1 显示输入的 N 个数字 用 H 代替以便隐藏 voidDisplayOne void DisplayOneChar 9 N 1 write 1602com yi 5 N write 1602dat 显示提示输入 voidDisplayChar void unsigned char i if pass 1 DisplayListChar 0 1 LockOpen write 1602com er for i 0 i 16 i write 1602dat LockOpen i else if N 0 DisplayListChar 0 1 Error write 1602com er for i 0 i 16 i write 1602dat Error i else DisplayListChar 0 1 start line write 1602com er for i 0 i 16 i write 1602dat start line i voidDisplayInput void unsigned char i if CorrectCont 1 DisplayListChar 0 0 Input write 1602com er for i 0 i 16 i write 1602dat Input i 重置密码 voidResetPassword void unsigned char i unsigned char j if pass 0 pass 0 DisplayChar ThreeAlam else if ReInputEn 1 if N 6 ReInputCont if ReInputCont 2 for i 0 i 6 if TempPassword i InputData i 将两次输入 的新密码作对比 i else DisplayListChar 0 1 Error write 1602com er for j 0 j 16 j write 1602dat Error j ThreeAlam 错误提示 pass 0 ReInputEn 0 关闭重置功能 ReInputCont 0 DisplayChar break if i 6 DisplayListChar 0 1 ResetOK write 1602com er for j 0 j 16 j write 1602dat ResetOK j TwoAlam 操作成功提示 WrToROM TempPassword 0 6 将新密码写入 24C02 存储 ReInputEn 0 ReInputCont 0 CorrectCont 0 else OneAlam DisplayListChar 0 1 again 显示再次输 入一次 write 1602com er for j 0 j 16 j write 1602dat again j for i 0 i 6 i TempPassword i InputData i 将第一次输入的数 据暂存起来 N 0 输入数据位数计数器清零 输入密码错误超过三过 报警并锁死键盘 voidAlam KeyUnable void P1 0 x00 ALAM ALAM Delay5Ms 取消所有操作 void Cancel void unsigned char i unsigned char j DisplayListChar 0 1 start line write 1602com er for j 0 j 16 j write 1602dat start line j TwoAlam 提示音 for i 0 i 6 i InputData i 0 KEY 1 关闭锁 ALAM 1 报警关 operation 0 操作标志位清零 pass 0 密码正确标志清零 ReInputEn 0 重置输入充许标志清零 ErrorCont 0 密码错误输入次数清零 CorrectCont 0 密码正确输入次数清零 ReInputCont 0 重置密码输入次数清零 open led 1 s3 keydown 0 key disable 0 N 0 输入位数计数器清零 确认键 并通过相应标志位执行相应功能 void Ensure void unsigned char i j RdFromROM CurrentPassword 0 6 从 24C02 里读出存储密 码 if N 6 if ReInputEn 0 重置密码功能未开启 for i 0 i 6 if CurrentPassword i InputData i i else ErrorCont if ErrorCont 3 错误输入计数达三次时 报警并锁定 键盘 write 1602com er for i 0 i 16 i write 1602dat Error i do Alam KeyUnable while 1 else TR0 1 开启定时 key disable 1 锁定键盘 pass 0 break if i 6 CorrectCont if CorrectCont 1 正确输入计数 当只有一次正确 输入时 开锁 DisplayListChar 0 1 LockOpen write 1602com er for j 0 j 16 j write 1602dat LockOpen j TwoAlam 操作成功提示音 KEY 0 开锁 pass 1 置正确标志位 TR0 1 开启定时 open led 0 开锁指示灯亮 for j 0 j 6 j 将输入清除 InputData i 0 else 当两次正确输入时 开启重 置密码功能 DisplayListChar 0 1 SetNew write 1602com er for j 0 j 16 j write 1602dat SetNew j TwoAlam 操作成功提示 ReInputEn 1 允许重置密码输入 CorrectCont 0 正确计数器清零 else 当第一次使用或忘记密码时可以用 131420 对其 密码初始化 if InputData 0 1 强制将初始密码写入 24C02 存储 DisplayListChar 0 1 initword 显示初始化 密码 write 1602com er for j 0 j 16 j write 1602dat initword j TwoAlam Delay400Ms TwoAlam N 0 else DisplayListChar 0 1 Error write 1602com er for j 0 j 16 j write 1602dat Error j ThreeAlam 错误提示音 pass 0 else 当已经开启重置密码功能时 而按下 开锁键 DisplayListChar 0 1 Er try write 1602com er for j 0 j 16 j write 1602dat Er try j ThreeAlam else DisplayListChar 0 1 Error write 1602com er for j 0 j 16 j write 1602dat Error j ThreeAlam 错误提示音 pass 0 N 0 将输入数据计数器清零 为下一次输入 作准备 operation 1 主函数 void main void unsigned char KEY2 NUM M unsigned char i j P1 0 xFF TMOD 0 x11 TL0 0 xB0 TH0 0 x3C EA 1 ET0 1 TR0 0 Delay400Ms 启动等待 等 LCM 讲入工作状态 lcd init LCD 初始化 write 1602com yi 日历显示固定符号从第一行第 0 个位置之后开始显 示 for i 0 i 16 i write 1602dat name i 向液晶屏写日历显示的固定符号部分 write 1602com er 时间显示固定符号写入位置 从第 2 个位置后开始 显示 for i 0 i 16 i write 1602dat start line i 写显示时间固定符号 两个冒号 write 1602com er 9 设置光标位置 write 1602com 0 x0f 设置光标为闪烁 Delay5Ms 延时片刻 可不要 N 0 初始化数据 输入位数 while 1 if key disable 1 Alam KeyUnable else ALAM 1 关报警 KEY2 keynum if KEY2 0 if key disable 1 second 0 else NUM coding KEY2 switch NUM case A break case B break case C break case D ResetPassword break 重新设置密码 case Cancel break 取消当前输入 case Ensure break 确认键 default DisplayListChar 0 1 Input write 1602com er for i 0 i 16 i write 1602dat Input i operation 0 if N 6 当输入的密码少于 6 位时 接受输入并保存 大于 6 位时则无效 OneAlam 按键提示音 DisplayOneChar 6 N 1 for j 0 j N j write 1602com er 6 j write 1602dat b NUM Delay5Ms Delay5Ms write 1602com er 6 j write 1602dat InputData N NUM N else 输入 数据位数大于 6 后 忽略输入 OneAlam for j 0 j N j write 1602com er 6 j write 1602dat N 6 break 中断服务函数 void time0 int void interrupt 1 TL0 0 xB0 TH0 0 x3C TR0 1 countt0 if countt0 20 countt0 0 second if pass 1 if second 1 open led 1 关指示灯 TR0 0 关定时器 TL0 0 xB0 TH0 0 x3C second 0 else if second 3 TR0 0 second 0 key disable 0 s3 keydown 0 TL0 0 xB0 TH0 0 x3C else TR0 1 五五 调试及运行结果调试及运行结果 1 使用 keil 生成 hex 文件 2 使用 proteus 仿真 使用 proteus 绘制原理图并将 keil 生成的 hex 程序文件载入到单片机中 初始界面 并且按照指示输入正确的密码 输入密码正确之后显示 OPEN 输入错误的密码 超过三次报警声开启并且不解锁 更改密码功能输入一次密码之后再输入一次密码 按确认键
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农业经济管理责任与工作协调合同
- 吉安市青原区两山发展集团有限公司部分岗位任职要求调整的笔试备考附答案详解(突破训练)
- 商业空间共享使用协议说明
- 农村合作社农村电子商务运营合同
- 教师招聘之《小学教师招聘》考前冲刺模拟题库提供答案解析及参考答案详解(轻巧夺冠)
- 新质生产力:汇聚发展澎湃合力
- 2025年教师招聘之《幼儿教师招聘》测试卷附有答案详解及参考答案详解(黄金题型)
- 招生策划宣传方案模板
- 2025年教师招聘之《幼儿教师招聘》练习题(一)及参考答案详解(黄金题型)
- (正式版)DB15∕T 2664-2022 《苜蓿草捆制作技术规程》
- 搅拌站原材料管理
- HIV初筛实验室工作制度
- T-CNAS 10-2020 成人有创机械通气气道内吸引技术操作
- 《危险货物港口作业重大事故隐患判定标准》知识培训
- 农村废弃物综合利用资源化利用方式与路径
- 脑卒中的识别及预防与处理
- 和田玉知识培训课件下载
- 交互式游戏设计趋势-深度研究
- 2025年中国海洋功能性食品行业全景评估及投资规划建议报告
- 2025-2030年中国铷行业市场规模分析及投资前景研究报告
- 餐饮行业培训合作协议书
评论
0/150
提交评论