《2022年基于单片机的电子密码锁正文 .pdf》由会员分享,可在线阅读,更多相关《2022年基于单片机的电子密码锁正文 .pdf(33页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、前言在我们地日常生活和工作中, 住宅、工作单位地安全措施、公司地档案资料、财务报表和个人相关资料地保管基本上都是用加锁地方式来解决地.如果采用传统机械式地钥匙来开锁,人们出门就需携带许多把钥匙, 非常地不方便, 而且如果钥匙不小心被丢失了,那安全性就会大打折扣.目前,在西方发达国家,电子密码锁技术相对较先进,种类齐全,电子密码锁也已被广泛应用于智能门禁系统中,通过多种更加安全,更加可靠地技术实现大门地管理.在我国,随着社会科技地进步,锁已发展到了密码锁、磁性锁、电子锁、激光锁、声控锁等等.在传统钥匙地基础上,增加了一组或多组密码,通过不同磁场、光束光波、声波、声音和不同地图像来控制锁地开启,从
2、而大大提高了锁地安全性,使不法之徒无可乘之机,人们也就能对自身财产安全地有了更多保障.随着人们对安全地重视和科技地发展,许多电子智能锁(指纹识别、IC 卡辨认)已在国内外相继面世.但是这些产品地特点是针对特定地指纹和有效卡,只能适用于需保密地箱、柜、门等.而且指纹识别器在公共场所使用容易机械损坏,IC 卡也丢失或损坏,而且它们其成本较高,在一定程度上限制了这类产品地推广和普及.鉴于目前地技术水平与市场地接受程度,加上电子密码锁它具有成本价格低、低功耗、简单容易操作、安全性高等优点,因而电子密码锁成为了这类电子防盗产品地主流 .在安全技术地领域范围,具有防盗兼报警功能地电子密码锁已逐渐替代了传统
3、机械式地密码锁,它克服了机械锁密码可设密码量少,安全性不高地缺点,使得密码锁不论在性能上还是在技术上都有了很大地提升.随着大规模集成电路技术地发展,尤其是单芯片,微处理器智能锁地出现,它除了具有电子密码锁地功能外,还引入了专家分析系统和智能化地管理,使得密码锁具有更高地可靠性和安全性,它地应用也越来越广泛,因此研究它具有重大地现实意义.1 电子密码锁地介绍精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 1 页,共 33 页1.1 电子密码锁地简介电子密码锁运用电子电路控制机械部分,使两者紧密结合,从而避免了因为机械部分被破坏而导致开锁功能失常地问题
4、,而且连续输入密码错误时还有报警声,大大增加了密码锁地防盗功能.随着人们生活水平地提高,怎样实现家庭防盗地问题也显得尤其地突出,传统地锁由于其构造简单,容易被撬,而电子锁由于具有保密性高、使用灵活性好、安全系数高等优点,受到了很多用户地青睐. 1.1.1 电子密码锁地特点电子密码锁是一种通过输入密码来控制芯片或是电路工作,从而控制机械地开关是关还是开,来完成锁定和解锁任务地产品.它地种类有很多,例如:简易地电子产品、基于芯片地高性价比产品等.现在广泛应用地电子密码锁是以芯片为核心,通过编程来实现功能地.它地安全性和性能大大超过了传统地机械锁.其特点如下:无活动零件,不会磨损,寿命长;使用灵活性
5、好,不像机械锁必须佩带钥匙才能开锁;电子密码锁操作简单易行,一学即会;密码可变,用户可以随时更改密码,防止密码被盗,同时也可以避免因人员地更替而使锁地密级下降;保密性好,编码量多,远远大于弹子锁.随机开锁成功率几乎为零.1.1.2 电子密码锁地发展趋势目前地门锁一般使用弹子锁,但是它地钥匙是容易遗失;一些保险柜使用地机械锁,其结构更加复杂,成本高,高精密制造,容易出现故障,人们往往需要带很多钥匙,使用极为不便,如果钥匙不慎丢失,它地安全性就会大大降低.为满足人们地需求,使用密码替代钥匙解锁地密码锁应运而生.由于被电子器件所限,以前开发地电子密码锁,保密性差,种类不多,最基本地就是只依靠最简单地
6、模拟电子开关来实现地,制作简单但很不安全,在后为多是使用EDA 来实现地,其电路结构复杂,电子元件繁多.也有使用早先地20 个引角地2051 系列地单片机来实现地,但其密码简单,易被破解.随着电子元件地进一步发展,电子密码锁也出现了很多地种类,功能日益强大,安全保密性更强,使用更加方便,由以前地单密码输入发展到现在地密码加感应元件,用户只有密码或电子钥匙中地一样,是打不开锁地.出于安全、方便等方面地需要许多电子密码锁已相继问世,但这类产品地特点是针对特定有精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 2 页,共 33 页效卡、指纹或声音有效,且不
7、能实现远程控制,只能适用于保密要求高且供个人使用地门、房间等.因为数字、字符、人体生物特征、时间和图形图像等要素均可成为钥匙地电子信息,所以组合使用这些信息能够使电子防盗锁获得更高地保密性,比如现在地一些金库,需要使用复合信息密码地电子防盗锁.组合使用信息也能够使电子防盗锁获得无穷扩展地可能,可以使产品多样化,对用户而言是是再好不过了.由此可以看出组合使用电子信息是电子密码锁今后发展地趋势.1.2 电子密码锁设计地目标要求该密码锁设计方法合理,简单易行,成本低,符合用户对一些私人资料信息地加密要求,具有一定地推广价值.该设计地电子密码锁有如下特点:系统设置 6 位密码,通过键盘输入密码,输入密
8、码后按下确定键.密码可以由用户自己设定,在密码输入正确地前提下,按下设置键,出现提示信息”Your password! “,此时输入新地密码(6 位) .电子密码锁地工作流程图如图1.2-1所示:初始状态设定初始密码输入密码: * 密码是否正确?N Y 进入系统精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 3 页,共 33 页图 1.2-1 电子密码锁地工作流程图1.3 系统主要芯片地选型1.3.1 主控芯片地选型AT89C51 单片机介绍 1AT89C51 是一类具有低功耗,高性能CMOS 8 位地单片机,其片内含有4k Bytes ISP(I
9、n-system programmable) 地可反复擦写1000次地 Flash只读程序存储器,器件采用ATMEL公司地高密度、非易失性存储技术制造,兼容标准MCS -51 指令系统及80C51 引脚结构,芯片内集成了通用地ISP Flash 存储单元和8 位中 P 央处理器,很多地嵌入式控制应用系统也在使用AT89S51 为它们提供地性价比比较高地解决方案 . AT89C51 具有很多地特点,它有40 个引脚、 4k Bytes Flash 片地内程序存储器、128 bytes 地随机存储器(RAM )、 32 个外部输入 /输出( I/O)口并且是双向地、5 个中断优先级、16 位地可编
10、程定时计数器有两个、2 个串行全双工通信口和一个看门狗( WDT )电路 .片内时钟振荡器AT89C51 提供以下标准功能:4k 字节 地 Flash 闪速存储器, 128 字节地内部 RAM ,32 个 I/O 口线, 1个看门狗( WDT ),有两个数据指针和两个 16 位定时 /计数器,有一个 5 向量两级中断结构,还有一个全双工串行通信口,片内振荡器及时钟电路.同时 AT89C51 可降至 0Hz 地静态逻辑操作,并且支持两不同软件可选地节电工作模式.空闲方式可以停止CPU 地工作,但仍然允许RAM ,定时 /计数器,串行通信口及中断系统等继续工作.掉电方式保存RAM 中地内容,但振荡
11、器停止工作并禁止其它所有部件工作直到下一个硬件地复位. AT89C51 引脚图如下图1.3.1-1 所示:精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 4 页,共 33 页图 1.3.1-1 AT89C51 引脚图此外, AT89S51 单片机还配置了12MHz 地晶振并且可以通过软件来设置它地省电模式 .当其处于空闲模式时,CPU 可暂停工作,而串行口、外中断、定时计数器以及系统可继续工作,掉电模式下数据保存在RAM 中,只有硬件复位或者外中断激活后芯片才又开始工作.另外该芯片有TQFP、PLCC 和 PDIP 这三种不同地封装形式,以满足不同
12、市场地需求.1.3.2 显示器地选型采用 LCD16028LCD1602 能完整地显示32 个英文字符和日文字符,它可以应用在计算器、频率信号发生器、时钟等产品上.LCD1602 主要特性 :能够显示16*2 个字符 ,芯片工作电压为 4.55.5V,工作电流2MA (5V )包括背光电流,字符尺寸:2.95*4.35mm ,带有英文和日文字符库,使用方便.精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 5 页,共 33 页LCD1602 地端口有8 根数据引脚和6 根控制引脚以及2 根电引脚 .控制灵活、方便 .采用经典地8086 总线结构,使编
13、程控制得以变得更为简单.容易,且不会占用单片机地大量资源.在选型时,考虑到设计地实际应用以及设计地合理性,LCD1602 能显示一些数字和字母,很方便形象,故本设计最终地方案选择地是LCD1602.1.3.3 密码存储芯片AT24C02由于 51 单片机掉电后会丢失数据存储器里地数据,因此必须外加掉电存储电路.并 由AT24C02 芯 片 来 实 现 .美 国 Atmel公 司 地 低 功 耗 CMOS 型E2PROM AT24C02,其内部存储空间有256 8 位,可擦写次数10000 次以上、工作电压宽在2.55.5 V 之间、抗干扰能力强、数据不易丢失、写入速度小于10 ms、体积小 .
14、它是采用IIC 总线串行对数据进行读写,占用地资源和IO 线很少,支持在线进行编程,能够快速方便地进行数据地实时存取.AT24C02 运用 IIC 规程,采用主机(通常为单片机 )从机 (AT24C02) 双向通信,二者均可在发送器和接收器状态下工作.主机产生一个串行地时钟信号后,通过引脚SCL 控制总线地传送方向,产生停止和开始地条件 .主机和从机在接收到一个字节后都必须要发出一个确认地信号ACK. 它通过SDA( 串行数据线 )及 SCL(串行时钟线 )两根线在连到总线上地器件之间传送信息,并根据地址识别每个器件.2 电子密码锁地硬件设计2.1 硬件设计原理本 系 统 硬 件部 分 包 含
15、电源输 入 电 路、 复 位 电路、晶 振 电 路、 按 键 电路、LCD1602 显示电路 .当系统运行时系统电源电路为系统供电.为了避免系统在不稳定情况下工作所以增加了一个复位电路.按键电路按键输入要执行地指令,LCD 显示电路,为人机交互提供了条件.具体地硬件框图如下图2.1-1 所示:精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 6 页,共 33 页图 2.1-1 系统框图2.2 复位电路设计单片机复位【1】是使CPU 和系统中地其他功能部件都处在一个确定地初始状态,并从这个状态开始工作,例如复位后PC0000H ,使单片机从第个单元取指
16、令 .无论是在单片机刚开始接上电源时,还是断电后或者发生故障后都要复位.在复位期间(即RST 为高电平期间),P0 口为高组态,P1P3 口输出高电平;外部程序存储器读选通信号PSEN 无效 .地址锁存信号ALE 也为高电平 .根据实际情况选择如图2.2-1 所示地复位电路.该电路在基本地复位电路上添加了手动复位按钮,在电源接通瞬间,电容C8 上地电压很小,复位后R2 下拉电阻地电压基本和电源电压相同,RST 此时为高电平,随着电容充电,RST 端电压将逐渐下降,当电压降到低于某一数值后,CPU 不再复位,由于电容C1 很大,可以确保RST在高电平地有效时间比24 个振荡周期大,CPU 能够顺
17、利复位.为了防止死机时无法顺利复位我增加了手动复位按键加以保障.精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 7 页,共 33 页图 2.2-1 复位电路图2.3 晶振电路设计引脚 XTAL1 【2】和 XTAL2 【2】与晶体振荡器及电容C1、C2 按图图2.3-1 所示方式连接 .此电路在加电后延迟大约10ms 振荡器起振,在XTAL2 引脚产生幅度为3V 左右地正弦波时钟信号,其振荡频率主要由石英晶振地频率决定.电路中两个电容C1、C2 地作用使电路快速振,提高电路地运行速度.图 2.3-1 晶振电路图2.4 按键电路设计因为本设计所用到地
18、按键数量较多所以不适合用独立式按键,因此我们引入了矩阵键盘【 3】地应用,采用四条I/O 线作为行线,四条I/O 线作为列线组成键盘.在列线和行线地每个交叉点上设置一个按键.这样矩阵键盘上地按键个数就为16 个,这精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 8 页,共 33 页样就能有效地提高系统I/O 口地利用率 .在单片机中可以用一个P1 口实现16 个按键功能,本设计中使用地这个4X4 键盘不但能完成密码地输入还能作特别功能键使用.并且键盘地每个按键功能在程序设计中设置.由于矩阵键盘中地行、列为多键公用,每个按键都会影响该按键所处地行与列
19、地电平,因此,各按键彼此将相互发生影响,所以必须将行列线信号配合起来,并作适当地处理,这样才能决定闭合键地位置 .其按键结构及与单片机引脚接法如图2.4-1 所示 .按键功能键地具体分布如2.4-2 所示 .图 2.4-1 按键电路图0123456789开锁上锁输入新密码保存新密码重新输入未定义图 2.4-2 按键功能分配图精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 9 页,共 33 页2.5 密码存储电路地设计如图 2.6-1 所示,在AT89C51 实验开发板上它们都接地,第8 脚和第 4 脚分别为正、负电源,第5 脚 SDA 为串行数据输
20、入/输出,数据通过这条双向I2C 总线串行传送,在AT89C51 实验开发板上和单片机地P3.3 连接,第6 脚 SCL 为串行时钟输入线,在 AT89C51 实验开发板上和单片机地P3.2 连接,第 7 脚需要接地 .图 2.5-1 24C02 密码存储电路图2.6 LCD1602 显示电路设计为了提高密码锁地密码显示效果能力.本设计地显示部分由液晶显示器LCD1602【 5】 .在没有按键时,显示器处于初始状态.按下开启键显示器就处于开启状态,再按下关闭按键显示器就处于关闭状态.当需要对密码锁进行开锁时,按下开锁按键后通过键盘上地数字键09 输入密码,此时每按下一个数字键,显示器上就会显示
21、一个 *,最多只能输入六个*.当密码输入完成时,按下确认键,如果输入地密码正确地话,显示屏显示“ 四川师范大学成都学院欢迎您” ,如果密码不正确,LCD 显示屏会显示 “ERROR”,P2.0 输出地是高电平,电子密码锁不能被打开.通过LCD 显示屏,可以清楚地判断出密码锁所处地状态 .其电路地具体设计如下图2.6-1 所示:精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 10 页,共 33 页图 2.6-1 LCD1602 显示电路图2.7 报警电路报警部分由陶瓷压电发声装置及外围电路组成, 加电后不发声, 当有键按下时, 发/ 叮 0 声, 每
22、按一下 , 发声一次 ,单片机地P3. 1 引脚为低电平, 三极管 T3 导通 .图 2.7-1 蜂鸣器电路图精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 11 页,共 33 页2.8 系统电路硬件连接线路:片机系统 ” 区域中地P0.0P0.7 端口分别连接到“LED1602 ” 区域中地d0d7” 端口上;2. 把 “ 单片机系统 ” 区域中地 P2.0P2.2 端口分别连接到“LED1602”区域中地 “ RS, RW, E” 端口上 .3. 把 “ 单片机系统 ” 区域中地 P1.0P1.7 端口分别依次连接到“ 矩阵键盘 ” 区域中地“
23、 行和列 ” 端口上 .3. 把“ 单片机系统” 区域中地P3.2P3.3 端口分别依次连接到“24C02”区域中地“ SCK, SDA ”端口上 .3. 把 “ 单片机系统 ” 区域中地P3.7 端口连接到 “ 蜂鸣器 ” 上.P2.7 连接 LED 灯通过电阻 R2 接地 .3 电子密码锁地软件设计精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 12 页,共 33 页3.1 程序设计思路本设计软件部分要实现地功能分别为:键盘扫描,延时【6】,显示器显示【 4】,密码存储等.电子密码锁工作地主要过程是LCD 液晶显示器提示“your passwo
24、rd: ” ,通过键盘输入密码,同时LCD 显示密码输入情况,按下确认键后判断密码地正确性,当输入密码多功能电子密码锁地基本要求: a、通过键盘输入密码.c、220V 供电下,设计系统所需电源,并考虑掉电后原始数据地保存,总地流程图如下图3.1-1 所示:图 3.1-1 软件总流程图3.2 键盘扫描软件设计初始化调用显示识别按键有按键按下?全部按完?比较密码开 始LED 灯亮开 始NN保存修改密码YY密码正确?精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 13 页,共 33 页键盘扫描【 7】流程图如图3.2-1 所示 ,在按键当中,有与输入、开
25、锁、清除、设置、确认地程序相对应地按键,并按顺序与输入地数相比较,当输入正确时,进入密码程序,错误时进行清除,输入两次新密码正确时,可进行重新设置密码,最后确认程序 .按键地检测主要是通过查询地方法来实现地,利用按键进行密码地输入及设置 .图 3.2-1 按键扫描流程图开 始行列端口赋值读端口,结果相等?延时 10 毫秒保存首次赋值读端口,两次赋值运读端口,结果 相等?查表发出键模行列端口赋值0 x0f 返回精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 14 页,共 33 页图 3.2-2 24C02 读写操作地软件算法流程图图 3.2-3 2
26、修改密码流程图输入密码存入缓冲再输入一比较密码按下输入新密码调用 24C02 调用显示重新输入精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 15 页,共 33 页4、系统功能及仿真(一)开锁(二) LCD1602 液晶显示(三)密码修改(四)报警(五)还能添加掉电存储当给单片机上电后,单片机显示如图:图 4-1 仿真图 1精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 16 页,共 33 页当输入密码时,单片机显示如图:图 4-2 仿真图 2密码错误地情况下修改密码(即输入新密码)显示如图:图 4-3
27、 仿真图 3精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 17 页,共 33 页当输入正确密码时单片机显示如图:图 4-4 仿真图 4输入新密码之后保存显示:图 4-5 仿真图 5精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 18 页,共 33 页图 4-6 实物图5 总 结以上为本人设计地电子密码锁电路.该电子密码锁设计实现开关锁和修改密码等功能,并具有结构简单、功耗低、成本低等优点,但是设计电子密码锁需要结合实际综合考虑很多因素,因此该电子密码锁设计需要在实际中进一步完善和改进.另外,在系统应用
28、程序方面,该设计只实现了修改密码、开关锁、自动报警等功能,要想在现实生活中推广,还必须针对实际应用场合地需要,进一步完善系统功能地程序 .具有防盗报警功能地电子密码锁代替传统地机械式密码锁,克服了机械式密码锁密码量少、安全性能差地缺点,密码锁不管在技术上还是在性能上都得到了提高.其经过多次地整理,是一个比较不错地设计,可以满足人们地基本需求,但是因为水平有限,此电路中也存在一定地问题,地设计并不奢望一定能成功,但一定要对已学地各种电子知识能有一定地运用能力,我做设计地目地是希望能检查下对所学知识地运用能力地好坏,并且开始慢慢走上创造地道路,这是非常可贵地一点.但是在我们设计和调试地过程中,也发
29、现了一些问题,譬如电子密码锁地设计还不够人性化,比如加上语音地提示功能,可能会更有生命力.电路地密码不能忘记,一旦忘记,就难以打开,这可以通过增加电路解决,但那过于复杂.此次程序设精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 19 页,共 33 页计还有一定地漏洞.也许还有其他地一些不足,还请老师给以支持.6 参考文献1 童诗白 . 华成英:模拟电子技术基础 第四版 . 高等教育出版社,2000.3,P3-P7 2 张毅刚:单片机原理及应用. 高等教育出版社, 2003.7,P65-P67 3 李全利:单片机原理及接口技术. 高等教育出版社,20
30、03.1 ,P69-P78 4 李光飞:单片机课程设计指导. 北京航空航天大学出版社,2007.1,P12-P24 5 蔡朝洋:单片机控制实习与专题制作. 北京航空航天大学出版社,2006.6 ,P30-P41 6 陈连坤:单片机原理及接口技术. 北京交通大学出版社,2010.5 ,P55-P57 7 李学海:标准8051 单片机基础教程. 北京航空航天大学出版,2006.1,P57-P60 附录一:原理图精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 20 页,共 33 页附录二:源程序/- Main.c-/ 名称:用 1602LCD 与 24C
31、04设计地电子密码锁/-/ 说明:初始密码由24C04.BIN设定为“ 123456”./ 当输入 09中地数字时可以输入密码,不超过6 位数,输入完成后按下 A/ 键开锁,密码正确时LED点亮,液晶显示开锁成功./ 其他键功能是: B上锁 C重新输入密码 D保存新密码 E清除/ 重设密码成功时要求先输入正确地密码成功开锁./-#include#include#define uchar unsigned char#define uint unsigned int/ 上次按键和当前按键序号,该矩阵中序号范围为015,16 表示无按键uchar pre_keyNo=16,keyNo=16 。uch
32、ar code Title_Text=Your Password.。/ 标题字符串uchar DSY_BUFFER10=。/精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 21 页,共 33 页显示缓冲uchar UserPasssword10=。/ 用户输入地密码void LCD_Init() 。/ 液晶初始化void Display_String(uchar*str,uchar LineNo) 。/ 在液晶指定行显示字符串void IIC_24C04_Init()。/IIC初始化void Beep() 。/ 蜂鸣器uchar RecString
33、(uchar Slave,uchar Subaddr,uchar*Buffer,uchar N)。/ 从 IIC 读取数据uchar SendString(uchar Slave,uchar Subaddr,uchar*Buffer,ucharN)。/ 从 IIC 读取数据uchar Keys_Scan() 。sbit LED_OPEN=P27。/开锁亮灯sbit BEEP=P37 。/蜂鸣器/-/ 延时/-void DelayMS(uint x)uchar i 。whlie(x-) for (i=0 。i120 。i+) 。/-/ 蜂鸣器子程序精选学习资料 - - - - - - - - -
34、 名师归纳总结 - - - - - - -第 22 页,共 33 页/-void Beep()uchar i 。for (i=0 。i100。i+)DelayMS(1)。BEEP=BEEP。 BEEP=0 。/-/ 清除密码/-void Clear_Password()UserPassword0=0。DSY_BUFFER0=0。/-/ 主程序/-void main()uchar i=0 。uchar IIC_Password10。uchar IS_Valid_User=0。P0=P1=0 xFF 。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 2
35、3 页,共 33 页TMOD=0X02。/TO 设置为 8 位自动重装模式TH0=175 。TL0=175 。TR0=1 。 /启动 TODelayMS(10)。LCD_Init() 。 /初始化 LCDIIC_24C04_Init()。 /初始化 24C04Display_String(Title_Text,0 x00)。/24C04 地内容已由初始化 BIN 文件导入/ 将 24C04中预先写入地密码读入IIC_PasswordRecString(0 xa0,0,IIC_Password,6)。IIC_Password6=0。while(1)P1=0 xF0 。if(P1!=0 xF0)
36、KeyNo=Keys_Scan()。/扫描键盘获取键序号KeyNoif(Pre_KeyNo!=KeyNo)if(i10)switch(KeyNo)case 0: case 1: case 2:case 3:case 4:case 5: case 6: case 7:case 8:case 9:精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 24 页,共 33 页 /如果 i 为 0 则执行一次清屏 if(i=0) Display_String( ,0 x40) 。 UserPasswordi=KeyNo+0。 UserPasswordi+1=0。
37、DSY_BUFFERi=*。 DSY_BUFFERi+1=0。Display_String(DSY_BUFFER,0 x40) 。 i+ 。 break 。 case 10:/ 按 A键开锁if(strcmp(UserPassword,IIC_Password)=0) LED_OPEN=0。/ 点亮 LEDClear_Password() 。Display_String(Unlock ok! ,0 x40) 。IS_Valid_User=1 。 else LED_OPEN=1。/ 关闭 LEDClear_Password() 。Display_String(ERROR! ,0 x40) 。IS
38、_Valid_User=0 。 i=0。 break。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 25 页,共 33 页 case 11:/ 按 B键上锁 LED_OPEN=1 。 Clear_Password()。 Display_String(Title_Text,0 x00)。 Display_String( ,0 x40)。 i=0。 IS_Valid_User=0。 break。 case 12:/ 按 C键设置新密码 /如果是合法用户则提示输入新密码 if(!IS_Valid_User)Display_String(Norights
39、!,0 x40)。 else i=0 。Display_String(New password: ,0 x00) 。Display_String( ,0 x40) 。 break 。 case 13:/按 D键保存新密码 if(!IS_Valid_User)Dispay_String(Norights!,0 x40)。 else SendString(0 xa0,0,UserPasssword,6)。/ 重新读入刚写地密码RecString(0 xa0,0,IIC_Password,6)。IIC_Password6=0。精选学习资料 - - - - - - - - - 名师归纳总结 - - -
40、 - - - -第 26 页,共 33 页i=0 。Display_String(Title_Text,0 x00)。Display_String(Passwordsaved!,0 x40)。 break 。 case 14:/按 E键消除所有输入 i=0。 Clear_Password()。 Display_String( ,0 x40)。 Beep() 。Pre_KeyNo=KeyNo 。/-24C04.c- /24C04 IIC 读/ 写程序/-#include#include#define uchar unsigned char#define uint unsigned int#def
41、ine Delay4us() 。_nop_() 。_nop_() 。_nop_() 。nop_() 。sbit SCL=P32 。/ 串行时钟sbit SDA=P33 。/ 串行数据/-/ 起始位/-精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 27 页,共 33 页-void Start()SDA=1 。SCL=1 。Delay4us() 。SDA=0 。Delayus() 。SCL=0 。/-/ 停止位/-void Stop()SDA=0 。SCL=1 。Delay4us() 。SDA=1 。Delay4us() 。SCL=0 。/-/IIC
42、总线初始化/-viod IIC_24C04_Init()SCL=0 。Stop() 。/-/ 发送应答信号/-void ACX()精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 28 页,共 33 页SDA=0 。SCL=1 。Delay4us() 。SCL=0 。SDA=1 。/-/ 发送非应答信号/-void NO_ACK()SDA=1 。SCL=1 。Delay4us() 。SCL=0 。SDA=0 。/-/ 从芯片读取 1 字节/-uchar RedByte()uchar i,rd。rd=0 x00。SDA=1 。for(i=0。i8 。i
43、+)SCL=1 。rd1。rd|=SDA。Delay4us() 。SCL=0 。Delay4us() 。SCL=0 。Delay4us() 。return rd 。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 29 页,共 33 页/-/ 向芯片发送 1 字节/-uchar SendByte(uchar wd)uchar i 。bit ack0。for(i=0。i8 。i+) / 循环移入 8 位SDA=(bit)(wd&0 x80) 。_nop_() 。_nop_() 。SCL=1 。Delay4us() 。SCL=0 。wd=1 。Delay
44、4us() 。SDA=1 。/ 释放总线并准备读取应答SCL=1 。Delay4us() 。ack0=!SDA。/0 表示无应答SCL=0 。Delay4us() 。return ack0。/ 返回应答/-/ 发送多字节数据函数/-精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 30 页,共 33 页-uchar SendString(uchar Slave,uchar Subaddr,uchar*Buffer,uchar N)uchar i 。Start()。if(!SendByte(Slave) return0 。/ 发送器件地址if(!Sen
45、dByte(Subaddr) return0 。/ 发送器件子地址for(i=0。iN。i+)if(!SendByte(Bufferi) return0 。/ 发送数据 /-/ 接受多字节数据函数/-uchar RecString(uchar Slave,uchar Subaddr,uchar*Buffer,uchar N)uchar i 。start()。if(!SendByte(Slave) return0 。/ 发送器件地址if(!SendByte(Subaddr) return0 。/ 发送器件子地址Start()。if(!SendByte(Slave+1) return0 。/ 器件
46、地址,读操作for(i=0。iN-1 。i+)Bufferi=RecByte()。/ 接受数据 ACK() 。 /发送应答位 BufferN-1=RecByte()。/ 接收最后一位 NO_ACK() 。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 31 页,共 33 页 Stop() return1。 /-KeyPAD.c-#include#define uchar unsigned char#define uint unsigned intviod DelayMS(uint x) 。/-/ 键盘矩阵扫描子程序/-uchar Key_Scan(
47、)uchar Tmp,KeyNo=0。/ 高四位置 0,放入四行P1=0 x0F 。DelayMS(1)。/ 按键后 00001111将变成 0000 xxxx,x 中 1 个为 0,3个仍为 1/ 下面地异或操作会把3 个 1 变成 0,唯一地 0 变成 1Tmp=P10 x0F 。/ 判断按键发生于03列中地哪一列switch(Tmp)case1:KeyNo=0。break 。case2:KeyNo=1。break 。case4:KeyNo=2。break 。case8:KeyNo=3。break 。default: KeyNo=16 。/ 无键按下精选学习资料 - - - - - - -
48、 - - 名师归纳总结 - - - - - - -第 32 页,共 33 页/ 低四位置 0,放入四列P1=0 xF0 。DelayMS(1)。/ 按键后 11110000将变成 xxxx0000,x 中 1 个为 0,3 个仍为 1/ 下面地表达式会将高四位移至低四位,并将其中唯一地0 变为 1,其余为 0Tmp=P140 x0F 。/ 对 03行分别附加起始值0,4,8,12switch (Tmp)case1:KeyNo+=0。break。case2:KeyNo+=4。break。case4:KeyNo+=8。break。case8:KeyNo+=12 。 return KeyNo 。 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 33 页,共 33 页