基于单片机控制的密码门禁系统.doc

基于单片机控制的密码门禁系统

收藏

资源目录
跳过导航链接。
基于单片机控制的密码门禁系统.zip
基于单片机控制的密码门禁系统
基于单片机控制的密码门禁系统.doc---(点击预览)
门禁仿真图
5.DSN
Last Loaded 5.DBK
Backup of Picture1.Lib
Backup of Picture1.Sch
menjin.Bkp
menjin.c
menjin.ddb
menjin.PNG
Previous Backup of Picture1.Lib
Previous Backup of Picture1.Sch
压缩包内文档预览:(预览前20页/共34页)
预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图
编号:481643    类型:共享资源    大小:1.60MB    格式:ZIP    上传时间:2015-10-26 上传人:毕业设计****498... IP属地:江苏
80
积分
关 键 词:
基于 单片机 控制 节制 密码 门禁 系统
资源描述:
基于单片机控制的密码门禁系统,基于,单片机,控制,节制,密码,门禁,系统
内容简介:
无 锡 职 业 技 术 学 院 毕业设计说明书(论文) - 1 - 题目:基于单片机控制的密码门禁系统设计 摘要: 目前,门禁系统设计技术成熟,应用非常广泛。该文从硬件电路和软件电路两方面介绍了设计门禁系统的方法。系统具有密码输入,比较,开门,错误报警等功能和等待模式,用户模式和管理模式三种模式。使用 AT89C51 单片机作为控制核心,使用单片机 C 语言进行编程,完成门禁控制系统的硬件和软件设计。 关键字:门禁系统,单片机,字符显示,矩阵键盘输入 引言: 门禁系统是在传统的门锁基础上发展而来的。现在,许多场合还在使用传统的门锁。传统的门锁是一种单纯的机械装置,虽然 经过不断改进,安全性有所提高但无论设计多么合理材料多么坚固,总能通过种种非正常手段把它打开,安全性较差。对每个使用者来说,一把锁配一把钥匙,使用起来不方便,在出入人较多的通道钥匙的管理也相当麻烦,遇到钥匙丢失或人员更换都要把锁和钥匙一起更换。为了解决这些问题,出现了电磁卡锁和电子密码锁,这两种锁的出现从一定程度上提高了人们对出入口通道的管理效率,是通道管理进入了电子时代。 在注重美观的现代都市里,公司的形象体现了所追求的风格和气度,也是给顾客建立起信心的保障。可以想象,在追求智能化无纸办公的今天,在豪华气派 的玻璃大门装上一把笨重的锁将会是件多么繁琐而尴尬的事情啊!但是,如果能用手中的卡片轻轻一晃,大门应声而开,那将是一种全新的感受。另外,在越来越注重商业情报和安全的今天,传统的个人身份鉴别手段已不能完全满足现代社会经济活动和社会安全防范的需要。从消除认为不安全因素来看,只有不易被他人代替、仿制、甚至本人也无法转让的身份识别凭证才能胜任。因此,从易用性、安全性、成熟性、造价性等方面综合比较,IC卡门禁技术正在以惊人的速度迅猛发展。 本文介绍了密码门禁系统的设计与开发,详细分析了系统硬件设计和软件设计,给出了电路 原理图,以及主要程序设计的流程图和程序。系统硬件有电源供电、晶振电路、键盘控制电路、继电器电路和蜂鸣器电路等几部分组成。系统软件实现主要分为:数码管显示,键盘扫描,工作模式及密码比较。 2 单片机控制芯片方案选择论证 2 1方案一: PIC16C84 单片机芯片。它是 8 位 CMOS EEPROM 微控制器。它有高性能的类似于 RISC35都只需要一个指令周期。程序指令的宽度为 14 1K 14 的 EEPROM 程序存储器。 nts无 锡 职 业 技 术 学 院 毕业设计说明书(论文) - 2 - 图 1 基于 PIC16C84 单片机控制密码门禁的方框图 用到的芯片有 CD4094: 位移位存储总线寄存器 : CD4094 是带输出锁存和三态控制的串入 /并出高速转换器,具有使用简单、功耗低、驱动能力强和控制灵活等优点。 CD4094 的引脚定义如图 2。 其中 (1)脚为锁存端, (2)脚为串 行 数据输入端, (3)(3)脚为串行时钟端。 (4)(1)脚为高电平时, 8位并行输出口 Q1 Q8 在时钟的上升沿随串行输入而变化; (1)脚为低电平时,输出锁定。利用锁存端可方便地进行片选和级联输出控制。 (5)(15)脚为并行输出状态控制端, (15)脚为低电平时,并行输出端处在高阻状态,在用 CD4094 作显示输出时,可使显示数码闪烁。 (6)(9)脚 QS、 (7)(10)脚 Q S是串行数据输出端,用于级联。 QS 端在第 9个串行时钟的上升沿开始输出, Q S端在第 9 个串行时钟的下降沿开始输出。当 CD4094 电源为 5V 时,输出电流大于 3 2MA,灌电流为 1 MA。串行时钟频率可达 2 5MHZ。 图 2 CD4094 引脚图 PIC16C84 LCD1602 显示电路 键盘输入电路 AT24C02 存储电路 蜂鸣器电路 输入门锁控制 CD4094 CD4094 nts无 锡 职 业 技 术 学 院 毕业设计说明书(论文) - 3 - 2 2方案二: AT89C51 芯片。 AT89C51 是一种带 4K 字节 FLASH 存储器 ( FPEROM Flash Programmable and Erasable Read Only Memory)的低电压、高性能 CMOS 8 位 微处理器 ,俗称 单片机 。 AT89C2051 是一种带 2K 字节 闪存可编程可擦除 只读存储器 的 单片机 。单片机 的可擦除 只读存储器 可以反复擦除 1000 次。该器件采用 ATMEL 高密度非易失 存储器 制造技术制造,与工业标准的 MCS-51 指令集和输出管脚相兼容。由于将多功能 8位 CPU 和闪烁 存储器 组合在单个芯片中, ATMEL 的 AT89C51 是一种高效微控制器,AT89C2051 是它的一种精简版本。 AT89C51 单片机 为很多 嵌入式控制系统 提供了一种灵活性高且价廉的方案。 图 3 单片机控制密码门禁方框图 用到的芯片有 AT89C51: 管脚说明: VCC:供电电压。 GND:接地。 P0口: P0口为一个 8位漏级开路双向 I/O 口,每脚可吸收 8TTL 门电流。当 P0口的管脚第一次写 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口输出地址的高八位。在给出地址“ 1”时,它利用内部上拉优势,当对外部八位地址数据 存储器 进行读写时,P2 口输出其 特殊功能寄存器 的内容。 P2 口在 FLASH 编程和校验时接收高八位地址信号和 控制信号 。 P3口: P3口管脚是 8个带内部上拉电阻的双向 I/O 口,可接收输出 4个 TTL 门电流。当 P3 口写入“ 1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下AT24C02 存储电路 AT89C51 蜂鸣器电路 键盘输入电路 LCD1602 显示电路 时钟电路 复位电路 输入门锁控制 nts无 锡 职 业 技 术 学 院 毕业设计说明书(论文) - 4 - 拉为低电平, P3 口将输出电流( ILL)这是由于上拉的缘故。 P3口也可作为 AT89C51 的一 些特殊功能口,如下表所示: 口管脚 备选功能 P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 /INT0(外部中断 0) P3.3 /INT1(外部中断 1) P3.4 T0(计时器 0 外部输入) P3.5 T1(计时器 1 外部输入) P3.6 /WR( 外部数据 存储器 写选通) P3.7 /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 保持低电平时,则在此期间外部程序 存储器 ( 0000H-FFFFH),不管是否有内部程序存储器。注意加密方式 1时, /EA 将内部锁定为 RESET;当 /EA 端保持高电平时,此间内部程序存储器。在 FLASH 编程期间,此引脚也用于施加 12V 编程电源( VPP)。 XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来 自反向振荡器的输出。 图 4 AT89C51 芯片图 nts无 锡 职 业 技 术 学 院 毕业设计说明书(论文) - 5 - 因为 采用 AT89C51 的芯片能够简化电路,有 4 个 I/O 口,方便元器件的配置,同时功能也更强大,因此选择方案二 3 分电路设计和论证 3. 1 键盘控制模块选择论证 3. 1. 1 5。它是利用单片机 I/O 口读取口的电平高低来判断是否有键按I/O 口数较多。且对键盘处理的时候涉及到了一个重要的过程那就是键盘的抖动问题。 图 5 独立式键盘输入模块 3. 1. 2 方案二: 6 I/O I/O nts无 锡 职 业 技 术 学 院 毕业设计说明书(论文) - 6 - 图 6 矩阵式键盘输入 由于单片机端口一定,为了节省 I/O 端口,减小按键占用电路板的面积,所以选择方案二 。 3. 2 显示控制模块选择论证 3. 2. 1 方案一: 8*8LED 点阵式电子广告牌显示 如图 7。 8*8LED 点阵式电子广告牌与 8 段位数码管驱动原理相同,利用人眼的“视觉驻留效应”,通过软件延时,给人一种稳定显示的视觉效果。单片机控制一个 8*8LED 点阵需要使用两个并行端口,一个端口控制行线,一个控制列线。显示过程以行扫描方式进行,行与行之间延时 1到 2ms,应保证扫描所有 8 行所用时间在 20ms 以内 . 图 7 8*8LED 点阵式电子广告牌显示 nts无 锡 职 业 技 术 学 院 毕业设计说明书(论文) - 7 - 3. 2. 2 方案二: LCD1602 字符液晶模块显示 如图 8。 LCD162字符点阵液晶显示模块低功耗、平板型结构、被动显示、显示信息量大、易于彩色化 、没有电磁辐射、寿命长等。 LCD162字符点阵液晶显示模块有 16个引脚: 1: VSS 接地 2: VDD +5v 电源引脚 3: VO 液晶显示驱动电源( 0-5v),可接电位器 4: RS 数据和指令选择控制端, RS=0:命令 /状态; RS=1 : 数据 5: R/W 读写控制线,置 0时写操作,置 1时读操作 6: E 数据读写操作控制位, E向 LCD 模块发送一个脉冲, LCD 模块与单片机之间进行一次数据交换。 7 14: DB0-DB7数据线,可以用 8位连接,也可以用高 4位连接, 节约单片机资源。 15: A 背光控制正电源 16: K 背光控制地 图 8 LCD1602 液晶显示 LCD1602与 8*8LED 点阵式电子广告牌显示相比,在相同的面积上可容纳的信息更多,而且,液晶显示靠调制外界光进行显示,更适合人的视觉习惯,不会使人眼疲劳 ,在显示期间,不会产生电磁辐射,有利于人体健康。所以我选择方案二。 3. 3 各电路设计 3. 3. 1 最小系统 nts无 锡 职 业 技 术 学 院 毕业设计说明书(论文) - 8 - 图 9 51单片机最小系统 1) 复位电路 2)晶振电路 3) 5V 供电 4)地 3 3. 2 AT24C02存储器电路 本设计有密码掉电保护功能,提供此功能得益于 AT24C02这款 EEPROM 存储器。 AT24C02是由 ATMEL 公司提供的, I2C 总线串行 EEPROM,其容量为 2KB,工作电压在 1.85.5v之间,生产工艺是 CMOS 工艺。掉电的情况下,数据仍能保存下来,就像我们电脑上的硬盘。 1: A2A0 这 3个引脚是配置成不同的编码值,在同一串行总线上最多可扩充 8片同一容量或不同容量的 24系列串行 EEPROM 芯片。 2: SDA 串行数据输入输出口,是一个双向的漏记开路结构的引 脚,容量扩展时可以将多片 24系列的 SDA 引脚直接相连,实际使用时该引脚必须接一个 5.1K 的上拉电阻。 3: SCL 串行移位时钟控制端。写入时上升沿起作用,读出时下降沿起作用 4: WAP 硬件写保护控制引脚。当其为低电平时,正常写操作,高电平时,对EEPROM 部分存储区域提供硬件写保护功能,即对被保护区域只能读不能写 5: GND 接地 6: VCC 接 +5v 电压 图 10 AT24C02存储器芯片 nts无 锡 职 业 技 术 学 院 毕业设计说明书(论文) - 9 - 4. 软件设计 4 1 程序流程: 4. 1. 1 主程序流程图 图 11 系统主程序流程图 程序的各个模块建立后,将其按照整体设计思路的流程整合在一起,通过各个模块的协调工作得到完整的系统功能。 系统上电后,读取 AT24C02 中的预设密码,随之进入主循环。主循环中有三种模式的选择,系统默认开始模式为等待模式。此时,液晶屏点亮。可以按模式切换键,进入用户模式或管理模式。在进行相应操作前,必须输入正确的密码。否则,超过 2 次错误输入,系统报警并返回等待模式。 开始 切换模式 进入该模式 相应操作 输入密码 进等待模式 键盘扫面 密码正确? 读取 AT24C02密码 yes no no yes nts无 锡 职 业 技 术 学 院 毕业设计说明书(论文) - 10 - 4 1 2 各子程序流程图 4. 1. 2. 1 AT24C02 存储器流程图 AT24C02 的写操作 写操作分为字节写和页面写两种操作,对于页面写根据芯片的一次装载的字节不同有所不同。在本设计中主要使用单字节的写入方式。 图 12 写一个字节时序图 图 13 AT24C02 存储器写操作流程图 AT24C02 的读操作 读操作有三种基本操作:当前地址读、随机读和顺序读。应当注意的是:最后一个读操作的第 9 个时钟周期不是“不关心”。为了结束读操作,主机必须在第 9 个周期间发出停止条件或者在第 9 个时钟周期内保持 SDA 为高电平、然后发出停 止条件。 AT24C 系列片内地址在接收到每一个数据字节地址后自动加 1,故装载一页以内规定数据字节时,只须输入首地址,若装载字节多于规定的最多字节数,数据地址将“上卷”,前面的数据被覆盖。 连续读操作时为了指定首地址,需要两个伪字节写来给定器件地址和片内地址,重复一次启动信号和器件地址 (读 ),就可读出该地址的数据。由于伪字节写中并未执行写操作,地址没有加 1。以后每读取一个字节,地址自动加 1。 在读操作中接收器接收到最后一个数据字节后不返回肯定应答 (保持 SDA 高电平 )随后发停止信号。 nts无 锡 职 业 技 术 学 院 毕业设计说明书(论文) - 11 - 图 14 AT24C02 存储器读操作流程图 4. 1. 2. 2 LCD 函数流程图 nts无 锡 职 业 技 术 学 院 毕业设计说明书(论文) - 12 - 图 15 LCD 函数流程图 4 2程序 4 2 1 主程序 #include reg51.h #include intrins.h #define WriteDeviceAddress 0xa0 #define ReadDeviceAddress 0xa1 sbit RS=0xb0; sbit RW=0xb1; sbit E=0xb2; void lcd_w_cmd(unsigned char com); void lcd_w_dat(unsigned char dat); unsigned char lcd_r_start(); unsigned char scan_key(void); nts无 锡 职 业 技 术 学 院 毕业设计说明书(论文) - 13 - void int1(); void display_welcom(); void display_right(); void display_wrong(); sbit SCL=P04; sbit SDA=P05; sbit DB0=P10; sbit DB1=P11; sbit DB2=P12; sbit DB3=P13; sbit DB4=P14; sbit DB5=P15; sbit DB6=P16; sbit DB7=P17; sbit P39=P00; sbit P38=P01; sbit P37=P02; sbit P36=P03; sbit P35=P04; sbit P34=P05; sbit P21=P20; sbit P22=P21; sbit P23=P22; sbit P24=P23; sbit P25=P24; sbit P26=P25; sbit P9=RST; sbit P10=P30; sbit UNLOCK=P31; sbit LOCK=P32; sbit ADMINI=P33; sbit BEEP=P25; typedef unsigned char uchar; uchar mode=0; uchar Password6=1,2,3,4,5,6; uchar Input6=0x0A,0x0A,0x0A,0x0A,0x0A,0x0A; /延时函数 void delay(unsigned int number) unsigned char temp; for(;number!=0;number-) nts无 锡 职 业 技 术 学 院 毕业设计说明书(论文) - 14 - for(temp=150;temp!=0;temp-); void delay1() _nop_(); _nop_(); _nop_(); /开始信号 void Star(void) SDA=1; SCL=1; delay1(); SDA=0; delay1(); /停 止信号 void Stop(void) SDA=0; SCL=1; delay1(); SDA=1; delay1(); /应答信号 void Ack(void) SDA=0; delay1(); SCL=1; delay1(); SCL=0; /反应答信号 void NoAck(void) SDA=1; delay1(); delay1(); nts无 锡 职 业 技 术 学 院 毕业设计说明书(论文) - 15 - SCL=0; /写数据 void Write(uchar Data) uchar BitCounter=8; uchar temp; do temp=Data; SCL=0; delay1(); if(temp&0x80)=0x80) SDA=1; else SDA=0; SCL=1; temp=Data1; Data=temp; BitCounter-; while(BitCounter); SCL=0; delay(20); /读数据 uchar Read(void) uchar temp=0; uchar temp1=0; uchar BitCounter=8; SDA=1; do SCL=0; delay1(); SCL=1; delay1(); if(SDA) temp=temp|0x01; else temp=temp%0xfe; if(BitCounter-1) temp=temp1; temp=temp1; nts无 锡 职 业 技 术 学 院 毕业设计说明书(论文) - 16 - BitCounter-; while(BitCounter); delay(20); return(temp); /从 at24c02 中读数据 void WDToROM(uchar Data,uchar Address) Star(); Write(WriteDeviceAddress); Ack; Write(Address); Ack(); Write(Data); Ack(); Stop(); delay(10); uchar RDFromROM(uchar Address) uchar DATA=0; Start(); Write(WriteDeviceAddress); Ack(); Write(Address); Ack(); Start(); Write(ReadDeviceAddress); Ack(); _nop_(); _nop_(); _nop_(); _nop_(); DATA=Read(); SCL=0; NoAck(); Stop(); delay(10); return(DATA); /写密码 void WDPassword(uchar *temp) nts无 锡 职 业 技 术 学 院 毕业设计说明书(论文) - 17 - uchar count=0; while(count!=6) WDToROM(tempcount,count); count+; /读密码 void RDPassword(uchar *temp) uchar count=0; while(count!=6) tempcount=RDFromROM(count); count+; /等待模式 void WaitMode(void) uchar mov,speed; uchar value; uchar tmp=0x01; P1&=0x03; LOCK=1; UNLOCK=0; ADMINI=O; for(mov=0;mov6;mov+) Inputmov=0x0A; for(mov=0;mov8;mov+) for(speed=0;speed70;speed+) P0=tmp; delay(25); value=GetKey(); if(value=0x0D) mode=1; nts无 锡 职 业 技 术 学 院 毕业设计说明书(论文) - 18 - break; if(value=0x0E) mode=2; break; tmp=1; /访客模式 void GuestMode(uchar *password,uchar *input) uchar count=0; uchar tmp=0; uchar error=0; uchar i; while(1) tmp=GetKey(); if(tmp/10=0) inputcount=tmp; count+; if(tmp=0x0A) for(i=0;i6;i+) if(passwordi!=inputi) BEEP=1; delay(200); BEEP=0; error+; for(i=0;i6;i+) inputi=0x0A; count=0; i=0; break; nts无 锡 职 业 技 术 学 院 毕业设计说明书(论文) - 19 - if(error=4) BEEP=1; delay(200); BEEp=0; delay(200); BEEP=1; delay(200); BEEP=0; delay(200); BEEP=1; delay(200); BEEP=0; BEEP=1; delay(200); BEEP=0; BEEP=1; delay(200); BEEP=0; mode=0; break; if(i=6) LOCK=0; UNLOCK=1; BEEP=1; delay(200); BEEP=0; for(i=0;i6;i+) inputi=0x0A; count=0; if(tmp=0x0B) input-count=0x0A; if(tmp=0x0C) nts无 锡 职 业 技 术 学 院 毕业设计说明书(论文) - 20 - for(i=0;i6;i+) inputi=0x0A; count=0; if(tmp=0x0D) mode=1; break; if(tmp=0x0E) mode=2; break; if(tmp=0x0F) mode=0; break; if(mode!=1) break; Display(input); /管理模式 void AdminiMode(uchar *password,uchar *input) uchar count=0; uchar tmp=0; uchar error=0; uchar i; while(1) tmp=GetKey(); /输入密码 if(tmp/10=0) inputcount=tmp; count+; nts无 锡 职 业 技 术 学 院 毕业设计说明书(论文) - 21 - if(tmp=0x0A) for(i=0;i6;i+) if(passwordi!=inputi) BEEP=1; delay(200); BEEP=0; error+; for(i=0;i6;i+) inputi=0x0A; count=0; i=0; break; if(error=4) BEEP=1; delay(200); BEEp=0; delay(200); BEEP=1; delay(200); BEEP=0; delay(200); BEEP=1; delay(200); BEEP=0; BEEP=1; delay(200); BEEP=0; BEEP=1; delay(200); BEEP=0; mode=0; break; if(i=6) nts无 锡 职 业 技 术 学 院 毕业设计说明书(论文) - 22 - LOCK=0; UNLOCK=1; ADMINI=1; BEEP=1; delay(200); BEEP=0; for(i=0;i6;i+) inputi=0x0A; count=0; while(1) tmp=GetKey(); if(tmp/10=0) inputcount=tmp; count+; if(tmp=0x0B) input-count=0x0A; if(tmp=0x0A) if(count=6) WDPassword(input); mode=0; break; else for(i=0;i6;i+) inputi=0x0A; count=0; if(tmp=0x0C) for(i=0;i6;i+) nts无 锡 职 业 技 术 学 院 毕业设计说明书(论文) - 23 - inputi=0x0A; count=0; if(tmp=0x0F) mode=0; break; Display(input); if(tmp=0x0B) input-count=0x0A; if(tmp=0x0C) for(i=0;i6;i+) inputi=0x0A; count=0; if(tmp=0x0D) mode=1; break; if(tmp=0x0E) mode=2; break; if(tmp=0x0F) mode=0; break; Display(input); if(mode!=2) break; nts无 锡 职 业 技 术 学 院 毕业设计说明书(论文) - 24 - void main() uchar tmp=1; P2=0xFF; P2=0xFF; P3=0x00; WDPassword(Password); LOCK=1; UNLOCK=0; ADMINI=0; BEEP=0; while(1) RDPassword(Password); switch(mode) case 0: WaitMode(); display_welcom(); break; case 1: GuestMode(Password,Input); break; case 2: AdminiMode(Password,Input); default: break; void int1() lcd_w_cmd(0x3c); lcd_w_cmd(0x0e); lcd_w_cmd(0x01); lcd_w_cmd(0x06); lcd_w_cmd(0x80); nts无 锡 职 业 技 术 学 院 毕业设计说明书(论文) - 25 - unsigned char lcd_r_start() unsigned char s; RW=1; delay1(); RS=0; delay1(); E=1; delay1(); S=P1; delay1(); E=0; delay1(); RW=0; delay1(); return(s); void lcd_w_cmd(unsigned char com) unsigned char i; do i=lcd_r_start(); i=i&0x80; delay(2); while(i!=0); RW=0; delay1(); RS=0; delay1(); E=1; delay1(); P1=com; delay1(); E=0; delay1(); RW=1; delay(255); void lcd_w_dat(unsigned char dat) unsigned char i; nts无 锡 职 业 技 术 学 院 毕业设计说明书(论文) - 26 - do i=lcd_r_start(); i=i&0x80; delay(2); whlie(i!=0); RW=0; delay1(); RS=1; delay1(); E=1; delay1(); P1=dat; delay1(); E=0; delay1(); RW=1; delay(255); /键盘扫描 unsigned char scan_key(void) unsigned i,temp,m,n; bit find=0; P0=0xff; for(i=0;i4;i+) P2=0xfei; temp=P0; temp=temp&0x0f; while(temp!=0x00) m=i; find=1; switch(temp) case 0x01:n=0;break; case 0x02:n=1;break; case 0x04:n=2;break; case 0x08:n=3;break; default:break; nts无 锡 职 业 技 术 学 院 毕业设计说明书(论文) - 27 - if(find=0)return -1; else return(n*4+m); void display_welcom() unsigned char lcd=welcom; unsigned char i; P1=0xff; int1(); delay(255); for(i=0;i6;i+) lcd_w_dat(lcdi); delay(200); while(1); void display_right() unsigned char lcd=right; unsigned char i; P1=0xff; int1(); delay(255); for(i=0;i5;i+) lcd_w_dat(lcdi); delay(200); while(1); void display_wrong() unsigned char lcd=wrong; unsigned char i; P1=0xff; int1(); delay(255); for(i=0;i5;i+) lcd_w_dat(lcdi); nts无 锡 职 业 技 术 学 院 毕业设计说明书(论文) - 28 - delay(200); while(1); 4 2 2 LCD162 程序 void int1() lcd_w_cmd(0x3c); lcd_w_cmd(0x0e); lcd_w_cmd(0x01); lcd_w_cmd(0x06); lcd_w_cmd(0x80); unsigned char lcd_r_start() unsigned char s; RW=1; delay1(); RS=0; delay1(); E=1; delay1(); S=P1; delay1(); E=0; delay1(); RW=0; delay1(); return(s); void lcd_w_cmd(unsigned char com) unsigned char i; do i=lcd_r_start(); i=i&0x80; delay(2); while(i!=0); RW=0; delay1(); RS=0; nts无 锡 职 业 技 术 学 院 毕业设计说明书(论文) - 29 - delay1(); E=1; delay1(); P1=com; delay1(); E=0; delay1(); RW=1; delay(255); void lcd_w_dat(unsigned char dat) unsigned char i; do i=lcd_r_start(); i=i&0x80; delay(2); whlie(i!=0); RW=0; delay1(); RS=1; delay1(); E=1; delay1(); P1=dat; delay1(); E=0; delay1(); RW=1; delay(255); void display_welcom() unsigned char lcd=welcom; unsigned char i; P1=0xff; int1(); delay(255); for(i=0;i6;i+) lcd_w_dat(lcdi); delay(200); nts无 锡 职 业 技 术 学 院 毕业设计说明书(论文) - 30 - while(1); 4 2 3 键盘扫描函数 /键盘扫描 unsigned char scan_key(void) unsigned i,temp,m,n; bit find=0; P0=0xff; for(i=0;i4;i+) P2=0xfei; temp=P0; temp=temp&0x0f; while(temp!=0x00) m=i; find=1; switch(temp) case 0x01:n=0;break; case 0x02:n=1;break; case 0x04:n=2;break; case 0x08:n=3;break; default:break; if(find=0)return -1; else return(n*4+m); 4 2 4 AT24C02 程序 /向 AT24C02 写入数据 Void WDToROM(uchar Data, uchar Address) Start(); /调用起始条件函数 Write(WriteDeviceAddress); /发送命令,准备写入数据到存储器。让存储器做好准备 Ack(); /调用应答函数 Write(Address); /先发送要写入数据的存储器内存地址 Ack(); /调用应答函数 nts无 锡 职 业 技 术 学 院 毕业设计说明书(论文) - 31 - Stop(); /调用停止发送函数,表示发送完 毕 Delay(10); /向 AT24C02 读出数据 Uchar RDFromROM(uchar Address) Uchar DATA=0; Start(); /调用起始条件函数 Write(WriteDeviceAddress); /让存储器准备接受命令 Ack(); Write(Address); Ack(); Start(); /重新调用起始函数 Write(ReadDviceAddress); /发送读出数据的命令 Ack(); _nop_(); _nop_(); _nop_(); _nop_(); DATA=Read(); /开始读出数据 SCL=0; NoAck(); /读出数据成功。返回信号成功信号给存储器 5软件系统的调试 5.1 软件调试 调试软件介绍 Protel99SE 是应用于 Windows9X/2000/NT 操作系统下的 EDA 设计软件,采用设计库管理模式,可以进行联网设计,具有很强的数据交换能力和开放性及 3D模拟功能,可以完成电路原理图设计,印制电路板设计和可编程逻辑器件设计等工作,可以设计 32 个信号层, 16 个电源 -地层和 16 个机加工层。按照系统功能来划分, Protel99se 主要包含 6 个功能模块 : 电路工程设计部分 、 印刷电路板设计系统 、 自动布线系统 、 电路模拟仿真系统 、 可编程逻辑设计系统 、 高级 信号完整性分析系统 。 存储器和特殊功能寄存器的存取 、 中断功能 、 灵活的指针 KeilC51 软件提供丰富的库函数和功能强大的集成开发调试工具,如 Windows 界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到 KeilC51 生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解,在开发大型软件是更能体现高级语言的优势 。 KEIL C51编译器 由 uVision2 集成开发环境 与 编辑器和调试器 以及 C51编译器 组成。其中 uVision2集成开发环境 中的 工程 (project)是由源文件、开发工具选项以 及编程说明三部分组成的 ;编辑器和调试器 包括 源代码编辑器 、 断点 设置、 调试函数语言 、 变量和存储器 Proteus 软件是一种低投资的电子设计自动化软件,提供可仿真数字和模拟、交流和直流等数千种元器件和多达 30多个元件库。 Proteus 软件提供多种现实存在的虚拟仪器仪表。此外, Proteus 还提供图形显示功能,可以将线路上变化的信号,以图形的方式实时地显示出来。这些虚拟仪器仪表具有理想的参数指标,例如极高的输入阻抗、极nts无 锡 职 业 技 术 学 院 毕业设计说明书(论文) - 32 - 低的输出阻抗,尽可能减少仪器对测量结果的影响, Proteus 软件提供丰富的测试信号用于电路的测试。 这些测试信号包括模拟信号和数字信号。提供 Schematic Drawing、SPICE 仿真与 PCB 设计功能,同时可以仿真单片机和周边设备,可以仿真 51 系列、 AVR、PIC 等常用的 MCU,并提供周边设备的仿真,例如 373、 led、示波器等。 Proteus 提供了大量的元件库,有 RAM、 ROM、键盘、马达、 LED、 LCD、 AD/DA、部分 SPI 器件、部分IIC 器件,编译方面支持 Keil 和 MPLAB 等编译器。一台计算机、一套电子仿真软件,在加上一本虚拟实验教程,就可相当于一个设备先进的实验室。以虚代实、以软代硬,就建立一个完善的虚拟实验室。在计算机上学习电工基
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
提示  人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:基于单片机控制的密码门禁系统
链接地址:https://www.renrendoc.com/p-481643.html

官方联系方式

2:不支持迅雷下载,请使用浏览器下载   
3:不支持QQ浏览器下载,请用其他浏览器   
4:下载后的文档和图纸-无水印   
5:文档经过压缩,下载后原文更清晰   
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

网站客服QQ:2881952447     

copyright@ 2020-2025  renrendoc.com 人人文库版权所有   联系电话:400-852-1180

备案号:蜀ICP备2022000484号-2       经营许可证: 川B2-20220663       公网安备川公网安备: 51019002004831号

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知人人文库网,我们立即给予删除!