毕业设计论文基于LabVIEW的电子万年历的设计.docx
- 文档编号:10874632
- 上传时间:2023-02-23
- 格式:DOCX
- 页数:17
- 大小:443.77KB
毕业设计论文基于LabVIEW的电子万年历的设计.docx
《毕业设计论文基于LabVIEW的电子万年历的设计.docx》由会员分享,可在线阅读,更多相关《毕业设计论文基于LabVIEW的电子万年历的设计.docx(17页珍藏版)》请在冰豆网上搜索。
毕业设计论文基于LabVIEW的电子万年历的设计
本科毕业论文(设计)
题 目:
基于LabVIEW的电子万年历设计与工程简化
学 院:
物理学科学学院
专 业:
微电子学
******* ***
****** **
2015年5月18日
基于LabVIEW的电子万年历设计与工程简化
Thedesignandengineeringsimplify
ofaelectroniccalendarbasedonLabVIEW
摘要
本文主要综述了LabVIEW编写电子万年历程序的各个过程,以及程序编写与实际工程设计的联系,其中主要介绍了基于LabVIEW的电子万年历程序中24时模块、年月日模块、星期模块和闹钟模块各自的完成原理和相互串接时需进行的各种调整。
另外本文中还讨论了以LabVIEW模型为蓝图进行工程设计较之直接进行设计的几项优点。
本文还对LabVIEW在实例中体现出的特性与可行的应用场景进行了论述。
关键词:
LabVIEW虚拟仪器仿真模块万年历
Abstract
ThisreviewfocusesontheelectroniccalendarprogramwritteninLabVIEWvariousprocesses,andproceduresforthepreparationandtheactualengineeringdesignlinks,whichintroducestheLabVIEWmodule'selectroniccalendarprogram24basedonthedatemodule,moduleandalarmmoduleeachweekofcompletetheoryandvariousadjustmentsconnectedwitheachothertobecarriedout.AlsowediscussedinthisarticlewithLabVIEWmodelasablueprintforengineeringseveraladvantagescomparedtodirectthedesign.ThispaperalsoreflectedintheLabVIEWexamplefeaturesandpossiblescenarioswerediscussed.
Keywords:
LabVIEWVirtualInstrumentsSimulationModuleCalendar
前言
随着电子信息技术的发展和集成芯片的出现,人们身边的各种工具正在以惊人的速度不断地更新换代,手机、电脑就不用多说了,现在就连手表也具备了更繁杂的功能而被冠以“智能手表”的名号。
这一切的变化都要归功于集成电路的诞生。
通过对集成芯片的编码,也就是单片机技术中常说的“烧录”,来使芯片实现固定的功能,不同语言的烧录能够写出拥有不同功能的芯片。
编码语言的神奇可见一斑,而且编码语言本身也存在多样性,有看起来枯燥无味又十分难懂的C语言,也有像本文就要提到的LabVIEW一样的图形化直观易懂的语言。
[1]诸多的语言种类的编写过程其实都是大同小异,都是通过一系列简单功能的叠加嵌套来实现纷繁复杂的功能。
[2]
在编写比较简单的程序时,LabVIEW较之C语言有一个十分显著的优点,那就是它极度仿真的程序框图外观,直白明了的编辑过程可以让我们在编辑时就可以按照实际的逻辑进行模块和子VI的铺设,极大地减少了逻辑错误发生的可能性,避免了文字输入错误。
但在见繁杂程序编写时,过多的逻辑关系嵌套串接等等难免会产生错误,这也是LabVIEW无法避免的弊病,所以根据需要和个人喜好选择程序语言是首要的。
[3]
在编写方面,LabVIEW具有简洁明了的特点,而在实际应用中仿真模拟的应用中,LabVIEW以其便捷直观的特点也深受工程人士的喜爱,在了解硬件工作原理的基础上,[4]甚至可以用LabVIEW编辑的子VI固定实现某一硬件芯片的功能,并设计引脚合理串接已形成仿真电路。
本文就以基于LabVIEW的电子万年历的设计编写为例,讲述LabVIEW编写的整个过程以及注意事项,通过模块化串接的功能实现方式体现其在工程简化上的参考价值。
1虚拟仪器技术的概念
虚拟仪器顾名思义就是虚拟的、没有真实物理形态的仪器设备。
虚拟仪器技术(Virtualinstrument)就是利用高性能的模块化硬件,结合高效灵活的软件来完成各种测试、测量和自动化的应用。
[5]
用通俗的话讲,虚拟仪器技术就是用高性能的集成技术芯片辅以编写完成的程序语言来实现相应电路功能的技术。
就如同用烧录机给89S51芯片写入程序一样。
虚拟仪器的产生是集成电路发展的必然,传统机械结构和非编程电路的不稳定性和功能局限性决定了它们不可能实现复杂的功能,而且同一个设计造就的产品只能完成固定仅有的一个功能,这就意味着你身边要有各种各样的设备以满足日常生活中为数不多的基本需求。
[6]这一点可以举一个路人皆知的例子就是埃尼阿克,庞大的体积和超乎想象的重量,完成的功能却少得可怜。
可以看出,虚拟仪器技术才是集成电路的核心,[7]就好比是灵魂,集成电路只是将各种元器件小尺寸化,而虚拟仪器技术却能够合适的调用这数以亿计的晶体管中的一部分来实现你想要的功能。
[8]
2LabVIEW的概念和应用
2.1LabVIEW的基本概念
LabVIEW是一种图形化的编程语言,又称为“G语言”,其各个部件类似于普通文本式的编程语言中的函数固定语言或者子程序,LabVIEW开发出的软件也就是我们所说的虚拟仪器。
[9]
LabVIEW的编辑界面有程序框图和前面板。
程序框图显示的是各个部件或者子VI之间的逻辑关系图,可以根据需要合理的添加或去除相应部件;[10]前面板与现实中的仪器相仿,可以设置旋钮、按键、显示装置或者是其他输入输出装置,甚至还能够按照个人喜好对界面进行美化。
LabVIEW系统的构成相当复杂,但大体上由数据采集、数据分析、数据显示及保存模块构成;按软硬件分类,LabVIEW由两部分组成:
①硬件获取测试对象的被测信号;
②测试软件的控制。
[11]
本身作为一种编程语言就具备了操作使用灵活的特点,其编程所能实现的功能远远超出实际器件的范围;加之本身极强的可辨识性和简单的学习难度,在许多应用领域都能被人们很快的接受。
[12]
当然,图形语言也不仅仅指LabVIEW,各种语言都有着各自的优缺点,LabVIEW也不例外,在简单程序语句的编写中LabVIEW要比文本性语言快捷得多,但是复杂功能的实现就略显乏力,除非是经常使用LabVIEW的工程师,每次使用都将日后可能用到的各个子VI单独封装保存,这样即便是较繁琐的程序编辑也会变得比较简单。
2.2LabVIEW的应用领域
LabVIEW作为一种简单实用的图形化编程语言,被广泛的应用于精细测量、建筑测量、设计模拟、生物医药、精密化工等各个高新技术领域。
[13]
2.3LabVIEW相较文本语言的优缺点
与C语言等纯文本性语言相比,LabVIEW更加直观可视,操作也更加便捷,在常用功能的编辑中,LabVIEW可以直接调用一个或多个部件完成C语言中数以百计的单词编写出的程序的功能。
另一方面,由于没有大量文本的编写,LabVIEW避免了像C语言中字符输入错误这样的问题,编写过程更加精准,减少了反复查找纰漏的过程。
另外,LabVIEW还有前面板编辑,经过美化的前面板几乎可以与显示仪器设备的面板相媲美,实际测量操作更接近现实,还可以输入或输出数字、文字、图形、表格等多种信息格式,这样多自由度的操作也是LabVIEW的亮点之一。
[14]
但LabVIEW也有无法避免的缺点,那就是子VI的缺乏,不同的系统需要不同的子VI支持,就算是相同的系统,鉴于不同使用者的喜好,子VI也不可能完全相同,很少有用户能够做到保存所有自己编写过的子VI,这样一来,在编写大型复杂化的软件程序时,每次都要浪费人力物力在相同的子VI部件的编写上,这是LabVIEW模块化部件工作的固有弊端。
[15]
3基于LabVIEW的电子万年历
3.1电子万年历的模块化分析
不一定每个人都熟悉或者电子万年历的构造,但是我们大多都了解电子万年历是如何发展过来的:
从滴水计时到计时12时的钟表、能计算日期的钟表、能计算日期和星期的钟表,到现在的万年历,纵观其中的各个过程我们不难发现:
后一代产物无法完全摒弃前一代的技术基础,计时12时的钟表也需要秒为单位的基本计时模块,计算日期的钟表也必须要有秒单位和计时12时的功能,由此看来,万年历也肯定是前面所有种类计时器具优点的集合加上其特有的功能所诞生的产品。
那么我们不难分析出:
万年历是以秒计时单位为核心,按照相关进制转换计算分、时、日、月、年以及星期的步进式结构,而添加的闹钟工作时间可随意调节,可见闹钟是万年历中一个独特的单位,它每时每刻都会从万年历获取时间信息,与所定时间对比,而这时间相同时,闹钟工作。
也就是说闹钟模块独立于计时循环模块之外,但对万年历时间的读取工作模块处于计时模块之内。
3.2电子万年历的模块间综合分析
鉴于LabVIEW本身的模块式部件语句编写模式,对电子万年历的分解只停留在部件是不够的,由3.1的分析可以得知:
万年历的主体由秒表模块、秒转分模块、分转时模块、时转日模块、日转月模块、月转年模块和星期计算模块以及闹钟模块构成,另外还要有数码管显示模块和闹钟调节模块以及初始调节模块的补充和完善。
各个转换模块之间按顺序串接,就形成了一个以秒表为核心的基本自主计时体系;星期计算模块需要实时获取年信息、月信息以及日信息进行相应公式计算得出相应的星期;闹钟模块随时获取相应信息对比时间决定开关即可;这一整体辅以数码管显示模块和闹钟调节、初始调节模块完善整个系统的输入输出,以实现电子万年历功能。
4基于LabVIEW的电子万年历的编写过程
由于之前也没有编写万年历程序的经历,所以编写过程是先编写主要核心,然后主次添加所需模块来完成的,为了讲述方便,本文就按照编写进度顺序撰写:
4.1核心时间模块的编写
所谓核心时间模块就是整个电子万年历的发条,如图1所示为一个秒为单位的计时单元,延时模块设置时间延迟为1s,while循环框中计数变量i每次经过平铺是顺序框图都要在其中延时模块的控制下经过1s时间,然后到达下一帧页被+1然后进入第二次循环,当然这样的秒表是不完善的,i+1的输出端也没有接到显示模块上,秒的单位进制是60,所以我们可以取i值与60的余数作为当前的秒的数值,以商的值作为分的进位,如图2所示,这样秒表部分就完全完成了。
图1图2
分到时的进制也是60,也就是说我们可以对分进行同样的取商取余处理,得到当前分和时的数值,但如果直接将分数值进行除法换算,当i的数值积累到60之后,每次计算所得商的值都会大于1,也就是每一秒都会给分累计加一,这样的算法当然是错误的了,所以在这里添加一个判断框,将余数与0对比:
如果余数等于0,证明秒表刚好跑完了60秒,此时判定信息为“T”,可以给分一个信号,完成“分=分+1”的函数过程;
如果余数不等于0,则证明不是秒表读数不是60的整数倍,此时判定信息为“F”,相应的函数过程为“分=分”。
如图3和图4所示:
图3图4
到这一步,秒到分的转换已经完成了,接下来分到时的转换又出现了问题,由于处在一个while循环框内,所以判定信号的频率就是秒表的频率,如果同样适用秒到分的方式进行进位,那么当分的数值为60的整数倍,也就是给时进位之后的1分钟之内,每一秒都会测得“分=0”给时进位,这是个不得了的问题。
既然这60秒不好惹,那我们就避开它,直接从“分”进行判定,那么这一分与其他时刻的分的区别在哪呢?
对,问题就在于“此时的分”与“前一分”,为了表示简单,我们设:
“此时的分=分”,“前一分=分′”,那么我们就将“分”与“分′”进行比较:
当“分=分′”此时分没有变化,秒没有进位;
当“分>分′”此时分为正常进位,即分与60的商为0;
当“分<分′”此时分虽然得到了进位,显示值却小于上一分的数值,证明此时分与60的商为1,余数也就是当前的“分=0”。
如图5和图6(图中已经准备好了同样原理的给“日”进位的端口,本章节不再重复强调)所示:
图5图6
到这里,核心时间模块的编写已经完成了,这部分是整个电子万年历的核心,也是整个体系的主要部件。
接下来的章节依次讲解其他构件的编写过程。
4.2七段式数码管子VI的编写
七段式数码管就是我们常见的电子标上就有的“8”字数字荧光显示屏,通过7节不同位置的荧光条的亮暗差别显示0~9的数字,这一结构其实也很简单,在LabVIEW编程的前面板中,有可以随意改变形状的荧光灯结构,可以采用这个结构和合适的程序语言实现数字到二进制编码的转变,然后对七段式数码管进行控制,其程序框图如图7和图8所示:
图7图8
为了美观,我个人将每一段数码管变成三段,用在程序框图中的首位相同的布尔元件代表(即“00~02”为一段数码管,同时开关)。
按照数码管的排列位置编号0~6,通过索引数组模块将0~9的数字转换成相应的控制显示的二进制代码,而后将其数字信号转换为“T”或“F”的二进制代码并与0~6的数码管序号关联控制数码管的亮暗。
4.3年月日模块的编写及进制转换算法
图6中已经有了时分秒模块向日进位的端口,而日到月的进位就没有那么简单了,但也有其规律算法可循,我们所熟知的:
1、3、5、7、8、10、12七个月份都是31天的进制,4、6、9、11四个月份是31天为进制,二月是一个个例,其本身与年号相挂钩,能被4整除不能被400整除的年,也就是闰年中,二月是29天,其他年份都为28天,通过这些逻辑的罗列我们能看到闰年的判定还是比较简单的,而且是决定月份计算的基础;月的判定相关性和相似性很强,适合统一计算,闰年的计算如图9所示:
图9
按照经验我们可以将日到月的运算分为三类:
二月份运算、30天月份的运算和31天月份的运算。
如图10和图11所示:
图10图11
首先要强调的是系统运算时所用的数字是从0开始的自然数组,而现实中的月份和日期都是从1开始的数组,所以就设置了“ri=日-1”和“yue=月-1”的转化语言,此处并非编写错误。
时进给日的是非条件分为三条路线分别传送给二月运算路线、30天月份运算路线和31天月份运算路线,可以看到0~11的12个数字被分成了三组,分别代表这三个月份分类,通过求当前月份值与相应数字的差值是否为0来判定当前处于哪个月份,处于2月则需再根据跟闰年判断结果相与得到的逻辑符号来判定是进入28天的运算模块还是29天的运算模块,如果不在二月,就直接输出0就可以了;处于30天的月份则只需令“T”时为30天运算,“F”时输出为0就可以了,31天月份的运算方式也是如此。
这种运算方式确保了12个月的路线全都走过,有该累计月份进位的就输出1,不该累计的输出0,这样的12个数字最后求和就可以准确无误的算出当前的月份值了。
月到年的进位就更加简单了,跟分到时的进位大同小异,这里不再详细说明。
4.4星期模块的编写及数码管显示矩阵算法
星期模块是编写过程中最为麻烦的一个模块,由于统计的数据过于庞大,所以就采用了三个方案进行简化:
1.将年、月事先进行除7取余的简化,也就是选取一个基准年的年初第一天,即2000年1月1日作为基准日,选择2000年是因为2000年是能被400整除的非闰年,这样在计算2000年前或2000年后的不同年份的日期时可以4年为一个小单位,25个小单位为一个大单位,详细的说就是非闰年365天,可以简单运算为:
365÷7=52……1,星期的进位为1,闰年366÷7=52……2,星期进位为2,每4年含有一个闰年,每25个4年,也就是每100年有一个被400整除的特殊非闰年,这样的计算模式如图12和图13所示:
图12图13
2.对当前月份和本年度经过整月份的运算也通过相似的方法进行整合取余简化运算,鉴于本部分图案特点原因,就不单独进行图示了
3.星期的表示方式采用荧光管矩阵形式
这种形式的应用主要是考虑到美观性和协调性,整个万年历中的年、月、日、时、分、秒的显示都可以凭借七段式数码管来实现,那么何不将星期的显示也通过数码管来实现呢?
而星期两个字在一周7天的变化中始终不变,所以就直接写在前面板上,“一”到“日”的变化可以通过点亮矩阵中相应位置的灯来显示,图14所示就是前面板显示用的10*10数码管矩阵中显示数字“五”的效果:
图14
4.5闹钟模块的编写及智能化的加入
其实作为万年历一般都不会具有闹钟模块的,这里添加闹钟模块只是出于我个人对于电脑没有自带闹钟的消遣,这一模块也是整个系统中最为简单的模块,通过直接读取时、分信息与设定信息比对,相同时就响起闹钟,而我设计的闹钟还有两个更为人性化的地方:
1.闹钟除了时、分的比对之外,还设有能单独开关的日期比对模块,也就是说,如果你需要,可以指定闹钟在固定日期的固定时间响起,而其他日期的这一时间绝对不会影响你。
2.闹钟还设置了间歇式逐次提醒模式,闹钟每次持续响铃时间为1分钟,如果你没时间去管它,那么一分钟之后它就会暂时安静下来,给你5分钟的休憩时间然后再响1分钟,总共响铃4次。
这样的设计没有什么独特或者高难度的地方,纯粹为了个人喜好而已。
5纵观LabVIEW电子万年历
5.1LabVIEW电子万年历编制工作总结
到这里,基于LabVIEW的电子万年历的基本零件已经讲述完了,另外还有很多为了美化和实用考虑的编程部件和美化显示效果的前面板设计就没有什么技术性可言了,这样的部件相互串接在一个大型的while循环框内就成了一个自循环的电子万年历。
现在的万年历虽然已经是修改了二十多次的完成版,运行时的运算也基本都趋于稳定,不会再出现月份随秒表跳动等低级的错误,但经过最终的测试,也还存在着以下几个不足:
1.时间的初始设置中,月份和日期的设置只能通过对“yue”和“ri”的设置来实现;
2.时间的初始设置中,秒的设置不会起作用,不管秒设置值为多少,点击开始之后,都会直接跳过当前一分钟进入下一分钟的0秒开始计时;
3.闹钟的铃声尚不能自由选取,这里涉及软件权限问题,属于个人能力欠缺
以上3个问题并非不能解决,只是鉴于个人原因没有充足的时间进行设计,放到最后的主要原因是这些问题都不影响程序整体的稳定运行。
另外,整个电子万年历的编程之中,除了上述的各个部件之外,还有少数几个微小功能的部件,在接下来的整体程序框图(图15)和前面板图(图16)中都有体现:
图15程序框图
图16前面板
5.2从万年历看向LabVIEW的全方位
LabVIEW编写电子万年历只是LabVIEW用法的一个很小的方面,另外,LabVIEW在电子电路测量、微变化物理量测量中搭配硬件仪器设备构件测量系统的功能也是当今LabVIEW的主要用途之一。
LabVIEW还经常应用于简单单片机设备虚拟系统开发、工程机械控制等诸多领域。
总结而言,软件编辑操控硬件设备才是LabVIEW的看家本领,在高新科技飞速发展的现在,硬件设备的更新换代十分飞快,这也就意味着像LabVIEW这样的的编辑语言所受到的限制就越来越小,那么LabVIEW的未来究竟可以是什么样子呢?
是可编程自动学习型的机器人设备还是高精度高可靠性的医疗卫生装备?
我们无从知晓,但是,让我们也多多少少的去接触去了解一下这一类应用,哪怕只是给自己编辑一个最为普通的日常应用而已。
谢辞
本论文的研究和撰写是在徐胜老师的严格要求和悉心指导下完成的。
在毕业设计期间,徐胜老师对我始终严格要求、充分信任,对我的专业学习给予了充分的理解和支持,他教导的研究方法的探索、创新能力的培养以及为人处事的原则对我产生的意义远远超过了论文本身。
在此,必须要向我的指导徐胜老师表示感谢!
同时,我要特别感谢在大学期间曾经给予过我关怀和帮助的所有老师。
没有他们对我各方面的关心和指导,我是不会如此顺利地完成我的学业以及这篇论文。
另外,我还想感谢给予我支持和帮助的同学和室友。
正是由于大家的团结协作和互相帮助,才使得本论文能够顺利完成。
在此,向他们表示衷心的感谢!
最后,我向所有曾给予过我指导和关心的亲人、老师和朋友们致以由衷的感谢和崇高的敬意。
参考文献
[1]郑对元.精通LabVIEW虚拟仪器程序设计清华大学出版社;2012年5月第1版:
7
[2]陈树学,刘萱.LabVIEW宝典电子工业出版社,2005:
205-211
[3](美)布鲁姆著,刘章发,LabVIEW编程样式电子工业出版社,2006:
205-208
[4](美)Johnson,G.W,Jennings,R著;武嘉澍,陆劲昆译.LabVIEW图形编程
北京大学出版社,2001年1月:
9-12
[5](美)特拉维斯(Travis,J.),(美)克林(Kring,J.)著;乔瑞萍等译.
LabVIEW大学实用教程,2008,31(4):
92-94.
[6]江建军.LabVIEW程序设计教程电子工业出版社,2008年3月第一版:
75
[7]康威(Conway,J.),瓦特(Watts,S.)著.软件工程方法在LabVIEW中的应用
北京大学出版社,2000
(2):
40
[8]NI开发者社区,
[9]郑对元.精通LabVIEW虚拟仪器程序设计清华大学出版社,
2012年5月第1版:
65-68
[10]黄松岭,吴静编著.虚拟仪器设计基础教程清华大学出版社,2008年10月
12-13
[11]郑对元.精通LabVIEW虚拟仪器程序设计清华大学出版社,2012年5月第1版:
181-192
[12]DavidJ.Ritter,LabVIEWGUIMcGraw-Hill2011年12月第28卷:
212-233
[13]阮奇桢,我和LabVIEW北京航空航天大学出版社2009年9月第26卷第1期:
27-29
[14]郑对元.精通LabVIEW虚拟仪器程序设计清华大学出版社;2012年5月第1版:
148-154
[15]互动百科,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 毕业设计 论文 基于 LabVIEW 电子 万年历 设计