单片机专业课程设计电子密码锁设计_第1页
单片机专业课程设计电子密码锁设计_第2页
单片机专业课程设计电子密码锁设计_第3页
单片机专业课程设计电子密码锁设计_第4页
单片机专业课程设计电子密码锁设计_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目录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.5LCD显示程序 112.4仿真测试结果 123总结 14参考文件 15附录 161引言伴随科技和大家生活水平提升,怎样实现家庭防盗这一问题也变尤其突出,传统机械锁因为结构简单,被撬事件屡见不鲜;电子锁因为其保密性高,使用灵活性好,安全系数高,受到了广大用户青睐。单片机,亦称单片微电脑或单片微型计算机。它是把中央处理器(CPU)、随机存取存放器(RAM)、只读存放器(ROM)、输入/输出端口(I/0)等关键计算机功效部件全部集成在一块集成电路芯片上微型计算机。计算机产生加紧了人类改造世界步伐,不过它毕竟体积大。微计算机(单片机)在这种情况下诞生了,它为我们改变了什么?纵观我们现在生活各个领域,从导弹导航装置,到飞机上多种仪表控制,从计算机网络通讯和数据传输,到工业自动化过程实时控制和数据处理,和我们生活中广泛使用多种智能IC卡、电子宠物等,这些全部离不开单片机。在单片机产生后,我们就将控制这些东西变为智能化了,我们只需要在单片机外围接一点简单接口电路,关键部分只是由人为写入程序来完成。这么产品体积变小了,成本也降低了,长久使用也不会担心精度达不到了,且轻易升级改善。电子锁能够在日常生活和现代办公中,住宅和办公室安全防范、单位文件档案、财务报表和部分个人资料保留等多个场所使用。大大提升了主人物资安全性,安全能够替换传统机械锁。现在使用密码锁种类繁多,各具特色。本文从经济实用角度出发,采取AT89C2051单机,研制了一款含有防盗自动报警功效电子密码锁。该密码锁设计方法合理,简单易行,成本低,符合住宅、办公室用锁要求,含有一定推广价值。(1)系统设置6位密码,密码经过键盘输入,若密码正确,则将锁打开。(2)密码由用户自己设定,在开锁状态下,用户可自行修改密码。(3)含有自动报警功效,系统工作时,用户经过按键输入6位密码,若密码不正确,则要求重新输入密码,重新输入密码次数不能超出3次,若3次输入密码全部不正确,则发出报警信号。本课程设计以AT89C51为主控芯片,LCD1602为显示器,利用单片机读写控制、扩展电路等功效部件设计电子密码锁。2系统设计分析2.1总体设计框图本设计关键由单片机、矩阵键盘、液晶显示器和密码存放等部分组成。其中矩阵键盘用于输入数字密码和进行多种功效实现。由用户经过连接单片机矩阵键盘输入密码,后经过单片机对用户输入密码和自己保留密码进行对比,从而判定密码是否正确,然后控制引脚高低电平传到开锁电路控制是否开锁。系统整体框图图2-1所表示。AT89CAT89C51晶振电路复位电路键盘输入模块密码存放模块LCD显示模块开锁电路蜂鸣器报警电路图2-1系统整体框图各模块功效以下:1.键盘输入模块:分为密码输入按键和功效按键,用于完成密码输入功效。2.密码存放模块:用于完成掉电存放功效,使修改密码断电后仍能保留。3.晶振电路:用于单片机起振。4.复位电路:完成系统复位。5.LCD显示模块:用于完成对系统状态显示及操作提醒功效。6.开锁电路:应用发光二极管模拟开锁,完成开锁及开锁提醒。2.2硬件电路设计分析本系统电路由键盘输入部分、密码存放部分、复位部分、显示部分、报警部分、开锁部分组成,依据实际情况键盘输入部分选择4×4矩阵键盘,显示部分选择字符型液晶显示LCD1602,密码存放部分选择内部存放器来完成。其原理图图2-2所表示。图2-2电子密码锁原理图2.2.1时钟电路设计时钟电路为单片机产生时序脉冲,单片机全部运算和控制过程全部是在统一时序脉冲驱动下进行,假如单片机时钟电路停止工作(晶振停振),那么单片机也就停止运行了。当采取内部时钟时,连接方法以下图所表示,在晶振引脚XTAL1(19脚)和XTAL2(18脚)引脚之间接入一个12MHZ晶振,两个引脚对地分别再接入一个电容即可产生所需时钟信号,电容容量通常在几十皮法,如33PF。图2-3所表示。图2-3时钟电路2.2.2复位电路设计复位是单片机初始化操作。单片机启运运行时,全部需要先复位,其作用是使CPU和系统中其它部件处于一个确定初始状态,并从这个状态开始工作。所以,复位是一个很关键操作方法。但单片机本身是不能自动进行复位,必需配合对应外部电路才能实现。该复位电路采取按键电平复位式复位电路。当单片机已在运行当中时,按下复位键后松开,在复位引脚RET(9脚)脚连续出现24个振荡器脉冲周期(即2个机器周期)高电平信号将使单片机复位。也能使RST为一段时间高电平,从而实现上电或开关复位操作。图2-4所表示。图2-4复位电路2.2.3矩阵键盘设计为了加强密码保密性,采取一个4×4矩阵式键盘能够任意设置用户密码(1-16位长度),从而提升了密码保密性,同时也能降低和单片机接口时所占用I/O口线数目,节省了单片机宝贵资源,在按键比较多时候,通常采取这种方法。其原理图图2-5所表示。图2-5矩阵键盘每一行和每一列交叉处不相同,而是经过一个按键来连通,利用这种行列式矩阵结构只需要N根行线和M根列线,即可组成含有N×M个按键矩阵键盘。在这种行列式矩阵键盘编码单片机系统中,键盘处理程序首先实施等候按键并确定有没有按键按下程序段。当确定有按键按下后,下一步就是要识别哪一个按键被按下。对键识别方法通常有两种:一个是行扫描查询法;另一个是速度较快线反转法。此系统中,我们采取线反转法。首先分辨键盘中有没有按键被按下,在单片机I/O口向键盘送全扫描字,然后读入行线状态来判定。具体方法是:向行线输出全扫描字00H,把全部列线置成低电平,然后将列线电平状态读入累加器A中。假如有按键被按下,总会有一根行线电瓶被拉至低电平从而使行线不全为1。判定键盘中哪一个按键被按下通常是经过将列线逐列至低电平后,检验行输入状态来实现。方法是:依次给列线送低电平,然后检验全部行线状态,假如全为1,则所按下按键不在此列;假如不全为1,则所按下按键必在此列,而且是在和零电平行线相交交点上那个按键。按键操作面板累计10个数字键和6个功效键,键盘侧面还有一个微型蜂鸣器。键盘侧面还有一个蜂鸣器,每操作一次,它便发出声音,提醒操作成功。10个数字键用来输入密码,另外6个功效键分别是:A查看键、B设置新密码键、C退格键、D返回键、E确定/退出键和F开启键。其中退格键功效是当输入密码错误时候,清除前面已经输入数据,重新输入。确定键功效是确定输入密码。开启键是切换到密码输入状态,输密码前需按该键才能开始输入密码。按“F”键开启进入输入密码程序,按住“F”键不放3秒以上后进入输入密码状态。在输入密码状态下,0-9数字键为有效键,有时间和次数限制功效:只有三次输入密码机会,每次限制在10秒内完成,输入密码有误或每次输入密码超时,则被认为是密码输入错误。当3次输入全部错误时,程序将返回起始状态。密码输入正确后,继电器吸合,表示锁被打开。在密码输入正确情况下,程序进入查看密码和修改密码状态,按“E”键退出查看密码状态。按“B”键进入重新设置密码状态,在输入密码时,如发觉输入有误,可按“C”删除后,重新输入,按“E”确定后,程序退出修改密码状态。按“D”键或等候10秒后程序退出修改密码和查看密码状态,回到起始状态。程序内定密码为:1,送电开机时,只要输入内定密码便可开门,这么可预防停电后再送电时无密码可用。当密码输入错误或密码输入时间超出要求时间时,蜂鸣器报警。键盘功效如表2-1所表示。表2-1按键功效表按键键名功效说明0-9键数字键输入密码A键查看键查看密码B键设置新密码键设置新密码C键退格键退格删除D键返回键返回到开始界面E键F键确定/退出键开启键确定/退出开启密码输入2.2.4报警控制电路该电路采取单频音报警电路,实现单频音报警接口电路比较简单,其发音元件通常可采取压电蜂鸣器,当在蜂鸣器两引脚上加3~15V直流工作电压,就能产生3kHZ左右蜂鸣振荡音响。压电式蜂鸣器结构简单、耗电少,更适于在单片机系统中应用。压电式蜂鸣器,约需10mA驱动电流,可在某端口接上一只三极管和电阻组成驱动电路来驱动,P.3.1接三极管基极输入端,当P3.7输出高电平“1”时,三极管导通,蜂鸣器通电而发音,当P3.1输出低电平“0”时,三极管截止,蜂鸣器停止发音。其原理图图2-6所表示。图2-6报警控制电路2.2.5液晶显示电路本设计显示电路是为了给使用者以提醒而设置为了达成界面友好目标,显示部分由液晶显示器LCD1602替换一般数码管完成。开锁时,按下键盘上开锁按键后,利用键盘上数字键0-9输入密码,每按下一个数字键后在显示器上显示一个*,输入多少位就显示多少个*。当密码输入完成时,按下确定键,假如输入密码正确话,LCD显示“IUPUTRIGHT”,单片机其中P3.0引脚会输出低电平,使三极管T2导通,电磁铁吸合,继电器开关跳转,电子密码锁被打开,假如密码不正确,LCD显示器会显示“IUPUTERROR”,P3.0输出是高电平,电子密码锁不能打开。经过LCD显示器,能够清楚地判定出密码锁所处状态。电路图图2-7所表示。图2-7显示电路2.3系统软件设计N系统软件设计采取汇编语言编码。设计方法是先用文本编辑器编写源码,然后用软件KeilC51编译,假如没有错误,可连接生成.HEX格式文件(需事先在KeilC51中设置)。假如有错误则无法连接,但可在生成.OBJ文件中找到代码错误地方,便于修改。当然也能够直接在Keil中编码。生成HEX文件是统计文本行ASCII文本文件,在HEX文件中,每一行是一个HEX统计,由十六进制数组成机器码或数据常量。HEX文件常常被用于将程序或数据传输存放到ROM、EPROM,大多数编程器和模拟器使用HEX文件。N系统主程序图2-8所表示。因为用户在使用系统过程中,可能在任何时刻按下任何按键,而程序全部必需对此作出正确响应。错误次数加1N错误次数加1N提醒正确提醒错误开锁延时关锁密码正确标志位=1NNN锁定开始系统初始化显示菜单一键盘扫描显示菜单二密码输入是否开启输入Y错误3次?YYYN修改密码?存新密码D键按下?Y密码正确?密码比较YYYYYNN图2-8系统主步骤图2.3.2初始化及按盘识别程序图2-9所表示,系统初始化包含堆栈起始地址设定,定时/计数器设定,液晶显示模式设定,密码缓冲区初始化,部分自定义数据空间初始化等操作。系统初始化并读取密码完成后,液晶显示“PASSWORDCONTROL”,提醒用户能够输入密码。此时程序即不停测试按键,检验是否有按键被按下。假如有,则进行按键识别;假如没有按键按下,或按下按键没有被识别,R3赋值0FFH,并跳转至按键测试。实际程序运行时,绝大部分时间全部在测试按键,等候用户输入。图2-9初始化及按键识别步骤图2.3.3开锁程序首先LCD初始化,输入密码,密码正确则使开锁电路动作,引脚P2.3得到低电平使发光二极管灯亮,开锁。开锁程序步骤图图2-10所表示。开始开始LCD初始化按开启键LCD初始化输入密码确定程序输入密码正确?开锁成功错误次数加13次错误?YNNY图2-10开锁步骤图2.3.4修改密码程序图2-11所表示,能够看出,改密键处理步骤跟开锁键类似,全部需检验密码是否正确,错误话,提醒重新输入,只有输入密码正确才能够进行改密。然后再按更改键,密码更改程序被调用,进而更改密码,此过程,LCD全部会显示信息。图2-11修改密码步骤图2.3.5LCD显示程序液晶显示子程序在每次更新显示内容时全部会被调用,其步骤图2-12所表示。图2-12LCD显示子程序步骤图每次更新显示内容前,需清显示清空LCD原先显示内容,清屏指令指令码为01H,立即P0口赋值01H,然后写入指令寄存器IR。LCD1602要显示内容是依据其控制器内置字符码表,事先列出要显示ASCII字符串。每次送一个字符ASCII码入P0口,然后写入数据寄存器DR,最终将字符地址加一,LCD1602会将写入ASCII码对应字符依次显示出来。因为显示字符串长度不尽相同,约定每串字符以00H结尾;程序检测到字符码为00H时,即停止写入,返回。LCD显示内容在下次更新前会一直保持。2.4仿真测试结果开机后,LCD1602显示图2-13所表示,等候按键输入。图2-13开机界面输入密码分两个过程:首先必需开启密码输入功效才能输入密码,按住“F”键3秒以上才能开启进入输入密码程序,进入输入密码状态,LCD1602显示图2-14所表示:图2-14输入界面此时使用矩阵键盘输入密码,在输入密码状态下,0-9为有效数字键。本系统有时间、次数限制功效,不给她人试探机会:三次输入密码机会,每次限制在10秒内完成,输入过程图2-15所表示:图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总结课程设计是培养学生综合利用所学知识,发觉,提出,分析和处理实际问题,锻炼实践能力关键步骤,是对学生实际工作能力具体训练和考察过程.伴随科学技术发展日新日异,单片机已经成为当今计算机应用中空前活跃领域,

在生活中能够说得是无处不在。所以作为二十一世纪大学来说掌握单片机开发技术是十分关键。在着手此次课程设计时,经过查阅网络资料,再加上请教同学和老师,结合生活中对密码锁功效特征要求,设计出了这一套电子密码锁系统关键硬件结构和软件结构,基础完成了课题要求。此次课程设计所设计系统简单只能实现部分简单功效,还有很多不足之处,自己所学知识和能力有限。回顾起此次单片机课程设计,至今我仍感慨颇多,确实,从选题到定稿,从理论到实践,能够说得是苦多于甜,不过能够学到很多很多东西,同时不仅能够巩固了以前所学过知识,而且学到了很多在书本上所没有学到过知识。经过这次课程设计使我知道了理论和实际相结合是很关键,只有理论知识是远远不够,只有把所学理论知识和实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提升自己实际动手能力和独立思索能力。在设计过程中碰到问题,能够说得是困难重重,这毕竟第一次做,难免会碰到过多种多样问题,同时在设计过程中发觉了自己不足之处,对以前所学过知识了解得不够深刻,掌握得不够牢靠,对单片机汇编语言掌握得不好,尤其是外部中止,定时/计数器和串行口,掌握不好,应用不熟练。经过这次课程设计以后,一定把以前所学过知识重新温故。电子锁是信息化时代发展产物,应时而生,我相信伴随科技不停发展,未来电子锁一定愈加完美,愈加人性化,愈加廉价,愈加安全。这次课程设计最终顺利完成了,在设计中碰到了很多编程问题,经过这次课设自己也学到了很多东西,在这一周时间里,感谢魏明哲老师指导和同学们帮助,最终游逆而解。

参考文件[1]何立民主编,单片机中级教程,北京航空航天大学出版社。[2]丁元杰主编,单片机原理和应用,机械工业出版社。[3]孙育才主编,MCS-51系列单片微型计算机及其应用,东南大学出版社。附录BEEPBITP3.1RELAYBITP3.6SEC10BIT20H.1SEC3BIT20H.2PASS_OKBIT20H.3PASS_OLDEQU30HPASS_NEWEQU37HPASS_DISEQU40H;密码显存单元COUNTEQU47H;50ms计数单元SECEQU48H;秒单元POSEQU49HBUSYBITP0.7LCD_RSBITP2.0;LCD控制管脚定义LCD_RWBITP2.1LCD_ENBITP2.2DATAPORTEQUP0;定义LCD数据端口LCD_XEQU29H TIMESEQU2AHBUSY_CHECKBIT20H.0ORG0000HAJMPMAINORG000BHLJMPTIMER0ORG0050HMAIN:MOVSP,#60H;设置堆栈指针MOVP0,#0FFHMOVP1,#0FFHMOVP2,#0FFHMOVTMOD,#01H;工作于方法1MOVTH0,#4CH;50ms定时常数MOVTL0,#00HSETBET0SETBEAMOVPASS_OLD,#01H;内定密码值MOVPASS_OLD+1,#01HMOVPASS_OLD+2,#01HMOVPASS_OLD+3,#01HMOVPASS_OLD+4,#01HMOVPASS_OLD+5,#01HACALLLCD_INIT;LCD初始化MAIN1:CLRTR0CLRSEC3CLRSEC10CLRPASS_OK MOVCOUNT,#00H MOVSEC,#00HSETBRELAY;继电器释放ACALLMENU1ACALLSTART_IN MOVR4,#03H;3次输入密码机会MAIN2:ACALLPASS_INACALLPASS_COMP MOVR5,#100;延时1s ACALLDELAY JBPASS_OK,MAIN3 DJNZR4,MAIN2 AJMPMAIN1MAIN3:ACALLPASS_LOOKACALLCHANGE_PASSJBSEC10,MAIN4 ACALLKEY_SCANCJNEA,#0DH,MAIN3;判是否"D"按下?MAIN4: ACALLBEEP_BLAJMPMAIN1;菜单1显示子程序(PASSWORDCONTROL);(LEARNBYHEART)MENU1:MOVB,#00HMOVDPTR,#INFO1;指针指到信息1ACALLW_STRING1MOVB,#00HMOVDPTR,#INFO4;指针指到信息4ACALLW_STRING2RET;菜单2显示子程序(INPUTPASSWORD);(PASSWORD)MENU2:MOVB,#00HMOVDPTR,#INFO3;指针指到信息3ACALLW_STRING1MOVB,#00HMOVDPTR,#INFO2;指针指到信息2ACALLW_STRING2RET;菜单3显示子程序(LOOKPASSWORD);(PASSWORD)MENU3:MOVB,#00HMOVDPTR,#INFO7;指针指到信息7ACALLW_STRING1MOVB,#00HMOVDPTR,#INFO2;指针指到信息2ACALLW_STRING2RET;菜单4显示子程序(CHANGEPASSWORD);(PASSWORD)MENU4:MOVB,#00HMOVDPTR,#INFO8;指针指到信息1ACALLW_STRING1MOVB,#00HMOVDPTR,#INFO2;指针指到信息2ACALLW_STRING2RET;信息字符串表INFO1:DB"PASSWORDCONTROL",0INFO2:DB"PASSWORD",0INFO3:DB"INPUTPASSWORD",0INFO4:DB"LEARNBYHEART",0INFO5:DB"IUPUTRIGHT",0INFO6:DB"IUPUTERROR",0INFO7:DB"LOOKPASSWORD",0INFO8:DB"RESETPASSWORD",0;矩阵键盘键值查找程序;键值存入R3KEY_SCAN:MOVP1,#0F0H;置列线为0,行线为1NOPMOVA,P1;读入P1口状态ANLA,#0F0H;保留高4位MOVB,A;保留数据MOVP1,#0FH;置列线为1,行线为0NOPMOVA,P1;读入P1口状态ANLA,#0FH;保留低4位ORLA,B;高四位和低四位重新组合CJNEA,#0FFH,KEY_IN1;0FFH为末按键AJMPKEY_ENDKEY_IN1:MOVB,A;保留键值MOVDPTR,#KEYTABLE;置键编码表首址MOVR3,#0FFH;KEY_IN2:INCR3;查表次数加1MOVA,R3MOVCA,@A+DPTR;取出键码CJNEA,B,KEY_IN3;比较MOVA,R3;找到,取次数值AJMPKEY_ENDKEY_IN3:CJNEA,#00H,KEY_IN2;继续查;00H为结束码KEY_END:RET;键编码表KEYTABLE:DB0EEH,0EDH,0EBH,0E7H,0DEHDB0DDH,0DBH,0D7H,0BEH,0BDHDB0BBH,0B7H,07EH,07DH,07BHDB077H,00H;00H为结束码;密码显示子程序PASS_PLAY:MOVR0,#PASS_OLD;存放数据首地址MOVR2,#06H;显示6组数据MOVLCD_X,#09H;第9列ACALLSET_X2;第二行P_PLAY:MOVA,@R0;取显示数据ADDA,#30H;转换为ASCII码ACALLWDATA;写数据,显示INCR0;修改存放数据地址DJNZR2,P_PLAYRET;开启输入子程序;按F键大于3秒,方可退出此程序START_IN:CLRSEC3;清3s标志位 MOVCOUNT,#00H;清中止计数单元 MOVSEC,#00HS_IN1:ACALLKEY_SCANCJNEA,#0FH,S_IN1;"F"键SETBTR0;开启TIMER0中止S_IN2:ACALLKEY_SCANCJNEA,#0FH,S_IN3;"F"键JNBSEC3,S_IN2;没有达成3s,转移CLRTR0;停止TIMER0中止CLRSEC3;清3s标志位 MOVSEC,#00HMOVCOUNT,#00H;清中止计数单元ACALLMENU2ACALLBEEP_BLAJMPS_ENDS_IN3:CLRTR0;停止TIMER0中止CLRSEC3;清3s标志位MOVCOUNT,#00H;清中止计数单元 MOVSEC,#00HAJMPS_IN1S_END:RET;密码输入子程序PASS_IN:ACALLMENU2MOVR0,#PASS_NEW;存放输入密码单元首地址MOVR2,#06H;6位密码MOVLCD_X,#09H;确定显示首位置ACALLSET_X2CLRSEC10;清10s标志位 MOVSEC,#00H;清秒计数单元MOVCOUNT,#00H;清中止计数单元SETBTR0P_IN1:JBSEC10,P_ENDACALLKEY_SCANCJNEA,#0FFH,P_IN2;判是否有键按下?AJMPP_IN1P_IN2:ACALLKEY_SCANCJNEA,#0AH,P_IN3;数字键0-9有效P_IN3:JNCP_IN1;>=时,C=0MOVA,R3;取键值MOV@R0,A;保留输入密码值INCR0MOVA,#2AH;转换为ASCII码ACALLWDATA;显示输入密码位数ACALLBEEP_BL;蜂鸣器响一声DJNZR2,P_IN1P_END:CLRTR0 MOVSEC,#00H;清秒计数单元 CLRSEC10;清10s标志位 MOVCOUNT,#00H;清中止计数单元RET;修改密码子程序CHANGE_PASS:ACALLKEY_SCANCJNEA,#0BH,CH_END;判"B"键是否按下?CLRTR0ACALLMENU4MOVR0,#PASS_OLD;存放输入密码单元首地址MOVR2,#06H;6位密码MOVPOS,#09H;确定显示首位置ACALLBEEP_BLCH_IN1:ACALLKEY_SCANCJNEA,#0FFH,CH_IN2;判是否有键按下?AJMPCH_IN1CH_IN2: ACALLKEY_SCANCJNEA,#0AH,CH_IN3;数字键0-9有效CH_IN3:JNCCH_IN4;>=时,C=0MOVLCD_X,POS;确定显示位置ACALLSET_X2MOVA,R3;取键值MOV@R0,A;保留输入密码值MOVA,#2AH;转换为ASCII码ACALLWDATA;显示输入密码位数ACALLBEEP_BL;蜂鸣器响一声INCPOSINCR0DJNZR2,CH_IN1;6位密码是否输入完?AJMPCH_IN6CH_IN4:ACALLKEY_SCANCJNEA,#0CH,CH_IN1;"C"修改键MOVA,POSCJNEA,#09H,CH_IN5;检测POS是否到最小值AJMPCH_IN1CH_IN5:DECPOSDECR0INCR2MOVLCD_X,POSACALLSET_X2MOVA,#2DH;显示"-"ACALLWDATAACALLBEEP_BL;蜂鸣器响一声AJMPCH_IN1CH_IN6:ACALLKEY_SCANCJNEA,#0EH,CH_IN7;"E"键确定退出ACALLMENU1ACALLBEEP_BLAJMPCH_ENDCH_IN7:CJNEA,#0CH,CH_IN6;"C"键返回修改AJMPCH_IN5CH_END:SETBTR0RET;密码比较子程序;比较正确,置密码正确标志位。;比较错误,清密码正确标志位。PASS_COMP:MOVR2,#06H;比较6组数据MOVR0,#PASS_OLDMOVR1,#PASS_NEWP_COMP0:MOVA,@R0MOVB,@R1CJNEA,B,P_COMP1INCR0INCR1DJNZR2,P_COMP0SETBPASS_OK;置密码正确标志位CLRRELAY;继电器吸合MOVB,#00HMOVDPTR,#INFO5;指针指到信息5ACALLW_STRING2MOVSEC,#00H;清秒计数单元 CLRSEC10;清10s标志位 MOVCOUNT,#00H;清中止计数单元 SETBTR0RETP_COMP1:CLRPASS_OK;清密码正确标志位MOVB,#00HMOVDPTR,#INFO6;指针指到信息6ACALLW_STRING2RET;查看密码子程序PASS_LOOK:ACALLKEY_SCANCJNEA,#0AH,LOOK_END;"A"键查看 ACALLMENU3CLRTR0ACALLPASS_PLAYACALLBEEP_BLLOOK_1:ACALLKEY_SCANCJNEA,#0EH,LOOK_1;"E"键退出 ACALLMENU1 ACALLBEEP_BL SETBTR0LOOK_END:RET;蜂鸣器响一声子程序BEEP_BL:MOVR6,#200BL1:ACALLBL2CPLBEEP;蜂鸣器取反产生驱动脉冲DJNZR6,BL1SETBBEEP;关闭蜂鸣器MOVR5,#15ACALLDELAYRETBL2:MOVR7,#200BL3:NOPDJNZR7,BL3RET;定时器0计时中止子程序TIMER0:PUSHACCPUSHPSWMOVTL0,#00H;50ms定时常数MOVTH0,#4CHINCCOUNTMOVA,COUNT;50ms计数值加1CJNEA,#20,T0_ENDMOVCOUNT,#0INCSEC;秒加1MOVA,SECCJNEA,#03H,T0_0SETBSEC3;置3s标志位T0_0:CJNEA,#10,T0_END;是否到10秒?MOVSEC,#0;秒单元清0SETBSEC10;置10s标志位T0_END:POPPSWPOPACCRETI;延时R5*10MS子程序DELAY:MOVR6,#50DEL1:MOVR7,#93DEL2:DJNZR7,DEL2DJNZR6,DEL1DJNZR5,DELAYRET;延时5MS子程序DELAY1:MOVR6,#25DEL3:MOVR7,#93DEL4:DJNZR7,DEL4DJNZR6,DEL3RET;检验LCD忙状态;busy为1时,忙,等候。busy为0时,闲,可写指令和数据LCD_BUSY:MOVDATAPORT,#0FFHBUSY_1:CLRLCD_RSSETBLCD_RWCLRLCD_ENNOPSETBLCD_ENJBBUSY,BUSY_1CLRLCD_ENRET;LCD写命令子程序;LCD_RS=L,LCD_RW=L,D0-D7=指令码,E=高脉冲WCOM:JNBBUSY_CHECK,WCOM_1ACALLLCD_BUSYWCOM_1:MOVDATAPORT,A;写入指令和地址CLRLCD_RSCLRLCD_RWNOPSETBLCD_ENNOPCLRLCD_ENRET;LCD写数据子程序;LCD_RS=H,LCD_RW=L,D0-D7=数据码,E=高脉冲WDATA:ACALLLCD_BUSYMOVDATAPORT,A;写入数据SETBLCD_RSCLRLCD_RWNOPSETBLCD_ENNOPCLRLCD_ENRET;在LCD第一行指定显示位置SET_X1:MOVA,LCD_XADDA,#80HACALLWCOMRET;在LCD第二行指定显示位置SET_X2:MOVA,LCD_XADDA,#0C0HACALLWCOMRET;清除LCD第一行CLR_LINE1:MOVA,#80H;设置LCD第一行地址ACALLWCOM;MOVR0,#16;设置计数值

温馨提示

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

评论

0/150

提交评论