导航:首页 > 操作系统 > 基于单片机的密码锁设计答辩

基于单片机的密码锁设计答辩

发布时间:2023-12-09 00:08:08

A. 单片机毕业论文答辩陈述

单片机毕业论文答辩陈述

难忘的大学生活将要结束,毕业生都要通过最后的毕业论文,毕业论文是一种有计划的检验大学学习成果的形式,那么毕业论文应该怎么写才合适呢?以下是我为大家收集的单片机毕业论文答辩陈述,仅供参考,希望能够帮助到大家。

单片机毕业论文答辩陈述

各位老师好!我叫刘天一,来自**,我的论文题目是《基于AVR单片机的GSM—R基站天线倾角测量系统》。在这里,请允许我向宁提纲老师的悉心指导表示深深的谢意,向各位老师不辞劳苦参加我的论文答辩表示衷心的感谢。

下面我将从论文的背景意义、结构内容、不足之处三个方面向各位老师作一大概介绍,恳请各位老师批评指导。

首先,在背景和意义上,移动通信网络建设初期,基站站间距大、数量少、站型也不大,并且频率资源相对比较丰富。在这一阶段的网络规划时很少对天线的倾角做详细的规划,基站功率常常以满功率发射。对于越区覆盖则主要通过增加邻区的办法予以解决。

但随着网络的迅速发展,城市中的基站越来越密集,在一个中等城市通常分布着数十个基站,在省会城市更是达到了数百个基站之多,并且基站的密度越来越高,站型也越来越大,如果对越区覆盖的问题仍然釆用老办法解决,那么网络质量将难以保证。因此有必要在规划阶段就对基站天线的倾角、基站静态发射功率等进行更加细化合理的规划,从而减轻优化阶段的工作量。

合理设置天线下倾角不但可以降低同频干扰的影响,有效控制基站的覆盖范围,而且可以加强本基站覆盖区内的信号强度。通常天线下倾角的设定有两方面侧重,一方面侧重于干扰抑制,另一方面侧重于加强覆盖。这两方面侧重分别对应不同的下倾角算法。一般而言,对基站分布密集的地区应该侧重于考虑干扰抑制(大下倾角);而基站分布比较稀疏的地方则侧重于考虑加强覆盖(小下倾角)。

规划阶段进行的倾角设计,在实际施工过程中会出现一定的偏差,在使用的过程中,由于季节变化或风、雨、雪、温度、湿度等自然条件影响,基站天线倾角会发生变化,进而影响场强质量。而移动通信已经是人类日常生活中不可或缺的一部分,正常的通信离不开基站的建设与维护,因此,基站天线倾角的实时、精确测量就显得尤为重要了。但现阶段移动通信基站的天线方位角、下倾角等基本是依靠人工现场通过罗盘、坡度仪等仪器进行测量得到的,而且由于基站的数量巨大,因而测量耗费了大量的时间、人力、物力,并且存在较大的测量人员人身安全隐患。因此,实现一种省时、省力的自动化测量仪器是非常亟需的。

为此,拟研发GSM—R基站天线倾角测量系统,实现不登塔作业即可完成基站天线倾角的测量工作,并可对各基站测试点进行联网,实现对基站天线倾角的实时监测。本系统可以大大降低GSM—R系统现场维护作业的人身安全风险和作业难度、强度,具有很高的实用性和安全性。

其次,在结构内容上,论文主要对基站倾角测量系统进行设计,主要研宄内容为:

(1)根据控制要求,选用倾角测量模块;学会使用并通过使用手册深入学习其特性及原理。

(2)采用ATmegal62作为控制芯片,进行倾角测量系统的硬件电路设计。整个系统分为主板和从板,通过芯片内置的TWI串行总线传输接口进行通信,由主板将数据通过无线模块发送给手持终端。

(3)采用JZ863数传模块,将其与上位机控制芯片、下位机控制芯片的异步串行接收/发送器USART连接,进行上位机与下位机的无线数据通信。

(4)在硬件平台基础上根据模块化思想进行倾角测量系统的软件程序设计。

(5)在设计好的软硬件平台上进行相关实验,实现控制系统设计目标和要求。

本文各章节安排如下:

第1章“引言”,对倾角测量系统进行了简要概述,介绍了研宄背景,并对本文的内容作了简介。

第2章“倾角测量传感器”,主要分析了本系统比较重要的倾角测量模块的原理以及SCA100T—D01倾角测量芯片,对其各个引脚的功能以及通信协议等进行了阐述,为后面的具体实现打下了基础。

第3章“ATmegal62微处理器结构及原理”,分析了本毕设使用的核心单片机芯片ATmegal62,包括它的各个引脚以及I/O端口,并且分析了本论文主要使用的通信协议,即同步串行SPI接口和USART串行口。

第4章“倾角测量系统软硬件实现”,本章首先对系统的总体设计进行了实现,包括主要的技术指标、主要的功能模块等。接着进行了本系统的硬件实现和软件实现。硬件实现包括各个功能模块的具体电路设计以及最后的PCB电路板制作,软件实现包括各个功能模块的程序设计。

第5章“倾角测量系统调试及实验”,本章主要进行了硬件电路的调试,并介绍了通过AVR Studio进行软件仿真以及下载,最后在搭建的系统软硬件平台的基础上,进行调试和实验,以此来验证基站倾角测量系统的硬件与软件设计。

第6章“结论”,本章主要总结了本论文的研究结果,并阐述了系统的不足之处和对以后工作的展望。

最后,在不足之处上,这篇论文的写作以及修改的过程,也是我越来越认识到自己知识与经验缺乏的过程。虽然,我尽可能地收集材料,竭尽所能运用自己所学的知识进行论文写作,但论文还是存在许多不足之处,有待改进。请各位评委老师多批评指正,让我在今后的学习中学到更多。

[知识拓展]

论文答辩提问方式

在毕业论文答辩会上,主答辩老师的提问方式会影响到组织答辩会目的的实现以及学员答辩水平的发挥。主答辩老师有必要讲究自己的提问方式。

1、提问要贯彻先易后难原则。主答辩老师给每位答辩者一般要提三个或三个以上的问题,这些要提的问题以按先易后难的次序提问为好。所提的第一个问题一般应该考虑到是学员答得出并且答得好的问题。学员第一个问题答好,就会放松紧张心理,增强“我”能答好的信心,从而有利于在以后几个问题的答辩中发挥出正常水平。反之,如果提问的第一个问题就答不上来,学员就会背上心理包袱,加剧紧张,产生慌乱,这势必会影响到对后面几个问题的答辩,因而也难以正确检查出学员的答辩能力和学术水平。

2、提问要实行逐步深入的方法。为了正确地检测学员的专业基础知识掌握的情况,有时需要把一个大问题分成若干个小问题,并采取逐步深入的提问方法。如有一篇《浅论科学技术是第一生产力》的论文,主答辩老师出的探测水平题,是由以下四个小问题组成的。

(1)什么是科学技术?

(2)科学技术是不是生产力的一个独立要素?在学员作出正确回答以后,紧接着提出第三个小问题:

(3)科学技术不是生产力的一个独立要素,为什么说它也是生产力呢?

(4)你是怎样理解科学技术是第一生产力的?通过这样的提问,根据学员的答辩情况,就能比较正确地测量出学员掌握基础知识的扎实程度。如果这四个小问题,一个也答不上,说明该学员专业基础知识没有掌握好;如果四个问题都能正确地回答出来,说明该学员基础知识掌握得很扎实;如果能回答出其中的2—3个,或每个小问题都能答一点,但答得不全面,或不很正确,说明该学员基础知识掌握得一般。倘若不是采取这种逐步深入的提问法,就很难把一个学员掌握专业基础知识的情况准确测量出来。假如上述问题采用这样提问法:请你谈谈为什么科学技术是第一生产力?学员很可能把论文中的主要内容重述一遍。这样就很难确切知道该学员掌握基础知识的情况是好、是差、还是一般。

3、当答辩者的观点与自己的观点相左时,应以温和的态度,商讨的语气与之开展讨论,即要有“长者”风度,施行善术,切忌居高临下,出言不逊。不要以“真理”掌握者自居,轻易使用“不对”、“错了”、“谬论”等否定的断语。要记住“是者可能非,非者可能有是”的格言,要有从善如流的掂量。如果作者的观点言之有理,持之有据,即使与自己的观点截然对立,也应认可并乐意接受。倘若作者的观点并不成熟、完善,也要善意地、平和地进行探讨,并给学员有辩护或反驳的平等权利。当自己的观点不能为作者接受时,也不能以势欺人,以权压理,更不要出言不逊。虽然在答辩过程中,答辩老师与学员的地位是不平等的(一方是审查考核者,一方是被考核者),但在人格上是完全平等的。在答辩中要体现互相尊重,做到豁达大度,观点一时难以统一,也属正常。不必将自己的观点强加于人,只要把自己的观点亮出来,供对方参考就行。事实上,只要答辩老师讲得客气、平和,学员倒愈容易接受、考虑你的观点,愈容易重新审视自己的观点,达到共同探索真理的目的。

4、当学员的回答答不到点子上或者一时答不上来的问题,应采用启发式、引导式的提问方法。参加过论文答辩委员会的老师可能都遇到过这样的情况:学员对你所提的问题答不上来,有的就无可奈何地“呆”着;有的是东拉西扯,与你绕圈子,其实他也是不知道答案。碰到这种情况,答辩老师既不能让学员尴尬地“呆”在那里,也不能听凭其神聊,而应当及时加以启发或引导。学员答不上来有多种原因,其中有的是原本掌握这方面的知识只是由于问题完全出乎他的意料而显得心慌意乱,或者是出现一时的“知觉盲点”而答不上来。这时只要稍加引导和启发,就能使学员“召回”知识,把问题答好。只有通过启发和引导仍然答不出或答不到点子上的,才可判定他确实不具备这方面的知识。

【拓展】

单片机毕业论文开题报告参考

1. 课题名称:

数字钟的设计

近年来,随着单片机档次的不断提高,功能的不断完善,其应用日趋成熟、应用领域日趋广泛,特别是工业测控、尖端武器和日常家用电器等领域更是因为有了单片机而生辉增色,不少设备、仪器已经把单片机作为核心部分。单片机应用技术已经成为一项新的工程应用技术。尤其是Intel公司生产的MCS-51系列单片机,由于其具有集成度高、处理功能强、可靠性高、系统结构简单、价格低廉等优点,在我国得到了广泛的`应用,在智能仪器仪表机电一体化等方面取得了令人瞩目的成果。现在单片机可以说是百花齐放,百家争鸣,世界上各大芯片制造公司都推出了自己的单片机,从8位,16位,到32位,数不胜数,应有尽有由于主流C51兼容的,也有不兼容的,但他们各具特色,互成互补,为单片机的应用提供了广泛的天地。在高节奏发展的现代社会,以单片机技术为核心的数字钟越来越彰显出它的重要性。

3. 设计目的和意义:

单片机的出现具有划时代的意义。它的出现使得许多原本花费很高的复杂电路以及繁多的电气元器件都被取缔,取而代之的是一块小小的芯片。伴随着计算机技术的不断发展,单片机也得到了相应的发展,而且其应用的领域也得到更好的扩展。在民用,工用,医用以及军用等众多领域上都有所应用。为了,能够更好的适应这日新月异的社会,我们应当充实我们的知识面,方能不被时代的潮流踩在脚下。

介于单片机的重要性,我们应当对单片机的原理,发展以及应用有着一定的了解。所以,我们应当查阅相关资料,从而能够对单片机有个全方位的了解。进而将探讨的领域指向具体的国内,从而能够在科技与经济飞速发展的当今社会更好的应用这项技术。事实上,该项技术在国内有着极为广泛的发展前景,因此,通过对本课题的研究,我们因当能够充分认识到单片机技术的重要性,对单片机未来的发展趋势有所展望。

单片机的形成背景:

1.随着微电子技术的不断创新和发展,大规模集成电路的集成度和工艺水平不断提高。硅材料与人类智慧的结合,生产出大批量的低成本、高可靠性和高精度的微电子结构模块,推动了一个全新的技术领域和产业的发展。在此基础上发展起来的器件可编程思想和微处理(器)技术可以用软件来改变和实现硬件的功能。微处理器和各种可编程大规模集成专用电路、半定制器件的大量应用,开创了一个崭新的应用世界,以至广泛影响着并在逐步改变着人类的生产、生活和学习等社会活动。

2.计算机硬件平台性能的大幅度提高,使很多复杂算法和方便使用的界面得以实现,大大提高了工作效率,给复杂嵌入式系统辅助设计提供了物理基础。

3.高性能的EDA综合开发工具(平台)得到长足发展,而且其自动化和智能化程度不断提高,为复杂的嵌入式系统设计提供了不同用途和不同级别集编辑、布局、布线、编译、综合、模拟、测试、验证和器件编程等一体化的易于学习和方便使用的开发集成环境。

4.硬件描述语言HDL(Hardware Description Language)的发展为复杂电子系统设计提供了建立各种硬件模型的工作媒介。它的描述能力和抽象能力强,给硬件电路,特别是半定制大规模集成电路设计带来了重大的变革。

5.软件技术的进步,特别是嵌入式实时操作系统EOS(Embedded Operation System)的推出,为开发复杂嵌入式系统应用软件提供了底层支持和高效率开发平台。EOS是一种功能强大、应用广泛的实时多任务系统软件。它一般都具有操作系统所具有的各种系统资源管理功能,用户可以通过应用程序接口API调用函数形式来实现各种资源管理。用户程序可以在EOS的基础上开发并运行。

单片机的发展历史:20世纪70年代,微电子技术正处于发展阶段,集成电路属于中规模发展时期,各种新材料新工艺尚未成熟,单片机仍处在初级的发展阶段,元件集成规模还比较小,功能比较简单,一般均把CPU、RAM有的还包括了一些简单的I/O口集成到芯片上,它还需配上外围的其他处理电路方才构成完整的计算系统。类似的单片机还有Z80微处理器。

1976年INTEL公司推出了MCS-48单片机,这个时期的单片机才是真正的8位单片微型计算机,并推向市场。它以体积小,功能全,价格低赢得了广泛的应用,为单片机的发展奠定了基础,成为单片机发展史上重要的里程碑。

在MCS-48的带领下,其后,各大半导体公司相继研制和发展了自己的单片机。到了80年代初,单片机已发展到了高性能阶段,象INTEL公司的MCS-51系列,Motorola公司的6801和6802系列等等,此外,日本的着名电气公司NEC和HITACHI都相继开发了具有自己特色的专用单片机。

80年代,世界各大公司均竞相研制出品种多功能强的单片机,约有几十个系列,300多个品种,此时的单片机均属于真正的单片化,大多集成了CPU、RAM、ROM、数目繁多的I/O接口、多种中断系统,甚至还有一些带A/D转换器的单片机,功能越来越强大,RAM和ROM的容量也越来越大,寻址空间甚至可达64kB,可以说,单片机发展到了一个全新阶段,应用领域更广泛,许多家用电器均走向利用单片机控制的智能化发展道路。

1982年以后,16位单片机问世,代表产品是INTEL公司的MCS-96系列,16位单片机比起8位机,数据宽度增加了一倍,实时处理能力更强,主频更高,集成度达到了12万只晶体管,RAM增加到了232字节,ROM则达到了8kB,并且有8个中断源,同时配置了多路的A/D转换通道,高速的I/O处理单元,适用于更复杂的控制系统。

九十年代以后,单片机获得了飞速的发展,世界各大半导体公司相继开发了功能更为强大的单片机。美国Microchip公司发布了一种完全不兼容MCS-51的新一代PIC系列单片机,引起了业界的广泛关注,特别它的产品只有33条精简指令集吸引了不少用户,使人们从INTEL的111条复杂指令集中走出来。PIC单片机获得了快速的发展,在业界中占有一席之地。

随后的事情,熟悉单片机的人士都比较清楚了,更多的单片机种蜂拥而至,MOTOROLA公司相继发布了MC68HC系列单片机,日本的几个着名公司都研制出了性能更强的产品,但日本的单片机一般均用于专用系统控制,而不象INTEL等公司投放到市场形成通用单片机。例如NEC公司生产的uCOM87系列单片机,其代表作uPC7811是一种性能相当优异的单片机。MOTOROLA公司的MC68HC05系列其高速低价等特点赢得了不少用户。

1990年美国INTEL公司推出了80960超级32位单片机引起了计算机界的轰动,产品相继投放市场,成为单片机发展史上又一个重要的里程碑。

我国开始使用单片机是在1982年,短短五年时间里发展极为迅速。1986年在上海召开了全国首届单片机开发与应用交流会,有的地区还成立了单片微型计算机应用协会,那是全国形成的第一次高潮。截止今日,单片机应用技术飞速发展,我们上因特网输入一个“单片机”的搜 索,将会看到上万个介绍单片机的网站,这还不包括国外的。随着微电子技术的高速发展,单片机在国民经济的各个领域得到了广泛的应用。首先,单片机技术不断进步,出现了许多新的技术和新的产品。本文以Intel MCS-51系列单片机为模型,阐述单片机的一般原理、应用以及单片机的影响,较为详细地介绍当前主要单片机厂家的产品系列及发展动向。主要内容包括:单片机的基本原理、硬件结构、发展趋势以及具体的应用介绍。本文主要目的是想让大家对单片机有一个更为深入的了解。

科技的进步需要技术不断的提升。试想,曾经一块大而复杂的模拟电路花费了您巨大的精力,繁多的元器件增加了您的成本。而现在,只需要一块几厘米见方的单片机,写入简单的程序,就可以使您以前的电路简单很多。相信您在使用并掌握了单片机技术后,不管在您今后开发或是工作上,一定会带来意想不到的惊喜。

数字钟的发展:1350年6月6日,意大利人乔万尼·德·党笛制造了世界上第一台结构简单的机械打点多功能数字钟,由于数字钟报价便宜,功能齐全,因此很快受到众多用户的喜爱。1657年,荷兰人惠更斯率先把重力摆引入机械钟,进而才创立了摆钟。

到了20世纪以后,随着电子工业的快速发展,电池驱动钟、交流电钟、电机械表、指针式石英电子钟表以及数字显示式石英钟表相继问世,数字钟报价非常合理,再加上产品的不断改良,多功能数字钟的日差已经小于0.5秒,因此受到广大用户的青睐。尤其是原子钟的出现,它是使用原子的振动来控制计时的,是目前世界上最精准的时钟,即使经过将近100万年,其偏差也不可能超过1秒钟。

多功能数字钟最早是在欧洲中世纪的教堂,属于完全机械式结构,动力使用重锤,打点钟声完全使用人工进行撞击铸钟,所以当时一个多功能数字钟工程在建筑与机械结构方面是非常复杂的,进而影响了数字钟报价。进入电子时代以后,电子多功能数字钟也相继问世。我国电子多功能数字钟行业从80年代开始渐渐成长壮大,目前不仅数字钟报价合理,在技术和应用水平上也已经达到世界同类水平。

4. 国内外现状和发展趋势:

纵观单片机的发展过程,可以预示单片机的发展趋势,大致有:

1.低功耗CMOS化

MCS-51系列的8031推出时的功耗达630mW,而现在的单片机普遍都在100mW左右,随着对单片机功耗要求越来越低,现在的各个单片机制造商基本都采用了CMOS(互补金属氧化物半导体工艺)。象80C51就采用了HMOS(即高密度金属氧化物半导体工艺)和CHMOS(互补高密度金属氧化物半导体工艺)。CMOS虽然功耗较低,但由于其物理特征决定其工作速度不够高,而CHMOS则具备了高速和低功耗的特点,这些特征,更适合于在要求低功耗象电池供电的应用场合。所以这种工艺将是今后一段时期单片机发展的主要途径。

2.微型单片化

现在常规的单片机普遍都是将中央处理器(CPU)、随机存取数据存储(RAM)、只读程序存储器(ROM)、并行和串行通信接口,中断系统、定时电路、时钟电路集成在一块单一的芯片上,增强型的单片机集成了如A/D转换器、PMW(脉宽调制电路)、WDT(看门狗)、有些单片机将LCD(液晶)驱动电路都集成在单一的芯片上,这样单片机包含的单元电路就更多,功能就越强大。甚至单片机厂商还可以根据用户的要求量身定做,制造出具有自己特色的单片机芯片。

此外,现在的产品普遍要求体积小、重量轻,这就要求单片机除了功能强和功耗低外,还要求其体积要小。现在的许多单片机都具有多种封装形式,其中SMD(表面封装)越来越受欢迎,使得由单片机构成的系统正朝微型化方向发展。

3.主流与多品种共存

现在虽然单片机的品种繁多,各具特色,但仍以80C51为核心的单片机占主流。所以C8051为核心的单片机占据了半壁江山。而Microchip公司的PIC精简指令集(RISC)也有着强劲的发展势头,中国台湾的HOLTEK公司近年的单片机产量与日俱增,与其低价质优的优势,占据一定的市场分额。此外还有MOTOROLA公司的产品,日本几大公司的专用单片机。在一定的时期内,这种情形将得以延续,将不存在某个单片机一统天下的垄断局面,走的是依存互补,相辅相成、共同发展的道路。

;

B. 51单片机关于密码锁的毕业设计,论文

程序设计内容

(1). 密码的设定,在此程序中密码是固定在程序存储器ROM中,假设预设的密码为“12345”共5位密码。

(2). 密码的输入问题:由于采用两个按键来完成密码的输入,那么其中一个按键为功能键,另一个按键为数字键。在输入过程中,首先输入密码的长度,接着根据密码的长度输入密码的位数,直到所有长度的密码都已经输入完毕;或者输入确认功能键之后,才能完成密码的输入过程。进入密码的判断比较处理状态并给出相应的处理过程。

(3).按键禁止功能:初始化时,是允许按键输入密码,当有按键按下并开始进入按键识别状态时,按键禁止功能被激活,但启动的状态在3次密码输入不正确的情况下发生的。

C语言源程序

#includeunsignedcharcodeps[]={1,2,3,4,5};

unsignedcharcodedispcode[]={0x3f,0x06,0x5b,0x4f,0x66,                              

0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};

unsignedcharpslen=9;unsignedchartemplen;

unsignedchardigit;unsignedcharfuncount;

unsignedchardigitcount;

unsignedcharpsbuf[9];

bitcmpflag;

bithibitflag;

biterrorflag;

bitrightflag;

unsignedintsecond3;

unsignedintaa;

unsignedintbb;

bitalarmflag;

bitexchangeflag;

unsignedintcc;

unsignedintdd;

bitokflag;

unsignedcharoka;

unsignedcharokb;

voidmain(void)

{ 

unsignedchari,j; 

P2=dispcode[digitcount]; 

TMOD=0x01; 

TH0=(65536-500)/256; 

TL0=(65536-500)%6; 

TR0=1; 

ET0=1; 

EA=1; 

while(1)  

 {     

if(cmpflag==0)       

{         

if(P3_6==0)//functionkey          

 {             

for(i=10;i>0;i--)             

for(j=248;j>0;j--);     

        if(P3_6==0)               

{               

  if(hibitflag==0)      

             {    

                 funcount++; 

                    if(funcount==pslen+2)

                       { 

                        funcount=0;

                         cmpflag=1;

                        }

                      P1=dispcode[funcount];

                   }

                   else

                     {

                        second3=0;

                     } 

                while(P3_6==0);

               }

           }

         if(P3_7==0)//digitkey

           {

             for(i=10;i>0;i--)

             for(j=248;j>0;j--);

             if(P3_7==0)

               {

                 if(hibitflag==0)

                   {

                     digitcount++; 

                 if(digitcount==10)

                       {

                         digitcount=0;

                       }

                     P2=dispcode[digitcount];

                     if(funcount==1)

                       {

                         pslen=digitcount;                         

templen=pslen;

                       }

                       elseif(funcount>1)

                         { 

                          psbuf[funcount-2]=digitcount;

                         }

                   }

                   else

                     {

                       second3=0;

                     }

                 while(P3_7==0);

               }

           }

       } 

      else

         {

           cmpflag=0;

           for(i=0;i

             { 

              if(ps[i]!=psbuf[i])

                 {

                   hibitflag=1;

                   i=pslen;

                   errorflag=1;

                   rightflag=0;

                   cmpflag=0;

                   second3=0;

                   gotoa; 

                }

             }  

         cc=0; 

          errorflag=0; 

          rightflag=1;

           hibitflag=0;

a:   cmpflag=0;

         }

}

}

voidt0(void)

interrupt1using0{ TH0=(65536-500)/256; 

TL0=(65536-500)%6; 

if((errorflag==1)&&(rightflag==0)) 

{

     bb++;

     if(bb==800)

       {

         bb=0;

         alarmflag=~alarmflag;

       }

     if(alarmflag==1)

       {

         P0_0=~P0_0;

       }

     aa++;

     if(aa==800)

       {

         aa=0;

         P0_1=~P0_1;

       }

     second3++;

     if(second3==6400)

       {

         second3=0;

         hibitflag=0;

         errorflag=0;

         rightflag=0;

         cmpflag=0;

         P0_1=1; 

        alarmflag=0;

         bb=0; 

        aa=0; 

      }

   }

 if((errorflag==0)&&(rightflag==1))

   {

     P0_1=0;

     cc++;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(cc<1000)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;okflag=1;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;elseif(cc<2000)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;okflag=0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;errorflag=0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rightflag=0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hibitflag=0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmpflag=0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P0_1=1;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cc=0;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oka=0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;okb=0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;okflag=0;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P0_0=1;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(okflag==1)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oka++;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(oka==2)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oka=0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P0_0=~P0_0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;okb++;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(okb==3)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;okb=0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P0_0=~P0_0;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;}

}

C. 基于单片机的电子密码锁设计

功能键
S6---S15 数字键0-9
S16---更改密码 S17---更改密码完毕后确认
S18---重试密码、重新设定 S19---关闭密码锁
初始密码:000000 密码位数:6位
注意:掉电后,所设密码会丢失,重新上点时,密码恢复为原始的000000
与P1相连的8位发光LED点亮代表锁被打开;熄灭代表锁被锁上

程序功能: 本程序结合了24C02存储器的存储功能,可以掉电保存密码。
第一次运行时,若输入000000原始密码后无反应,可以试验着将主程序中前面的
一小段被注释线屏蔽的程序前的注释线删掉,然后重新编译下载(可以将密码还原为000000)。
此后,再将这小段程序屏蔽掉,再编译下载。方可正常使用。
1、开锁:
下载程序后,直接按六次S7(即代表数字1),8位LED亮,锁被打开,输入密码时,
六位数码管依次显示小横杠。
2、更改密码:
只有当开锁(LED亮)后,该功能方可使用。
首先按下更改密码键S16,然后设置相应密码,此时六位数码管会显示设置密码对应
的数字。最后设置完六位后,按下S17确认密码更改,此后新密码即生效。
3、重试密码:
当输入密码时,密码输错后按下键S18,可重新输入六位密码。
当设置密码时,设置中途想更改密码,也可按下此键重新设置。
4、关闭密码锁:
按下S19即可将打开的密码锁关闭。
推荐初级演示步骤:输入原始密码000000---按下更改密码按键S16---按0到9设置密码---按S17
确认密码更改---按S18关闭密码锁---输入新的密码打开密码锁
*******************************************************************************/
#include<reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char

uchar old1,old2,old3,old4,old5,old6; //原始密码000000
uchar new1,new2,new3,new4,new5,new6; //每次MCU采集到的密码输入
uchar a=16,b=16,c=16,d=16,e=16,f=16; //送入数码管显示的变量
uchar wei,key,temp;

bit allow,genggai,ok,wanbi,retry,close; //各个状态位

sbit la=P2^6;
sbit wela=P2^7;
sbit beep=P2^3;
sbit sda=P2^0; //IO口定义
sbit scl=P2^1;

unsigned char code table[]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x40};

/*****************IIC芯片24C02存储器驱动程序************************************/

void nop()
{
_nop_();
_nop_();
}
/////////24C02读写驱动程序////////////////////
void delay1(unsigned int m)
{ unsigned int n;
for(n=0;n<m;n++);
}

void init() //24c02初始化子程序
{
scl=1;
nop();
sda=1;
nop();
}

void start() //启动I2C总线
{
sda=1;
nop();
scl=1;
nop();
sda=0;
nop();
scl=0;
nop();
}

void stop() //停止I2C总线
{
sda=0;
nop();
scl=1;
nop();
sda=1;
nop();
}

void writebyte(unsigned char j) //写一个字节
{
unsigned char i,temp;
temp=j;
for (i=0;i<8;i++)
{
temp=temp<<1;
scl=0;
nop();
sda=CY; //temp左移时,移出的值放入了CY中
nop();
scl=1; //待sda线上的数据稳定后,将scl拉高
nop();
}
scl=0;
nop();
sda=1;
nop();
}

unsigned char readbyte() //读一个字节
{
unsigned char i,j,k=0;
scl=0; nop(); sda=1;
for (i=0;i<8;i++)
{
nop(); scl=1; nop();
if(sda==1)
j=1;
else
j=0;
k=(k<<1)|j;
scl=0;
}
nop();
return(k);
}

void clock() //I2C总线时钟
{
unsigned char i=0;
scl=1;
nop();
while((sda==1)&&(i<255))
i++;
scl=0;
nop();
}

////////从24c02的地址address中读取一个字节数据/////
unsigned char read24c02(unsigned char address)
{
unsigned char i;
start();
writebyte(0xa0);
clock();
writebyte(address);
clock();
start();
writebyte(0xa1);
clock();
i=readbyte();
stop();
delay1(100);
return(i);
}

//////向24c02的address地址中写入一字节数据info/////
void write24c02(unsigned char address,unsigned char info)
{
start();
writebyte(0xa0);
clock();
writebyte(address);
clock();
writebyte(info);
clock();
stop();
delay1(5000); //这个延时一定要足够长,否则会出错。因为24c02在从sda上取得数据后,还需要一定时间的烧录过程。
}
/****************************密码锁程序模块********************************************************/

void delay(unsigned char i)
{
uchar j,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}

void display(uchar a,uchar b,uchar c,uchar d,uchar e,uchar f)
{
la=0;
P0=table[a];
la=1;
la=0;

wela=0;
P0=0xfe;
wela=1;
wela=0;
delay(5);

P0=table[b];
la=1;
la=0;

P0=0xfd;
wela=1;
wela=0;
delay(5);

P0=table[c];
la=1;
la=0;

P0=0xfb;
wela=1;
wela=0;
delay(5);

P0=table[d];
la=1;
la=0;

P0=0xf7;
wela=1;
wela=0;
delay(5);

P0=table[e];
la=1;
la=0;

P0=0xef;
wela=1;
wela=0;
delay(5);

P0=table[f];
la=1;
la=0;

P0=0xdf;
wela=1;
wela=0;
delay(5);
}

void keyscan()
{
{
P3=0xfe;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xee:
key=0;
wei++;
break;

case 0xde:
key=1;
wei++;
break;

case 0xbe:
key=2;
wei++;
break;

case 0x7e:
key=3;
wei++;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
beep=0;
}
beep=1;
}
}
P3=0xfd;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xed:
key=4;
wei++;
break;

case 0xdd:
key=5;
wei++;
break;

case 0xbd:
key=6;
wei++;
break;

case 0x7d:
key=7;
wei++;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
beep=0;
}
beep=1;
}
}
P3=0xfb;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xeb:
key=8;
wei++;
break;

case 0xdb:
key=9;
wei++;
break;

case 0xbb:
genggai=1;
wei=0;
break;

case 0x7b:
if(allow)
ok=1;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
beep=0;
}
beep=1;
}
}
P3=0xf7;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xe7:
retry=1;
break;

case 0xd7:
close=1;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
beep=0;
}
beep=1;
}
}
}
}

void shumima() //对按键采集来的数据进行分配
{
if(!wanbi)
{
switch(wei)
{
case 1:new1=key;
if(!allow) a=17;
else a=key; break;
case 2:new2=key;
if(a==17) b=17;
else b=key; break;
case 3:new3=key;
if(a==17) c=17;
else c=key; break;
case 4:new4=key;
if(a==17) d=17;
else d=key; break;
case 5:new5=key;
if(a==17) e=17;
else e=key; break;
case 6:new6=key;
if(a==17) f=17;
else f=key;
wanbi=1; break;
}
}
}

void yanzheng() //验证密码是否正确
{
if(wanbi) //只有当六位密码均输入完毕后方进行验证
{
if((new1==old1)&(new2==old2)&(new3==old3)&(new4==old4)&(new5==old5)&(new6==old6))
allow=1; //当输入的密码正确,会得到allowe置一
}
}

void main()
{

init(); //初始化24C02
/*********下面的一小段程序的功能为格式化密码存储区。************
******当24c02中这些存储区由于其他程序的运行而导致***************
*******所存数据发生了变化,或者密码遗忘时, ********************
******可以删掉其前面的注释线,然后重新编译下载。****************
******而将密码还原为000000后,请将下面的程序用******************
******注释屏蔽掉,重新编译、下载,方可正常使用****************/
// write24c02(110,0x00);
// write24c02(111,0x00);//24c02的第110到115地址单元作为密码存储区
// write24c02(112,0x00);
// write24c02(113,0x00);
// write24c02(114,0x00);
// write24c02(115,0x00);
/*******************************************************************/

old1=read24c02(110);
old2=read24c02(111);
old3=read24c02(112);
old4=read24c02(113);
old5=read24c02(114);
old6=read24c02(115);

while(1)
{
keyscan();
shumima();
yanzheng();
if(allow) //验证完后,若allow为1,则开锁
{
P1=0x00;
if(!genggai)
wanbi=0;
}
if(genggai) //当S16更改密码键被按下,genggai会被置一
{
if(allow) //若已经把锁打开,才有更改密码的权限
{
while(!wanbi) //当新的六位密码没有设定完,则一直在这里循环
{
keyscan();
shumima();
if(retry|close) //而当探测到重试键S18或者关闭密码锁键S19被按下时,则跳出
{ wanbi=1;
break;
}
display(a,b,c,d,e,f);
}
}
}
if(ok) //更改密码时,当所有六位新密码均被按下时,可以按下此键,结束密码更改
{ //其他时间按下此键无效
ok=0; wei=0;
genggai=0;
old1=new1;old2=new2;old3=new3; //此时,旧的密码将被代替
old4=new4;old5=new5;old6=new6;
//新密码写入存储区。
write24c02(110,old1);
write24c02(111,old2);
write24c02(112,old3);
write24c02(113,old4);
write24c02(114,old5);
write24c02(115,old6);
a=16;b=16;c=16;d=16;e=16;f=16;
}
if(retry) //当重试按键S18被按下,retry会被置位
{
retry=0; wei=0;wanbi=0;
a=16;b=16;c=16;d=16;e=16;f=16;
new1=0;new2=0;new3=0;new4=0;new5=0;new6=0;
}
if(close) //当关闭密码锁按键被按下,close会被置位
{
close=0;genggai=0;//所有变量均被清零。
wei=0; wanbi=0;
allow=0;
P1=0xff;
a=16;b=16;c=16;d=16;e=16;f=16;
new1=0;new2=0;new3=0;new4=0;new5=0;new6=0;
}
display(a,b,c,d,e,f); //实时显示
}
}
对着代码自己做吧,,要是还做不出来,,那我就不说什么了,,

D. 基于单片机课程设计密码锁

采用数字密码锁电路的好处就是设计简单。用以74LS112双JK触发器构成的数字逻辑电路作为密码锁的核心控制,共设了9个用户输入键,其中只有4个是有效的密码按键,其它的都是干扰按键,若按下干扰键,键盘输入电路自动清零,原先输入的密码无效,需要重新输入;如果用户输入密码的时间超过40秒(一般情况下,用户不会超过40秒,若用户觉得不便,还可以修改)电路将报警80秒,若电路连续报警三次,电路将锁定键盘5分钟,防止他人的非法操作。
电路由两大部分组成:密码锁电路和备用电源(UPS),其中设置UPS电源是为了防止因为停电造成的密码锁电路失效,使用户免遭麻烦。
密码锁电路包含:键盘输入、密码修改、密码检测、开锁电路、执行电路、报警电路、键盘输入次数锁定电路。

阅读全文

与基于单片机的密码锁设计答辩相关的资料

热点内容
安卓os14怎么默认桌面 浏览:547
应用市场下载在哪个文件夹 浏览:893
安卓上的谷歌地图怎么用 浏览:181
安卓命令行打包 浏览:514
编程文字与数字教学视频 浏览:815
如何看手机号码注册哪些app 浏览:411
linux查看总内存 浏览:850
python进程间共享 浏览:436
js如何获取本地服务器地址 浏览:68
gfx什么时候支持安卓十一系统 浏览:939
压缩机90兆帕 浏览:928
程序员调侃语句 浏览:579
不是php函数的是 浏览:998
压缩文件好处 浏览:785
3d266期神童三胆计算法 浏览:189
通过爱思助手怎么下载app 浏览:323
vi命令将文件创在桌面上 浏览:925
程序员做竞价 浏览:698
江苏中小学编程纳入课程 浏览:732
单纯形法包括动态规划算法 浏览:953