基于单片机的6位电子密码锁的设计内容摘要:

和 FLASH 存储单元, AT89C51 单片机为许多嵌入式控制系统提供了一种灵活行高且价廉的方案。 主要特性 8031 CPU 与 MCS51 兼容 4K 字节可编程 FLASH 存储器 (寿命: 1000 写 / 擦循环 ) 全静态工作: 0Hz24KHz 三级程序存储器保密锁定 128*8 位内部 RAM 32 条可编程 I/O 线 两个 16 位定时器 /计数器 6个中断源 可编程串行通道 低功耗的闲置和掉电模式 片内振荡器和时钟电路 图 3— 1 管脚说明 VCC:供电电压。 GND:接地。 P0口: P0 口为一个 8位漏级开路双向 I/O 口,每脚可吸收 8TTL 门电流。 当 P1口的管脚第一次写 1时,被定义为高阻输入。 P0 能够用于外部程序数据存储器,它可以被定义为数据 /地址的第八位。 在 FIASH 编程时, P0 口作为原码输入口,当 FIASH 进行校验时, P0输出原码,此时 P0外部必须被拉高。 P1口: P1 口是一个内部提供上拉电阻的 8 位双向 I/O 口, P1 口缓冲器能接收输出 4TTL 门电流。 P1口管脚写入 1后,被内部上拉为高,可用作输入, P1 口被外部下拉为低电平时,将输出电流,这是由于内部上拉的 缘故。 在 FLASH 编程和校验时, P1口作为第八位地址接收。 P2口: P2 口为一个内部上拉电阻的 8 位双向 I/O 口, P2 口缓冲器可接收,输出 4 个 TTL 门电流,当 P2口被写 “1” 时,其管脚被内部上拉电阻拉高,且作为输入。 并因此作为输入时, P2 口的管脚被外部拉低,将输出电流。 这是由于内部上拉的缘故。 P2口当用于外部程序存储器或 16 位地址外部数据存储器进行存取时, P2口输出地址的毕 业 设 计 - 6 - 高八位。 在给出地址 “1” 时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时, P2 口输出其特殊功能寄存器的内容。 P2 口在 FLASH 编程和校验时接收高八位地址信号和控制信号。 P3 口: P3 口管脚是 8 个带内部上拉电阻的双向 I/O 口,可接收输出 4 个 TTL门电流。 当 P3 口写入 “1” 后,它们被内部上拉为高电平,并用作输入。 作为输入,由于外部下拉为低电平, P3 口将输出电流( ILL)这是由于上拉的缘故。 P3口也可作为 AT89C51 的一些特殊功能口,如下表所示: 管脚 备选功能 : RXD(串行输入口) TXD(串行输出口) /INT0(外部中断 0) /INT1(外部中断 1) T0(记时器 0 外部输入) T1(记时器 1 外部输入) /WR(外部数据存储器写选通) /RD(外部数据存储器读选通) P3口同时为闪烁编程和编程校验接收一些控制信号。 RST:复位输入。 当振荡器复位器件时,要保持 RST 脚两个机器周期的高电平时间。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。 在 FLASH 编程期间,此引脚用于输入编程脉冲。 在平时, ALE 端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的 1/6。 因此它可用作对外部输出的 脉冲或用于定时目的。 然而要注意的是:每当用作外部数据存储器时,将跳过一个 ALE 脉冲。 如想禁止ALE的输出可在 SFR8EH 地址上置 0。 此时, ALE 只有在执行 MOVX, MOVC 指令是 ALE 才起作用。 另外,该引脚被略微拉高。 如果微处理器在外部执行状态 ALE 禁止,置位无效。 /PSEN:外部程序存储器的选通信号。 在由外部程序存储器取指期间,每个机器周期两次 /PSEN 有效。 但在访问外部数据存储器时,这两次有效的 /PSEN 信号将不出现。 /EA/VPP:当 /EA 保持低电平时,则在此期间外部程序存储器( 0000HFFFFH),不管是否有内部程序存储器。 注意加密方式 1时, /EA 将内部锁定为 RESET;当 /EA 端保持高电平时,此间内部程序存储器。 在 FLASH 编程期间,此引脚也用于施加 12V 编程电源( VPP)。 XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。 毕 业 设 计 - 7 - 震荡特性 XTAL1 和 XTAL2 分别为反向放大器的输入和输出。 该反向放大器可以配置为片内振荡器。 石晶振荡和陶瓷振荡均可采用。 如采用外部时钟源驱动器件, XTAL2 应不接。 有余输入 至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。 芯片擦除 整个 PEROM 阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持 ALE 管脚处于低电平 10ms 来完成。 在芯片擦操作中,代码阵列全被写 “1” 且在任何非空存储字节被重复编程以前,该操作必须被执行。 此外, AT89C51 设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。 在闲置模式下, CPU 停止工作。 但 RAM,定时器,计数器,串口和中断系统仍 在工作。 在掉电模式下,保存 RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。 4 4 矩阵键盘 如图所示,本系统采用 4 4 矩阵键盘, 16 个按键分为输入数字键: *、 0、 、 9;功能键 lock、 modify、 cel、 Enter。 矩阵键盘。 图 3— 2 毕 业 设 计 - 8 - 复位电路 图 3— 3 时钟电路工作后,在 REST 管脚上加两个机器周期的高电平,芯片内部开始进行初始复位(如图 3— 3)。 振荡电路 图 3— 4 本设计晶振选择频率为 12MHZ,电容选择 30pF 如图( 3- 4)。 经计算得单片机工作胡机器周期为: 12( 1247。 12M) =1us。 数码管 毕 业 设 计 - 9 - 图 3- 5 本设计采用两个 4位 8段共阴极数码管。 由于由单片机直接驱动的直流电流不够,数码管亮度显得不足,所以加上三极管 S9013 用以放大电流。 因为 LED数码管合适的驱动电流大约为 9mA到 20mA左右 ,为了适 LED数码管工作电流在 10mA 左右,具体计算如下: Ib=()/27K= 103A Ie= Ib (β+1)=10 mA 使用的 9013 的放大倍数 β 为 100. 图3- 6 发光二极管 LED 毕 业 设 计 - 10 - 图 3-7 由于 LED使用 P0口驱动要加上上拉电阻如图 3- 7。 电动锁 图 3-8 由于电动锁使用 P0 口驱动要加上上拉电阻如图 3- 8。 蜂鸣器 毕 业 设 计 - 11 - 图 3- 9 由于蜂鸣器使用 P0 口驱动要加上上拉电阻如图 3- 9。 完整电路图 毕 业 设 计 - 12 - 图 3— 9 使用到的元器件列表 毕 业 设 计 - 13 - 元器件 规格 /型号 数量 四位八段共阴数码管 3461AFR1B10 1 四位八段共阴数码管 SR42036 1 三极管 SR9013 8 三极管 S965 1 电阻 27k 8 电阻 10k 1 电阻 1k 4 电解电容 瓷片电容 30pF 2 单片机 AT89C51 1 表 3— 1 第 4 章 软件程序设计 本 系统程序部分使用 C 语言编写, C 语言是一种高级程序设计语言,它的优点是简毕 业 设 计 - 14 - 洁明了 、可移植性高。 主要完成,开始时数码管显示提示“ INPUT”输入密码。 输入密码后按下确认键,系统会将所输入与系统密码进行比对。 若输入密码正确则显示“ PASS”开锁。 然后可以选择上锁或者修改密码。 开锁后,按下上锁“ LOCK”键,系统上锁并返回;选择修改密码则可以对系统进行修改密码操作。 在修改密码前要输入正确旧的密码。 正确输入旧密码之后,会有提示输入两次新密码,若两次密码一致,则修改成功。 期间操作出现失误,系统会返回初始状态,操作错误 超过 3 次,系统会锁定键盘,并报警用以防止恶意试探密码。 软件设计流程图 毕 业 设 计 - 15 - 图 4— 1 具体功能软件实施 开始等待流程 系统开始一直显示提示“ INPUT” ,并判断有否按键,当有键按下跳出等待。 开始 输入密码 正确否。 开锁 判断按键 LOCK Modify 键 上锁 结束 输入密码 正确否。 输入新密码 再次输入 一致否。 修改密码 Yes No No Yes No Yes 毕 业 设 计 - 16 - 图 4— 2 密码检查功能 本系统使用数组 PASSWORD[6]存储密码 ,系统初始化对数组负值 PASSWORD[6]={5,6,7,9,10,11}相当于键盘上的 1, 2, 3, 4, 5, 6。 输入密码的时候,先将输入的每一位密码分别放置在数组 check[6]中,然后再将 check[6]与 PASSWORD[6]的每一位分别对照。 若每一位都相等,密码检查通过。 开始 显示“ INPUT” 判 断是 否有按键。 结束 No Yes 毕 业 设 计 - 17 - 图 4— 3 显示功能 本系统使用共阴极数码管显示(如图 3- 5)。 选码由 P3 口输出高电平有效,选位由 P1 口输出低电平有效。 显示原理如下图及下表: 图 4— 4 4 位数码管上的管脚 单片机输出管脚 a 11 b 7 c 4 d 2 e 1 f 10 g 5 h 3 开始 输入一位密码,数码管显示“-” K=6? k=0 按键为CEL? 结束 Yes No No Yes 毕 业 设 计 - 18 - 表 4— 1 显示方式分别有静态显示与动态显示两种。 在显示提示信息如:输入密码“ INPUT” ,操作通过“ PASS” ,操作错误“ ERROR” ,输入旧密码“ OLD” ,输入新密码“ NE” ,再次输入“ AGAIN”等信息时使用的是动态显示。 由于 8个显示器的段码同名端是连接在一起的,如 果选码的管脚(本系统中为 P1)都为0,那么 8 个显示器则显示同一字符。 要使各个数码管出现不同字符必须采用“分时动态扫描”的方法显示。 即每次点亮一个 LED 显示器,延时一段时间再点亮下一个 LED 显示器„„周而复始, 8个 LED 显示器轮流动态扫描。 利用人视觉余辉的暂留效应,看起来好像几个显示器上“同时”显示不同的字符。 如子程序 view_input_password(): void view_input_password(void) { for(i=0。 i200。 i++) {P3=0X48。 P1=0XFe。 }//第四个显示器显示 I for(i=0。 i200。 i++) {P3=0X43。 P1=0X7F。 }//第五个显示器显示 N for(i=0。 i200。 i++) {P3=0XCD。 P1=0XBF。 }//第六个显示器显示 P for(i=0。 i200。 i。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。