1、电子密码锁总体设计方案89资料内容仅供参考,如有不当或者侵权,请联系本人改正或者删除。电子密码锁系统总体设计详细文档题目: 电子密码锁的设计组号: 第八组小组成员: 王新恒( S1 1106) 牛庆渝( S1 ) 于秀玲( S1 1212) 黄志辉( S1 1021) 11月15日目 录第一篇 绪 论1一、 引言11、 编写目的12、 背景介绍1二、 功能需求设计21、 任务和目标22、 功能需求简述2第二篇 设计概述4一、 详细设计方案的选择及设计思路概述41、 设计方案的选择42、 初步设计思路概述5二、 设计方法和技术条件61、 设计原则62、 应用的技术分析63、 设计者当前已具备的技
2、术条件64、 设计重点难点7第三篇 系统总体设计方案确认8一、 单片机模块81、 主要特性82、 主要接口说明8二、 键盘矩阵模块10三、 显示模块11四、 报警模块11五、 电子时钟模块121、 概述122、 引脚介绍13六、 通信传输模块131、 通信传输原理概述132、 电平转换电路14第四篇 系统程序设计16一、 总体程序设计流程161、 程序功能162、 系统程序设计总流程16二、 各个模块系统程序设计流程171、 显示初始化模块程序设计182、 密码比较功能模块程序设计193、 键盘输入模块程序设计214、 电子时钟显示模块程序设计245、 密码修改模块程序266、 报警模块程序设
3、计327、 通信( 虚拟) 模块程序设计33附 录36一、 电路原理图36二、 Proteus仿真图37三、 PCB板图38四、 源程序38第一篇 绪 论一、 引言1、 编写目的编写总体设计说明书的目的是为了说明对密码锁系统总体设计的考虑, 包括程序的基本流程、 输入/输出设计、 模块设计、 运行设计、 硬件的总体设计和系统出错处理设计等, 以便为密码锁的具体设计制作和仿真提供理论基础和指导方向, 主要就是为编写程序提供依据。各个模块的程序编写严格按照该总体设计的初定方案进行。本总体设计说明书详细分析系统的各种需求, 综合小组中各个成员的意见, 为以后的设计规划出一个蓝图, 使以后的工作做到有
4、步骤、 有计划, 而且对今后出现的各种可能情况作出预测和进行初步和适当的处理, 使系统工作进程得以稳步和高效地进行。 2、 背景介绍在日常的生活和工作中, 住宅与部门的安全防范、 单位的文件档案、 财务报表以及一些个人资料的保存多以加锁的办法来解决。若使用传统的机械式钥匙开锁, 人们常需携带多把钥匙, 使用极不方便, 且钥匙丢失后安全性大打折扣。随着科学技术的不断发展, 人们对日常生活中的安全保险器件的要求越来越高。为满足人们对锁的使用要求, 增加其安全性, 用密码代替钥匙的密码锁应运而生。密码锁具有安全性高、 成本低、 功耗低、 易操作等优点。在安全技术防范领域, 具有防盗报警功能的电子密码
5、锁逐渐代替传统的机械式密码锁, 克服了机械式密码锁密码量少、 安全性能差的缺点, 使密码锁无论在技术上还是在性能上都大大提高一步。随着大规模集成电路技术的发展, 特别是单片机的问世, 出现了带微处理器的智能密码锁, 它除具有电子密码锁的功能外, 还引入了智能化管理、 专家分析系统等功能, 从而使密码锁具有很高的安全性、 可靠性, 应用日益广泛。另外, 电子密码锁还具有以下独特的特点: ( 1) 保密性远远大于机械锁, 随机开锁成功率几乎为零; ( 2) 密码可变。 用户能够经常更改密码, 防止密码被盗, 同时也能够避免因人员的更替而使锁的密级下降; ( 3) 误码输入保护。当输入密码多次错误时
6、, 报警系统自动启动; 二、 功能需求设计1、 任务和目标本项目设计一种基于AT89C51单片机控制的电子密码锁, 要求达到以下任务目标: ( 1) 可经过键盘输入密码控制开关的开锁和闭锁; ( 2) 可经过扩展的LCD显示器显示输入的密码; ( 3) 密码能够多次改写和重置; ( 4) 连续三次输入密码错误, 报警装置开始工作, 密码锁进入锁机状态。2、 功能需求简述功能具体阐述1、 密码输入及核对功能l 系统启动后, 经过键盘输入初始密码”111111”, 按下密码输入键进行确认, 密码锁开锁, 之后经过点击输入新密码键, 输入6位新密码, 点击新密码保存键, 新密码保存; l 电子密码锁
7、具有多组密码和管理员超级密码功能; l 如果密码正确, 可进行开锁动作。若密码不正确, 系统将给出提示告知用户已经输入的次数, 若三次错误输入后, 系统自动锁定键盘, 屏蔽所有操作, 并显示”waiting.”; l 系统自动锁定时间为五分钟, 锁定时间过后, 系统提示”in put again”, 此时可重新输入密码, 进行开锁操作; l 保密功能: 每次输入的密码数字, 显示的均是”*”符号; l 当按下开锁键, 系统将输入与密码进行检查核对, 如果正确锁打开, 否则不打开, 并发出报警提示。2、 多组密码设置功能l 在用户设置了一组常见密码基础之上, 能够另外在设置2组备用密码, 以增加
8、多用户使用功能, 满足用户的基本需求; l 在用户丢失或遗忘一组密码后, 能够经过另外的几组备用密码进行开锁并并对密码进行再次修改和设定, 增加了密码锁使用的灵活性; l 能够设置一组超级密码”999999”, 在任何情况下, 凭借超级密码都能够开锁和修改密码。3、 报警功能l 设置密码锁开锁次数为3次, 当输入超过三次还未开锁成功时, 蜂鸣器报警30秒, 而且锁定键盘。十分钟内不能进行任何操作, 等待锁定时间过后, 解除警报, 密码锁恢复输入功能, 提示”in put again”; l 在每一次输入密码后, 系统都会以英文字符的形式给出输入密码正确与否, 若是错误系统会给予警告。4、 个人
9、密码更改功能l 密码能够由用户自己修改设定, 锁打开后才能修改密码, 修改密码之前必须再次输入密码; l 先用初始密码开锁, 在开锁成功后点击”输入新密码”使系统进入修改个人密码状态; l 个人能够随设置新的密码, 设置完成后点击”保存新密码”按键, 新密码设置成功; 此该新密码和以前的密码都能够进行开锁操作; l 此时可输入6位新的个人密码, 点击新密码保存, 密码更改成功。5、 时间显示和计时功能l 系统启动后会自动显示当地的即时时间, 显示方式为: 时-分-秒l 在输入密码时软前后相邻的两个密码符输入时间间隔超过10分钟, 则系统自动放弃本次操作, 返回到重新输入密码阶段6、 通信和数据
10、传输功能l 先用密码开锁, 成功后进入系统l 显示记录: 记录开门时间、 密码类别。l 系统最多能够保存最近的40 条记录, 当记录超过40条时, 每增加一条新记录, 最早的一条旧记录将被覆盖掉。l 每条记录包含如下信息: 时、 分、 秒以及密码类别。第二篇 设计概述一、 详细设计方案的选择及设计思路概述1、 设计方案的选择本次设计的密码锁在理论上能够利用多种设计方法及原理进行设计, 依据设计的简单、 高效、 易于实现等原则, 主要有两种设计方案可供选择, 即: 数字电路控制和以AT89C51为核心的单片机控制两种方案。现在对其两种方案进行可行性对比分析。方案一: 采用数字电路控制。其原理图下
11、图1所示。图1 数字密码锁电路方案电路由两大部分组成: 密码锁电路和备用电源(UPS), 其中设置UPS电源是为了防止因为停电造成的密码锁电路失效, 使用户免遭麻烦。采用数字密码锁电路的好处就是设计简单。用以74LS112双JK触发器构成的数字逻辑电路作为密码锁的核心控制, 共设了9个用户输入键, 其中只有4个是有效的密码按键, 其它的都是干扰按键, 若按下干扰键, 键盘输入电路自动清零, 原先输入的密码无效, 需要重新输入。密码锁电路包含: 键盘输入、 密码修改、 密码检测、 开锁电路、 执行电路、 报警电路、 键盘输入次数锁定电路。方案二: 采用一种是用以AT89C51为核心的单片机控制方
12、案。利用单片机灵活的编程设计和丰富的I/O端口, 及其控制的准确性, 不但能实现基本的密码锁功能, 还能添加多组密码设置、 报警提示等控制功能。其原理如下图2所示。图2 单片机控制方案 密码锁电路包含: 键盘输入、 密码修改、 密码检测、 开锁电路、 执行电路、 报警电路。经过比较以上两种方案, 单片机方案有较大的活动空间, 不但能实现所要求的功能而且能在很大的程度上扩展功能, 而且还能够方便的对系统进行升级, 因此我们采用一种以89C51为核心的单片机控制方案。利用单片机灵活的编程设计和丰富的I/O端口, 及其控制的准确性, 进行密码锁的设计工作以实现基本的密码锁功能。2、 初步设计思路概述
13、对于本次密码锁的初步设计, 首先是要有一定的大概思路。如下图3所示, 本次设计选用单片机开发系统, 以AT89C51单片机为核心, 辅以扩展的键盘以及LCD显示模块组成完整的系统。经过键盘采集输入的信息, 与单片机内的储存值比较, 如果密码正确, 则开锁电路打开; 如果密码错误, 给出错误提示。若连续三次输入密码错误, 蜂鸣器产生蜂鸣音, 而且系统自动锁定键盘; 在以上工作的同时显示电路工作, 同步显示符号”*”代替输入的数值。图3 最初设计思路框图二、 设计方法和技术条件1、 设计原则系统总体设计原则如下分析, 应该尽可能的满足密码锁的功能要求, 包括程序启动功能、 锁的基本功能、 个人密码
14、更改功能、 多组密码设置、 报警功能。首先, 经过键盘采集输入的信息, 与单片机内的储存值比较, 如果密码正确, 则开锁电路运行, 锁被成功打开; 如果三次密码错误, 则报警系统自动进行提示, 蜂鸣器产生蜂鸣音; 在以上工作的同时显示电路工作, 同步显示输入数值。在输入正确密码后, 密码锁开锁, 按输入新密码键, 输入新密码, 按下新密码保存键, 则修改密码成功。要再次开锁则需要输入正确的密码。2、 应用的技术分析本次密码锁功能的实现, 需要使用到以下关键技术: ( 1) 基于AT89C51单片机简单设计及外围扩展电路; ( 2) 键盘输入及单片机间的数据传输; ( 3) LCD显示技术、 动
15、态输出及单片机间的数据传输。( 4) 通信传输协议3、 设计者当前已具备的技术条件在设计密码锁之前, 本组四位成员基本上已经掌握了以下技术: (1)课题组成员都参阅过相关的51单片机开发方面的书籍, 熟悉Altim Designer电路设计, 有一定的电路设计基础; (2)课题组成员王新恒对C语言函数库的调用有一定的了解, 具备C语言程序设计开发经验; (3)课题组成员牛庆渝、 黄志辉熟悉PCB板的制作过程及protuse绘图, 课题组成员于秀玲有一定的文学功底, 有一定的能力撰写课题报告; (4)各个成员都能够熟练的运用仿真软件proteus以及编译软件keil进行仿真实验和调试。(5)对通
16、信协议和传输有一定的了解4、 设计重点难点完成本方案设计的重点和难点有以下几点: (1) C语言程序设计和控制函数的调用; (2) 键盘模块和动态显示工作方式的LCD显示模块的控制; (3) 报警电路的设计; (4) 用Altim Designer软件进行电路图设计; (5) 单片机于PC机的通信传输功能的实现。第三篇 系统总体设计方案确认此次设计基于单片机控制的电子密码锁, 根据任务和相关要求, 结合主要设计条件, 我们的总体方案设计如下: 本系统由单片机系统、 矩阵键盘、 电子时钟、 LCD显示和报警系统等多个模块组成。一、 单片机模块该密码锁设计采用以AT89C51为核心的单片机控制方案
17、。利用单片机灵活的编程设计和丰富的I/O端口, 及其控制的准确性, 进行电子密码锁的设计。不但能实现基本的密码锁功能, 还能添加警报提示。 1 主要特性AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压、 高性能CMOS 8位微处理器。它与MCS-51 兼容, 寿命: 1000写/擦循环, 数据保留时间为 。全静态工作: 0Hz-24Hz 三级程序存储器锁定, 128*8位内部RAM 32可编程I/O线, 两个16位定时器/计数器, 5个中断源可编程串行通道, 低功耗的闲置和掉电模式, 片内振荡器和时钟电路。下图4所示为AT89C51单片机图例: 图4 AT89C51单片机2 主
18、要接口说明VCC: 供电电压。GND: 接地。P0口: P0口为一个8位漏级开路双向I/O口, 能够用于外部程序数据存储器, 它能够被定义为数据/地址的第八位。在FIASH编程时, P0 口作为原码输入口, 当FIASH进行校验时, P0输出原码, 此时P0外部必须被拉高。P1口: P1口是一个内部提供上拉电阻的8位双向I/O口, P1口缓冲器能接收输出4TTL门电流。在FLASH编程和校验时, P1口作为第八位地址接收。 P2口: P2口为一个内部上拉电阻的8位双向I/O口, P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时, P2口输出地址的高八位。在给出地址”1”时, 它利
19、用内部上拉优势, 当对外部八位地址数据存储器进行读写时, P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口: P3口管脚是8个带内部上拉电阻的双向I/O口, 可接收输出4个TTL门电流。当P3口写入”1”后, 它们被内部上拉为高电平, 并用作输入。作为输入, 由于外部下拉为低电平, P3口将输出电流。另外, P3口也可作为AT89C51的一些特殊功能口, 例如串行输入输出口、 外部中断01、 记时器0外部输入、 外部数据存储器读写选通。RST: 复位输入。当振荡器复位器件时, 要保持RST脚两个机器周期的高电平时间。ALE/PROG: 可用作
20、对外部输出的脉冲或用于定时目的。当访问外部存储器时, 地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间, 此引脚用于输入编程脉冲。/PSEN: 外部程序存储器的选通信号。在由外部程序存储器取指期间, 每个机器周期两次/PSEN有效。但在访问外部数据存储器时, 这两次有效的/PSEN信号将不出现。/EA/VPP: 当/EA保持低电平时, 则在此期间外部程序存储器, 不论是否有内部程序存储器。当/EA端保持高电平时, 此间内部程序存储器。 XTAL1: 反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2: 来自反向振荡器的输出。其中, 在该系统设计中, 单片机主要硬件资源的
21、分配如为: P0.0P0.7用于LCD液晶显示作用; P2.6、 P2.7用于蜂鸣器的控制; P2.0用于开锁电路的控制; P1.0P1.7用于键盘电路的控制; P3.3P3.5用于LCD显示模块的控制端口的控制。二、 键盘矩阵模块本次设计的密码锁系统设计采用4*4矩阵键盘, 与P1口相连, 采用扫描法。设有0到9十个数字密码, 一个开锁键、 上锁键, 以及用于修改密码的新密码输入键和新密码保存键, 还有一个用于重新输入密码的重新输入键和一个管理员密码键。本设计就采用行列式键盘, 同时也能减少键盘与单片机接口时所占用的I/O线的数目, 在按键比较多的时候, 一般采用这样方法。一般将按键排列成矩
22、阵形式。在矩阵式键盘中, 每条水平线和垂直线在交叉处不直接连通, 而是经过一个按键加以连接。这样, 一个端口( 如P1口) 就能够构成4*4=16个按键, 比之直接将端口线用于键盘多出了一倍, 而且线数越多, 区别越明显。 键盘矩阵电路如下图5所示: 图5 键盘矩阵电路 表1 矩阵键盘代表的功能表S1-S10数字0-9S11开锁按键S12上锁按键S13输入新密码S14保存新密码S15重新输入S16管理员密码( 切换键) 三、 显示模块此密码锁设计6位密码, 按键后动态显示。开机显示”Your Password.”, 等待密码输入, 输入6位密码, 按开始键后, 密码比较。根据按键次数, 第一位
23、显示器显示第一次按的密码, 第二位显示器显示第二次按的密码, 第三位显示器显示第三次按的密码, 依此第六位显示器显示第六次按的密码。每次输入密码后, 都会有提示音, 提示输入动作被接受。按键完成后按开锁键后, 密码对则执行相关动作, 而且显示器显示”Unlock ok!”,而且会看到指示灯发光; 不正确则显示器显示”ERROR”, 指示灯无任何现象, 系统等待重新输入。当连续输入三次错误后, 会显示”Wait.”,系统会发出报警音, 等待锁定时间十钟后会提示”Input again.”。下图6所示为显示电路原理图: 图6 LCD显示电路四、 报警模块本次设计的密码锁报警系统在当输入密码错误后,
24、 系统报警。下图7给出报警系统电路原理图: 图7 报警模块电路五、 电子时钟模块1、 概述本模块是以AT89C51单片机为控制核心, 具有在线编程功能, 低功耗, 能在3V超低压工作。时钟电路由DS1302提供, 它是一种高性能、 低功耗、 带RAM的实时时钟电路, 它能够对年、 月、 日、 周日、 时、 分、 秒进行计时, 具有闰年补偿功能, 工作电压为2.5V5.5V。采用三线接口与CPU进行同步通信, 并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302 是美国DALLAS公司推出的一种高性能、 低功耗、 带RAM的实时时钟电路, 它能够对年、 月、 日、 周日、 时、
25、分、 秒进行计时, 具有闰年补偿功能, 工作电压为2.5V5.5V。采用三线接口与CPU进行同步通信, 并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个318的用于临时性存放数据的RAM寄存器。DS1302增加了主电源/后备电源双电源引脚, 同时提供了对后备电源进行涓细电流充电的能力。可产生年、 月、 日、 周日、 时、 分、 秒, 具有使用寿命长, 精度高和低功耗等特点, 同时具有掉电自动保存功能; 显示部份由LCD液晶显示屏显示。下图8所示为DS1302电路原理图图: 图8 DS1302电路原理图2、 引脚介绍DS1302的引脚排列,其中Vcc1为后备电源,
26、VCC2为主电源。在主电源关闭的情况下, 也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时, Vcc2给DS1302供电。当Vcc2小于Vcc1时, DS1302由Vcc1供电。X1和X2是振荡源, 外接32.768kHz晶振。RST是复位/片选线, 经过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能: 首先, RST接通控制逻辑, 允许地址/命令序列送入移位寄存器; 其次, RST提供终止单字节或多字节数据的传送手段。当RST为高电平时, 所有的数据传送被初始化, 允许对DS1302进行操作。如果在传送过程中R
27、ST置为低电平, 则会终止此次数据传送, I/O引脚变为高阻态。上电运行时, 在Vcc2.0V之前, RST必须保持低电平。只有在SCLK为低电平时, 才能将RST置为高电平。I/O为串行数据输入输出端(双向), 后面有详细说明。SCLK为时钟输入端。 下图9为DS1302的引脚功能图: 图9 DS1302引脚封装图六、 通信传输模块密码锁系统的通信传输模块是该系统的主要模块之一, 能够最大限度的发挥单片机的传输接口的功能, 最大程度上的利用了单片机的接口。1、 通信传输原理概述一般是用串口来进行通讯的, 采用普通IO模拟实现通信, 这是最简单的方法, 而且能够实现高速串行通信。即利用RS23
28、接口实现通信, 而RS232接口是串口通讯的一种, 其实所谓的接口, 我的理解就是一种通信协议, 规定了传输电平, 传输方式, 及怎么传输数据等。利用单片机的p3.1 TXD通信接口进行数据的发送( 只发送不接收) , 将数据传输到虚拟终端保存。PC机和单片机的通讯却不能够直接进行连接, 原因是PC机RS232串口的电平标准和单片机的TTL电平不一致, 因此单片机和PC机之间的串口通讯必须要有一个RS232/TTL电平转换电路。我们再次利用MAX232芯片实现电平转换。其中, 由于单片机的串口输出电路采用的逻辑电平是TTL( 逻辑门电路, Transistor-Transistor Logic
29、 ) 电平, PC机的电平是CMOS电平。用一个异步串行通信的设计方法, 单片机串口的控制方式MCS-51系列单片机对串口的控制是经过对串行口控制寄存器SCON和功率控制寄存器PCON的设置来实现的。SCON是一个可位寻址的特殊功能寄存器, 经过设置SGON的SM0和SMI, 能够使单片机有四种不同的工作方式。在用于和PC机实现串行通信时, 一般设置为方式1或方式3, 主要区别是方式1的数据格式为8位, 方式3的数据格式为9位, 其中第9位SM2为多机通信位, 可实现单片机的多点通信。单片机串口的速率设置单片机和PC机通信时, 其通信速率由定时器T1或定时器T2产生( 52系列) , 在T1工
30、作在方式2时的通信速率的计算公式为: 波特串( SMOD Fosc) ( 3212256TH1) 。其中Fosc晶振频率, 为获得准确的通信速率, Fosc一般为110592MHz。采用T1定时器通信的系统, 速率不可能过高, 一般情况下最高为19200bits。单片机串口通信程序的实现方法实际应用中, 单片机通信程序一般采用中断方式与微机通信, 微机做为主控方。当单片机收到微机发送的地址信号时, 便转入中断服务程序, 向微机发送数据。2、 电平转换电路PC机和单片机的通讯不能够直接进行连接, 原因是PC机RS232串口的电平标准和单片机的TTL电平不一致, 因此单片机和PC机之间的串口通讯必
31、须要有一个RS232/TTL电平转换电路。我们再次利用MAX232芯片实现电平转换。其中, 由于单片机的串口输出电路采用的逻辑电平是TTL( 逻辑门电Transistor-Transistor Logic ) 电平, PC机的电平是CMOS电平。单片机和PC机的串行通信一般采用MAX-232总线标准接口。为保证通信的可靠, 在选择接口时必须注意: ( 1) 通信的速率; ( 2) 通信距离; ( 3) 抗干扰能力; ( 4) 组网方式。采用MAX232芯片的转换接口, MAX232包含两路驱动器和接收器的RS-232转换芯片。芯片内部有一个电压转换器, 能够把输入的+5v电压转换为RS-232
32、接口所需的10V电压, 特别适用于没有12V的单电源系统。下图所示为MAX232电平转换电路: 图10 MAX232电平转换电路第四篇 系统程序设计一、 总体程序设计流程1、 程序功能 软件的设计主要包括: 密码的设定及修改、 键盘识别判断、 错报警等, 可根据具体的需要还可进行功能的增加与完善。1) 主程序功能: 主耍完成初始化、 设置中断向量检查有无按健按下, 以及调用显示等。2) 键盘扫描及识别子程序功能: 键盘采用查询方式, 放在主程序中, 当没有按键按下时, 单片机循环主程序, 一旦有键按下, 便转向相应的子程序处理, 之后再返回。3) 调用存储程序功能: 比较密码时, 需读取程序,
33、 将存储在芯片内的数据读到RAM中, 然后和输入密码相比较, 当修改密码时, 需耍把输入的密码保存到芯片中。4) 显示子程序功能: 在系统启动后显示为”Your Password .”, 在输入密码时不直接显示密码, 而是现实星号”*”, 这样利于密码的保密可提高安全性和可靠性 。当输入密码正确时, 显示”unlock ok”, 输入错误则显示”ERROR”。当连续输入三次错误后, 会显示”Wait.”,系统会报警提示, 三秒钟后会提示”Input again.”。5) 密码更改子程序功能: 在输入密码成功解锁后, 点击”输入新密码”按键, 输入新密码, 然后选择点击”保持新密码”按键, 至此
34、, 密码修改成功。6) 修改密码工作完成后, 系统将跳翻到开始, 即提示输入密码”Your Password.”。2、 系统程序设计总流程如下图所示为该密码锁系统程序设计总流程图: 开始输入密码正确否? 开锁判断按键LOCK输入键上锁结束输入密码正确否输入新密码再次输入一致否修改密码YesNoNoYesNoYes图10 系统程序设计总流程图二、 各个模块系统程序设计流程 由于设计是分模块化进行, 因此子程序是整体软件系统的组成部分, 子程序不但能够使程序化整为零, 使其复杂简单化, 同时也方便阅读, 每个功能模块都有它自己的子程序, 在本设计中是用LCD显示数据, 因此就要用到显示子程序, 设
35、计中用的是矩阵键盘, 因此就用到键盘扫描子程序, 例如还有显示初始化子程序、 开锁状态显示子程序、 密码输入及修改状态显示子程序、 密码输入错误后的提示子程序等。1、 显示初始化模块程序设计1) 、 设计框图图11 显示初始化模块程序设计流程图2) 、 具体实现程序#include #include #include #include#includelcd1602.h#includewarn.h#includedisplay.h#includekey_scan.h#includedelay.h#includeenter.h#includeI2C.h#include24c02c.h#includ
36、eds1302.h#includetime.h#includecompare.h#includelock_fun.h3) 、 仿真结果图示系统初始化仿真图2、 密码比较功能模块程序设计1) 、 设计框图密码输入完成之后, 进行密码比较核对, 即将设定的密码与输入密码进行一一比较, 如果相同, 则密码正确; 如果密码错误, 则显示器清零, 而且显示”ERROR”,重新等待输入密码。图13 密码比较功能模块程序设计流程图2) 、 具体实现密码#ifndef CMP#define CMPsbit P23=P23;uchar data kong7=0,0,0,0,0,0,0;uchar data mi
37、ma7=1,2,3,4,5,6,0;uchar data mima07=0,0,0,0,0,0,0;uchar data table17=1,1,1,1,1,1,0;uchar data table37=9,9,9,9,9,9,0;/*/函数名: 密码比对函数/功能: 调用该函数可能判断输入的密码是否正确,如果密码正确, 则开门成功并给予相应提示/否则密码输入错误, 同时给予警告。/*void code_check()uchar k;initinal();for(k = 0;k 6;k+) /将mima0这个数组置空mima0k = kongk;for(;i 3;)/密码输入错误次数不能超过三
38、次, 否则报警提示, 然后只能管理员解密enter_password(); /显示输入密码提示画面”Enter Password”enter(mima0);/输入密码, 并用nima0数组接收if(strcmp(table3,mima0) = 0)|(strcmp(table1,mima0) = 0)|(strcmp(mima,mima0) = 0) /密码匹配welcome(); /输入密码正确, 显示欢迎画面P23 = 0;/led亮, 表示开门成功delay1(15);time_after();/开门后显示时间if(strcmp(table1,mima0) = 0)|(strcmp(ta
39、ble3,mima0) = 0)|(strcmp(mima,mima0) = 0)break;else password_error(); /显示密码输入错误画面for(k = 0;k 6;k+)mima0k = kongk;i+;delay1(20);3) 、 仿真结果图示密码比较仿真结果图3、 键盘输入模块程序设计1) 、 设计原理本系统使用44矩阵键盘当没有键按下时, 行线和列线之间是不相连的, 若第N行与第M列的键被按下, 那么第N行与第M列的线就被接通。根据上述原理, 本系统的键盘扫描方法是利用P1口的低四位作为行扫描线, P1口的高四位作为列回扫线。具体实施方法为: 先使P1.0口
40、输出低电平, P1口其它口输出高电平, 然后对P2.4、 P2.5、 P2.6、 P2.7四个口分别作判断。若此四口都为高电平, 则没有键按下; 若有键按下, P1.4、 P1.5、 P1.6、 P1.7四个口必定有一个口输入为低电平, 再判断P1.4、 P1.5、 P1.6、 P1.7哪个口为低电平则可判断按键在哪列上。如果P1.4、 P1.5、 P1.6、 P1.7没有低电平, 再使P1.1为低电平, 其它口为高电平, 依次扫描下去, 找到按键所在的行, 再判断P1口的高四位哪一位为低, 便可知道键在哪一列上。2) 、 具体实现程序如下/ void delay_key(uint x)uch
41、ar i;while (x-)for(i=0;i4)0x0f;switch(temp)case 1: k+=0;break;case 2: k+=4;break;case 4: k+=8;break;case 8: k+=12;break;default:break ;return k;void delay_lcd(uchar n) uchar i;while(n-) for (i=0;i250;i+)_nop_(); _nop_(); _nop_(); _nop_(); /测试LCD忙状态返回bit lcd_bz()bit result;rs = 0;rw = 1;eq = 1;_nop_(
42、);_nop_();_nop_();_nop_();result = (bit)(P0&0x80);eq = 0;return result; void lcd_wcmd(uchar cmd)/写指令数据到LCDrs = 0;rw = 0;eq = 0;P0 = cmd;eq = 1;delay_lcd(1);eq = 0;void lcd_wdat(uchar dat)/写入显示数据到LCDwhile(lcd_bz();rs = 1;rw = 0;P0 = dat;delay_lcd(1);eq = 1;eq = 0;void lcd_init()/LCD初始化lcd_wcmd(0x38);
43、/显示模式设置, *7点阵, 位数据接口while(lcd_bz();lcd_wcmd(0x0C);/显示开及光标设置不显示lcd_wcmd(0x06);/显示光标移动设置lcd_wcmd(0x01);/显示清屏void Display_String(uchar *str,uchar lineno)/在液晶指定行显示字符串uchar i;lcd_wcmd(0x80 + lineno);for(i=0; i16; i+)lcd_wdat(stri);3) 、 仿真结果图示键盘输入仿真结果图4、 电子时钟显示模块程序设计1) 、 设计框图图16 电子时钟模块程序流程图2) 、 具体程序/向写数据void write_ds1302(uchar dat)uchar i;for(i=0;i8;i+)IO=dat & 0x01; /保持最后一位为, 读状态SCLK=1;dela
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100