毕业设计(论文)LCD电子密码锁的设计_第1页
毕业设计(论文)LCD电子密码锁的设计_第2页
毕业设计(论文)LCD电子密码锁的设计_第3页
毕业设计(论文)LCD电子密码锁的设计_第4页
毕业设计(论文)LCD电子密码锁的设计_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

1、绪论目前,全球印制电路板(printed circuit board,简称为pcb)产业产值占电子元件产业总产值的四分之一以上,是各个电子元件细分产业中比重最大的产业,产业规模达400亿美元。同时,由于其在电子基础产业中的独特地位,已经成为当代电子元件业中最活跃的产业,2003和2004年,全球pcb产值分别是344亿美元和401亿美元,同比增长率分别为527和1647。我国的pcb研制工作始于1956年,19631978年,逐步扩大形成pcb产业。改革开放后20多年,由于引进国外先进技术和设备,单面板、双面板和多层板均获得快速发展,国内pcb产业由d,n大逐步发展起来。2002年,中国pcb

2、产值超过台湾,成为第三大pcb产出国。2003年,pcb产值和进出口额均超过60亿美元,成为世界第二大pcb产出国。2005年中国pcb的产量为11057亿平方米, 产值达到969亿人民币(折约107亿美元),产值及进出口总额双超100亿美元p4l。pcb的产值将首次超过日本(据预测日本2005年产值约96亿美元),成为世界pcb 第一生产大国。 国外尤其是欧洲、美国和同本pcb研制丌发和生产较早,废水处理也起步较早,在20世纪70年代已刀:始进行pcb废水污染及其治理方法的研究。早期主要应用混凝沉淀、活性碳、离子交换等工艺进行处理pcb废水。这此方法工艺只是针对pcb废水中的某些成份进行处理

3、,随着pcb行业的发展,产品越来越丰富, 生产工艺也越来越复杂,体现在pcb药剂成份更多更复杂,生产流程更长技术含量更高,pcb废水污染物的种类多、浓度高,环境保护要求也更严格,原来处理某种单一污染物或某一类废水的工艺越来越不适应发展的要求,于是,又相继研究开发了新的处理方法,能同时去除多种重金属离子和有机污染物。这此方法具有代表性有气态凝聚法、胶束增强超滤法、重捕剂法和反渗透膜法等。气态凝聚电过滤法是美国在80年代开发出来的一种不加化学药剂的新颖废水处理法,属于一种物理方法来处理印制电路板废水。包括三个部分,第一部分是离子化气体发生器,空气被吸入该发生器,能过离子化磁场改变其化学结构,变成高

4、度活化的磁性氧离子和氮离子,用射流装置把这种气体引入废水中,使废水中的金属离子、有机物等有害物质氧化并聚集成团,易于过滤除去;第二部分是电解质过滤器,过滤除去第一部产生的聚团物质:第三部分是高速紫外线照射装置,紫外线射入水中可氧化有机物和化学络合剂,降低coder和bod5。目前,已开发出成套一体化设备可直接应用 国外八十年代以来开始研究一种新的水处理技术,以去除废水中的有机污染物和金属离子,即胶束增强超滤法(mieellar-enhaneed ultrafiltration,简称meuf3,这是一种将表面活性剂和超滤膜耦合起来的新技术。某些阴离子与阳离子或非离子表面活性剂混合后具有协同作用,

5、能形成较大的胶束,增强对金属离子的去除效果。胶束增强超滤法处理印制电路板废水具有工艺简单、处理效果好的特点,适用于处理浓度较低的印制电路板废水。砷垤t(三巯三嗪三钠盐)是最近美国开发的一种新型重金属沉淀剂,具有以下优点:ph值应用范围广,在ph=4ll范围内都有絮凝效果;具有巨大的凝聚力, 生成絮状物体积大,沉降速度快;对水中多种重金属都具有去除效果;不仅能有效地去除水中的悬浮物,而且还能去除水中的coder、bod5、色度、硫化物和恶臭等;对络合废水有破络作用。1 本设计课题的背景及现状1.1国内环境保护带来了严重影响pcb在给我国带来经济发展的同时,也给国内环境保护带来了严重影响。特别是p

6、cb用水量和排污量都较大“121310根据资料显示,我国2004年pcb行业总用水量约】5x 100吨。未经处理捧放的污水含有大量的有毒有害污染物,不但污染江河湖泊,而且严重污染地下水资源,印制线路板行业的环境保护问题更加突出。pcb废水中含有大量的cu2-、np、ag+、all+、sna+sn4+、pb2+等会属离子, 含量变化较大,浓度高,成分复杂,形态不一,既有固体悬浮金属颗粒,也有游离态非络合金属离子,同时还有络合态的络合金属离子。这些金属离子如不处理,直接捧放到自然界中,会对环境和人类造成极大的危害。cu会引发呼吸系统病症, ni会引发各种皮炎、肠胃疾病和肿瘤,pb会引发血液系统、泌

7、尿系统等病症。金属离子不仅会对人类的健康造成损害,同时会对自然界的生物造成危害。淡水或海洋中的水生生物对水体中的金属离子非常敏感,即使很低的浓度也会对其构成威胁; 土壤或灌溉水中的金属离子会对植物生长产生不利的影响,并且将在植物的叶茎或根部富集,以至影响波及整个食物链14 pcb废水中还含有大量有机物,体现在混合废水coder可高达1000mgl。生产线排出的各种报废浓缸液(无回收价值)及浓缸后水洗水含有大量的表面活性剂、油墨、绿油、有机分散剂、光亮剂、除油剂等高浓度的有机化合物。pcb废水中还含有氨氮、氰化物、氟化物、磷等污染物。有机物质在分解过程中大量消耗水中的溶解氧,可以使水体缺氧,致使

8、大多数水生动物难以生存。有机物质分解时放出氧,又会促使藻类及浮游植物大量生成,导致湖泊的加速淤塞。有机物质形成的泡沫、浮垢和引起的浑浊、恶臭等,都足以降低水体的使用价值。废水若没有妥善处理就排放,造成受纳水体污染、影响水体功能、破坏生态环境。氰化物是极毒的物质,废水中的氰化物可以成为氰化氢气体逸出,氰化物和氢氰酸能通过皮肤、肺、胃进入体内。氟化物能危害人的骨骼和皮肤。氨氮和磷是造成湖泊和近海富养盐化的主要营养物质,每年造成极大的经济损失。1.2择应综合考虑各处理工艺的优缺点工艺选选择经济、有效、方便、安全的工艺组合。不仅要注重废水的处理工艺,还要从环保角度熟悉pcb生产线的特点, 掌握pcb废

9、水分类的方法。各类废水的调节池(收集池)的容积应不小于一个班的废水排放量。调节池(收集池)应设置搅拌混合装置,将水质混合均匀。由于pcb企业产品种类、生产工艺、产品比例的不同,pcb废水的水量及水质成分就会有明显差异;各个地区执行的排放标准的差异、pcb企业的废水循环回用率的不同、企业排放的水量大小,都会对pcb废水的处理工艺的选择产生一定的影响。pcb废水分类较多,要统筹考虑每股水的处理和每种污染物的去除,还要结合一般酸碱水洗水的稀释能力的特点,选择最优化的工艺组合,降低投资和运行成本,确保废水达标捧放。1.3本设计课题的研究现状我国r=b企业所产生的三废治理还不能达到欧、美、闩等发达国家的

10、水平。对于pcb 废水的治理,国内采用较多的处理方法有化学沉淀法、铁屑混合物微电解法、生化法、离子交换法、化学氧化法等,各有优劣。这些技术在处理pcb废水中的某种污染物方面都有一定的优势,也有成功的pcb废水处理实例。国内的pcb处理与国外的差距主要在以下几个方面。第一:pcb企业环保意识、环保管理上有差距,比不上欧美同等国家; 第二:环保投资上有差距,预留的废水处理设施面积狭窄,投资较少,设备和仪表产品质量较低档; 第三:环保监管不到位,标准的执行差异较大。第四:废水分流不彻底和治理工艺不完善,pcb废水处理技术上也有不少差距。上述的四个方面,前三个方面不是本次研究的内容,本研究着重在第四个

11、方面具体来说,许多pcb废水处理不达标,是因为没有对生产线排水合理的分类收集;只所以没有合理的分类收集,是因为不了解生产线,不了解生产线的排污特点,因而也就无法有效地将p(m废水合理地分类。pcb废水治理方法也经历了一个过程,从最初的只注重重金属污染物的去除,到目前的全因子达标监控,氨氮、coder等污染物的去除也成为pcb废水治理的重点。在目前国内环保投资还不是很到位的情况下,pcb废水的治理技术(或工艺)优化组合,对于降低投资和节约运行成本都具有重要意义。2.1系统设计方案 按键输入显示与声音输出开锁电源部分at89c51图1 系统组成键盘按键密码输入,送at89c51处理,显示输出用于及

12、时显示按键输入的数字,便于修改,声音输出当密码错误时候的报警信息,开锁部分采用电磁锁接受芯片送来的信号后自动开锁。2.2系统功能本电子密码锁具备以下功能:1没有set time时液晶显示器只显示当时时间,在主界面下如果按set time 键,就可以重设时间。2在主界面下按set psw键后进入设置密码状态,密码可在115 位范围内自由设置,最多达1015 种组合,使穷举法套解密码成为不可能。3在主界面下按input键后输入密码,密码正确时,在输出口1 输出0.5 秒的高脉冲开锁电平,在输出口2 输出0.5 秒的低脉冲开锁电平,用于开锁。如果连续三次输入错误密码,则启动报警系统并锁定键盘一段时间

13、。4退格和按键提示功能。每次按键都有发光二极管发光和声光提示音,用于指示按键有效。同时液晶显示可以显示所输入的数字是不是错误,错误的话用退格修改并从输入,可返回主界面。5系统设有超级用户密码,用于解除用户忘记其所设密码时使用,抑或当密码锁用于宾馆,房客走后,宾馆管理员用于清除旧密码。6在外部掉电时,内部电源会使芯片继续工作原来设置的密码也不会丢失。2.3硬件部分的相关介绍2.3.1 at89c51 简介at89c51 是美国atmel 公司生产的低功耗,高性能cmos 8 位单片机,片内含4k bytes的系统可编程的flash 只读程序存储器,器件采用atmel 公司的高密度,非易失性存储技

14、术生产,兼容标准8051 指令系统及引脚。它集成flash 程序存储器,既可在线编程(isp)也可采用传统的方法进行编程。集8 位微处理器于单片芯片中,功能强大,价位低的at89c51 提供许多高性价比的应用场合,可灵活应用于各种控制领域。at89c51的功能与结构如下: 128 字节内部ram,32 个i/o 口线, 4k 字节flash 闪速存储器,看门狗(wdt),两个16 位定时/计数器,两个数据指针,一个5 向量两级中断结构,片内振荡器及时钟电路,同时at89c51 可降至0hz的静态逻辑操作,并支持两种软件可选的节电工作模式,空闲方式停止cpu 的工作,但允许ram 定时/计数器,

15、串行通信口及中断系统继续工作。掉电方式保存ram 中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。2.3.2 1602 液晶显示器简介lcd显示大体分为字符型液晶、点阵图形液晶、笔段型液晶等几大类。图2 1602引脚液晶显示模块是一类专门用于显示数字、字母、符号、图形等的点阵型液晶显示模块,每一个点阵字符位都可以显示一个字符,点阵字符位之间的一个点距的间隔起字符间距和行距的作用。它是由若干个57 或511 等点阵字符组成。液晶显示模块lcd1602 的引脚功能如下:lcd1602 的引脚功能排列如上图2所示,它采用的是16 脚接口,而且引脚都分布在lcd1602的一侧使用时

16、只要把对应的电源、数据线等接好就可以其中:第1 脚:vss 为电源第2 脚:vdd 接地第3 脚:v0 用于调节lcd1602的亮度,为液晶显示器对比度调整端,很多时候液晶显示没显示可能就是这里的原因,lcd 驱动电压范围为vddvo 接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可通过一个10k 的电位器调整对比度。第4 脚:rs 为寄存器选择位,低电平时选择命令寄存器ir、高电平时选择数据寄器dr。第5 脚:rw 为读写控制位,高电平时进行读操作。当rs 和rw共同为低电平时可以写入指令或者显示地址,当rs 为低电平rw 为高电平时可以读忙信号,当rs 为高

17、电平rw 为低电平时可以写入数据。第6 脚:enable 端为使能控制位,当e 端由高电平跳变成低电平时,液晶模块执行命令。第714 脚:d0d7 为8 位的双向数据总线。第1516 脚:背光灯的正负极图3 1602的内部框图2液晶显示模块1602 的内部结构液晶显示模块lcd1602 的内部结构如上图3所示,它主要由cgrom、cgram、ddram、bf、ir、dr、ac 等大规模集成电路组成。2.3.3 protel99se简介protel99se主要组成软件有:原理图编辑器(advanced schematic ) 用于原理图的输入、编辑、查错。仿真器(simulator)用于对原理图

18、的仿真,包含了常用的直流、交流特性、瞬态响应等常用的仿真测度,并可以查看波形。pcb编辑器(advanced pcb)用于pcb的设计、查错。pld设计工具(pld designer)简单pld的设计工具。文本编辑器(text editor)用于说明文档、网络表等的编辑,不支持中文。表格处理软件(spread)用于处理元件表,相当于excel 97。protel 99se集成了从原理图设计、仿真到pcb过程中可能涉及到的常用工具,只用它几科可以完成整个设计的所有工作,功能非常强大,需要一定的时间与精力去学习。protel 99 的主要特点:1集成设计管理系统(design explore)2使

19、用了智能工具(smarttool)技术,在设计环境中集成了所有设计所用到的工具。3使用了智能文档(smartdoc)管理技术,把所有设计时用到的文档都保存在一个数据库中,在工作中可以使用各种文档。4使用了智能组(smartteam)管理技术,允许多个设计者通过网络安全地为同一工程工作。通过集成的设计管理系统,可以方便地管理用户、设置访问权限等。5提供了功能强大的各种文档的快速浏览工具,使用户可以快速方便地查询、定位、修改文档。6提供了全面而方便使用的帮助系统3。2.4 各个硬件模块的设计2.4.1 电源部分的设计电源部分是先通过一个变压器把220 伏的交流电变换为9 伏的交流电,再通过全桥整流

20、电路整流成单向脉动的直流电,大容量电解电容c1 用于使脉动的直流电波形更加平直,c2 用于抵消输入线较长时的电感效应,以防止电路产生自激振荡,其容量较小,一般小于1f。在输出端加接电容c6,一般取值0.1f,其目的是改善负载的瞬态响应、防止自激振荡和减少高频声,输出端输出较为稳定的5v 电压为整个系统提供工作电压。e为备用电池一端接地另一端通过二极管接电源,当芯片工作时,二极管反向,当掉电时,二极管正向导通,继续工作。图4电源部分2.4.2最小系统部分的设计最小部分的设计如下图5所示,时钟周期是芯片工作时候的最小周期,时钟电路是计算机的心脏,它控制着计算机的工作节奏。at89c51内部有一个带

21、反馈的线性反相放大器,外接晶振(或陶瓷谐振器)和电容就组成振荡器,产生时钟送至单片机的内部工作部件。加电以后延迟一段时间(约10ms)振荡起振产生时钟,不受软件控制(xtal2输出幅度为3v左右的正弦波)。振荡器产生的时钟频率主要由晶振上标明的频率参数确定,电容c4和c5的作用有两个:其一是使振荡器起振,其二是对振荡器的频率f起微调作用(c4、c5变大,则f变小),其值一般是30pf左右。复位电路由电容串联电阻构成,复位电路的基本功能是:系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。 图5 最小系统部分2.4.3输出部分的设计输出部分主要包括声光提示部分和电磁锁部分。图中三极管q1

22、 工作于饱和状态,复位后单片机输出口的初始状态是高电平,三极管截止,蜂鸣器得不到工作电压而不能发声;当用软件控制此端口为低电平时,三极管导通,蜂鸣器得电而工作,发出声音。通过程序控制此三极管的间歇导通和截止以及导通和截止的时间长短,就可以达到控制声音频率和发声长短的目的,得到我们所需要的不同声音。发光二极管led1 和一个470 欧的电阻口串接到地,当输出口p3.4 为高电平时,发光二极管导通发光,当输出口为低电平时,发光二极管截止熄灭。在程序的初始化部分,要加一条clr p3.4 指令以熄灭此发光二极管。开锁部分,使用了p3口的两跟口线,实际应用中应加上光电隔离以及缓冲放大电路。光电隔离用于

23、防止后面电路的尖峰脉冲干扰通过单片机端口串扰进来,影响单片机的正常运行。缓冲放大电路进行电平转换和提高驱动能力以直接驱动电磁锁。做好电磁锁在市面上就可以买到这里就不介绍了。图6 输出部分2.4.4液晶接口部分的设计表1 1602 接口信号说明编号符号引脚说明编号符号引脚说明1vss电源地9d2data i/o2vdd电源正极10d3data i/o3vl液晶显示偏压信号11d4data i/o4rs数据/命令选择(h/l)12d5data i/o5r/w读/写选择端(h/l)13d6data i/o6e使能信号14d7data i/o7d0data i/o15bla背光源正极8d1data i

24、/o16blk背光源负极 lcd 接口设计可以分为8 位及4 位控制方式,由于本电路采用多达32 个i/o 口的at89c51 芯片,不存在i/o 口资源使用紧张,不够使用的情况,为方便程序的编写,采用最为常见的8 位接口设计。v0 为液晶显示器对比度调整端,lcd 驱动电压范围为vssvdd,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,故通过一个10k 的电位器调整显示屏的对比度。15 和16 脚是液晶背光电压输入端,通过一 个单向自锁开关控制背光的开启和关闭。图7液晶接口部分2.4.5系统pcb图 通过自动布线和手工布线后得到的pcb图 如下:图8 pcb图3软

25、件部分3.1软件的总体编写思路和流程图整个流程采用调用子程序的方式增强可读性,住循环为无限循环,程序在keil c51的环境下运行。先调试出液晶驱动程序,键盘扫描程序两个最基本的子程序,在需要使用时直接调用即可。在接下来的主循环中进行时钟的更新查询和是否有按键的判断,如果时间有更新(过了一秒)就转去处理时间更新;如果有按键按下,则转去按键处理,并判断是否是相应的几个键,是就跳转到相应的功能模块,不是则返回主界面。由于51 单片机架构的原因,容易会受到外界干扰而出错,故程序写完后还要进行进行抗干扰方面的优化。通过指令冗余,软件陷阱等措施将受到干扰而乱飞的程序纳入正轨。比如在未开的中断入口处加入r

26、eti 指令等等。在程序的按键部分加延时或者rs触发器去键盘抖动。 图9流程图3.2各个软件子模块的编写3.2.1 1602 液晶驱动程序表2 1602液晶时序参数时序参数符号极限值单位测试条件最小值典型值最大值e信号周期tc400-ns引脚ee脉冲宽度tpw150-nse上升沿/下降沿时间tr tf-25ns地址建立时间tsp130-ns引脚e。rs。r/w地址保持时间thd110-ns数据建立时间(读操作)td-100ns引脚db9-db7数据保持时间(读操作)thd220-ns数据建立时间(写操作)tsp240-ns数据保持时间(写操作)thd210-ns驱动程序:硬件端口定义及软件资源

27、分配:rs bit p1.4 ;/寄存器选择线rw bit p1.5 ;/lcd 读写线en bit p1.6 ;/启用控制线,高电平动作lcd equ p0 ;/lcd 双向数据总线pos_flag bit 20h.0 ;/字符串显示位置标志,为0 时显示在第一行;为1 时显示在第二行blank equ 30h ;/清行时填入的空格个数控制变量 lcd 初始化:液晶显示模块1602 的控制指令1602 的控制指令共11 条,其中9 条针对命令寄存器ir 的,另外2 条是针对数据寄存器dr 的,具体指令如下表所列:表3 1602 指令表指令指令码说明37usrsr/wd7d6d5d4d3d2d

28、1d0清显示0000000000152ms光标返回0000000000光标回到显示器左上方152ms输入方式00000001i/ds是否移动及移动方向37us显示器开关控制0000001dcbd:显示 c:光标 b:光标闪烁37us移位000001s/cr/l*移动光标及整体显示37us功能设置00001dlnf*dl:数据位数 n:数据行数 f:字型37uscgram地址设置0001cgram的地址设置cgram地址37usddram地址设置001ddram的地址设置ddram地址37us忙标志/读地址计数器件01bf地址计数器(ac)的值读出忙标志和ac的值37uscgram或ddram数

29、据写10写数据将内容写入ram中37uscgram或ddram数据读11读数据将内容写入ram中读出37us指令1:清显示,指令码01h,光标复位到地址00h位置指令2:光标复位,光标返回到地址00h指令3:光标和显示模式设置 i/d:光标移动方向,高电平右移,低电平左移 s:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效指令4:显示开关控制。 d:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 c:控制光标的开与关,高电平表示有光标,低电平表示无光标 b:控制光标是否闪烁,高电平闪烁,低电平不闪烁指令5:光标或显示移位 s/c:高电平时移动显示的文字,低电平时移动光标

30、指令6:功能设置命令 dl:高电平时为4位总线,低电平时为8位总线 n:低电平时为单行显示,高电平时双行显示 f: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符指令7:字符发生器ram地址设置指令8:ddram地址设置指令9:读忙信号和光标地址 bf:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。指令10:写数据指令11:读数据init_lcd: mov a,#01h ;clr displaycall write_cmdmov a,#02hcall write_cmd ;clear address pointermov a,#06hcall wr

31、ite_cmd; mov a,#0fhmov a,#0chcall write_cmd ;cursor on,blinkmov a,#1chcall write_cmd ;display&cursor rotate rightmov a,#38hcall write_cmd;two lines,8 bits,5*7retlcd 忙标志位检测程序rsr/wedb0-db7tsp1trtpwthd1thd2valid datatctrtr图10读操作时序表4 状态字说明sta7d7sta6d6sta5d5sta4d4sta3d3sta2d2sta1d1sta0d0sta0-6当前数据地址指针的数值

32、sta7读写操作使能1:禁止 0:允许对控制器每次进行读写操作之前,都必须进行读写检测,确保sta7 为0check: push accmov lcd,#0ffhclr enclr rssetb rwsetb enck: nopjb lcd.7,ckclr enpop accret写指令子程序rsr/wedb0-db7tsp2trtpwpwtfthd1thd1tsp1tcvalid datathd2图11 写操作时序writec: call checkmov lcd,aclr enclr rsclr rwsetb ennopnopnopclr enret写数据子程序writed: call c

33、heckmov lcd,aclr ensetb rsclr rwsetb ennopnopnopclr enret3.2.2键盘扫描程序键盘扫描程序主要有下面五个方面:1在主程序中判断有无键闭合:其方法为在四根列线输出全“0”,读取四根行线的电平状态,若四根行线电平全为“1”,则键盘上没有闭合键;若四根行线不全为1,则有键处于闭合状态。2去除按键的机械抖动:其方法为判别到键盘上有键闭合后,延迟一段时间再判别键盘的状态,若仍有按键闭合,则认为键盘上有一个按键处于稳定的闭合期;否则,认为是按键的抖动或单片机受到干扰。3判别闭合按键的键号:方法为对键盘的列线p2.0-p2.3 进行扫描,读取行线p2

34、.4-p2.7 返回的电平状态,若p2.4-p2.7 为全“1”,则列线输出“0”的这一列上没有键闭合。设立一按键编号计数单元,每次判断一个键就加1,直到找到闭合键,此时计数单元中的值就是此闭合键的编号。4使cpu 对按键的一次闭合作一次处理:设立一按键标志key_flag,为1 表明有键闭合,为0 表明无键闭合。当有键按下后,cpu 循环检测此按键标志,为1 则继续检测,直到该标志量等于0,等待按键放开,保证cpu 对每一次按键仅作一次处理。5取自已定义的键盘布局:取到按键编号后,通过查表的方法,取到自己定义的按键值。软件资源分配:key_flag bit 20h.1cnt_loop2 eq

35、u 31hkey_cnt equ 32hkey_num equ 33hscan_sig equ 34h扫描主程序:get_key:call key_scanjb key_flag,get_keymov a,key_nummov dptr,#key_padmovc a,a+dptrcall beepret;=key_scan;clr key_flagmov p2,#0f0hmov a,p2anl a,#0f0hcjne a,#0f0h,key_injmp key_scan;-key_in: clr key_flagmov key_cnt,#0mov scan_sig,#0f7hmov r5,#3

36、call delayscan_loop1:mov a,scan_sigmov p2,amov a,p2mov cnt_loop2,#4scan_loop2: jb acc.4,next_keysetb key_flagmov key_num,key_cntretnext_key: inc key_cntrr adjnz cnt_loop2,scan_loop2setb cmov a,scan_sigrrc amov scan_sig,ajc scan_loop1ret3.2.3密码输入和处理部分程序软件资源分配:pass_flag bit 20h.2pass0 equ 40h;40h to 4

37、ehpass1 equ 4fh ;4fh to 5dhlenth0 equ 35hlenth1 equ 36hcnt_err equ 37h;error timec_alm1 equ 38h ;alarm_time controlc_alm2 equ 39h1密码输入程序(含退格功能)编写思路:执行清屏指令和开启光标显示和闪烁,取字符串“input password”并送到屏幕上显示,移动光标到第二行第一个位置。把密码计数单元清为0,并把指针指向输入密码存储ram 的首地址,长度为15(可根据需要进行增减)。在输入主循环中一直调用等待按键,取到键值后,用一特定算法判断是否是确定键,退格键和数字

38、键,如果不是则丢弃,如果是确定键,则返回;如果是退格键,则把密码计数单元减1 并把指针指向上一个ram 单元;如果是数字键,则把它存储到当前指针所指向的ram 单元,密码计数单元加1,同时把指针指向下一ram 单元。每次密码计数单元加1 都要判断是否已经满15 位,如果满15 位则等待退格键和确定键,遇到其它键丢弃。input_psw:mov a,#01hcall write_cmdmov a,#0fhcall write_cmdmov dptr,#iptclr pos_flagcall printmov a,#0c0hcall write_cmdmov lenth1,#0mov r1,#pa

39、ss1input_loop: call get_keymov b,akey_enter1:cjne a,#0ch,key_bk1 ;enter keyretkey_bk1: cjne a,#0dh,n1;backspace keybk_in1: mov a,lenth1clr csubb a,#1jc relay1 ;jump to main_loop,but target out of rangedec lenth1dec r1call lcd_addsetb acc.7dec amov b,acall write_cmdmov a, call write_datamov a,bcall w

40、rite_cmdjmp input_loopn1:clr csubb a,#10jnc input_loop ;function keymov a,b ;digital keymov r1,amov a,#*call write_datainc r1inc lenth1mov a,lenth1cjne a,#15,input_loopn2:call get_keycjne a,#0ch,n3retn3:cjne a,#0dh,n2jmp bk_in12密码比较和判断程序编写思路:清除密码正确标志,比较内部设置密码的长度存储单元和待比较的密码长度存储单元,如果不同,则跳到密码错误处理部分;如果两

41、者相等,则进行下一步判断,取两指针,分别指向内部设置的密码存储单元的首个ram 地址,和待比较的密码存储单元的首个ram 地址,如果两者相等则把指针指向下一个ram 地址,再进行比较,遇到不相等就跳到错误处理部分。如果在密码长度范围内两比较单元都相等,则跳转到密码正确处理部分。错误处理部分:取字符串“access denied”并送到显示屏显示,同时蜂鸣器发出警示音。每进入错误处理部分一次就把密码错误计数单元加1,当计到第三次时,执行报警部分,锁定键盘,锁定时间过后返回主界面。密码正确处理部分:清空密码错误计数单元,取字符串“access granted”并送到显示屏显示,同时蜂鸣器发出密码正

42、确的提示音,执行开锁部分。compare: clr pass_flagmov a,lenth1cjne a,lenth0,wrongmov r0,#pass0mov r1,#pass1cmp_loop:mov a,r0mov b,r1cjne a,b,wronginc r0inc r1djnz lenth1,cmp_loopjmp rightwrong:clr pass_flagmov dptr,#errorclr pos_flagcall printmov r5,#150call delayinc cnt_errmov a,cnt_errcjne a,#3,n21mov cnt_err,,#

43、0mov dptr,#lockclr pos_flagcall print;加上一段延时锁定键盘mov c_alm1,#255n20: call beepmov r5,#10call delaydjnz c_alm1,n20n21:call beepmov r5,#15call delaycall beepmov r5,#15call delaycall beepmov r5,#15call delaymov r5,#100call delayretright:setb pass_flagmov cnt_err,#0mov dptr,#okclr pos_flagcall printmov c

44、_alm2,#25c22: call beepdjnz c_alm2,c22mov r5, #255call delayret3密码设置程序(含退格功能)编写思路:执行清屏指令,取字符串“input new.”并送到显示屏进行显示,把光标移动到第二行第一个位置。 取一指针指向内部设置密码存储单元的首个ram 的地址同时把内设密码长度计数单元清为0。在设置密码主循环中一直调用等待按键,取到键值后,用一特定算法判断是否是确定键,退格键和数字键,如果不是则丢弃并跳到输入循环中继续等待按键。如果是确定键看是否已经有输入至少一位密码,如果有则返回,如果还未有输入则跳到设置密码主循环中继续等待按键。如果是

45、退格键,则密码长度计数单元减1,同时把密码计数单元减1 并把指针指向上一个ram 单元。如果是数字键,则把它存储到当前指针所指向的ram 单元,密码计数单元加1,同时把指针指向下一ram 单元。每次密码长度计数单元加1 都要判断是否已经满15 位,如果满15 则等等待退格键和确定键,遇到其它键丢弃。set_psw: mov a,#01hcall write_cmdmov dptr,#newclr pos_flagcall printmov a,#0c0hcall write_cmdmov r0,#pass0mov lenth0,#0set_loop: call get_keymov b,ake

46、y_enter2:cjne a,#0ch,key_bk2;enter keymov a,lenth0clr csubb a,#1retkey_bk2: cjne a,#0dh,n11 ;backspace key jc set_loopbk_in2: mov a,lenth0clr csubb a,#1jc set_loopdec lenth0dec r0call lcd_addsetb acc.7dec amov b,acall write_cmdmov a,# call write_datamov a,bcall write_cmdjmp set_loopn11:clr csubb a,#

47、10jnc set_loop ;function keymov a,bmov r0,aadd a,#30hcall write_datainc r0inc lenth0mov a,lenth0cjne a,#15,set_loopn12:call get_keycjne a,#0ch,n13retn13:cjne a,#0dh,n12jmp bk_in23.2.4时钟部分程序软件资源分配:hour equ 3ahmin equ 3bhsec equ 3chsec0 equ 3dhcnt_timer equ 3ehhour1 equ 21hhour0 equ 22hmin1 equ 23hmin

48、0 equ 24h1时钟中断程序在中断入口处把a 和b 寄存器入堆栈保护起来,重新载入定时器初值,并把时间计数单元加1,查看一下是否已经累积到1 秒了,如果不是则退出中断;如果已经1 秒了,则查看是否已满1 分钟,如果不是则退出中断;如果已经满1 分钟则查看是否满1 小时,如果不是是退出中断;如果已经满1 小时则查看是否满24 小时,如果不是则退出中断;如果已经满24 小时则复位小时分钟和秒计数单元并退出中断。考虑到晶振频率的误差和并在两端的微调电容的误差,实际的振荡频率不可能在我们所期望的理想值,结合中断处理所占用的时间,时钟实际上会有一定的误差,这时我们可以进行软件微调,对中断中载入的定时

49、器初值进行微调,先用载入标准初值进行试调,测试一段时间看是偏快还是偏慢,如果偏快则增加定时器初值,如果测试偏慢则减少定时器初值。在前面标准值的基础上进和相应的处理,增加或减少定时器初值,再测试新的时钟是偏快还是偏慢,再进行调节,直到时钟的误差到达一个让人满意的结果为止。t0_int: push accpush bmov th0,#34hmov tl0,#0e0h ;subbtract 4t timeinc cnt_timermov a,cnt_timercjne a,#20,exitmov cnt_timer,#0inc secmov a,seccjne a,#60,exitmov sec,#

50、0inc minmov a,mincjne a,#60,exitmov min,#0inc hourmov a,hourcjne a,#24,exitmov hour,#0mov min,#0mov sec,#0exit: pop bpop accreti2秒刷新程序编写思路:把液晶显示器地址指针移到第二行第一个位置,依次填入三个空格位,分别把小时变量,分钟变量和秒变量分离为高位和低位,并转化为ascii 码,送到液晶数据口调用液晶写指令子程序,在液晶屏上显示出来,同时在小时和分钟后插入“:”以符合日常习惯。在主程序中循环查看秒变量有没有变化,有则刷新旧的时间内容,新完毕后返回主界面。refl

51、ash:mov a,#0c0hcall write_cmdmov a,# call write_datamov a,# call write_datamov a,# call write_datamov a,hourcall convertmov a,#:call write_datamov a,mincall convertmov a,#:call write_datamov a,seccall convertmov a,#0c0hcall write_cmdret3时间设置程序编写思路:此部分是整个程序中最复杂的部分之一。先开启光标显示并开闪烁;关闭定时器,清空秒变量;把小时变量和分钟变量

52、高低位分离并分别到保护到四个ram 存储单元中;每按set time 键一次,读取当前液晶显示器地址计数器(address counter)的内容,根据光标所在的位置,把地址计数器的内容进行加1 或加2,使光标移到下一个设置位。能根据取到的按键值分别判断该次按键是不是有效,有效则存储到相应的存储单元,否则丢弃。比如当光标在小时高位时,只有按数字键1,2 或确定键才有效,其它键丢弃。当设置完成,按下确定键,把存储小时和分钟变量的四个存储间ram 单元进行整合并还原到小时变量存储单元和分钟变量存储单元,开启定时器,返回主界面。set_time: mov a,#0fhcall write_cmd ;

53、cursor onmov a,hourmov b,#10div abmov hour1,amov hour0,bmov a,minmov b,#10div abmov min1, amov min0,bmov sec,#0mov a,#0c9hcall write_cmdmov a,#0call write_datamov a,,#0call write_data ;set second counter zeron30: mov a,#0c3hcall write_cmdsettime_loop: call get_keymov b,akey_settime2: cjne a,#0fh,key_enter5call lcd_addsetb acc.7add1:cjne a,#0c3h,add2mov a,#0c4hcall write_cmdjmp settime_loopadd2:cjne a,#0c4h,add

温馨提示

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

评论

0/150

提交评论