《单片机原理与应用技术课程设计报告论文基于单片机控制的电子密码锁.doc》由会员分享,可在线阅读,更多相关《单片机原理与应用技术课程设计报告论文基于单片机控制的电子密码锁.doc(24页珍藏版)》请在三一办公上搜索。
1、单片机原理与应用技术课程设计报告(论文)基于单片机控制的电子密码锁专业班级:_电子114_姓名:_*_时 间:2014年11月29日指导教师:_*_2014年 11月 29日基于单片机控制的电子密码锁一 设计要求(一)基本功能1. 状态显示功能: 锁定状态时系统用3位数码管显示OFF,用3位数码管显示成功开锁次数;成功开锁时用3位数码管显示888,用3位数码管显示成功开锁次数。2. 密码设定功能: 通过一个44的矩阵式键盘可以任意设置用户密码(1-16位长度),同时系统掉电后能自动记忆和存储密码在系统中。3. 报警和加锁功能:密码的输入时间超过12秒或者连续3次输入失败,声音报警同时锁定系统,
2、不让再次输入密码。此时只有使用管理员密码方能对系统解锁。(二)扩展功能可增加遥控控制功能二计划完成时间 三周1第一周完成软件和硬件的整体设计,同时按要求上交设计报告一份。2第二周完成软件的具体设计和硬件的制作。3第三周完成软件和硬件的联合调试。目录基于单片机控制的电子密码锁3摘要3关键词3引言31.总体设计方案31.1设计思路41.2方案确立41.3总设计框图42单片机硬件电路分析52.1单片机引脚配置52.2复位电路的设计82.3时钟电路的设计82.4密码锁控制电路92.4.1矩阵键盘电路的设计92.4.2报警控制电路的设计102.4.3液晶显示电路113系统软件设计133.1初始化及按键识
3、别133.1开锁处理133.2改密处理143.3液晶显示子程序144心得体会155参考文献166附录一:电路总原理图167附录二:PCB板178附录三:程序清单17基于单片机控制的电子密码锁电子114 *摘要本系统由单片机系统、矩阵键盘、液晶显示和报警系统组成。系统能完成开锁、超时报警、超次锁定、管理员解密、修改用户密码基本的密码锁的功能。除上述基本的密码锁功能外,还具有调电存储、声光提示等功能,依据实际的情况还可以添加遥控功能。本系统成本低廉,功能实用。关键词单片机;电子密码锁;矩阵键盘密码锁;ATM89C52;LCD1602;矩阵键盘引言在日常的生活和工作中, 住宅与部门的安全防范、单位的
4、文件档案、财务报表以及一些个人资料的保存多以加锁的办法来解决。若使用传统的机械式钥匙开锁,人们常需携带多把钥匙, 使用极不方便, 且钥匙丢失后安全性即大打折扣。随着科学技术的不断发展,人们对日常生活中的安全保险器件的要求越来越高。为满足人们对锁的使用要求,增加其安全性,用密码代替钥匙的密码锁应运而生。密码锁具有安全性高、成本低、功耗低、易操作等优点。在安全技术防范领域,具有防盗报警功能的电子密码锁逐渐代替传统的机械式密码锁,克服了机械式密码锁密码量少、安全性能差的缺点,使密码锁无论在技术上还是在性能上都大大提高一步。随着大规模集成电路技术的发展,特别是单片机的问世,出现了带微处理器的智能密码锁
5、,它除具有电子密码锁的功能外,还引入了智能化管理、专家分析系统等功能,从而使密码锁具有很高的安全性、可靠性,应用日益广泛。随着人们对安全的重视和科技的发展,许多电子智能锁(指纹识别、IC卡辨认)已在国内外相继面世。但是这些产品的特点是针对特定的指纹和有效卡,只能适用于保密要求的箱、柜、门等。而且指纹识识别器若在公共场所使用存在容易机械损坏,IC卡还存在容易丢失、损坏等特点。加上其成本较高,一定程度上限制了这类产品的普及和推广。鉴于目前的技术水平与市场的接收程度,电子密码锁是这类电子防盗产品的主流。1.总体设计方案1.1 设计思路该电路是一种采用以ATM89C52为核心的单片机控制方案。利用单片
6、机灵活的编程设计和丰富的IO端口,及其控制的准确性,不但能实现基本的密码锁功能,还要根据实际需要添加调电存储、声光提示甚至增加遥控控制功能。1.2 方案确立为了实现密码的保密性,采用一个44的矩阵式键盘可以任意设置用户密码(1-16位长度),从而提高了密码的保密性。设计采用一个超级密码,送电开机时,只要输入超级密码便可开门,这样可预防停电后再送电时无密码可用。采用了1602液晶显示器来作为显示单元,提高了可读性,使用户对密码锁的运行情况一目了然。1.3 总设计框图本设计主要由单片机、矩阵键盘、液晶显示器和密码存储等部分组成。其中矩阵键盘用于输入数字密码和进行各种功能的实现。由用户通过连接单片机
7、的矩阵键盘输入密码,后经过单片机对用户输入的密码与自己保存的密码进行对比,从而判断密码是否正确,然后控制引脚的高低电平传到开锁电路或者报警电路控制开锁还是报警,实际使用时只要将单片机的负载由继电器换成电子密码锁的电磁铁吸合线圈即可。系统整体框图如图2.1所示。图 2.1 总设计框图各模块功能如下:1键盘输入模块:分为密码输入按键与几个功能按键,用于完成密码锁输入功能。2密码存储模块:用于完成掉电存储功能,使修改的密码断电后仍能保存。3蜂鸣器报警电路:用于完成输错密码时候的警报功能。4.晶振电路:用于单片机的起振。5复位电路:完成系统的复位。6显示模块:用于完成对系统状态显示及操作提示功能。7.
8、 LED显示模块:用于辅助报警与输入提示。8开锁电路:应用继电器及发光二极管模拟开锁,完成开锁及开锁提示。2 单片机硬件电路分析2.1 单片机引脚配置在单片机的40条引脚中,有2条用于主电源的引脚,2条外接晶体的引脚,控制或其他电源复用引脚RST/ Vpd、ALE、和VPP,32条输入/输出引脚。下面就本系统用到的引脚分别说明这些引脚的名称和功能。(1)主电源引脚Vcc和VssVcc:接+5V电源Vss:接电源地(2)钟电路引脚XTAL1和XTAL2XTAL1:接外部晶体的一端。在单片机内部,它是反相放大器的输入端,该放大器构成了片内振荡器。在采用外部时钟电路时,对于HMOS单片机,此引脚必须
9、接地;对CHMOS单片机,此引脚作为驱动端。XTAL2:接外部晶体的另一端。在单片机内部,接至上述振荡器的反相放大器的输出端,振荡器的频率是晶体振荡频率。若采用外部时钟电路时,对于HMOS单片机,该引脚输入外部时钟脉冲;对于CHMOS单片机,此引脚应悬空。(3)信号引脚RST/VpdRST/Vpd:复位/备用电源输入端。单片机上电后,只要在该引脚上输入24个振荡周期(2个机器周期)宽度以上的高电平就会使单片机复位;若在RST与Vcc之间接一个10F的电容,而在RST与Vss之间接一个8.2K的下拉电阻,则可实现单片机上电自动复位。RST/Vpd具有复用功能,在主电源Vcc掉电期间,该引脚可接上
10、+5V备用电源。当Vcc下掉到低于规定的电平,而Vpd在其规定的电压范围内时,Vpd就向片内RAM提供备用电源,以保持片内RAM中的信息不丢失,复电后能继续正常(4)输入/输出(I/O)引脚P0、P1、P2和P3MCS-51单片机有4个双向并行的8位I/O口P0P3,P0口为三态双向口,可驱动8个TTL电路,P1、P2、P3口为准双向口(作为输入时,口线被拉成高电平,故称为准双向口),其负载能力为4个TTL电路。P0.0-P0.7:P0口是一个8位双向I/O端口。在访问片外存储器时,它分时提供低8位地址和作8位双向数据总线。在EPROM编程时,从P0口输入指令字节;在验证程序时,则输出指令字节
11、(验证时,要外接上拉电阻)。P0口能以吸收电流的方式驱动8个LSTTL负载。P1.0-P1.7:P1口是8位准双向I/O端口。在EPROM编程和程序验证时,它输入低8位地址。P1口能驱动4个LSTTL负载。图 3-2图3-3P2.0-P2.7:P2口是一个8位准双向I/O端口。在CPU访问外部存储器时,它输出高8位地址。在对EPROM编程和程序验证时,它输入高8位地址。P2口可驱动4个LSTTL负载。P3.0-P3.7:P3口是8位准双向I/O端口。它是一个复用功能口。作为第一功能使用时,为普通I/O口,其功能和操作方法与P1口相同。作为第二功能使用时,各引脚的定义如表3-1所示。P3口的每一
12、条引脚均可独立定义为第一功能的输入输出或第二功能。P3口能驱动4个LSTTL负载。图3-4图3-5表3-1:口线 第二功能P3.0P3.1P3.2P3.3P3.4P3.5P3.6P3.7RXD (串行口输入)TXD (串行口输出)INT0 (外部中断0输入)INT1(外部中断1输入) T0 (定时器0的外部输入)T1 (定时器1的外部输入)WR (外部数据存储器“写”信号输出)RD (外部数据存储器“读”信号输出)2.2 复位电路的设计复位是单片机的初始化操作。单片机启运运行时,都需要先复位,其作用是使CPU和系统中其他部件处于一个确定的初始状态,并从这个状态开始工作。因而,复位是一个很重要的
13、操作方式。但单片机本身是不能自动进行复位的,必须配合相应的外部电路才能实现。该复位电路采用按键电平复位式复位电路。当单片机已在运行当中时,按下复位键S后松开,在复位引脚RET(9脚)脚持续出现24个振荡器脉冲周期(即2个机器周期)的高电平信号将使单片机复位。也能使RST为一段时间的高电平,从而实现上电或开关复位的操作。如图3.2所示。图3.2 复位电路2.3 时钟电路的设计时钟电路为单片机产生时序脉冲,单片机所有运算与控制过程都是在统一的时序脉冲的驱动下的进行的,如果单片机的时钟电路停止工作(晶振停振),那么单片机也就停止运行了。当采用内部时钟时,连接方法如下图所示,在晶振引脚XTAL1(19
14、脚)和XTAL2(18脚)引脚之间接入一个12MHZ晶振,两个引脚对地分别再接入一个电容即可产生所需的时钟信号,电容的容量一般在几十皮法,如30PF。如图3.3所示。图3.3 时钟电路2.4 密码锁控制电路2.4.1 矩阵键盘电路的设计为了加强密码的保密性,采用一个44的矩阵式键盘可以任意设置用户密码(1-16位长度),从而提高了密码的保密性,同时也能减少与单片机接口时所占用的I/O口线的数目,节省了单片机的宝贵资源,在按键比较多的时候,通常采用这种方法。其原理图如图3.4所示。图 3.4 矩阵键盘每一行与每一列的交叉处不相同,而是通过一个按键来连通,利用这种行列式矩阵结构只需要N根行线与M根
15、列线,即可组成具有N M 个按键的矩阵键盘。在这种行列式矩阵键盘编码的单片机系统中,键盘处理程序首先执行等待按键并确认有无按键按下的程序段。当确认有按键按下后,下一步就是要识别哪一个按键被按下。对键的识别方法通常有两种:一种是通用的组行扫描查询法;另一种是速度较快的线反转法。此系统中,我们采用线反转法。首先辨别键盘中有无按键被按下,在单片机I/O口向键盘送全扫描字,然后读入行线状态来判断。具体方法是:向行线输出全扫描字00H,把全部列线置成低电平,然后将列线的电平状态读入累加器A中。如果有按键被按下,总会有一根行线电瓶被拉至低电平从而使行线不全为1。判断键盘中哪一个按键被按下通常是通过将列线逐
16、列至低电平后,检查行输入状态来实现的。方法是:依次给列线送低电平,然后检查所有行线状态,如果全为1,则所按下的按键不在此列;如果不全为1,则所按下的按键必在此列,而且是在与零电平行线相交的交点上的那个按键。按键的操作面板如图3.5所示,共计10个数字键和6个功能键,键盘侧面还有一个微型蜂鸣器。键盘侧面还有一个蜂鸣器,每操作一次,它便发出声音,提示操作成功。10个数字键用来输入密码,另外6个功能键分别是:A查看键、B设置新密码键、C退格键、D返回键、E确认/退出键和F开启键。其中退格键的功能是当输入密码错误的时候,清除前面已经输入的数据,重新输入。确认键的功能是确认输入的密码。开启键是切换到密码
17、输入状态,输密码前需按该键才能开始输入密码。按“F”键启动进入输入密码程序,按住“F”键不放3秒以后进入输入密码状态。在输入密码状态下,0-9数字键为有效键,有时间和次数限制功能:只有三次输入密码机会,每次限制在10秒内完成,输入密码有误或每次输入密码超时,则被认为是密码输入错误。当3次输入都错误时,程序将返回起始状态。密码输入正确后,继电器吸合,表示锁被打开。在密码输入正确的情况下,程序进入查看密码和修改密码状态,按“E”键退出查看密码状态。按“B”键进入重新设置密码状态,在输入密码时,如发现输入有误,可按“C”删除后,重新输入,按“E”确认后,程序退出修改密码状态。按“D”键或等待10秒后
18、程序退出修改密码和查看密码状态,回到起始状态。程序内定密码为:987654,送电开机时,只要输入内定密码便可开门,这样可预防停电后再送电时无密码可用。当密码输入错误或密码输入时间超过规定的时间时,蜂鸣器报警。表3.1 按键功能表按键键名功能说明0-9键数字键输入密码A键查看键查看密码B键设置新密码键设置新密码C键退格键退格删除D键返回键返回到开始界面E键确认/退出键确认/退出F键开启键开启密码输入2.4.2 报警控制电路的设计该电路采用单频音报警电路,实现单频音报警的接口电路比较简单,其发音元件通常可采用压电蜂鸣器,当在蜂鸣器两引脚上加315V直流工作电压,就能产生3kHZ左右的蜂鸣振荡音响。
19、压电式蜂鸣器结构简单、耗电少,更适于在单片机系统中应用。压电式蜂鸣器,约需10mA的驱动电流,可在某端口接上一只三极管和电阻组成的驱动电路来驱动,P.3.1接三极管基极输入端,当P3.7输出高电平“1”时,三极管导通,蜂鸣器的通电而发音,当P3.1输出低电平“0”时,三极管截止,蜂鸣器停止发音。如图3.6所示图 3.6 报警电路控制2.4.3 液晶显示电路液晶显示电路如图43所示,通过P1口传输数据,控制信号E1、E2、A0分别连在P2.0、P2.1、P2.2。单片机通过P1口和部分P3口对液晶进行显示控制。可调电阻RW1控制液晶显示的图3-4 液晶显示电路本系统设计的显示电路是为了给使用者以
20、提示而设置的为了达到界面友好的目的,显示部分由液晶显示器LCD1602取代普通的数码管完成。开锁时,按下键盘上的开锁按键后,利用键盘上的数字键09输入密码,每按下一个数字键后在显示器上显示一个*,输入多少位就显示多少图 3.8 开机显示图 3.9 输入状态个*。当密码输入完成时,按下确认键,如果输入的密码正确的话, LCD显示“888”,单片机其中P3.0引脚会输出低电平,使三极管T2导通,电磁铁吸合,继电器开关跳转,电子密码锁打开,如果密码不正确,LCD显示屏会显示“IUPUT ERROR”,P3.0输出的是高电平,电子密码锁不能打开。通过LCD显示屏,可以清楚地判断出密码锁所处的状态显示器
21、主要用于显示以下几个字符,指示如图3.8所示3 系统软件设计系统的主程序如图4-1所示。由于用户在使用系统的过程中,可能在任何时刻按下任何按键,而程序都必须对此作出正确响应。图4.1 主程序流程图3.1 初始化及按键识别如图4.2,系统的初始化包括堆栈起始地址的设定,两个定时/计数器的设定,液晶显示模式的设定,密码缓冲区的初始化,一些自定义数据空间的初始化,蜂鸣器初始化发声等操作。系统初始化并读取密码完成后,液晶显示PASSWORD CONTROL,提示用户可以输入密码。此时程序即不断测试按键,检查是否有按键被按下。如果有,则进行按键识别;如果没有按键按下,或者按下的按键没有被识别,R3赋值0
22、FFH,并跳转至按键测试。实际程序运行时,绝大部分时间都在测试按键,等待用户输入。3.2 开锁处理首先LCD初始化,输入密码,密码正确则使开锁电路动作,继电器得电,开锁指示灯亮。开锁程序流程图如图4.3所示。图4.2 初始化及按键识别流程图3.3 改密处理如图4.4,可以看出,改密键的处理流程跟开锁键类似,都需检查密码是否正确,错误的话,提示重新输入,只有输入密码正确才可以进行改密。然后再按更改键,密码更改程序被调用,进而更改密码,此过程,LCD都会显示信息。3.4 液晶显示子程序液晶显示子程序在每次更新显示内容时都会被调用,其流程如图4.5所示。图4.3 开锁流程图图4.4 改密流程图图4.
23、5 液晶显示子程序流程图每次更新显示内容前,需清显示清空LCD原先的显示内容,清屏指令的指令码为01H,即将P0口赋值01H,然后写入指令寄存器IR。LCD1602要显示的内容是根据其控制器内置的字符码表,事先列出要显示的ASCII字符串。每次送一个字符的ASCII码入P0口,然后写入数据寄存器DR,最后将字符地址加一,LCD1602会将写入的ASCII码对应的字符依次显示出来。由于显示字符串的长度不尽相同,约定每串字符以00H结尾;程序检测到字符码为00H时,即停止写入,返回。LCD显示的内容在下次更新前会一直保持。4 心得体会课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问
24、题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,在同学的帮助下,终于游逆而解。非常感谢!5 参考文献1单片机原理及及应用王迎旭编机械工业出版社 20012单片机应用程序设计技术周航慈著北京航空航天大学出版社3 黄志君,高峰,王建.轮胎压力监测系统J.广西工学院学报.2006(4):912.4 单春贤,韩钧等. 一种集成度较高的轮胎压力监测系统设计J. 拖拉
25、机与农用运输车,2006(6):3338.5张洪润单片机应用技术教程北京:清华大学出版社,19976沙占友 A Study of the Control System with Intelligent Temperature Sensors.ICEMI第四届国际电子测量学术会议论文集,电子测量与一起学报.第13卷,1998(8),ISTP收录7 The Intel Microprocessors Architecture,Programming,and Interfacing .高等教育出版社(影印版),2001 20-081201-05-018 JONATHAN D. NASH, DOUGL
26、AS R. CALDWELL, MICHAEL J. ZELMAN, AND JAMES N. MOUM A Thermocouple Probe for High-Speed Temperature Measurement in the Ocean. Manuscript received 18 August 1997, in final form 9 November 1998:1447-1449.9 姚四改编著Protel 99 SE 电子线路设计教程上海交通大学出版社 2002.610 谢自美编著电子线路设计实验测试(第二版)华中科技大学出版社 200011电子制作2004.1012电
27、子制作2004.126 附录一:电路总原理图7 附录二:PCB板8 附录三:程序清单BEEP BIT P3.1 RELAY BIT P3.6 SEC10 BIT 20H.1 SEC3 BIT 20H.2 PASS_OK BIT 20H.3 PASS_OLD EQU 30H PASS_NEW EQU 37H PASS_DIS EQU 40H COUNT EQU 47H SEC EQU 48H POS EQU 49H BUSY BIT P0.7 LCD_RS BIT P2.0 LCD_RW BIT P2.1 LCD_EN BIT P2.2 DATAPORT EQU P0 LCD_X EQU 29H
28、TIMES EQU 2AH BUSY_CHECK BIT 20H.0 ORG 0000HAJMP MAIN ORG 000BHLJMP TIMER0 ORG 0050HMAIN:MOV SP,#60H MOV P0,#0FFHMOV P1,#0FFHMOV P2,#0FFHMOV TMOD,#01H MOV TH0,#4CH MOV TL0,#00HSETB ET0SETB EAMOV PASS_OLD,#09H MOV PASS_OLD+1,#08HMOV PASS_OLD+2,#07HMOV PASS_OLD+3,#06HMOV PASS_OLD+4,#05HMOV PASS_OLD+5,
29、#04H ACALL LCD_INIT MAIN1:CLR TR0CLR SEC3CLR SEC10CLR PASS_OKMOV COUNT,#00HMOV SEC,#00HSETB RELAY ACALL MENU1 ACALL START_INMOV R4,#03H MAIN2: ACALL PASS_IN ACALL PASS_COMPMOV R5,#100 ACALL DELAYJB PASS_OK,MAIN3DJNZ R4,MAIN2AJMP MAIN1MAIN3: ACALL PASS_LOOK ACALL CHANGE_PASSJB SEC10,MAIN4ACALL KEY_SC
30、ANCJNE A,#0DH,MAIN3 MAIN4:ACALL BEEP_BLAJMP MAIN1MENU1:MOV B,#00HOV DPTR,#INFO1 ACALL W_STRING1MOV B,#00HMOV DPTR,#INFO4 ACALL W_STRING2 RETMENU2:MOV B,#00HOV DPTR,#INFO3 ACALL W_STRING1MOV B,#00HMOV DPTR,#INFO2 ACALL W_STRING2 RETMENU3:MOV B,#00HMOV DPTR,#INFO7 ACALL W_STRING1MOV B,#00HMOV DPTR,#IN
31、FO2 ACALL W_STRING2 RETMENU4:MOV B,#00HMOV DPTR,#INFO8 ACALL W_STRING1MOV B,#00HMOV DPTR,#INFO2 ACALL W_STRING2 RETINFO1: DB PASSWORD CONTROL,0INFO2: DB PASSWORD - ,0INFO3: DB INPUT PASSWORD ,0INFO4: DB O F F ,0INFO5: DB 8 8 8 ,0INFO6: DB IUPUT ERROR ,0INFO7: DB LOOK PASSWORD ,0INFO8: DB RESET PASSW
32、ORD ,0KEY_SCAN:MOV P1,#0F0H NOPMOV A,P1ANL A,#0F0H MOV B,AMOV P1,#0FH NOPMOV A,P1ANL A,#0FH ORL A,BCJNE A,#0FFH,KEY_IN1 AJMP KEY_ENDKEY_IN1: MOV B,AMOV DPTR,#KEYTABLE MOV R3,#0FFH KEY_IN2: INC R3MOV A,R3MOVC A,A+DPTR CJNE A,B,KEY_IN3 MOV A,R3AJMP KEY_ENDKEY_IN3: CJNE A,#00H,KEY_IN2 KEY_END: RETKEYTA
33、BLE:DB 0EEH,0EDH,0EBH,0E7H,0DEHDB 0DDH,0DBH,0D7H,0BEH,0BDHDB 0BBH,0B7H,07EH,07DH,07BHDB 077H,00HPASS_PLAY:MOV R0,#PASS_OLD MOV R2,#06H MOV LCD_X,#09H ACALL SET_X2 P_PLAY: MOV A,R0 ADD A,#30H ACALL WDATA INC R0 DJNZ R2,P_PLAY RETSTART_IN:CLR SEC3MOV COUNT,#00H MOV SEC,#00HS_IN1: ACALL KEY_SCANCJNE A,
34、#0FH,S_IN1 SETB TR0S_IN2: ACALL KEY_SCANCJNE A,#0FH,S_IN3 JNB SEC3,S_IN2 CLR TR0CLR SEC3MOV SEC,#00HMOV COUNT,#00H ACALL MENU2 ACALL BEEP_BL AJMP S_ENDS_IN3:CLR TR0CLR SEC3MOV COUNT,#00H MOV SEC,#00HAJMP S_IN1S_END: RETPASS_IN: ACALL MENU2MOV R0,#PASS_NEW MOV R2,#06H MOV LCD_X,#09H ACALL SET_X2CLR S
35、EC10MOV SEC,#00H MOV COUNT,#00H SETB TR0P_IN1: JB SEC10,P_END ACALL KEY_SCANCJNE A,#0FFH,P_IN2 AJMP P_IN1P_IN2: ACALL KEY_SCAN CJNE A,#0AH,P_IN3 P_IN3:JNC P_IN1 MOV A,R3MOV R0,AINC R0ADD A,#30H ACALL LCD_BUSYMOV DATAPORT,23HSETB LCD_RS CLR LCD_RW NOPSETB LCD_EN NOP CLR LCD_EN ACALL BEEP_BL DJNZ R2,P
36、_IN1P_END:CLR TR0MOV SEC,#00H CLR SEC10MOV COUNT,#00H RETCHANGE_PASS: ACALL KEY_SCANCJNE A,#0BH,CH_END CLR TR0 ACALL MENU4MOV R0,#PASS_OLD MOV R2,#06H MOV POS,#09H ACALL BEEP_BLCH_IN1: ACALL KEY_SCANCJNE A,#0FFH,CH_IN2 AJMP CH_IN1CH_IN2:ACALL KEY_SCAN CJNE A,#0AH,CH_IN3 CH_IN3:JNC CH_IN4 MOV LCD_X,P
37、OS ACALL SET_X2MOV A,R3MOV R0,AADD A,#30H ACALL WDATA ACALL BEEP_BL INC POSINC R0DJNZ R2,CH_IN1 AJMP CH_IN6CH_IN4: ACALL KEY_SCAN CJNE A,#0CH,CH_IN1 MOV A,POSCJNE A,#09H,CH_IN5 AJMP CH_IN1CH_IN5:DEC POSDEC R0INC R2MOV LCD_X,POS ACALL SET_X2MOV A,#2DH ACALL WDATA ACALL BEEP_BL AJMP CH_IN1CH_IN6: ACAL
38、L KEY_SCAN CJNE A,#0EH,CH_IN7 ACALL MENU1 ACALL BEEP_BLAJMP CH_ENDCH_IN7: CJNE A,#0CH,CH_IN6 AJMP CH_IN5CH_END:SETB TR0 RETPASS_COMP:MOV R2,#06H MOV R0,#PASS_OLD MOV R1,#PASS_NEWP_COMP0:MOV A,R0MOV B,R1CJNE A,B,P_COMP1INC R0INC R1DJNZ R2,P_COMP0SETB PASS_OK CLR RELAYMOV B,#00HMOV DPTR,#INFO5 ACALL W
39、_STRING2MOV SEC,#00H CLR SEC10MOV COUNT,#00H SETB TR0 RETP_COMP1: CLR PASS_OK MOV B,#00HMOV DPTR,#INFO6 ACALL W_STRING2 RETPASS_LOOK: ACALL KEY_SCAN CJNE A,#0AH,LOOK_END ACALL MENU3CLR TR0 ACALL PASS_PLAY ACALL BEEP_BLLOOK_1: ACALL KEY_SCAN CJNE A,#0EH,LOOK_1 ACALL MENU1ACALL BEEP_BLSETB TR0LOOK_END: RETBEEP_BL:MOV R6,#200 BL1:ACALL BL2CPL BEEPDJNZ R6,BL1SETB BEEPMOV R5,#15ACALL DELAY RET BL2:MOV R7,#200 BL3: NOPDJNZ R7,BL3 RETTIMER0:PUSH ACCPUSH PSWMOV TL0,#00H MOV TH0,#4CH