单片机课程设计电子密码锁设计通信班

上传人:无*** 文档编号:89101739 上传时间:2022-05-12 格式:DOC 页数:33 大小:494.50KB
收藏 版权申诉 举报 下载
单片机课程设计电子密码锁设计通信班_第1页
第1页 / 共33页
单片机课程设计电子密码锁设计通信班_第2页
第2页 / 共33页
单片机课程设计电子密码锁设计通信班_第3页
第3页 / 共33页
资源描述:

《单片机课程设计电子密码锁设计通信班》由会员分享,可在线阅读,更多相关《单片机课程设计电子密码锁设计通信班(33页珍藏版)》请在装配图网上搜索。

1、-目 录1 引言12 系统设计分析22.1 总体设计框图22.2 硬件电路设计分析32.2.1 时钟电路设计32.2.2 复位电路设计42.2.3 矩阵键盘设计52.2.4 报警控制电路62.2.5 液晶显示电路72.3 系统软件设计82.3.2 初始化及按盘识别程序92.3.3 开锁程序92.3.4 修改密码程序102.3.5 LCD显示程序112.4 仿真测试结果123 总结14参考文献15附录16. z.-1 引言随着科技和人们的生活水平的提高,如何实现家庭防盗这一问题也变的尤其的突出,传统机械锁由于构造简单,被撬事件屡见不鲜;电子锁由于其*性高,使用灵活性好,平安系数高,受到了广阔用户

2、的青睐。单片机,亦称单片微电脑或单片微型计算机。它是把中央处理器CPU、随机存取存储器RAM、只读存储器ROM、输入/输出端口 I/0等主要计算机功能部件都集成在一块集成电路芯片上的微型计算机。 计算机的产生加快了人类改造世界的步伐,但是它毕竟体积大。微计算机单片机在这种情况下诞生了,它为我们改变了什么?纵观我们现在生活的各个领域,从导弹的导航装置,到飞机上各种仪表的控制,从计算机的网络通讯与数据传输,到工业自动化过程的实时控制和数据处理,以及我们生活中广泛使用的各种智能IC 卡、电子宠物等,这些都离不开单片机。在单片机产生后,我们就将控制这些东西变为智能化了,我们只需要在单片机外围接一点简单

3、的接口电路,核心局部只是由人为的写入程序来完成。这样产品的体积变小了,本钱也降低了,长期使用也不会担忧精度达不到了,且容易升级改善。 电子锁可以在日常生活和现代办公中,住宅与办公室的平安防*、单位的文件档案、财务报表以及一些个人资料的保存等多种场合使用。大大提高了主人物资的平安性,平安可以代替老式机械锁。目前使用的密码锁种类繁多,各具特色。本文从经济实用的角度出发,采用AT89C2051单机,研制了一款具有防盗自动报警功能的电子密码锁。该密码锁设计方法合理,简单易行,本钱低,符合住宅、办公室用锁要求,具有一定的推广价值。1系统设置6位密码,密码通过键盘输入,假设密码正确,则将锁翻开。2密码由用

4、户自己设定,在开锁状态下,用户可自行修改密码。3具有自动报警功能,系统工作时,用户通过按键输入6位密码,假设密码不正确,则要求重新输入密码,重新输入密码的次数不能超过3次,假设3次输入的密码都不正确,则发出报警信号。本课程设计以AT89C51为主控芯片,LCD1602为显示屏,利用单片机的读写控制、扩展电路等功能部件设计电子密码锁。2 系统设计分析2.1 总体设计框图本设计主要由单片机、矩阵键盘、液晶显示器和密码存储等局部组成。其中矩阵键盘用于输入数字密码和进展各种功能的实现。由用户通过连接单片机的矩阵键盘输入密码,后经过单片机对用户输入的密码与自己保存的密码进展比照,从而判断密码是否正确,然

5、后控制引脚的上下电平传到开锁电路控制是否开锁。系统整体框图如图2-1所示。AT89C51晶振电路复位电路键盘输入模块密码存储模块LCD显示模块开锁电路蜂鸣器报警电路图2-1 系统整体框图各模块功能如下:1键盘输入模块:分为密码输入按键与功能按键,用于完成密码输入功能。2密码存储模块:用于完成掉电存储功能,使修改的密码断电后仍能保存。3晶振电路:用于单片机的起振。4复位电路:完成系统的复位。5LCD显示模块:用于完成对系统状态显示及操作提示功能。6开锁电路:应用发光二极管模拟开锁,完成开锁及开锁提示。2.2 硬件电路设计分析本系统电路由键盘输入局部、密码存储局部、复位局部、显示局部、报警局部、开

6、锁局部组成,根据实际情况键盘输入局部选择44矩阵键盘,显示局部选择字符型液晶显示LCD1602,密码存储局部选用内部存储器来完成。其原理图如图2-2所示。图2-2 电子密码锁原理图 时钟电路设计时钟电路为单片机产生时序脉冲,单片机所有运算与控制过程都是在统一的时序脉冲的驱动下的进展的,如果单片机的时钟电路停顿工作晶振停振,则单片机也就停顿运行了。当采用内部时钟时,连接方法如以下图所示,在晶振引脚*TAL119脚和*TAL218脚引脚之间接入一个12MHZ晶振,两个引脚对地分别再接入一个电容即可产生所需的时钟信号,电容的容量一般在几十皮法,如33PF。如图2-3所示。图2-3 时钟电路 复位电路

7、设计复位是单片机的初始化操作。单片机启运运行时,都需要先复位,其作用是使CPU和系统中其他部件处于一个确定的初始状态,并从这个状态开场工作。因而,复位是一个很重要的操作方式。但单片机本身是不能自动进展复位的,必须配合相应的外部电路才能实现。该复位电路采用按键电平复位式复位电路。当单片机已在运行当中时,按下复位键后松开,在复位引脚RET9脚脚持续出现24个振荡器脉冲周期即2个机器周期的高电平信号将使单片机复位。也能使RST为一段时间的高电平,从而实现上电或开关复位的操作。如图2-4所示。图2-4 复位电路 矩阵键盘设计为了加强密码的*性,采用一个44的矩阵式键盘可以任意设置用户密码1-16位长度

8、,从而提高了密码的*性,同时也能减少与单片机接口时所占用的I/O口线的数目,节省了单片机的珍贵资源,在按键比较多的时候,通常采用这种方法。其原理图如图2-5所示。图2-5 矩阵键盘每一行与每一列的穿插处不一样,而是通过一个按键来连通,利用这种行列式矩阵构造只需要N根行线与M根列线,即可组成具有NM个按键的矩阵键盘。在这种行列式矩阵键盘编码的单片机系统中,键盘处理程序首先执行等待按键并确认有无按键按下的程序段。当确认有按键按下后,下一步就是要识别哪一个按键被按下。对键的识别方法通常有两种:一种是行扫描查询法;另一种是速度较快的线反转法。此系统中,我们采用线反转法。首先区分键盘中有无按键被按下,在

9、单片机I/O口向键盘送全扫描字,然后读入行线状态来判断。具体方法是:向行线输出全扫描字00H,把全部列线置成低电平,然后将列线的电平状态读入累加器A中。如果有按键被按下,总会有一根行线电瓶被拉至低电平从而使行线不全为1。判断键盘中哪一个按键被按下通常是通过将列线逐列至低电平后,检查行输入状态来实现的。方法是:依次给列线送低电平,然后检查所有行线状态,如果全为1,则所按下的按键不在此列;如果不全为1,则所按下的按键必在此列,而且是在与零电平行线相交的交点上的那个按键。按键的操作面板共计10个数字键和6个功能键,键盘侧面还有一个微型蜂鸣器。键盘侧面还有一个蜂鸣器,每操作一次,它便发出声音,提示操作

10、成功。10个数字键用来输入密码,另外6个功能键分别是:A查看键、B设置新密码键、C退格键、D返回键、E确认/退出键和F开启键。其中退格键的功能是当输入密码错误的时候,去除前面已经输入的数据,重新输入。确认键的功能是确认输入的密码。开启键是切换到密码输入状态,输密码前需按该键才能开场输入密码。按“F键启动进入输入密码程序,按住“F键不放3秒以上后进入输入密码状态。在输入密码状态下,0-9数字键为有效键,有时间和次数限制功能:只有三次输入密码时机,每次限制在10秒内完成,输入密码有误或每次输入密码超时,则被认为是密码输入错误。当3次输入都错误时,程序将返回起始状态。密码输入正确后,继电器吸合,表示

11、锁被翻开。在密码输入正确的情况下,程序进入查看密码和修改密码状态,按“E键退出查看密码状态。按“B键进入重新设置密码状态,在输入密码时,如发现输入有误,可按“C删除后,重新输入,按“E确认后,程序退出修改密码状态。按“D键或等待10秒后程序退出修改密码和查看密码状态,回到起始状态。程序内定密码为:1,送电开机时,只要输入内定密码便可开门,这样可预防停电后再送电时无密码可用。当密码输入错误或密码输入时间超过规定的时间时,蜂鸣器报警。键盘的功能如表2-1所示。表2-1 按键功能表按键键名功能说明0-9键数字键输入密码A键查看键查看密码B键设置新密码键设置新密码C键退格键退格删除D键返回键返回到开场

12、界面E键F键确认/退出键开启键确认/退出开启密码输入报警控制电路该电路采用单频音报警电路,实现单频音报警的接口电路比较简单,其发音元件通常可采用压电蜂鸣器,当在蜂鸣器两引脚上加315V直流工作电压,就能产生3kHZ左右的蜂鸣振荡音响。压电式蜂鸣器构造简单、耗电少,更适于在单片机系统中应用。压电式蜂鸣器,约需10mA的驱动电流,可在*端口接上一只三极管和电阻组成的驱动电路来驱动,接三极管基极输入端,当P3.7输出高电平“1时,三极管导通,蜂鸣器的通电而发音,当P3.1输出低电平“0时,三极管截止,蜂鸣器停顿发音。其原理图如图2-6所示。图2-6报警控制电路2.2.5 液晶显示电路本设计的显示电路

13、是为了给使用者以提示而设置的为了到达界面友好的目的,显示局部由液晶显示器LCD1602取代普通的数码管完成。开锁时,按下键盘上的开锁按键后,利用键盘上的数字键09输入密码,每按下一个数字键后在显示器上显示一个*,输入多少位就显示多少个*。当密码输入完成时,按下确认键,如果输入的密码正确的话, LCD显示“IUPUT RIGHT,单片机其中P3.0引脚会输出低电平,使三极管T2导通,电磁铁吸合,继电器开关跳转,电子密码锁被翻开,如果密码不正确,LCD显示屏会显示“IUPUT ERROR,P3.0输出的是高电平,电子密码锁不能翻开。通过LCD显示屏,可以清楚地判断出密码锁所处的状态。电路图如图2-

14、7所示。图2-7 显示电路2.3 系统软件设计N系统的软件设计采用汇编语言编码。设计方法是先用文本编辑器编写源码,然后用软件Keil C51编译,如果没有错误,可连接生成.HE*格式的文件需事先在Keil C51中设置。如果有错误则无法连接,但可在生成的.OBJ文件中找到代码错误的地方,便于修改。当然也可以直接在Keil中编码。生成的HE*文件是记录文本行的ASCII文本文件,在HE*文件中,每一行是一个HE*记录,由十六进制数组成的机器码或者数据常量。HE*文件经常被用于将程序或数据传输存储到ROM、EPROM,大多数编程器和模拟器使用HE*文件。系统的主程序如图2-8所示。由于用户在使用系

15、统的过程中,可能在任何时刻按下任何按键,而程序都必须对此作出正确响应。错误次数加1N提示正确提示错误开锁延时关锁密码正确标志位=1NNN锁定开场系统初始化显示菜单一键盘扫描显示菜单二密码输入是否启动输入Y错误3次?YYYN修改密码?存新密码D键按下?Y密码正确?密码比较YYYN图2-8 系统主流程图 初始化及按盘识别程序如图2-9所示,系统的初始化包括堆栈起始地址的设定,定时/计数器的设定,液晶显示模式的设定,密码缓冲区的初始化,一些自定义数据空间的初始化等操作。系统初始化并读取密码完成后,液晶显示“PASSWORD CONTROL,提示用户可以输入密码。此时程序即不断测试按键,检查是否有按键

16、被按下。如果有,则进展按键识别;如果没有按键按下,或者按下的按键没有被识别,R3赋值0FFH,并跳转至按键测试。实际程序运行时,绝大局部时间都在测试按键,等待用户输入。图 2-9 初始化及按键识别流程图 开锁程序首先LCD初始化,输入密码,密码正确则使开锁电路动作,引脚P2.3得到低电平使发光二极管灯亮,开锁。开锁程序流程图如图2-10所示。开场LCD初始化按开启键LCD初始化输入密码确认程序输入密码正确?开锁成功错误次数加13次错误?YNNY图 2-10 开锁流程图 修改密码程序如图2-11所示,可以看出,改密键的处理流程跟开锁键类似,都需检查密码是否正确,错误的话,提示重新输入,只有输入密

17、码正确才可以进展改密。然后再按更改键,密码更改程序被调用,进而更改密码,此过程,LCD都会显示信息。图2-11 修改密码流程图 LCD显示程序液晶显示子程序在每次更新显示内容时都会被调用,其流程如图2-12所示。图2-12 LCD显示子程序流程图每次更新显示内容前,需清显示清空LCD原先的显示内容,清屏指令的指令码为01H,即将P0口赋值01H,然后写入指令存放器IR。LCD1602要显示的内容是根据其控制器内置的字符码表,事先列出要显示的ASCII字符串。每次送一个字符的ASCII码入P0口,然后写入数据存放器DR,最后将字符地址加一,LCD1602会将写入的ASCII码对应的字符依次显示出

18、来。由于显示字符串的长度不尽一样,约定每串字符以00H结尾;程序检测到字符码为00H时,即停顿写入,返回。LCD显示的内容在下次更新前会一直保持。2.4 仿真测试结果开机后,LCD1602显示如图2-13所示,等待按键输入。图2-13 开机界面输入密码分两个过程:首先必须开启密码输入功能才能输入密码,按住“F键3秒以上才能启动进入输入密码程序,进入输入密码状态,LCD1602显示如图2-14所示:图2-14 输入界面此时使用矩阵键盘输入密码,在输入密码状态下,0-9为有效数字键。本系统有时间、次数限制功能,不给别人试探时机:三次输入密码时机,每次限制在10秒内完成,输入过程如图2-15所示:图

19、 2-15输入过程界面当密码输入正确后,LCD显示界面如图2-16所示:图 2-16 输入正确的界面在输入密码正确的根底上可以在密码输入正确的情况下,程序进入查看密码和修改密码状态。按“B键进入重新设置状态,在输入新密码时,可以按“C键删除修改,按“E确认后,程序退出修改密码状态。界面如图2-17所示:图 2-17 修改密码的界面按“A键进入查看密码状态,LCD显示界面如图2-18所示:图 2-18查看密码的界面在密码输入错误或是超过输入时间时,当错误次数为3次后,LCD回到初始界面,并锁定。如果错误则LCD显示的界面如图2-17所示:图 2-17 输入错误的界面3 总结课程设计是培养学生综合

20、运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术开展的日新日异,单片机已经成为当今计算机应用中空前活泼的领域,在生活中可以说得是无处不在。因此作为21世纪的大学来说掌握单片机的开发技术是十分重要的。在着手本次课程设计时,通过查阅网络的资料,再加上请教同学和教师,结合生活中对密码锁的功能特性要求,设计出了这一套电子密码锁系统的主要硬件构造和软件构造,根本完成了课题的要求。本次课程设计所设计的系统简单只能实现一些简单的功能,还有很多缺乏之处,自己所学的知识和能力有限。回忆起此次单片机课程设计,至今我仍感慨颇多,确实,从选题

21、到定稿,从理论到实践,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以稳固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会效劳,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的缺乏之处,对以前所学过的知识理解得不够深刻,掌握得不够结实,对单片机汇编语言掌握得不好,尤其是外部中断,定时/计数器和串行口,掌握

22、的不好,应用不熟练。通过这次课程设计之后,一定把以前所学过的知识重新温故。电子锁是信息化时代开展的产物,应时而生,我相信随着科技的不断开展,将来的电子锁一定更加完美,更加人性化,更加廉价,更加平安。这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,通过这次课设自己也学到了很多东西,在这一周的时间里,感谢魏明哲教师的指导和同学们的帮助,终于游逆而解。参考文献1何立*编,单片机中级教程,航空航天大学。2 丁元杰主编,单片机原理与应用,机械工业。 3 孙育才主编,MCS-51系列单片微型计算机及其应用,东南大学。附录BEEP BIT P3.1 RELAY BIT P3.6 SEC10 BIT

23、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 ;50ms计数单元 SEC EQU 48H ;秒单元 POS EQU 49H BUSY BIT P0.7 LCD_RS BIT P2.0 ;LCD 控制管脚定义 LCD_RW BIT P2.1 LCD_EN BIT P2.2 DATAPORT EQU P0 ;定义LCD的数据端口 LCD_* EQU 29HTIMES EQU 2AH BUSY_CHECK BIT 20H.0

24、 ORG 0000H AJMP MAIN ORG 000BH LJMP TIMER0 ORG 0050HMAIN: MOV SP,#60H ;设置堆栈指针 MOV P0,#0FFH MOV P1,#0FFH MOV P2,#0FFH MOV TMOD,#01H ;工作于方式1 MOV TH0,#4CH ;50ms定时常数 MOV TL0,#00H SETB ET0 SETB EA MOV PASS_OLD,#01H ;内定密码值 MOV PASS_OLD+1,#01H MOV PASS_OLD+2,#01H MOV PASS_OLD+3,#01H MOV PASS_OLD+4,#01H MOV

25、 PASS_OLD+5,#01H ACALL LCD_INIT ;LCD初始化MAIN1:CLR TR0 CLR SEC3 CLR SEC10 CLR PASS_OKMOV COUNT,#00HMOV SEC,#00H SETB RELAY ;继电器释放 ACALL MENU1 ACALL START_IN MOV R4,#03H ;3次输入密码时机MAIN2: ACALL PASS_IN ACALL PASS_P MOV R5,#100 ;延时1sACALL DELAY PASS_OK,MAIN3DJNZ R4,MAIN2AJMP MAIN1MAIN3: ACALL PASS_LOOK AC

26、ALL CHANGE_PASS SEC10,MAIN4ACALL KEY_SCAN CJNE A,#0DH,MAIN3 ;判是否D按下?MAIN4:ACALL BEEP_BL AJMP MAIN1; 菜单1显示子程序 (PASSWORD CONTROL); (LEARN BY HEART)MENU1: MOV B,#00H MOV DPTR,#INFO1 ;指针指到信息1 ACALL W_STRING1 MOV B,#00H MOV DPTR,#INFO4 ;指针指到信息4 ACALL W_STRING2 RET; 菜单2显示子程序 (INPUT PASSWORD); (PASSWORD -)

27、MENU2: MOV B,#00H MOV DPTR,#INFO3 ;指针指到信息3 ACALL W_STRING1 MOV B,#00H MOV DPTR,#INFO2 ;指针指到信息2 ACALL W_STRING2 RET; 菜单3显示子程序 (LOOK PASSWORD); (PASSWORD -)MENU3: MOV B,#00H MOV DPTR,#INFO7 ;指针指到信息7 ACALL W_STRING1 MOV B,#00H MOV DPTR,#INFO2 ;指针指到信息2 ACALL W_STRING2 RET; 菜单4显示子程序 (CHANGE PASSWORD); (P

28、ASSWORD -)MENU4: MOV B,#00H MOV DPTR,#INFO8 ;指针指到信息1 ACALL W_STRING1 MOV B,#00H MOV DPTR,#INFO2 ;指针指到信息2 ACALL W_STRING2 RET; 信息字符串表INFO1: DB PASSWORD CONTROL,0INFO2: DB PASSWORD - ,0INFO3: DB INPUT PASSWORD ,0INFO4: DB LEARN BY HEART ,0INFO5: DB IUPUT RIGHT ,0INFO6: DB IUPUT ERROR ,0INFO7: DB LOOK

29、PASSWORD ,0INFO8: DB RESET PASSWORD ,0; 矩阵键盘键值查找程序; 键值存入R3KEY_SCAN: MOV P1,#0F0H ;置列线为0,行线为1 NOP MOV A,P1 ;读入P1口状态 ANL A,#0F0H ;保存高4位 MOV B,A ;保存数据 MOV P1,#0FH ;置列线为1,行线为0 NOP MOV A,P1 ;读入P1口状态 ANL A,#0FH ;保存低4位 ORL A,B ;高四位与低四位重新组合 CJNE A,#0FFH,KEY_IN1 ;0FFH为末按键 AJMP KEY_ENDKEY_IN1: MOV B,A ;保存键值 M

30、OV DPTR,#KEYTABLE ;置键编码表首址 MOV R3,#0FFH ;KEY_IN2: INC R3 ;查表次数加1 MOV A,R3 MOVC A,A+DPTR ;取出键码 CJNE A,B,KEY_IN3 ;比较 MOV A,R3 ;找到,取次数值 AJMP KEY_ENDKEY_IN3: CJNE A,#00H,KEY_IN2 ;继续查 ;00H为完毕码KEY_END: RET; 键编码表KEYTABLE: DB 0EEH,0EDH,0EBH,0E7H,0DEH DB 0DDH,0DBH,0D7H,0BEH,0BDH DB 0BBH,0B7H,07EH,07DH,07BH D

31、B 077H,00H ;00H为完毕码; 密码显示子程序PASS_PLAY: MOV R0,#PASS_OLD ;存放数据首地址 MOV R2,#06H ;显示6组数据 MOV LCD_*,#09H ;第9列 ACALL SET_*2 ;第二行P_PLAY: MOV A,R0 ;取显示数据 ADD A,#30H ;转换为ASCII码 ACALL WDATA ;写数据,显示 INC R0 ;修改存放数据地址 DJNZ R2,P_PLAY RET; 启动输入子程序; 按F键大于3秒,方可退出此程序START_IN: CLR SEC3 ;清3s标志位 MOV COUNT,#00H ;清中断计数单元M

32、OV SEC,#00HS_IN1: ACALL KEY_SCAN CJNE A,#0FH,S_IN1 ;F键 SETB TR0 ;启动TIMER0中断S_IN2: ACALL KEY_SCAN CJNE A,#0FH,S_IN3 ;F键 JNB SEC3,S_IN2 ;没有到达3s,转移 CLR TR0 ;停顿TIMER0中断 CLR SEC3 ;清3s标志位MOV SEC,#00H MOV COUNT,#00H ;清中断计数单元 ACALL MENU2 ACALL BEEP_BL AJMP S_ENDS_IN3: CLR TR0 ;停顿TIMER0中断 CLR SEC3 ;清3s标志位 MO

33、V COUNT,#00H ;清中断计数单元MOV SEC,#00H AJMP S_IN1S_END: RET; 密码输入子程序PASS_IN: ACALL MENU2 MOV R0,#PASS_NEW ;存放输入密码单元首地址 MOV R2,#06H ;6位密码 MOV LCD_*,#09H ;确定显示首位置 ACALL SET_*2 CLR SEC10 ;清10s标志位 MOV SEC,#00H ;清秒计数单元 MOV COUNT,#00H ;清中断计数单元 SETB TR0P_IN1: SEC10,P_END ACALL KEY_SCAN CJNE A,#0FFH,P_IN2 ;判是否有键

34、按下? AJMP P_IN1P_IN2: ACALL KEY_SCAN CJNE A,#0AH,P_IN3 ;数字键0-9有效P_IN3: JNC P_IN1 ;=时,C=0 MOV A,R3 ;取键值 MOV R0,A ;保存输入密码值 INC R0 MOV A,#2AH ;转换为ASCII码 ACALL WDATA ;显示输入密码的位数 ACALL BEEP_BL ;蜂鸣器响一声 DJNZ R2,P_IN1P_END: CLR TR0 MOV SEC,#00H ;清秒计数单元 CLR SEC10 ;清10s标志位 MOV COUNT,#00H ;清中断计数单元 RET; 修改密码子程序CH

35、ANGE_PASS: ACALL KEY_SCAN CJNE A,#0BH,CH_END ;判B键是否按下? CLR TR0 ACALL MENU4 MOV R0,#PASS_OLD ;存放输入密码单元首地址 MOV R2,#06H ;6位密码 MOV POS,#09H ;确定显示首位置 ACALL BEEP_BLCH_IN1: ACALL KEY_SCAN CJNE A,#0FFH,CH_IN2 ;判是否有键按下? AJMP CH_IN1CH_IN2:ACALL KEY_SCAN CJNE A,#0AH,CH_IN3 ;数字键0-9有效CH_IN3: JNC CH_IN4 ;=时,C=0 M

36、OV LCD_*,POS ;确定显示位置 ACALL SET_*2 MOV A,R3 ;取键值 MOV R0,A ;保存输入密码值 MOV A,#2AH ;转换为ASCII码 ACALL WDATA ;显示输入密码的位数 ACALL BEEP_BL ;蜂鸣器响一声 INC POS INC R0 DJNZ R2,CH_IN1 ;6位密码是否输入完? AJMP CH_IN6CH_IN4: ACALL KEY_SCAN CJNE A,#0CH,CH_IN1 ;C修改键 MOV A,POS CJNE A,#09H,CH_IN5 ;检测POS是否到最小值 AJMP CH_IN1CH_IN5: DEC P

37、OS DEC R0 INC R2 MOV LCD_*,POS ACALL SET_*2 MOV A,#2DH ;显示 ACALL WDATA ACALL BEEP_BL ;蜂鸣器响一声 AJMP CH_IN1CH_IN6: ACALL KEY_SCAN CJNE A,#0EH,CH_IN7 ;E键确定退出 ACALL MENU1 ACALL BEEP_BL AJMP CH_ENDCH_IN7: CJNE A,#0CH,CH_IN6 ;C键返回修改 AJMP CH_IN5CH_END: SETB TR0 RET; 密码比较子程序; 比较正确,置密码正确标志位。; 比较错误,清密码正确标志位。PA

38、SS_P: MOV R2,#06H ;比较6组数据 MOV R0,#PASS_OLD MOV R1,#PASS_NEWP_P0: MOV A,R0 MOV B,R1 CJNE A,B,P_P1 INC R0 INC R1 DJNZ R2,P_P0 SETB PASS_OK ;置密码正确标志位 CLR RELAY ;继电器吸合 MOV B,#00H MOV DPTR,#INFO5 ;指针指到信息5 ACALL W_STRING2 MOV SEC,#00H ;清秒计数单元 CLR SEC10 ;清10s标志位 MOV COUNT,#00H ;清中断计数单元SETB TR0 RETP_P1: CLR

39、 PASS_OK ;清密码正确标志位 MOV B,#00H MOV DPTR,#INFO6 ;指针指到信息6 ACALL W_STRING2 RET;查看密码子程序PASS_LOOK:ACALL KEY_SCAN CJNE A,#0AH,LOOK_END ;A键查看ACALL MENU3 CLR TR0 ACALL PASS_PLAY ACALL BEEP_BLLOOK_1: ACALL KEY_SCAN CJNE A,#0EH,LOOK_1 ;E键退出ACALL MENU1ACALL BEEP_BLSETB TR0LOOK_END: RET;蜂鸣器响一声子程序BEEP_BL: MOV R6,

40、#200 BL1: ACALL BL2 CPL BEEP ;蜂鸣器取反产生驱动脉冲 DJNZ R6,BL1 SETB BEEP ;关闭蜂鸣器 MOV R5,#15 ACALL DELAY RET BL2: MOV R7,#200 BL3: NOP DJNZ R7,BL3 RET;定时器0计时中断子程序TIMER0: PUSH ACC PUSH PSW MOV TL0,#00H ;50ms定时常数 MOV TH0,#4CH INC COUNT MOV A,COUNT ;50ms 计数值加1 CJNE A,#20,T0_END MOV COUNT,#0 INC SEC ;秒加1 MOV A,SEC

41、 CJNE A,#03H,T0_0 SETB SEC3 ;置3s标志位T0_0: CJNE A,#10,T0_END ;是否到10秒? MOV SEC,#0 ;秒单元清0 SETB SEC10 ;置10s标志位T0_END: POP PSW POP ACC RETI; 延时R5*10MS子程序DELAY: MOV R6,#50DEL1: MOV R7,#93DEL2: DJNZ R7,DEL2 DJNZ R6,DEL1 DJNZ R5,DELAY RET; 延时5MS子程序DELAY1: MOV R6,#25DEL3: MOV R7,#93DEL4: DJNZ R7,DEL4 DJNZ R6,

42、DEL3 RET;检查LCD忙状态 ;busy为1时,忙,等待。busy为0时,闲,可写指令与数据 LCD_BUSY: MOV DATAPORT,#0FFHBUSY_1: CLR LCD_RS SETB LCD_RW CLR LCD_EN NOP SETB LCD_EN BUSY,BUSY_1 CLR LCD_EN RET;LCD写命令子程序;LCD_RS=L,LCD_RW=L,D0-D7=指令码,E=高脉冲W: JNB BUSY_CHECK,W_1 ACALL LCD_BUSYW_1: MOV DATAPORT,A ;写入指令与地址 CLR LCD_RS CLR LCD_RW NOP SET

43、B LCD_EN NOP CLR LCD_EN RET;LCD写数据子程序;LCD_RS=H,LCD_RW=L,D0-D7=数据码,E=高脉冲WDATA: ACALL LCD_BUSY MOV DATAPORT,A ;写入数据 SETB LCD_RS CLR LCD_RW NOP SETB LCD_EN NOP CLR LCD_EN RET; 在 LCD 第一行的指定显示位置SET_*1: MOV A,LCD_* ADD A,#80H ACALL W RET; 在 LCD 第二行的指定显示位置SET_*2: MOV A,LCD_* ADD A,#0C0H ACALL W RET; 去除LCD的

44、第一行CLR_LINE1: MOV A,#80H ;设置 LCD 的第一行地址 ACALL W ; MOV R0,#16 ;设置计数值CLR1: MOV A,#20H ;载入空格符至LCD ACALL WDATA ;输出字符至LCD DJNZ R0,CLR1 ;计数完毕 RET; 去除LCD的第二行CLR_LINE2: MOV A,#0C0H ;设置 LCD 的第二行地址 ACALL W ; MOV R0,#16 ;设置计数值CLR2: MOV A,#20H ;载入空格符至LCD ACALL WDATA ;输出字符至LCD DJNZ R0,CLR2 ;计数完毕 RET; 写字符串子程序1W_S

45、TRING1: MOV A,#80H ;设置 LCD 的第一行地址 ORL A,B ACALL W ;写入命令 ACALL FILL_CHAR RET; 写字符串子程序2W_STRING2: MOV A,#0C0H ;设置 LCD 的第二行地址 ORL A,B ACALL W ;写入命令 ACALL FILL_CHAR RET; 写入字符子程序FILL_CHAR: CLR A ;填入字符 MOVC A,A+DPTR ;由字符区取出字符 CJNE A,#0,F_CHAR ;判断是否为完毕码 RETF_CHAR: ACALL WDATA ;写入数据 ; MOV R5,TIMES ;延时,形成逐字显示的效果 ; ACALL DELAY INC DPTR ;指针加1 AJMP FILL_CHAR ;继续填入字符 RET; LCD 初始化子程序LCD_INIT: CLR BUSY_CHECK ;不进展忙检测 MOV A,#38H ;双列显示,字形5*7点阵 ACALL W ACALL DELAY1 MOV A,#38H ;双列显示,字形5*7点阵 ACALL W ACALL DELAY1 MOV A,#3

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