论文怎么写 一、标题 标题是文章的眉目。各类文章的标题,样式繁多,但无论是何种形式,总要以全部或不同的侧面体现作者的写作意图、文章的主旨。毕业论文的标题一般分为总标题、副标题、分标题几种。 (一)总标题 总标题是文章总体内容的体现。常见的写法有: ①揭示课题的实质。这种形式的标题,高度概括全文内容,往往就是文章的中心论点。它具有高度的明确性,便于读者把握全文内容的核心。诸如此类的标题很多,也很普遍。如《关于经济体制的模式问题》、《经济中心论》、《县级行政机构改革之我见》等。 ②提问式。这类标题用设问句的方式,隐去要回答的内容,实际上作者的观点是十分明确的,只不过语意婉转,需要读者加以思考罢了。这种形式的标题因其观点含蓄,容易激起读者的注意。如《家庭联产承包制就是单干吗?》、《商品经济等同于资本主义经济吗?》等。 ②交代内容范围。这种形式的标题,从其本身的角度看,看不出作者所指的观点,只是对文章内容的范围做出限定。拟定这种标题,一方面是文章的主要论点难以用一句简短的话加以归纳;另一方面,交代文章内容的范围,可引起同仁读者的注意,以求引起共鸣。这种形式的标题也较普遍。如《试论我国农村的双层经营体制》、《正确处理中央和地方、条条与块块的关系》、《战后西方贸易自由化剖析》等。 ④用判断句式。这种形式的标题给予全文内容的限定,可伸可缩,具有很大的灵活性。文章研究对象是具体的,面较小,但引申的思想又须有很强的概括性,面较宽。这种从小处着眼,大处着手的标题,有利于科学思维和科学研究的拓展。如《从乡镇企业的兴起看中国农村的希望之光》、《科技进步与农业经济》、《从“劳动创造了美”看美的本质》等。 ⑤用形象化的语句。如《激励人心的管理体制》、《科技史上的曙光》、《普照之光的理论》等。 标题的样式还有多种,作者可以在实践中大胆创新。 (二)副标题和分标题 为了点明论文的研究对象、研究内容、研究目的,对总标题加以补充、解说,有的论文还可以加副标题。特别是一些商榷性的论文,一般都有一个副标题,如在总标题下方,添上“与××商榷”之类的副标题。 另外,为了强调论文所研究的某个侧重面,也可以加副标题。如《如何看待现阶段劳动报酬的差别——也谈按劳分配中的资产阶级权利》、《开发蛋白质资源,提高蛋白质利用效率——探讨解决吃饭问题的一种发展战略》等。 设置分标题的主要目的是为了清晰地显示文章的层次。有的用文字,一般都把本层次的中心内容昭然其上;也有的用数码,仅标明“一、二、三”等的顺序,起承上启下的作用。需要注意的是:无论采用哪种形式,都要紧扣所属层次的内容,以及上文与下文的联系紧密性。 对于标题的要求,概括起来有三点:一要明确。要能够揭示论题范围或论点,使人看了标题便知晓文章的大体轮廓、所论述的主要内容以及作者的写作意图,而不能似是而非,藏头露尾,与读者捉迷藏。二要简炼。.论文的标题不宜过长,过长了容易使人产生烦琐和累赘的感觉,得不到鲜明的印象,从而影响对文章的总体评价。标题也不能过于抽象、空洞,标题中不能采用非常用的或生造的词汇,以免使读者一见标题就如堕烟海,百思不得其解,待看完全文后才知标题的哗众取宠之意。三要新颖。标题和文章的内容、形式一样,应有自己的独特之处。做到既不标新立异,又不落案臼,使之引人入胜,赏心悦目,从而激起读者的阅读兴趣。 二、目录 一般说来,篇幅较长的毕业论文,都没有分标题。设置分标题的论文,因其内容的层次较多,整个理论体系较庞大、复杂,故通常设目录。 设置目录的目的主要是: 1.使读者能够在阅读该论文之前对全文的内容、结构有一个大致的了解,以便读者决定是读还是不读,是精读还是略读等。 2.为读者选读论文中的某个分论点时提供方便。长篇论文,除中心论点外,还有许多分论点。当读者需要进一步了解某个分论点时,就可以依靠目录而节省时间。 目录一般放置在论文正文的前面,因而是论文的导读图。要使目录真正起到导读图的作用,必须注意: 1.准确。目录必须与全文的纲目相一致。也就是说,本文的标题、分标题与目录存在着一一对应的关系。 2.清楚无误。目录应逐一标注该行目录在正文中的页码。标注页码必须清楚无误。 3.完整。目录既然是论文的导读图,因而必然要求具有完整性。也就是要求文章的各项内容,都应在目录中反映出来,不得遗漏。 目录有两种基本类型: 1.用文字表示的目录。 2.用数码表示的目录。这种目录较少见。但长篇大论,便于读者阅读,也有采用这种方式的。 三、内容提要 内容提要是全文内容的缩影。在这里,作者以极经济的笔墨,勾画出全文的整体面目;提出主要论点、揭示论文的研究成果、简要叙述全文的框架结构。 内容提要是正文的附属部分,一般放置在论文的篇首。 写作内容提要的目的在于: 1.为了使指导老师在未审阅论文全文时,先对文章的主要内容有个大体上的了解,知道研究所取得的主要成果,研究的主要逻辑顺序。 2.为了使其他读者通过阅读内容提要,就能大略了解作者所研究的问题,如果产生共鸣,则再进一步阅读全文。在这里,内容提要成了把论文推荐给众多读者的“广告”。 因此,内容提要应把论文的主要观点提示出来,便于读者一看就能了解论文内容的要点。论文提要要求写得简明而又全面,不要罗哩罗嗦抓不住要点或者只是干巴巴的几条筋,缺乏说明观点的材料。 内容提要可分为报道性提要和指示性提要。 报道性提要,主要介绍研究的主要方法与成果以及成果分析等,对文章内容的提示较全面。 指示性提要,只简要地叙述研究的成果(数据、看法、意见、结论等),对研究手段、方法、过程等均不涉及。毕业论文一般使用指示性提要。举例如下: ●市场经济条件下的政府,固然应服从上级规划部署的全局,但主要的着眼点应放在对下负责,对本地的经济发展,对本地的人民生活水平提高负责,这才是发展全局经济的前提,从而也自然在根本上符合对上负责。 ●变部门“齐抓共管”企业为共同服务于企业,应成为部门工作的主要重点。(摘自《政府在市场经济中 如何定位》一文的内容提要) 内容提要的写作要求可以概括为“全、精、简、实、活”。具体说来: 1.内容提要要求具有完整性。即不能把论文中所阐述的主要内容(或观点)遗漏。提要应写成一篇完整的短文,可以独立使用。 2.重点要突出。内容提要须突出论文的研究成果(或中心论点)和结论性意义的内容,其他各项可写得简明扼要。 3.文字要简炼。内容提要的写作必须字斟句酌,用精练、概括的语言表述,每项内容不宜展开论证说明。 4.陈述要客观。内容提要一般只写课题研究的客观情况,对工作过程、工作方法以及研究成果等,不宜作主观评价,也不宜与别人的研究作对比说明。一项研究成果的价值,自有公论,大可不必自我宣扬。因而,实事求是也是写作内容提要的基本原则。 5.语言要生动。提要既要写得简明扼要,又要生动活泼,引人入胜,在词语润色、表达方法和章法结构上要尽可能体现文彩,以求唤起读者阅读正文的欲望。 四、正文 正文包括绪论、本论、结论三部分。这是毕业论文最重要的组成部分,其它章节有专门详细论述,这里不再重复。 五、参考文献 参考文献又叫参考书目,它是指作者在撰写毕业论文过程中所查阅参考过的著作和报刊杂志,它应列在毕业论文的末尾。列出参考文献有三个好处:一是当作者本人发现引文有差错时,便于查找校正。二是可以使毕业论文答辩委员会的教师了解学生阅读资料的广度,作为审查毕业论文的一种参考依据。三是便于研究同类问题的读者查阅相关的观点和材料。 当然,论文所列的参考文献必须是主要的,与本论文密切相关的,对自己写成毕业论文起过重要参考作用的专著、论文及其它资料。不要轻重不分,开列过多。 列出的参考文献一般要写清书名或篇名、作者、出版者和出版年份。 参考资料: (论文荟萃) 另外,站长团上有产品团购,便宜有保证
基于单片机的智能热水器控制系统摘要伴随人类的科技发展,人们的物质享受提升到了一个新的档次,现在的家居都在朝着智能化的方向研究发展,热水系统作为人群生活中的不可缺少的家里面使用电器之一,它的使用决定着一个人的生活质量。早在几年前,智能家居便走进了人们的生活,如小爱同学和天猫精灵,它们都走在了智能的前沿。智能系统乃是集机械、电气工程、材料化学、运筹学、数学、哲学之大成的产物。智能化家居也随之逐渐进入我们的生活,而本设计正是应时代需求应运而生的智能化控制的家居的衍生品。本设计的内容为可以不使用长长的视频信号传输线的情况下利用WIFI进行无线传输信号的智能热水器,它经过改进后可以让人们告别单一的加热功能,加载多个模块使得它可以进行音乐播放,加热定时,恒定温度锁定,闪烁灯光等功能。它使用最近比较热门的单片机作为控制单元,并且配合各种传感器以及各种不同功能的模块相互配合进行工作,以实现其功能。硬件的这个方向,本次做完控制模块、定时模块,恒温模块等一系列硬件设备的安装调整;软件方面,本文以52单片机为平台实现了传感器信号的采集和处理,根据传感器信息设计了热水器的基本运行模式,利用单片机接口与Python语言相互配合进行程序设计,实现了无线智能热水器的基本设计要求。 关键词:52单片机,智能,热水器,DS18B20Design of Intelligent Water Heater Control SystemAbstract The content of this design to do not use the long video signal transmission line using WIFI wireless transmission signal under the condition of the intelligent water heater, it passes through the improved can let people bid farewell to the single heating function, and makes it possible to load multiple modules for music playback, heating time, constant temperature locking, flashing lights, and other functions. It USES the recently popular single chip microcomputer as the control unit, and with a variety of sensors and a variety of different functions of the module work with each other, in order to achieve its functions. In this direction of hardware, the installation and adjustment of a series of hardware devices such as control module, timing module and constant temperature module have been completed. In terms of software, this paper takes 52 single-chip microcomputer as the platform to realize the acquisition and processing of sensor signals. According to the sensor information, the basic operation mode of water heater is designed. The interface of single-chip microcomputer and Python language are used to carry out program design, and the basic design requirements of wireless intelligent water heater are realized. Key words: 52 SCM, intelligence, water heater, DS18B201绪论 智能热水器在我们的生活中,热水器慢慢成为城市居民必不可少的电气设备.这么多年的进步和技术沉淀,这个热水器行业也源源不断推出不同功能的产品种类,热水器的种类各种各样,从最开始的燃气热水器,一直到至今的天然气热水器、烧电热水器、太阳光能热水器等。各类的水器都有他自己的市场地位。就以热水器的使用感受来看,产品样式多的真是琳琅满目,当然用着也很舒服。即便智能的家居和物联网的最新概念,智能程度也会大大提高,给人类的生活带来很大的满足感。现在的热水器正向着安全的,节能的,稳定的,高效率的,人性化的方面猛速前进。 单片机MCU是具有编程和外部电路设计,体型不大,功耗特别低的小型计算机,能完成各种智能控制任务。由于单片机技术的飞速发展,那么多的消费电子产品开始使用各种类型的单片机作为控制核心,用完成人类和机器之间沟通互动。并用自己程序和里面操作获取想要知道的内容。更加符合人群和智能化的家用电器操作控制。 热水器之中,单片机被广泛用作控制的中心。 用类似的温度传感器对热水器进行温度控制,可以实现高精度,并且做完了了从最开始旋钮调整到数调整方向的慢慢变化,同样,单片机用不一样的传感器控制和呈示热水器的各类运行状况,并在缺水,过热等的情况以下向用户人群呈示声音光亮以警报防止发生意外事故并阻止人群使用。为了安全所提出的智能热水器操控系统以52系列地单片机为操控核心,可通过温度传感器和水的位置传感器检测热水器的状态,并通过对按钮和显示影像屏与用户进行交互。准时加热和自动恒温特性。同样,也有设置过热和缺水的警报,为了人群提供方便。这个装配成本低,实用感在生活中较好,调控热度高低较好。1 智能热水器控制系统的总体设计方案 此次制作所提到的智能热水器控制系统主要是实现对温度的自行操控、按时加热操控和智能警报的作用,所以智能热水器操控系统主要分为控制、显示、信息输入、加热、声光报警等这部分模块组成。 方案的分析与选择 对于主控制芯片,此解决方案选择了最简单的8位52系列单片机,该单片机可以完全满足该系统的要求,并且性能可靠且成本低廉。此外,由于52系列单片机在电子学领域的基本状况,因此它们在使用和编程方面相对熟练,极大地缩短了开发周期并更有效地完成了设计工作。对于显示模块,LED液晶显示器,LCD1602字符液晶和LCD12864点矩阵液晶都是可以完成显示操作的简单紧凑型显示设备。 LED液晶显示器的里面的构造非常简易,LCD1284更喜欢被用在呈示图片和影像方面,LCD1602特别喜欢被用于呈示较少的图案字样。因此选择LCD1602字符液晶。往内输入的模块一般情况下有用户消息从外部送到内部也有传感器消息从外部送到内部。在输入用户信息方面,使用键盘比使用旋钮更易于控制,并且用户更容易接受。用配置相对映的调整按钮,可很好的正确地做到想要的热度。当然,有各种类型的按钮,例如机械按钮和电容按钮,并且该系统处于试验调试阶段,因此选择了最简单的按钮。传感器信息平时输入通常分两个地方,第一个地方是温度信息输入,热度传感器平时用于通告MCU眼下的水的热度以进行自动温度控制,第二个地方就是水的位置信息输入。是为了告知微控制器缺水警报的目的。由于热度传感器,通常情况能在热敏R和数字热度传感器DS18B20之间来进行选配。由于热敏R可靠性低且输出为模拟量,因此只能在进行相应的A/D转换后才能转换,这很麻烦,因为数字温度传感器的温度测量范围宽广,并且单片机节省了通信。直接输出资源,数字量和外围电路非常简单,并且与此概述一致。同样的时候,引进来专门用的的时钟芯片DS18B20以完成正确的定时加温时,将为微操控器用来给它们俩作参照。为了确保用户安全,增加了声音和视觉警报提示模块,以在加热和供水不足时发出提示。同样的,为完成正确的定时加温,引入了一般专们用的构造时刻芯片DS18B20,为微小控制器呈示日子和时刻基本提示。为了确保用户的安全,增加了声光报警提示模块,在缺水,缺水的情况下显示提示信息。 系统总体设计概述 系统以52这个系列MCU为操控中心,一般用DS18B20单数线数字样式热度传感器得到热度讯息,用DS18B20时钟芯片为单片机呈现数作为参照对象,呈示这部分用LCD1602,用机械钮键的方法供给用戸输入,配置眼下系统时刻、要一些热度定时、水的热度配置等方面,做完对所有控制器的管理。系统所有的构造框图如图 所示。 图 系统整体框图 各功能模块介绍 为了顺顺利利的完成整个单片机系统的设计,有必要对所使用的各个模块的组件举行具体的选择,并对组件的数据手册、操作纲要、认认真真领会各个组件的机能、操作要领、硬件的连接基本情况等。 控制模块本设计使用处理器STC89C52RC,主控制核心是52系列单片机,采用CMOS技术构建的8位处理器,CPU可以正常运行,具有相当稳定的运行性能和低功耗。该命令系统与现有的8052微控制器内核完全兼容,并具有2K + EEPROM存储。要创建主导模块,您需要将最小系统的最外部电路配置为单芯片计算机(主要具有晶体振荡和恢复电路),以使单芯片计算机正常工作。 显示模块 本设计采取LCD1602液晶屏幕上,是一个袖珍和高度集成的液晶显示器,可以显示的字母,数字,符号,等,其特点是低功耗,体积小,光模块,并将自己的字符库,必须根据需要初始化开发显示的实现,设置相关的显示位置和显示内容,并且操作简单。集成显示模块可以参考用户手册中引脚的特定定义,“硬件设计”部分详细介绍了与单个芯片的特定连接。当LCD初始化时,5V电源模块1602显示MCU及其最小系统和电源接口,温度传感器模块,声光报警模块,水位传感器模块,按键输入,时钟电路。在与读写操作有关的编程中,您需要参考时序图并进行必要的调整以选择单晶振荡。LCD1602有属于本身的数字符号库,这样的话简易了人群的开创,平时也节约了MCU程序的存储空间,不用在程序中数字符号呈示。如下方图所呈视 LED1602液晶显示流程图 输入模块对于单片机,用户必须通过执行相关的命令输入进行配置。单片机必须对热水器的热水温度进行测试,观察热水是否少水,并在传感器连接的情况下输入信号。输入模块为客户订单输入、热量输入、缺水信号输入。命令向内输入时,由四个单独的按钮完成,热度输入由DS18B20完成,电子水位开关通知是否有水。命令输入模块由四个独立的键组成。单个按钮的触摸模式对于低级很有用。在正常的系统开放状态下,单片机上相应的端口保持高电平。这个时候触碰键钮,单个键钮的两端连接并接收。这个水平下降到地面,所以微控制器可以捕获主要任务。这四个独立的键是配置功能、键值增加、键值减少和这四个功能定义的确认。这里的四个按钮使用软件算法编程ghost程序来扫描按钮的状态。之后,利用行中相应数量的按钮构造对的应答逻辑,为用户提供完整的参考号配置功能。大多数热输入模块都是单导线数字热传感器。型号是DS18B20。在DS18B20的核心中,序列要求的单线传输协议。在水位置信号传输中,选择装有bz2401电子的水位置传导按钮。电源的电压范围为5v-24v,一般有三根线,即电源线、地线和信号线。这种产品通常在内部装有检测水的位置信号的芯片,并由芯片在内部进行处理。当判断有水存在时,芯片会发射出与电压源电压类似的高电平。如果确定没有水,芯片可以发射零伏。将数字ghost数据线连接到地线。 警报模块在实现设定时间功能时,该系统使用专用的DS1302时钟芯片来准确提供详细的日期和时间概念。同时,配置3个LED灯和一个蜂鸣器以形成声光信号和警报模块。DS1302是DALLAS公司生产的一种慢速充电时钟保持芯片,它可以通过一个简单的串行端口与单个芯片通信,该芯片具有自己的独立时钟电路和31个静态RAM。字节,可以提供单片机的详细时钟信息,例如日期,年,月和日,时,分和秒,可以自动处理每个月的天数和and年,以确保精度日期记录。在硬件中,它使用三根数据线连接到微控制器的相应端口,分别是复位,数据和串行时钟。芯片的平时正常工作功率特别低,并在保存起来和记载日子和时刻数据期间消代的功率根本不到一兆瓦。其封存装形式和管脚定义看下图片 所呈示。图 DS18B20 的封装和管脚定义使用时,必须将芯片连接到 KHz晶体振荡器,这需要简单的外围电路。如下图所示,它是一个经典的用来应用电线路。图 一种典型的 DS1302 应用电路图一般声音和光亮警报模块中用的LED灯和微型蜂鸣器,结构简单且好理解电路的特性。用LED灯的时候,要当心选择的颜色,并要来根据最大地电流限制,再加上能相配的限流R,以用来保护LED灯在平时正常电压电流。蜂鸣器不能由单片机端口直接供电。您需要通过三极管激活蜂鸣器来放大三极管的相应模型,例如9012、8550和其他模型,通常它可能会发出声音。图所示 蜂鸣器2 硬件电路的设计与实现 单片机最小系统硬件电路设计 很小的单个芯片系统包含一个晶体振荡器,一个恢复位电路等。MCU中已经存在时钟振荡电路。我们需要在引脚XTAL1和XTAL2之间添加一个反馈环路,以构建最小的MCU系统,以MCU可以获取时钟信号。通常用反馈环路是一个石英晶体振荡器和2个30μF 并联电容器。电容值根据晶体的频率进行调整。在较小的MCU系统电路中,石英晶体振荡器的频率越高,MCU 内部时钟信号的周期短,速度更快从MCU贯行命令。在此构造中,微控制器的时钟速率设置为12MHz,并且相应的重置按钮设置为微控制器的重置引脚,以便用户可以重置微控制器。必要时。对于系统的每一个传感器接触口,还必须为每个传感器,电源和数据线接口标明。最不大的系统可以构造在所有都有可以用的板子上,也可以用焊接在PCB板子上的完成品模块,其硬件原理图片如下面图片 所呈示。 图 MCU 最小系统和接口电路 显示模块硬件电路设计 在这次实验中,选择字符LCD1602作为呈示设备,将LCD1602的数据引脚一起连到MCU的P0端口。即,至分别对应于以1602展示的8个数据线(DB0至DB0)。 DB7用连上。如图 所示,特殊功能端子RS,RW和E通过网络标签分别连接到,和。模块的VEE地端可以调整呈示模块呈示的数字符号的光亮度和对比度。在现实电线路中,用了十千Ω的蓝白R102。当用手转动,就可以更改字符的样式。 图 显示模块和接口电路 温度传感器 DS18B20 电路设计 DS18B20温度传感器和MCU中间的连接较简。将数据线直接连接到MCU的端口(网络签标DQ),电源和地线也连到MCU主板上,这个时候,数据线所用电源电压通过四点七千电阻上拉。 图 温度传感器和接口电路 电子式水位置开关硬件电路设计 用电子水位置导通按钮做成是否缺水的指示判定,这个电按钮在如果有水的时候输出的高电平,在没有液体情况的时候出口是低微电平。高的电平就是电压源,因此电压源要用为5V,传递数具线和迪线连接到单芯片计算电脑的主电路板上(看下面图)。网络签标水对映MCU的端口。 图电子式水位开关接口电路 时钟芯片电路设计 在时钟芯片DS18B20 的3个端口 RST,SCLK和I/O连到用数据互换的MCU上,看图片呈示 所示,收集标签分开是RST,,分开是连接到微控制器的,和 ,实现与单片机的通讯。请看一看DS18B20 The clock chip的传统电路设计方式来构造该整个的基本电路形态。 图 时钟芯片电路 声光报警电路设计 警报电路分为光警报和声警报,用于响应系统的各种警报,并通过声和光提醒用户。如 声响警报模块的电路的构造,峰鸣器一般用与MCU一样的正5伏电压源,由晶体管9013管控,集电极连接到MCU端口,网络标签为BEEP,与MCU的端口相对应。 图蜂鸣器电路高亮度和长寿命的LED灯用于照明警报和提示,常见的阳极连接方法,单片机提供低水平照明。装配3LED光泡,串联接51ΩR ,D1用于指示增加热度状况,D2用来看水位状况,D3用来看热度状况。这3灯连到MCU的,和端口,实现联代功能。 图 指示灯电路 按键设置模块电路设计 本系统的时钟设置、 其中温度中的设计都是要用按钮来进行的,基本用 四个独立的按钮的设计,将一个端子接地并按下后,降低单片机的端口级别,并完成主动作捕捉。此功能由装配按钮,确认按钮,增值按钮和减值按钮界说,网标签为SELT,ENTER,UP和DOWN,对应接单片机的 、、和 四个端口。 图 键钮模块电路 电源和开关模块设计 这个系统一般在外部接上正五伏电源来进行工作。如果想方便控制,需加一个电源总的开关,并且使用LED指示灯来指示电源。在电源和地线中间并联2个滤波C,过滤出电源纹波。 图 电压源模块电路3 热水器控制系统的软件设计与算法实现 软件设计是整个系统的核心。好的软件设计能使硬件更加出色。软件系统的主要设计思想是:1开系统电源后,将呈示目前系统时刻的讯息和水的热度讯息;当水温低于设定值时,开始加热。当水热度大于预期值或水量不足时会触发声音和视觉警报。2、响应按键操作。如果有一些人群碰到下配置灯按钮时,您可以执行3个选项,第一个是设置运行时间,第二个是配置计时器预热的开始和结束时间,第三个是配置温度。范围内的上升和下降极限。软件程序的设计中,它完全结合了模块化设计的思路。完整的软件系统圈主要包括通用初始化功能,LCD1602基本功能,DS18B20基本功能,DS18B20基本功能,按键扫描配置策略基本功能,然后在主程序中调用相关模块的功能,例如读取传感器状态,智能温度判定,警报处理决策,键盘扫一扫,以完成系统预期的操作功效。 系统总体流程图 图系统总体流程图 显示模块程序设计 呈示模块程序主要包括初始化、命令子函数和写数据子函数,是系统软件编程的基本库里,是系统软件编程的最关键基本函数:图所示 图显示模块程序设计 写命令子函数1602作业要命令输入并具有自己的命令库。要编写这个命令,您更需要编写一个特殊设定的的写命令子功能。 写数据子函数 图子函数流程图另外,必须将在时钟装配流程和热度装配流程呈示的情况与人员输入一起编写,以配置适当的光指示呈示管理。 温度传感器模块程序设计 温度传感器流程图。图所示 图温度传感器模块程序设计 在Temperature sensor的基本功能装配中,它用于热度采集并管理。热度写入功能包含写入成数和不成数那部分,分析DS18B20的数据格局,写下正确的热度和因变量。基本功能开发包含模的块开始化的功能、单独线串行的传递信息延迟功效 、所有线信息的装配、byte数传递、byte数收到等很多局部。从主程序中调用这些功能,并与LCD display功能的配合用来以完成各种各样的效果,例如温度显示和判断。 按键设置程序设计 按钮设置程序主要是按钮扫秒的方法。由于键子的扫秒的逻及更加繁琐,因此不仅需要辨认碰下的键数,哪个键,还需共同LCD呈视功能来展示不一样的按钮数和当时的情况,并控制光标位置和打开和关闭LCD1602 ,提示用户进行设置。按钮扫一扫配置过程里分别成为一个子功效,在主要软件中巡回挪用。在行使按键编排动手活动中,因为用了的是呆板按键,出现在癫动的征像,形成测验不却准或碰下的数的误会,正常来用癫动方法,把过去的时间,确保按钮的数正确。按钮正常是四,配置按下面的按钮、确定正确的按碰键子、键子数增多和键子值变少。用来变化量SELT 表达配置按钮的状况,并设计全面变Select记载的装配按钮被按下的次数,将不同的时间与不同的装配功能进行比较,具有按钮功能的效果。当装配按钮所触摸的按钮的频率为1时,请沿光标方向调整时间功能,并记住要进入调整模式。当按按钮的数为二时,光标指引向调好定时作用.当击按钮数量为三时,光标指引向配置热度作用。当按数为四时,请勿标记调整形式并返回正常模式.当使用更改量ENTER显示确认按钮的状态时,请使用Enter记录按钮被按下的次数。Enter的每次访问,都要先开始检验Select的改动数量,确准Select处于功能设置模式,然后显示不同的内容,并控制光标的移动根据不一样功能模下按动确认按钮的数,判定系统在当前要修正的数据是哪个,要不要不调试了,返回平常良好状态。通过设置按钮和确认按钮按动次数,构造系统在调试模式下的每个固定调试的状态,Select与Enter数并在一起就判定了眼下修正地数。看对于这个按钮数量增大和按钮对的数变的少的按键,两个按钮按动的时候,用假设条件去判Select_nu和 Enter_nu 的数的配合状况,贯行相对照的数增加 一 或是数据减少一 的做法。由于键子盘检测巡回进行,连着按增加或减小按键可以实现连起来调配的作用。同时,要看每个数的范围,位置不超出设置范围内。图所示图按键设置程序设计 时钟芯片相关程序设计 图时钟芯片相关程序设计在DS1302相关的编程中,主要写芯片的写数据和读数据作用,然后相对照的日子配置作用。用write_DS18B20_by函数进行数,根据准备,用write_DS11302函数运行数据写进来,用read_DS1302函数进行时刻数,根据读取,用set_rt函数进行时间配置。 主程序和中断服务程序设计 主要程序要包括每个函数的调度用。在软件的开头,开始的每个模块,端口和计时器的开始作业,之后进到循环不止的结构。在循环结构中,指示器位用于确定系统是不是处于调整模式还是正常模式,并且键盘扫描功能会连续运行。在良好模式内贯行温度显示和时间显示,调用警报模块子功效以检查和判定温度和水位状态啥样。在程序中设置适当的判断指标,判断这些变量的值能否到达警报状况。当这时水热度要低于事先设定好热度时候,增加热度提示灯亮起来;如果水温高于设定温度,则会发出警报。如果缺水,也会触发警报。断了劳动程序主要用了The timer断开,用了The timer T0 计算 50ms,它会计入您的中断服务程序,为系统的正常良好模式下的显出数更替给了时间标准。
#include<>#include""#define uint unsigned int#define uchar unsigned charuchar a,miao,shi,fen,ri,yue,nian,week,flag,key1n,temp;//flag用于读取头文件中的温度值,和显示温度值#define yh 0x80 //LCD第一行的初始位置,因为LCD1602字符地址首位D7恒定为1(100000000=80)#define er 0x80+0x40 //LCD第二行初始位置(因为第二行第一个字符位置地址是0x40)//液晶屏的与C51之间的引脚连接定义(显示数据线接C51的P0口)sbit rs=P1^0;sbit en=P1^2;sbit rw=P1^1; //如果硬件上rw接地,就不用写这句和后面的rw=0了sbit led=P3^7; //LCD背光开关//DS1302时钟芯片与C51之间的引脚连接定义sbit IO=P2^2;sbit SCLK=P2^1;sbit RST=P2^2;sbit ACC0=ACC^0;sbit ACC7=ACC^7;/************************************************************ACC累加器= 就是ACC的第0位。Acc可以位寻址。累加器ACC是一个8位的存储单元,是用来放数据的。但是,这个存储单元有其特殊的地位,是单片机中一个非常关键的单元,很多运算都要通过ACC来进行。以后在学习指令时,常用A来表示累加器。但有一些地方例外,比如在PUSH指令中,就必须用ACC这样的名字。一般的说法,A代表了累加器中的内容、而ACC代表的是累加器的地址。 ***************************************************************///校时按键与C51的引脚连接定义sbit key1=P2^4; //设置键sbit key2=P2^5; //加键sbit key3=P2^6; //减键sbit buzzer=P2^0;//蜂鸣器,通过三极管9012驱动,端口低电平响/**************************************************************/uchar code tab1[]={"20 - - "}; //年显示的固定字符uchar code tab2[]={" : : "};//时间显示的固定字符//延时函数,后面经常调用void delay(uint xms)//延时函数,有参函数{ uint x,y; for(x=xms;x>0;x--) for(y=120;y>0;y--);}/********液晶写入指令函数与写入数据函数,以后可调用**************//*在这个程序中,液晶写入有关函数会在DS1302的函数中调用,所以液晶程序要放在前面*/write_1602com(uchar com)//****液晶写入指令函数****{ rs=0;//数据/指令选择置为指令 rw=0; //读写选择置为写 P0=com;//送入数据 delay(1); en=1;//拉高使能端,为制造有效的下降沿做准备 delay(1); en=0;//en由高变低,产生下降沿,液晶执行命令}write_1602dat(uchar dat)//***液晶写入数据函数****{ rs=1;//数据/指令选择置为数据 rw=0; //读写选择置为写 P0=dat;//送入数据 delay(1); en=1; //en置高电平,为制造下降沿做准备 delay(1); en=0; //en由高变低,产生下降沿,液晶执行命令}lcd_init()//***液晶初始化函数****{ write_1602com(0x38);//设置液晶工作模式,意思:16*2行显示,5*7点阵,8位数据 write_1602com(0x0c);//开显示不显示光标 write_1602com(0x06);//整屏不移动,光标自动右移 write_1602com(0x01);//清显示 write_1602com(yh+1);//日历显示固定符号从第一行第1个位置之后开始显示 for(a=0;a<14;a++) { write_1602dat(tab1[a]);//向液晶屏写日历显示的固定符号部分 //delay(3); } write_1602com(er+2);//时间显示固定符号写入位置,从第2个位置后开始显示 for(a=0;a<8;a++) { write_1602dat(tab2[a]);//写显示时间固定符号,两个冒号 //delay(3); }}/*********************over***********************//***************DS1302有关子函数********************/void write_byte(uchar dat)//写一个字节{ ACC=dat; RST=1; for(a=8;a>0;a--) { IO=ACC0; SCLK=0; SCLK=1; ACC=ACC>>1; }}uchar read_byte()//读一个字节{ RST=1; for(a=8;a>0;a--) { ACC7=IO; SCLK=1; SCLK=0; ACC=ACC>>1; } return (ACC);}//----------------------------------------void write_1302(uchar add,uchar dat)//向1302芯片写函数,指定写入地址,数据{ RST=0; SCLK=0; RST=1; write_byte(add); write_byte(dat); SCLK=1; RST=0;}uchar read_1302(uchar add)//从1302读数据函数,指定读取数据来源地址{ uchar temp; RST=0; SCLK=0; RST=1; write_byte(add); temp=read_byte(); SCLK=1; RST=0; return(temp);}uchar BCD_Decimal(uchar bcd)//BCD码转十进制函数,输入BCD,返回十进制{ uchar Decimal; Decimal=bcd>>4; return(Decimal=Decimal*10+(bcd&=0x0F));}//--------------------------------------void ds1302_init() //1302芯片初始化子函数(2010-01-07,12:00:00,week4){RST=0;SCLK=0;write_1302(0x8e,0x00); //允许写,禁止写保护 write_1302(0x80,0x00); //向DS1302内写秒寄存器80H写入初始秒数据00write_1302(0x82,0x00);//向DS1302内写分寄存器82H写入初始分数据00write_1302(0x84,0x12);//向DS1302内写小时寄存器84H写入初始小时数据12write_1302(0x8a,0x04);//向DS1302内写周寄存器8aH写入初始周数据4write_1302(0x86,0x07);//向DS1302内写日期寄存器86H写入初始日期数据07write_1302(0x88,0x01);//向DS1302内写月份寄存器88H写入初始月份数据01write_1302(0x8c,0x10);//向DS1302内写年份寄存器8cH写入初始年份数据10write_1302(0x8e,0x80); //打开写保护}//------------------------------------//温度显示子函数void write_temp(uchar add,uchar dat)//向LCD写温度数据,并指定显示位置{ uchar gw,sw; gw=dat%10;//取得个位数字 sw=dat/10;//取得十位数字 write_1602com(er+add);//er是头文件规定的值0x80+0x40 write_1602dat(0x30+sw);//数字+30得到该数字的LCD1602显示码 write_1602dat(0x30+gw);//数字+30得到该数字的LCD1602显示码 write_1602dat(0xdf);//显示温度的小圆圈符号,0xdf是液晶屏字符库的该符号地址码 write_1602dat(0x43); //显示"C"符号,0x43是液晶屏字符库里大写C的地址码 }//------------------------------------//时分秒显示子函数void write_sfm(uchar add,uchar dat)//向LCD写时分秒,有显示位置加、现示数据,两个参数{ uchar gw,sw; gw=dat%10;//取得个位数字 sw=dat/10;//取得十位数字 write_1602com(er+add);//er是头文件规定的值0x80+0x40 write_1602dat(0x30+sw);//数字+30得到该数字的LCD1602显示码 write_1602dat(0x30+gw);//数字+30得到该数字的LCD1602显示码 }//-------------------------------------//年月日显示子函数void write_nyr(uchar add,uchar dat)//向LCD写年月日,有显示位置加数、显示数据,两个参数{ uchar gw,sw; gw=dat%10;//取得个位数字 sw=dat/10;//取得十位数字 write_1602com(yh+add);//设定显示位置为第一个位置+add write_1602dat(0x30+sw);//数字+30得到该数字的LCD1602显示码 write_1602dat(0x30+gw);//数字+30得到该数字的LCD1602显示码 }//-------------------------------------------void write_week(uchar week)//写星期函数{ write_1602com(yh+0x0c);//星期字符的显示位置 switch(week) { case 1:write_1602dat('M');//星期数为1时,显示 write_1602dat('O'); write_1602dat('N'); break; case 2:write_1602dat('T');//星期数据为2时显示 write_1602dat('U'); write_1602dat('E'); break; case 3:write_1602dat('W');//星期数据为3时显示 write_1602dat('E'); write_1602dat('D'); break; case 4:write_1602dat('T');//星期数据为4是显示 write_1602dat('H'); write_1602dat('U'); break; case 5:write_1602dat('F');//星期数据为5时显示 write_1602dat('R'); write_1602dat('I'); break; case 6:write_1602dat('S');//星期数据为6时显示 write_1602dat('T'); write_1602dat('A'); break; case 7:write_1602dat('S');//星期数据为7时显示 write_1602dat('U'); write_1602dat('N'); break;}}//****************键盘扫描有关函数**********************void keyscan(){ if(key1==0)//---------------key1为功能键(设置键)-------------------- { delay(9);//延时,用于消抖动 if(key1==0)//延时后再次确认按键按下 { buzzer=0;//蜂鸣器短响一次 delay(20); buzzer=1; while(!key1); key1n++; if(key1n==9) key1n=1;//设置按键共有秒、分、时、星期、日、月、年、返回,8个功能循环 switch(key1n) { case 1: TR0=0;//关闭定时器 //TR1=0; write_1602com(er+0x09);//设置按键按动一次,秒位置显示光标 write_1602com(0x0f);//设置光标为闪烁 temp=(miao)/10*16+(miao)%10;//秒数据写入DS1302 write_1302(0x8e,0x00); write_1302(0x80,0x80|temp);//miao write_1302(0x8e,0x80); break; case 2: write_1602com(er+6);//按2次fen位置显示光标 //write_1602com(0x0f); break; case 3: write_1602com(er+3);//按动3次,shi //write_1602com(0x0f); break; case 4: write_1602com(yh+0x0e);//按动4次,week //write_1602com(0x0f); break; case 5: write_1602com(yh+0x0a);//按动5次,ri //write_1602com(0x0f); break; case 6: write_1602com(yh+0x07);//按动6次,yue //write_1602com(0x0f); break; case 7: write_1602com(yh+0x04);//按动7次,nian //write_1602com(0x0f); break; case 8: write_1602com(0x0c);//按动到第8次,设置光标不闪烁 TR0=1;//打开定时器 temp=(miao)/10*16+(miao)%10; write_1302(0x8e,0x00); write_1302(0x80,0x00|temp);//miao数据写入DS1302 write_1302(0x8e,0x80); break; }} }//------------------------------加键key2---------------------------- if(key1n!=0)//当key1按下以下。再按以下键才有效(按键次数不等于零) { if(key2==0) //上调键 { delay(10); if(key2==0) { buzzer=0;//蜂鸣器短响一次 delay(20); buzzer=1; while(!key2); switch(key1n) { case 1:miao++;//设置键按动1次,调秒 if(miao==60) miao=0;//秒超过59,再加1,就归零 write_sfm(0x08,miao);//令LCD在正确位置显示"加"设定好的秒数 temp=(miao)/10*16+(miao)%10;//十进制转换成DS1302要求的DCB码 write_1302(0x8e,0x00); //允许写,禁止写保护 write_1302(0x80,temp); //向DS1302内写秒寄存器80H写入调整后的秒数据BCD码 write_1302(0x8e,0x80); //打开写保护 write_1602com(er+0x09);//因为设置液晶的模式是写入数据后,光标自动右移,所以要指定返回 //write_1602com(0x0b); break; case 2:fen++; if(fen==60) fen=0; write_sfm(0x05,fen);//令LCD在正确位置显示"加"设定好的分数据 temp=(fen)/10*16+(fen)%10;//十进制转换成DS1302要求的DCB码 write_1302(0x8e,0x00);//允许写,禁止写保护 write_1302(0x82,temp);//向DS1302内写分寄存器82H写入调整后的分数据BCD码 write_1302(0x8e,0x80);//打开写保护 write_1602com(er+6);//因为设置液晶的模式是写入数据后,指针自动加一,在这里是写回原来的位置 break; case 3:shi++; if(shi==24) shi=0; write_sfm(2,shi);//令LCD在正确的位置显示"加"设定好的小时数据 temp=(shi)/10*16+(shi)%10;//十进制转换成DS1302要求的DCB码 write_1302(0x8e,0x00);//允许写,禁止写保护 write_1302(0x84,temp);//向DS1302内写小时寄存器84H写入调整后的小时数据BCD码 write_1302(0x8e,0x80);//打开写保护 write_1602com(er+3);//因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位 break; case 4:week++; if(week==8) week=1; write_1602com(yh+0x0C);//指定'加'后的周数据显示位置 write_week(week);//指定周数据显示内容 temp=(week)/10*16+(week)%10;//十进制转换成DS1302要求的DCB码 write_1302(0x8e,0x00);//允许写,禁止写保护 write_1302(0x8a,temp);//向DS1302内写周寄存器8aH写入调整后的周数据BCD码 write_1302(0x8e,0x80);//打开写保护 write_1602com(yh+0x0e);//因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位 break; case 5:ri++; if(ri==32) ri=1; write_nyr(9,ri);//令LCD在正确的位置显示"加"设定好的日期数据 temp=(ri)/10*16+(ri)%10;//十进制转换成DS1302要求的DCB码 write_1302(0x8e,0x00);//允许写,禁止写保护 write_1302(0x86,temp);//向DS1302内写日期寄存器86H写入调整后的日期数据BCD码 write_1302(0x8e,0x80);//打开写保护 write_1602com(yh+10);//因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位 break; case 6:yue++; if(yue==13) yue=1; write_nyr(6,yue);//令LCD在正确的位置显示"加"设定好的月份数据 temp=(yue)/10*16+(yue)%10;//十进制转换成DS1302要求的DCB码 write_1302(0x8e,0x00);//允许写,禁止写保护 write_1302(0x88,temp);//向DS1302内写月份寄存器88H写入调整后的月份数据BCD码 write_1302(0x8e,0x80);//打开写保护 write_1602com(yh+7);//因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位 break; case 7:nian++; if(nian==100) nian=0; write_nyr(3,nian);//令LCD在正确的位置显示"加"设定好的年份数据 temp=(nian)/10*16+(nian)%10;//十进制转换成DS1302要求的DCB码 write_1302(0x8e,0x00);//允许写,禁止写保护 write_1302(0x8c,temp);//向DS1302内写年份寄存器8cH写入调整后的年份数据BCD码 write_1302(0x8e,0x80);//打开写保护 write_1602com(yh+4);//因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位 break;} } } //------------------减键key3,各句功能参照'加键'注释--------------- if(key3==0) { delay(10);//调延时,消抖动 if(key3==0) { buzzer=0;//蜂鸣器短响一次 delay(20); buzzer=1; while(!key3); switch(key1n) { case 1:miao--; if(miao==-1) miao=59;//秒数据减到-1时自动变成59 write_sfm(0x08,miao);//在LCD的正确位置显示改变后新的秒数 temp=(miao)/10*16+(miao)%10;//十进制转换成DS1302要求的DCB码 write_1302(0x8e,0x00); //允许写,禁止写保护 write_1302(0x80,temp); //向DS1302内写秒寄存器80H写入调整后的秒数据BCD码 write_1302(0x8e,0x80); //打开写保护 write_1602com(er+0x09);//因为设置液晶的模式是写入数据后,指针自动加一,在这里是写回原来的位置 //write_1602com(0x0b); break; case 2:fen--; if(fen==-1) fen=59; write_sfm(5,fen); temp=(fen)/10*16+(fen)%10;//十进制转换成DS1302要求的DCB码 write_1302(0x8e,0x00);//允许写,禁止写保护 write_1302(0x82,temp);//向DS1302内写分寄存器82H写入调整后的分数据BCD码 write_1302(0x8e,0x80);//打开写保护 write_1602com(er+6);//因为设置液晶的模式是写入数据后,指针自动加一,在这里是写回原来的位置 break; case 3:shi--; if(shi==-1) shi=23; write_sfm(2,shi); temp=(shi)/10*16+(shi)%10;//十进制转换成DS1302要求的DCB码 write_1302(0x8e,0x00);//允许写,禁止写保护 write_1302(0x84,temp);//向DS1302内写小时寄存器84H写入调整后的小时数据BCD码 write_1302(0x8e,0x80);//打开写保护 write_1602com(er+3);//因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位 break; case 4:week--; if(week==0) week=7; write_1602com(yh+0x0C);//指定'加'后的周数据显示位置 write_week(week);//指定周数据显示内容 temp=(week)/10*16+(week)%10;//十进制转换成DS1302要求的DCB码 write_1302(0x8e,0x00);//允许写,禁止写保护 write_1302(0x8a,temp);//向DS1302内写周寄存器8aH写入调整后的周数据BCD码 write_1302(0x8e,0x80);//打开写保护 write_1602com(yh+0x0e);//因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位 break; case 5:ri--; if(ri==0) ri=31; write_nyr(9,ri); temp=(ri)/10*16+(ri)%10;//十进制转换成DS1302要求的DCB码 write_1302(0x8e,0x00);//允许写,禁止写保护 write_1302(0x86,temp);//向DS1302内写日期寄存器86H写入调整后的日期数据BCD码 write_1302(0x8e,0x80);//打开写保护 write_1602com(yh+10);//因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位 break; case 6:yue--; if(yue==0) yue=12; write_nyr(6,yue); temp=(yue)/10*16+(yue)%10;//十进制转换成DS1302要求的DCB码 write_1302(0x8e,0x00);//允许写,禁止写保护 write_1302(0x88,temp);//向DS1302内写月份寄存器88H写入调整后的月份数据BCD码 write_1302(0x8e,0x80);//打开写保护 write_1602com(yh+7);//因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位 break; case 7:nian--; if(nian==-1) nian=99; write_nyr(3,nian); temp=(nian)/10*16+(nian)%10;//十进制转换成DS1302要求的DCB码 write_1302(0x8e,0x00);//允许写,禁止写保护 write_1302(0x8c,temp);//向DS1302内写年份寄存器8cH写入调整后的年份数据BCD码 write_1302(0x8e,0x80);//打开写保护 write_1602com(yh+4);//因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位 break;} } } }}//-------------------------------void init() //定时器、计数器设置函数{ TMOD=0x11; //指定定时/计数器的工作方式为3 TH0=0; //定时器T0的高四位=0 TL0=0; //定时器T0的低四位=0 EA=1; //系统允许有开放的中断 ET0=1; //允许T0中断 TR0=1; //开启中断,启动定时器}//*******************主函数**************************//***************************************************void main(){ lcd_init(); //调用液晶屏初始化子函数 ds1302_init(); //调用DS1302时钟的初始化子函数 init(); //调用定时计数器的设置子函数 led=0; //打开LCD的背光电源 buzzer=0;//蜂鸣器长响一次 delay(80); buzzer=1; while(1) //无限循环下面的语句: { keyscan(); //调用键盘扫描子函数 }}void timer0() interrupt 1 //取得并显示日历和时间{ //Init_DS18B20();//温度传感器DS18b2初始化子函数,在头文件中 flag=ReadTemperature();//将18b2头文件运行返回的函数结果送到变量FLAG中,用于显示 //读取秒时分周日月年七个数据(DS1302的读寄存器与写寄存器不一样):miao = BCD_Decimal(read_1302(0x81)); fen = BCD_Decimal(read_1302(0x83)); shi = BCD_Decimal(read_1302(0x85)); ri = BCD_Decimal(read_1302(0x87)); yue = BCD_Decimal(read_1302(0x89)); nian=BCD_Decimal(read_1302(0x8d)); week=BCD_Decimal(read_1302(0x8b)); //显示温度、秒、时、分数据: write_temp(12,flag);//显示温度,从第二行第12个字符后开始显示 write_sfm(8,miao);//秒,从第二行第8个字后开始显示(调用时分秒显示子函数) write_sfm(5,fen);//分,从第二行第5个字符后开始显示 write_sfm(2,shi);//小时,从第二行第2个字符后开始显示 //显示日、月、年数据: write_nyr(9,ri);//日期,从第二行第9个字符后开始显示 write_nyr(6,yue);//月份,从第二行第6个字符后开始显示 write_nyr(3,nian);//年,从第二行第3个字符后开始显示 write_week(week);}
唉,又一个写毕业论文的。。。
电子钟相关毕业设计 ·数字电子钟的电路设计 (字数:9242,页数:22 )·数字电子钟的设计与制作 (字数:8017,页数:22 )·数字钟的设计 (字数:6208,页数:21 )·基于8051单片机的数字钟 (字数:21638,页数:50)·基于单片机的电子时钟控制系统 (字数:7935,页数:42 )·数字电路数字钟设计 (字数:4846,页数:21 )·电子闹钟设计 (字数:4094,页数:19 )·定时闹钟设计 (字数:5714,页数:24 )·智能定时闹钟设计 (字数:3826,页数:18 )·下棋定时钟设计 (字数:5290,页数:24 )·多功能数字钟设计与制作 (字数:13129,页数:34)·基于单片机的电子钟设计 (字数:7710,页数:24 )·基于单片机的数字电子钟设计 (字数:10301,页数:42)·基于Labview的虚拟数字钟设计 (字数:17457,页数:32)·电子日历钟 (字数:10677,页数:33)·数字钟的设计与制作 (字数:4922,页数:23 )·单片机数字钟设计 (字数:15355,页数:47)·基于单片机的数字钟设计 (字数:12541,页数:27)·单片机定时闹钟设计 (字数:8450,页数:24 )·万年历可编程电子钟控电铃 (字数:14371.页数:41)·数字定时闹钟设计 (字数:7770,页数:28 )·基于EDA技术的数字电子钟设计 (字数:12247,页数:32)·多功能时钟打点系统设计 (字数:8353,页数:31 )·智能音乐闹钟设计 (字数:10002,页数:37)·基于AT89S51单片机的数字电子钟设计 (字数:14560,页数:39)
详细点???你问什么问题?? 淮安信息职业技术学院综合毕业实践说明书(论文)2009-2010 学年 系 专业摘要:数字电子时钟电路设计系统,以AT89C51单片机为控制核心,由键盘显示、定时闹铃、LED共阴极数码管和LED灯显示等功能模块组成。基于题目基本要求,本系统对时间显示和定时报警进行了重点设计。本系统大部分功能由软件来实现,吸收了硬件软件化的思想,大部分功能通过软件来实现,使电路简单明了,系统稳定性大大提高。本系统不仅成功的实现了要求的基本功能,而且有一定的创新功能。关键字:单片机 AT89C51 共阴极LED数码显示器 Abstract This digital electronic clock circuit design system ,based on chip microcomputer AT89C51,is composed by the following functional modules : keyboard displaying , timing alarmg. common cathode LED digital tube,LED lights display,and so on. According to the basic requirements of the subject ,the system stresses on the realization of Time display and regularly report to the design achieved all the required basic technical indexes. Furthermore , adopting the idea of hardware-to-software, most of those functions are realized by softwares, which makes the electrocircuit more concise and the system more words: chip microcomputer AT89C51 Common cathode LED digital display目 录一、 前言……………………………………………….. ….. ..1二、 总体方案设计………………………………………..…..1三、 系统硬件设计………………………………………..…..2(1)输入部分……………………………………….. …….. ...21 电源模块……………………………………………………………….22 按键模块……………………………………………………………….5(2)输出部分……………………………………….. .. ……...31 显示模块……………………………………………………………….32 闹铃模块……………………………………………………………….43 LED灯显示模块……………………………………………………….4(3)电路相关参数……………………………………....……...41 LED数码显示器………………………………………………………..42 集成器件CD4511……………………………………………………….53 集成器件74LS138……………………………………………………. .5四、 系统软件设计………………………………………..…..6 主程序流程图…………………………………………………………….7五、 系统调试……………………………………………..…..91 系统功能……………………………………………………………….92 时钟精度分析………………………………………………………... .9六、 系统设计总结………………………………………..…..9七、 参考文献………………………………………….…... .10附录……………………………………………………………111) 系统原理图……………………………………………......................................112) 系统PCB图……………………………………………................................... .123) 源程序…………………………………………………..................................... .13 一、前言本文通过对一个能实现按键开关可调整时、分、秒,且具有加密功能、定时报警的24小时制的时间系统的设计学习,详细介绍了51单片机应用中的定时中断原理、数码管显示原理、动态扫描显示原理等,进一步学习、应用单片机C语言系统的实现了各种功能。从而使自身明白使用单片机汇编语言和C语言之间的效率、整体性问题。系统由AT89C51、独立式按键、二极管、LED数码管、蜂鸣器等部分构成,能实现24小时制时、分、秒的时钟显示,能实现时钟简单的加密功能。同时也可进行时、分、秒的校准、定时报警和LED二极管流水灯显示。本系统主要是和实际生活的数字钟结合起来,可用1功能键进行加密,进入时间校准等。可用3个带有不同按键分别对时钟的时、分、秒进行校准。每个按键伴有不同的声响以示区别。文章后附有本次课程设计系统电路原理图及源程序,以供读者参考。 二、总体方案设计本次设计根据实验要求设计数字时钟。可利用如下两种方案实现。方案一:本方案采用美国DALLAS公司的专用时钟芯片DS1302。该芯片主要特点是采用串行数据传输,可为掉电保护电源提供可编程的充电功能,并且可以关闭充电功能。其内部采用石英晶体振荡器,其芯片精度不大于10ms/年,且具有完备的时钟闹钟功能,因此,可直接对其以用于显示或设置,使得软件编程相对简单。为保证时钟在电网电压不足或突然掉电等突发情况下仍能正常工作,芯片内部包含锂电池。当电网电压不足或突然掉电时,系统自动转换到内部锂电池供电系统。而且即使系统不上电,程序不执行时,锂电池也能保证芯片的正常运行,以备随时提供正确的时间。方案二:本方案完全用软件实现数字时钟。原理为:在单片机内部存储器设三个字节分别存放时钟的时、分、秒信息,并通过程序控制扫描输出显示数据。利用定时器0与软件结合实现1秒定时中断,每产生一次中断,存储器内相应的秒值加1;若秒值达到60,则将其清零,并将相应的分字节值加1;若分值达到60,则清零分字节,并将时字节值加1;若时值达到24,则将时字节清零。该方案具有硬件电路简单的特点,但当单片机不上电,程序将不执行。且由于每次执行程序时,定时器都要重新赋初值,所以该时钟精度不高。鉴于以上两种方案,虽然时钟芯片DS1302具有更多的优点,由于实验硬件的因素,现有的硬件缺少DS1302,为不影响实验进度,本设计采用方案二完成数字时钟的功能。根据题目要求设计的总体框图,如图1 — 1所示: 图1 — 1单片机数字钟硬件系统的总体设计框图 三、系统硬件设计(1)、输入部分:1.电源模块方案一:采用干电池作为单片机数字钟的电源,由于调试时间较长,使用干电池需经常更换电池,不符合节约型社会的要求。并且需要有一个硬件将3节电池串联在一起以产生足够的电压,若如此,将造成携带不方便。方案二:采用200W/5V直流稳压电源作为系统电源,不仅功率上可以满足系统需要,不需要更换电源,并且比较轻便,使用更加安全可靠。但稳压电源我们不能自备,若要调试系统,只能到实验室才能做。方案三:采用普通的USB线连接微型计算机作为系统电源,虽然功率上可以满足稍大于系统需要,但同样不需要更换电源,并且比直流稳压电源更轻便,可随时使用、调试系统。基于以上分析,由于本次设计系统都是软硬件想结合,所以要采用微机设备,有足够的USB接口供我们使用,所以我们决定采用方案三2.按键模块键盘是人与单片机打交道的主要设备,按键的读取容易引起误动作。可采用软件去抖动的方法处理,软件的触点在闭合和断开的时候会产生抖动,这时触点的逻辑电平是不稳定的,如不采取妥善处理的话,将引起按键命令错误或重复执行,在这里采用软件延时的方法来避开抖动,延时时间为20ms ( ).方案一:采用独立式键盘。独立式按键是直接用I/O口线构成的单个按键电路,其特点是每个按键单独占用一根I/O口线,每个按键的工作不会影响其它I/O口线的状态。但当所需按键数量多,会占用过多的I/O口线。方案二:采用矩阵键盘。因为单片机的I/O口有限, 显然,在按键数量较多时,矩阵式键盘较之独立式按键键盘要节省很多I/O口线。但必须将行线、列线信号配合起来作适当处理,才能确定闭合键的位置。基于以上分析,我们选用方案一,因为本次设计中仅用到4个按键。独立式按键键盘有利于PCB的作图。(2)、输出部分:1、 显示模块显示模块是本次单片机课程设计最核心的部分。方案一:采用LCD1602。LCD1602为工业字符型液晶,能够同时显示16x02即32个字符。其采用标准的16脚接口,该液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,所以可分容易的实现数字钟数码显示。方案二:采用LED共阴极数码管。共阴数码管在应用时将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。当某一字段的阳极为低电平时,相应字段就不亮。 基于以上分析,我们考虑到现实经济因素,所以选择了方案二。对于6路共阴极数码管数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字,因此根据数码管的驱动方式的不同,可以分为静态式和动态式两类:方案一:静态显示驱动。就是每一个数码管显示器都要占用单独的具有锁存功能的I/O接口用于笔划段字形代码。这样单片机只要把要显示的字形代码发送到接口电路,直到要显示新的数据时,再发送新的字形码,因此,使用这种办法单片机中CPU的占用较小。但对于静态显示方式,所需的数据锁存装置很多,引线多而复杂,且可靠性也较低。方案二:动态显示驱动。通过单片机对数码管位选通COM端电路的控制,只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。动态显示可以大幅度地降低硬件成本和电源的功耗,因为某一时刻只有一个数码管工作,也就是所谓的分时显示,故显示所需要的硬件电路可分时复用。动态显示方式,可以避免静态显示的问题。但设计上如果处理不当,易造成亮度低,闪烁问题。因此合理的设计既应保证驱动电路易实现,又要保证显示后的数据稳定,无闪烁。动态显示采用多路复用技术的动态扫描显示方式, 复用的程度不是无限增加的, 因为利用动态扫描显示使我们看到一幅稳定画面的实质是利用了人眼的暂留效应和发光二极管发光时间的长短, 发光的亮度等因素. 我们通过实验发现, 当扫描刷新频率(发光二极管的停闪频率) 为50Hz, 发光二极管导通时间≥1m s 时, 显示亮度较好, 无闪烁感.。 鉴于上述的方案分析, 我们采用方案二 2、闹铃模块方案一:采用语音芯片ISD1110闹铃。ISD1110 具有多种采样率对应,多种录放时间,可以利用振荡电阻自已决定采样率。操作简单,灵活。音质好,适应电压范围广。可先对录放音设备录入一段音乐或其他报时方式,当到设定时间时,单片机控制录放音设备放音。方案二:采用蜂鸣器闹铃,当到设定时间时,单片机向蜂鸣器送出低电平,蜂鸣器响铃。采用蜂鸣器闹铃结构简单,只需要单路信号控制,发出的闹铃声音可以根据响和不响的不同的软件延时时间来控制,当然也能发出音乐声音。基于两种方案分析,虽然语音芯片ISD1110具备更多优点,但鉴于经济因素,我们本次设计还是决定采用方案二。当然如果在大型比赛的话,还是偏向于采用方案一的。 3、LED灯显示模块采用LED灯可以方便的用不同的流水方式或单个LED灯来判断系统的工作状态,实现不同的显示功能,是一种经济又实用的方式。(3)电路相关参数1、LED数码显示器 通常用的七段数码显示器的内部有8个发光二极管,其中7个发光二极管组成了数字“8”,剩下一个发光二极管就是这位数字所带的小数点。数码管结构图如图1 - 2所示。各段码位与显示段的对应关系如表1。 图1 – 2 LED数码管结构引脚图表1 各段码位的对应关系段码位 D7 D6 D5 D4 D3 D2 D1 D0显示段 dp g f e d c b a2、集成器件CD4511CD4511是一个用于驱动共阴极 LED (数码管)显示器的 BCD 码—七段码译码器,特点如下:具有BCD转换、消隐和锁存控制、七段译码及驱动功能的CMOS电路能提供较大的拉电流。可直接驱动LED显示器。其引脚图如图1 — 3所示。 图 1 — 3 CD4511 引 脚 图其功能介绍如下: BI:4脚是消隐输入控制端,当BI=0 时,不管其它输入端状态如何,七段数码管均处于熄灭(消隐)状态,不显示数字。 LT:3脚是测试输入端,当BI=1,LT=0 时,译码输出全为1,不管输入 DCBA 状态如何,七段均发亮,显示“8”。它主要用来检测数码管是否损坏。 LE:锁定控制端,当LE=0时,允许译码输出。 LE=1时译码器是锁定保持状态,译码器输出被保持在LE=0时的数值。 A1、A2、A3、A4、为8421BCD码输入端。 a、b、c、d、e、f、g:为译码输出端,输出为高电平1有效。3、集成器件74LS13874LS138 为3 线-8 线译码器,本设计中74LS138做为对数码管位选通COM端电路的控制,将需要显示的数码管的选通控制打开。图1 — 3 74LS138引脚图74LS138工作原理如下:当一个选通端(G1)为高电平,另两个选通端( 和 )为低电平时,可将地址端(A、B、C)的二进制编码在一个对应的输出端以低电平译出。四、系统软件设计1、主程序流程图如图1 — 4所示:图1 — 4 主程序流程图2、定时器0子程序流程图如图1 — 5所示:图1 — 5 定时器0子程序流程图 五、系统调试1、系统功能本系统已符合设计课程基本要求,即可以实现24小时方式;可用六位LED数码管显示时、分、秒;可使用按键开关可实现时、分调整。除了满足这些基本要求外,本系统还做了一些创新:(1) 通过1功能按键KEY1开关可使系统具有加密功能。加密前后可通过观察LED二极管的显示方式来判断。当LED做流水灯显示方式时,为加密前的状态;当只有LED灯中的LED2(由口控制亮灭)时,代表已对系统进行加密。(2) 通过功能按键开关KEY1进入可进入时间校准系统。KEY2控制秒的校准,KEY3控制分的校准,KEY4控制时的校准。每次一有校准按键按下时,系统会发出不同的声响,以提示用户目前正在校准的是时、分、秒的哪一种。校准完成后仍然是通过功能按键KEY1返回时钟显示。(3) 通过更改主程序中定时器的定时初值,可实现不同样式的数字钟显示方式。通过实验测得以下参数如表2所示(程序中定时参数CYCLE在以下简称C): C (ms) 数码管显示方式 静态 闪烁 拉幕式(1) 可实现整点闹鸣功能。整点到时,可短蜂鸣一次。2、时钟精度分析 为进一步使本次的系统做得更完美,我使用了标准的秒表对自己设计的时间进行了精度测量。本次设计系统使用的晶振为12MHZ.数码管显示00:10:00时,用秒表测得相应的数据如表3所示:表3:序号 1 2 3 4 5T(min) 序号 6 7 8 9 10T(min) 序号 11 12 13 14 15T(min) 序号 16 17 18 19 20T(min) 通过计算可得数码管显示:00:10:00时,秒表测得的数值平均值为:00:10:2343 。以上数据表明了本次系统的精度基本符合实验课程精度要求。因为以上共有20组,测量时已去除了粗大误差。当然,如果将测量时间加长,所测得的精度将更精确。六、系统设计总结本次课程从基本方案的制定,再到硬件电路的选择,到制作电路完成,最后进行程序调试。在此期间我遇到很多困难,尤其是在做仿真时结果经常出不来。经过仔细检查,仿真线路是没有错的,可结果就是不行。但当我将实物做出来后,进行了调试,实物上却可以出来成果。这说明了可能是仿真软件的。经过一次又一次品尝到了解决问题的喜悦,最终提前完成了要求的全部功能,并在空闲的时间里加入了一些创新的部分。在此次课程设计中我发现了自己知识的不足,通过一周的学习、实践,我学到了很多东西。 通过此次课程设计的教学实践,进一步学习、掌握单片机应用系统的有关知识,加深了解单片机的工作原理。初步掌握简单单片机应用系统的设计、制作、调试的方法。提高动手实践能力。通过这次对数字时钟的设计,让我系统的了解和学会应用单片机C语言来对所需实现的功能进行编程。 在调试时遇到了一些问题,比如,刚开始进行按键输入检测时,我们直接用万用表测量按键两端的电平,刚测时,万用表显示高电平,当有按键按下时,则万用表显示低电平,这说明了按键是正常的,但当直接用按键时,系统板则不能正常使用按键。后面重新焊接了按键,系统板则才能正常使用按键。还有,LED灯显示模块的上拉电阻,也是出现了同样的情况。原先焊接时发现了电阻的管脚比之前看到的同阻值电阻管脚细。后面经过万用表调试后,重新焊接了电阻,部里就解决了。上述电子钟,无论在外观上还是功能上都实现了较为完善的设计。特别值得一提的是本系统的加密效果,可与现实生活中的数字钟相媲美,因为有了加密效果,可以使用户在购买时知道其产品是否是新的,还是二手货。但本系统在定时闹鸣时,声音不过响应,因为我为了让蜂鸣器闹鸣时系统时间不受到影响,而是继续走动,所以把闹鸣时间控制在定时器0 1s定时里面,所以定时时间到了时,响的时间不到1s,通过的电流过小,要解决此问题,可在蜂鸣器的放大电路中多加一级放大电路,使定时时间到了时,通过的电流足够大以驱动蜂鸣器。亦或通过软件设置蜂鸣,则可以正常实现蜂鸣器的功能。七、参考文献:[1]崔凤波.《数字电子技术》.大连理工大学出版社,.[2]戴仙金.《51单片机及其C语言程序开发实例》.清华大学出版社,[3]谭浩强.《C语言程序设计》.清华大学出版社.[4]赵建领.《51系列单片机开发宝典》. 电子工业出版社,2007[5]田立,马鸣鹤.《51系列单片机开发实例》.中国电力出版社,[6]王昊天,李海涛,王志强等.《PIC单片机原理与应用》.机械工业出版社,附录:1、 系统原理图;2、系统PCB图3、源程序/****************************Copyright (c)*************************** File name: ** Last modified Date: 2009-05-22**-----------------------------------------------------------------** Created by: 翁连益** NO: 2006040235 ** Descriptions: 单片机数字钟 ******************************************************************/ #include<> #define uchar unsigned char #define uint unsigned int #define CYCLE 1000 /*定时1ms时间 */ unsigned char i,j,k,ID; /*ID 为case 的次数 K为LED灯控制。*/ unsigned char temp; unsigned char b,c; uchar hour=0,min=0,sec=0; /*定义秒时分初始值*/ uchar a[6]; /*定数码管显示缓冲*/ uint t=0; uint flag=0; bit fla; unsigned char count; sbit KEY1=P3^0; sbit KEY2=P3^1; sbit KEY3=P3^2; sbit KEY4=P3^3; sbit LED2=P1^0; sbit BEEP=P0^7; void Modifytime(); /*时间调整模块*/ void Adjust(); void scan(); /*扫描数码模块*/ void Time_BEEP(); void delay10ms(void) /*软件10ms定时*/ { unsigned char i,j; for(i=20;i>0;i--) for(j=248;j>0;j--); /* 软件延时*/ } void dely250(void) { unsigned char i,j; for(i=2;i>0;i--) /* 软件延时*/ for(j=248;j>0;j--); }void main(){ TCON=0x01; /*TIMER0工作在方式1*/ TMOD=0x01; TH0=(65536-CYCLE)/256; /*设定T0每隔1000us(1ms)中断一次*/ TL0=(65536-CYCLE)%256; TR0=1; IE=0x82; Modifytime(); while(1){ if (flag==100){ { temp=0xfe; P1=temp; delay10ms() for(k=0;k<8;k++) { b=temp<
昨天才把我的毕业论文删掉。。
212 浏览 3 回答
203 浏览 8 回答
252 浏览 4 回答
118 浏览 3 回答
303 浏览 3 回答
235 浏览 2 回答
350 浏览 5 回答
126 浏览 4 回答
242 浏览 4 回答
354 浏览 4 回答
93 浏览 3 回答
248 浏览 3 回答
225 浏览 4 回答
294 浏览 7 回答
293 浏览 3 回答