基于单片机8051的密码锁控制单片机课程设计

上传人:仙*** 文档编号:27768176 上传时间:2021-08-20 格式:DOC 页数:38 大小:759KB
收藏 版权申诉 举报 下载
基于单片机8051的密码锁控制单片机课程设计_第1页
第1页 / 共38页
基于单片机8051的密码锁控制单片机课程设计_第2页
第2页 / 共38页
基于单片机8051的密码锁控制单片机课程设计_第3页
第3页 / 共38页
资源描述:

《基于单片机8051的密码锁控制单片机课程设计》由会员分享,可在线阅读,更多相关《基于单片机8051的密码锁控制单片机课程设计(38页珍藏版)》请在装配图网上搜索。

1、分类号 编号烟 台 大 学课 程 设 计基于单片机8051的密码锁控制院 系: 机电学院 专 业: 机械设计制造及其自动化 姓 名: 学 号: 2010年 7 月 6 日目录第一章:引言2第二章:方案设计3 1 、方案论证与比较 3 2、单片机8051 4第三章:电路原理分析与设计7 1、开锁机构 7 2、按键电路及LCD设计 7 3、掉电存储单元设计 14 4、密码锁电源电路设计 14 5、设计总框图 16 6、整体程序设计和程序流程图 16 第四章:程序设计 17 第五章:调试、测试分析及结果 35第六章:小结 35 参考文献 36第一章、 引言目前,单片机正朝着高性能和多品种方向发展趋势

2、将是进一步向着cmos化、低功耗、大容量、高性能、低价格和外围电路内装化等方向发展。下面是单片机的 主要发展方向今年,由于chmos技术的进步,大大的促进了单片机的cmos化。Cmos除了低功耗外,还具有功耗的可控性,使单片机可以工作在功耗精细管理状态。Cmos电路的特点是低功耗、大容量、高性能、低价格。采用双极型半导体工艺的ttl电路速度快、但功耗低和芯片面积大。单片机应用的重要意义还在于,它从根本上改变了传统的控制系统设计思想和设计方法。以前必须由模拟电路或数字电路实现的大部分功能,现在可以用单片机通过软件方法来实现。这种软件代替硬件的控制技术也称为传统控制的一次革命单片机自二十世纪七十年

3、代问世以来,以其极高的性能价格比受到人们的重视和关注,应用广泛,发展快。由于其的优点多而突出,所以其的应用领域极广,几乎到了无孔不入的地步。在我国广泛的应用于工业自动化控制、自动检测、智能仪表、智能家用电器、航空航天系统和国防军事、尖端武器等各个方面。可以采用软硬件结合的办法提高系统的性能的控制技术为微控技术。LCD 液晶显示器是 Liquid Crystal Display 的简称,是20世纪70年代初发展起来的一种液晶显示器。随着技术的发展其的分辨率、屏幕发光颜色等进入批量化合实用化。随着人们生活水平的提高,如何实现家庭防盗这一问题也变的尤其的突出,传统的机械锁由于其构造的简单,被撬的事件

4、屡见不鲜,电子锁由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的亲呢。第二章:设计方案本次设计我组采用液晶显示lcd,按键采用4*4键盘矩阵、8051单片机。本系统由单片机系统、矩阵键盘、lcd显示和报警系统。系统可以完成开锁、密码错误报警、修改用户密码、管理员解密基本的密码锁功能。除上述功能,还应具有掉电存储,声光提示等功能。依据实际情况还可以添加遥控功能。本系统成本低廉,功能可靠实用。 设计本课题时构思了两种方案:一种是用以8051为核心的单片机控制方案;另一种是用以74LS112双JK触发器构成的数字逻辑电路控制方案。考虑到数字电路方案原理过于简单,而且不能满足现在的安全需求,

5、所以本文采用前一种方案。1、方案论证与比较方案一:采用数字电路,其原理方框图如图1 图21 数字密码锁电路方案采用数字密码锁电路的好处就是设计简单。用以74LS112双JK触发器构成的数字逻辑电路作为密码锁的核心控制,共设了9个用户输入键,其中只有4个是有效的密码按键,其它的都是干扰按键,若按下干扰键,键盘输入电路自动清零,原先输入的密码无效,需要重新输入;如果用户输入密码的时间超过40秒(一般情况下,用户不会超过40秒,若用户觉得不便,还可以修改)电路将报警80秒,若输入密码错误报警防止他人的非法操作。电路由两大部分组成:密码锁电路和备用电源(UPS),其中设置UPS电源是为了防止因为停电造

6、成的密码锁电路失效,使用户免遭麻烦。密码锁电路包含:键盘输入、密码修改、密码检测、开锁电路、执行电路、报警电路。采用以8051为核心的单片机控制方案。利用单片机灵活的编程设计和丰富的IO端口,及其控制的准确性,不但能实现基本的密码锁功能,还能添加调电存储、声光提示甚至添加遥控控制功能。其原理如图12所示。 图22单片机控制方案 2、单片机80511、芯片8051有40条引脚,共分为端口线、电源线和控制线三类4并行I/O端口,每个端口有8条端口线,用于传送数据、地址。可编程串行通道 5个中断源低功耗的闲置和掉电方式两个16位定时器、计数器片内振荡器和时钟脉冲4K内部RoM128内部RaM 2、管

7、脚说明 1)、主电源引脚VCC和VSSVCC(40脚)接+5V电压; VSS(20脚)接地。 2)、外接晶体引脚XTAL1和XTAL2 XTAL1(19脚)接外部晶体的一个引脚。在单片机内部,它是一个反相放大器的输入端,这个放大器构成了片内振荡器。当采用外部振荡器时,对HMOS单片机,此引脚应接地;对CHMOS单片机,此引脚作为驱动端。 XTAL2(18脚)接外晶体的另一端。在单片机内部,接至上述振荡器的反相放大器的输出端。采用外部振荡器时,对HMOS单片机,该引脚接外部振荡器的信号,即把外部振荡器的信号直接接到内部时钟发生器的输入端;对XHMOS,此引脚应悬浮。 3)、控制或与其它电源复用引

8、脚RST/VPD、ALE/PROG、PSEN和EA/VPP RST/VPD(9脚)当振荡器运行时,在此脚上出现两个机器周期的高电平将使单片机复位。推荐在此引脚与VSS引脚之间连接一个约8.2k的下拉电阻,与VCC引脚之间连接一个约10F的电容,以保证可靠地复位。VCC掉电期间,此引脚可接上备用电源,以保证内部RAM的数据不丢失。当VCC主电源下掉到低于规定的电平,而VPD在其规定的电压范围(50.5V)内,VPD就向内部RAM提供备用电源。 ALE/PROG(30脚):当访问外部存贮器时,ALE(允许地址锁存)的输出用于锁存地址的低位字节。即使不访问外部存储器,ALE端仍以不变的频率周期性地出

9、现正脉冲信号,此频率为振荡器频率的1/6。因此,它可用作对外输出的时钟,或用于定时目的。然而要注意的是,每当访问外部数据存储器时,将跳过一个ALE脉冲。ALE端可以驱动(吸收或输出电流)8个LS型的TTL输入电路。对于EPROM单片机(如8751),在EPROM编程期间,此引脚用于输入编程脉冲(PROG)。 PSEN(29脚):此脚的输出是外部程序存储器的读选通信号。在从外部程序存储器取指令(或常数)期间,每个机器周期两次PSEN有效。但在此期间,每当访问外部数据存储器时,这两次有效的PSEN信号将不出现。PSEN同样可以驱动(吸收或输出)8个LS型的TTL输入。 EA/VPP(引脚):当EA

10、端保持高电平时,访问内部程序存储器,但在PC(程序计数器)值超过0FFFH(对851/8751/80C51)或1FFFH(对8052)时,将自动转向执行外部程序存储器内的程序。当EA保持低电平时,则只访问外部程序存储器,不管是否有内部程序存储器。对于常用的8031来说,无内部程序存储器,所以EA脚必须常接地,这样才能只选择外部程序存储器。 对于EPROM型的单片机(如8751),在EPROM编程期间,此引脚也用于施加21V的编程电源(VPP)。 4)、输入/输出(I/O)引脚P0、P1、P2、P3(共32根)P0口(39脚至32脚):是双向8位三态I/O口,在外接存储器时,与地址总线的低8位及

11、数据总线复用,能以吸收电流的方式驱动8个LS型的TTL负载。 P1口(1脚至8脚):是准双向8位I/O口。由于这种接口输出没有高阻状态,输入也不能锁存,故不是真正的双向I/O口。P1口能驱动(吸收或输出电流)4个LS型的TTL负载。对8052、8032,P1.0引脚的第二功能为T2定时/计数器的外部输入,P1.1引脚的第二功能为T2EX捕捉、重装触发,即T2的外部控制端。对EPROM编程和程序验证时,它接收低8位地址。 P2口(21脚至28脚):是准双向8位I/O口。在访问外部存储器时,它可以作为扩展电路高8位地址总线送出高8位地址。在对EPROM编程和程序验证期间,它接收高8位地址。P2可以

12、驱动(吸收或输出电流)4个LS型的TTL负载。 P3口(10脚至17脚):是准双向8位I/O口,在MCS-51中,这8个引脚还用于专门功能,是复用双功能口。P3能驱动(吸收或输出电流)4个LS型的TTL负载。 作为第一功能使用时,就作为普通I/O口用,功能和操作方法与P1口相同。 作为第二功能使用时,各引脚的定义如表所示。 值得强调的是,P3口的每一条引脚均可独立定义为第一功能的输入输出或第二功能。 表 P3各口线的第二功能定义 口线 引脚 第二功能 P3.0 10 RXD(串行输入口) P3.1 11 TXD(串行输出口) P3.2 12 INT0(外部中断0) P3.3 13 INT1(外

13、部中断1) P3.4 14 T0(定时器0外部输入) P3.5 15 T1(定时器1外部输入) P3.6 16 WR(外部数据存储器写脉冲) P3.7 17 RD(外部数据存储器读脉冲) 2、MCS-51单片机的片外总线结构 综合上面的描述可知,I/O口线都不能当作用户I/O口线。除8051/8751外真正可完全为用户使用的I/O口线只有P1口,以及部分作为第一功能使用时的P3口。如图,是MCS-51单片机按引脚功能分类的片外总线结构图。 由图我们可以看到,单片机的引脚除了电源、复位、时钟接入,用户I/O口外,其余管脚是为实现系统扩展而设置的。这些引脚构成MCS-51单片机片外三总线结构,即:

14、 地址总线(AB):地址总线宽为16位,因此,其外部存储器直接寻址为64K字节,16位地址总线由P0口经地址锁存器提供8位地址(A0至A7);P2口直接提供8位地址(A8至A15)。 数据总线(DB):数据总线宽度为8位,由P0提供。 控制总线(CB):由P3口的第二功能状态和4根独立控制线RESET、EA、ALE、PSEN组成。 下表列出各个子系列的配制情况供读则参考。 芯片种类 片内存储器 中断源 定时/计数器 串行口 电源消耗(mA) 制造工艺 ROM/EPROM RAM 8051(8751,8031) 4K 128 5 2 同、异步方式,8位或10位可程序控制 125 HMOS 805

15、2(8752,8032) 8K 256 6 3 同、异步方式,8位或10位可程序控制 100 HMOS 80C51(87C51,80C31) 4K 128 5 2 同、异步方式,8位或10位可程序控制 24 CHMOS 80C52(87C52,80C32) 8K 256 7 3 同、异步方式,8位或10位可程序控制 24 CHMOS 8044(8744,8344) 4K 192 5 2 S.L.U 200 HMOS 3、控制部件 控制部件是单片机的神经中枢,它包括时钟电路、复位电路、指令寄存器、译码以及信息传送控制部件。它以主振频率为基准发出CPU的时序,对指令进行译码,然后发出各种控制信号,

16、完成一系列定时控制的微操作,用来控制单片机各部分的运行。其中有一些控制信号线能简化应用系统外围控制逻辑,如控制地址锁存的地址锁存信号ALE,控制片外程序存储器运行的片内外存储器选择信号EA,以及片外取指信号PSEN第二章、 电路原理分析与设计1、 开锁机构通过单片机送给开锁执行机构,电路驱动电磁锁吸合,从而达到开锁的目的。其原理如图21所示。密码锁开锁机构示意图如下图: 图31密码锁开锁机构示意图当用户输入的密码正确输入的时,单片机便输出开门信号,送到开锁驱动电路,然后驱动电磁锁,达到开门的目的。其实际电路如下图32所示。 2、 按键电路设计 1、 键盘应用4x4组成的0-9数字键及确认键和功

17、能键。用LCD液晶显示器显示,当密码输入时直接显示,当密码输入完毕按下确认键时对输入的密码和设定的密码比较,若正确则开门,此处用led发光二极管做一秒种提示,同时发出“叮咚”声;若不正确,则发出“滴滴”报警声。键盘设计采用行列式键盘,同事可以减少键盘与单片机接口时占用的I/O线的数目,在按键比较多的时候通常采用该方法。其原理图如图3-3 每一条行线与列线的交叉处不相通,而是通过一个按键来连通,利用这种行列式矩阵结构只需要N条行线和M条列线,即可以组成NXM个按键的键盘在该行列式矩阵键盘非键盘编码的单片机系统中,键盘处理程序首先执行等待按键并确认有无按键按下的程序段。 当确认有按键按下后,下一步

18、要识别哪个按键按下。对按键的识别通常有两种方法:一种是常用的逐行扫描查询法;另一种是先反转法。应要求我们采用第一种方案。 逐行(或列)扫描查询法,是一种最常用的按键识别方法,如上图所示键盘,介绍过程如下。 1、判断键盘中有无键按下 将全部行线置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。若所有列线均为高电平,则键盘中无键按下。 2、判断闭合键所在的位置 在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线位置为低电平后,再逐行

19、检测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。 按键的操作面板如图3-4所示,共计数字键10个,功能键6个,另外有指示灯一个、LCD液晶显示器一个和蜂鸣器一个。 图3-4按键操作面板示意图10个数字键用来输入密码,另外六个功能键分别是:CLRE、EN、A、B、F1、F2。其中CLR键的功能是当输入密码错误时,清除前面输入的数据,从新输入。EN键的功能是确认密码。A设置新密码B输入数字密码并检查。F1用作电铃键,F2用来关闭显示器。2、LCD显示器的基本结构和原理 2、LCD显示电路LCD模组是由控制器,驱动器,显示器三部份所组成,而目前市面上LCD的模

20、组驱动/控制器都是由日制的HD44780控制器晶片(或是相容产品),因此外部接脚的功能也都相同,这个控制器的内部共有80 个位元组可供储存由外部送进来的资料,因此使用此款控器的LCD模组最多一次可显示80个字HD44780中储存显示资料的80个位元组,称之为Display DataRAM(DDRAM),DDRAM 的位址从00H67H,共80个Byte。在LCD 上Show 出资料DDRAM 位址与可供显示位置的对应图至于CPU 如何将资料送给LCD 显示的方法,是将欲显示的字元的ASCII 码写到LCD内部的DDRAM,LCD就会将这个自在其对应的位置显示出来.例如,若想在LCD 的左上角处

21、(位址00h),显示A.就将ASCII码-41H,送到DDRAM 的00H 位址.例:第二节 LCD 的接脚规格 虽然LCD 的接脚因制造厂商的不同而排列方式有所不同,不过都是编号由1 至14,的14 根接脚。LCD 模组内只有2 个8 位元暂存器,称为指令暂存器(Instruction RegisterIR),和资料暂存器(Data Register, DR),他们都是8 位元暂存器,由RS 脚来选用 指令暂存器IR 用来接收单片机送来的命令,例如清除显示,或功能设定等等资料暂存器DR则用来接收单片机要写到DDRAM(共80Byte)或CGRAM(共64Byte)的资料缓冲区。当单片机写到D

22、R 暂存器之后。LCD 内部的控制电路会将资料自动写到DD RAM或 CG RAM中,而位址是由LCD内部的位址计数器(Address CounterAC)所指定。而单片机要读取资料时,需先将欲读取的位址放入IR 暂存器中,LCD 就会将其内容放入DR中,然后单片机就可以去读取DR 的资料。图表 、 LCD 模组写入时序图表 、 LCD 模组读出时序图 3、掉电存储单元设计 掉电存储单元的作用是在电源断开的时候,存储当前设计的单价信息。AT24C02是ATMEL公司的2KB字节的电源可檫除存储芯片,采用两线串行的总线和单片机通讯,电压最低可为2.5V,额定电流为1mA,静态电流10UA,芯片内

23、的资料可以在断电的情况下保存40年以上,而且采用8脚的DIP封装。如图3-5示 图3-5 掉电存储单元电路原理图图中R8、R10是上拉电阻,其作用是减少AT24C02的静态功耗,由于AT24C02的数据线和地址线是复用的,采用串口的方式传送数据,所以只用两根线SCL(移位脉冲)和SDA(数据、地址)与单片机传送。每当设定一次掉电,系统自动调用存储程序,将信息存储在芯片内;当系统重新上电时自动调用读存储器程序,将存储器中的信息读到缓存单元中,供主程序使用。4、密码锁电源电路设计为防止停电情况的发生,本电路备有UPS电源,它包含市电供电电路,停电检测电路,电子开关切换电路,蓄电池充电电路和蓄电池组

24、成。电源电路图如图示 图3-6市供电电路220V市电通过变压器降压成12V的交流电,再经整流桥式整流,7805稳压到5V送往电子切换电路,由于本电路功耗少,所以选10W的小型变压器。由R6、R7、R8、R9及IC14构成比较电压器,正常情况下,V+V-IC14输出高电平,由T3、T4构成的达林顿管使继电器J开启,将其常开触点把蓄电池和电路相连,实现市电与蓄电池的切换,保证电子密码锁的正常工作。电路图如3-7所示 图3-7停电检测及电子开关切换电路T1、T2构成的蓄电池自动充电电路,其在充电池充满后自动停止充电,其中D1亮为正在充电,D2为工作指示。其电路图如图3-8所示 5、总框图设计6、 整

25、体程序设计和程序流程图 1、程序分为主程序和中断服务程序两个主要部分,主程序完成变量和单片机特殊功能寄存器的初始化后,进入一个循环结构。在循环中,首先判断有无按键按下,若有则判断是数字键还是功能键,根据按键的情况执行相应的功能。然后根据密码是否正确的判断情况,执行相应的操作。循环中最后需要显示的内容通过动态扫描子在液晶显示器上显示。中断服务程序需要实现待机计时5秒。单片机采用MCS51系列的单片机8051作为主要主控制器,外围电路器件包括液晶显示驱动、蜂鸣器的驱动输出、独立式键盘和发光二极管的输出等。2、程序主要包括以下几个模块1)、主程序模块主要完成初始化、设置中断向量、检查有无按键按下、以

26、及调用显示等等。2)、键盘扫描及识别子程序键盘采用查询方式,放于主程序中,当没有按键按下时,单片机循环主程序,当按键按下时便转向相应的子程序处理,处理结束后返回。3)、掉电存储服务程序当比较密码的时候,需要读取AT24C02程序,将存储于芯片内的数据读到RAM中,然后和输入密码相比较,当修改密码时需要把密码保存于AT24C02中。4)、显示子程序包括关闭状态显示子程序(dis-A)、开锁状态显示子程序(DIS-B)、密码输入及修改状态显示子程序(DIS-C)、密码输入错误报警状态子程序(DIS-D).3、程序流程图第四章、程序设计1#include#define uint unsigned i

27、nt#define uchar unsigned charvoid key_scan();uchar count0,count1,count3,num,n=0,temp,a,j,count4;uchar mima4; /初始密码存储区uchar tab_key50; /输入密码存储区uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;bit enterflag; /确认键按下与否的标志bit mimaflag; /密码正确与否的标志bit xiugaif

28、lag; /修改密码标志 bit enter1flag; /修改密码确认键标志 sbit red=P37;sbit bell=P36;sbit rs=P20; sbit rw=P21;sbit lcden=P22; sbit alarm_out=P32;sbit scl=P34;sbit sda=P35;uchar code table1=input the passco;uchar code table2=de: -;uchar code table3=*;uchar code table4=right (_) ;uchar code table5=error!;uchar code tab

29、le6=define the passc;uchar code table7=ode: -;uchar code table8=code is new;/*键盘消抖函数*void delay1() ; void delay2(uchar x) uchar a,b; for(a=x;a0;a-) for(b=100;b0;b-); void delay(uint z) uint x,y; for(x=z;x0;x-) for(y=110;y0;y-);/*e2room的初始化*void start() /开始信号 sda=1; delay1(); scl=1; delay1(); sda=0;

30、delay1();void stop() /停止 sda=0; delay1(); scl=1; delay1(); sda=1; delay1();/*应答信号*void respond() uchar i; scl=1; delay1(); while(sda=1)&(i250)i+; scl=0; delay1();/*写字节操作函数*void write_byte(uchar date) uchar i,temp; temp=date; for(i=0;i4;i+) temp=temp1; /保持最高位,左移到进位CY scl=0; delay1(); sda=CY; delay1()

31、; scl=1; delay1(); scl=0; delay1(); sda=1;/总线释放 delay1();/*读字节操作函数*uchar read_byte() uchar i,k; scl=0; delay1(); sda=1; delay1(); for(i=0;i4;i+) scl=1; delay1(); k=(k1)|sda; /或运算,放到最低位 scl=0; delay1(); return k;/*写地址函数*void write_add(uchar address,uchar date) start(); write_byte(0xa0); respond(); wr

32、ite_byte(address); respond(); write_byte(date); respond(); stop();/*读地址函数*uchar read_add(uchar address) uchar date; start(); write_byte(0xa0); respond(); write_byte(address); respond(); start(); write_byte(0xa1); respond(); date=read_byte(); stop(); return date;/*LCD1602的初始化*void write_com(uchar com

33、) rs=0; lcden=0; P0=com; delay(5); lcden=1; delay(5); lcden=0; void write_date(uchar date) rs=1; lcden=0; P0=date; delay(5); lcden=1; delay(5); lcden=0; /*密码比较函数*bit mimacmp() bit flag; uchar i; for(i=0;i4;i+) if(mimai=tab_keyi) flag=1; else flag=0; i=4; return(flag); /返回flag/*LCD显示函数开始*void lcd_dis

34、play()uchar i=0;write_com(0x80+0x40+4);for(i=0;in;i+)write_date(table30);/*键盘功能分配函数群开始*/* 0 * 1 *2 * 3* /* 4* 5* 6 *7 */*8* 9* 确认(en) /*清除(clr)*修改密码键(a)void key_manage1()tab_keyn=0;n+;if(xiugaiflag=1)mimacount4=0;count4+;void key_manage2()tab_keyn=1;n+;if(xiugaiflag=1)mimacount4=1;count4+;void key_m

35、anage3()tab_keyn=2;n+;if(xiugaiflag=1)mimacount4=2;count4+;void key_manage4()tab_keyn=3;n+;if(xiugaiflag=1)mimacount4=3;count4+;void key_manage5()tab_keyn=4;n+;if(xiugaiflag=1)mimacount4=4;count4+;void key_manage6()tab_keyn=5;n+;if(xiugaiflag=1)mimacount4=5;count4+;void key_manage7()tab_keyn=6;n+;if

36、(xiugaiflag=1)mimacount4=6;count4+;void key_manage8()tab_keyn=7;n+;if(xiugaiflag=1)mimacount4=7;count4+;void key_manage9()tab_keyn=8;n+;if(xiugaiflag=1)mimacount4=8;count4+;void key_manage10()tab_keyn=9;n+;if(xiugaiflag=1)mimacount4=9;count4+;/*确认键* void key_manage11() enterflag=1; /确认键按下 if(n=4) /只

37、有输入4个密码后按确认才做比较 mimaflag=mimacmp(); else mimaflag=0; if(enterflag=1) enterflag=0; n=0; /用FFFF清除已经输入的密码 for(count3=0;count34;count3+) delay(5); tab_keycount3=0x0f; TR1=1; /打开计数器1 count1=0; /定时器1由50MS累计到1S所用的计数器 if(mimaflag=1) a=0; write_com(0x01); write_com(0x80); for(count3=0;count316;count3+) write

38、_date(table4count3); /密码正确,显示RIGHT,绿灯亮 delay(5); else n=0; red=0; bell=0; a+; if(a=1) for(count3=0;count38;count3+) /ffffffff清除密码 delay(5); tab_keycount3=0x0f; write_com(0x01); write_com(0x80); for(count3=0;count316;count3+) write_date(table5count3); /密码错误,显示 error,红灯亮 alarm_out=0; /报警灯亮 pw_error=0;

39、 /密码错误指示灯亮 audio_out=0; /长鸣声报警 delay(60000); delay(60000); delay(60000); delay(60000); delay(60000); delay(60000); delay(60000); delay(60000); delay(60000); audio_out=1; /- TR1=1; /打开定时器计时 cnt_state=2; /下一状态处于15秒计时的状态 delay(5); TR1=0; void key_manage12()tab_keyn=11;n+; /密码计数清零/*取消键* void key_manage1

40、3()n=0; /密码计数清零write_com(0x80); /指针所指位置for(count3=0;count316;count3+) write_date(table1count3); /第一行显示INPUT THE PASSPORD: delay(5);write_com(0x80+0x40);for(count3=0;count316;count3+) write_date(table2count3); /开机显示- delay(5); tab_keycount3=0x0f; /用FFFF清楚已经输入的密码/*修改密码键*void key_manage14() uchar aa=0;

41、 n=0; xiugaiflag=1; write_com(0x01); write_com(0x80);for(count3=0;count316;count3+) write_date(table9count3); /显示define the password delay(5); tab_keycount3=0x0f; /用FFFF清楚已经输入的密码 write_com(0x80+0x40);for(count3=0;count316;count3+) write_date(table10count3); /显示- delay(5);TR0=1;/*修改密码键的确认键*void key_m

42、anage15()n=0;enter1flag=1;if(enter1flag=1) enter1flag=0; count4=0; for(count3=0;count316;count3+) tab_keycount3=0x0f; /用FFFF清楚已经输入的密码 write_com(0x01); write_com(0x80); for(count3=0;count316;count3+) write_date(table11count3); delay(100); TR1=1; count1=0;void key_manage16()tab_keyn=15;n+;/*定时器1的50MS,

43、共延时1秒*void time_1() interrupt 3 TH1=(65536-50000)/256; TL1=(65536-50000)%256; if(count120) count1+; else /计时到1S TR1=0; count1=0; mimaflag=0; red=1; bell=1; /显示FFFF write_com(0x01); write_com(0x80); for(count3=0;count316;count3+) write_date(table1count3); /显示PASSWORD A OR B KEY delay(5); write_com(0x

44、80+0x40); for(count3=0;count316;count3+) write_date(table2count3); /开机显示FFFF delay(5); /*定时0*void time_0() interrupt 1 TH0=(65536-50000)/256; TL0=(65536-50000)%256;if(count44) key_scan();else TR0=0; count4=0;/初始化函数void init() uchar i; lcden=0; write_com(0x38); /打开显示模式设置 write_com(0x0c); /打开显示,光标等等设置

45、未零 write_com(0x06); /当读或写一个字符后地址指针加一,且光标加一,当写一个字符后整频显示左移, write_com(0x01); /清零指令 write_com(0x80); /指针所指位置 /定时器初始化 TMOD=0x11; /T0,T1工作方式1 TH0=(65536-2000)/256; TL0=(65536-2000)%256; /T0初始化2MS TH1=(65536-50000)/256; TL1=(65536-50000)%256; /T1初始化50MS TR1=0; ET1=1; EA=1; TR0=0; ET0=1; count0=0; /初始没有密码输

46、入,故为零 enterflag=0; /没有确认键按下 mimaflag=0; /密码正确与否键先置零 red=1; /红灯不亮/*密码存入EPROM中* sda=1; delay(5); scl=1; delay(5); for(i=0;i8;i+) write_add(i,8); delay2(100); for(i=0;i8;i+) mimai=read_add(i); delay(5); void main() rw=0; init(); write_com(0x80); /指针所指位置 for(count3=0;count316;count3+) write_date(table1c

47、ount3); /第一行显示INPUT THE PASSPORD: delay(5); write_com(0x80+0x40); for(count3=0;count316;count3+) write_date(table2count3); /开机显示FFFF delay(5); while(1) key_scan(); /调用键盘扫描函数 lcd_display(); /*键盘扫描函数开始*void key_scan()/*扫描第一行*P1=0xfe; temp=P1;temp=temp&0xf0;if(temp!=0xf0)delay(100);if(temp!=0xf0)temp=P

48、1;switch(temp)case 0xee:key_manage1();break;case 0xde:key_manage2();break;case 0xbe:key_manage3();break;case 0x7e:key_manage4();break;while(temp!=0xf0)temp=P1;temp=temp&0xf0;/*扫描第二行*P1=0xfd; temp=P1;temp=temp&0xf0;if(temp!=0xf0)delay(100);if(temp!=0xf0)temp=P1;switch(temp)case 0xed:key_manage5();break;

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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