毕业设计-基于89c51单片机的红外通讯软件设计_第1页
毕业设计-基于89c51单片机的红外通讯软件设计_第2页
毕业设计-基于89c51单片机的红外通讯软件设计_第3页
毕业设计-基于89c51单片机的红外通讯软件设计_第4页
毕业设计-基于89c51单片机的红外通讯软件设计_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

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

文档简介

目录摘要IABSTRACTII1绪论111课题的研究意义112红外通信的国内外现状213目前红外通信技术的应用热点214系统设计思路分析315系统设计需解决的难点要点32系统方案设计521系统功能设计522系统的总体方案设计5221系统的总体设计思路5222系统总体设计流程图6223系统总体结构图6223系统总体结构图723系统设计所需用到的主要器件724系统设计技巧73系统硬件设计831主要元器件的简单介绍和选择8311单片机介绍及选择8312红外通讯编码解码芯片选择9313红外发射头和接收头932红外通讯系统电路设计10321最小系统电路10323按键输入电路11324红外编码电路及其红外发射12325载波信号电路12326解码电路及其红外接13327LCD液晶显示电路和电机电路134系统软件设计1641红外通讯系统软件设计的编程语言选择1642开发环境,即编程软件的选择1743软件设计原则1744系统软件设计18441主程序功能的设计及其实现18442LCD1602液晶显示器软件设计21443矩阵键盘行列检测软件设计22444模拟编码芯片的编码程序设计2444538KHZ载波信号调制程序25446解码程序设计25447发射端与接收端的通信协议设计28448电机控制软件设计2845软件抗干扰技术2946系统软件设计注意事项295调试及其系统误差分析3051软件编写及调试过程3052调试过程中遇到的问题及其解决办法32结论34参考文献35致谢36附录37摘要着科学技术的发展,单片机因其高可靠性和高性价比,在智能化家用电器、仪器仪表等诸多领域内得到了极为广泛的应用。当前单片机对家用电器控制呈现出外型简单化、功能多样化、性能优越化的发展趋向。红外通讯是目前使用较多的一种通讯方法。红外线通讯装置具有体积小、功耗低、功能强、成本低等特点。在家庭生活中,录音机、音响设备、空调彩电都采用了红外通讯系统。本文简述基于单片机的红外通讯设备在现代社会的推广使用情况和发展前景,而系统方面主要基于红外通讯设备的实现原理和单片机原理来设计发射即遥控器和接收端。发射端主要包含按键输入,来控制接收端的电机运转和液晶显示器的显示;并且对可行性进行细致研究,综合功能用途,做出整体设计流程。关键字红外通讯发射端接收端系统ABSTRACTTHEDEVELOPMENTOFSCIENCEANDTECHNOLOGY,SCMBECAUSEOFITSHIGHRELIABILITYANDCOSTEFFECTIVE,INTHEINTELLIGENTHOMEAPPLIANCES,INSTRUMENTATIONANDMANYOTHERAREASHASBEENVERYWIDELYUSEDTHESCMAPPLIANCESHOWSTHESIMPLISTICAPPEARANCE,FUNCTIONALDIVERSIFICATION,SUPERIORPERFORMANCEOFTHEDEVELOPMENTTRENDINFRAREDCOMMUNICATIONISAMEANSOFCOMMUNICATIONISTHEUSEOFMOREINFRAREDCOMMUNICATIONDEVICEHASTHEADVANTAGESOFSMALLVOLUME,LOWPOWERCONSUMPTION,STRONGFUNCTION,LOWCOSTINFAMILYLIFE,TAPERECORDERS,AUDIOEQUIPMENT,AIRCONDITIONINGCOLORTVUSINGINFRAREDCOMMUNICATIONSYSTEMINTHISPAPER,THEINFRAREDCOMMUNICATIONEQUIPMENTBASEDONSINGLECHIPMICROCOMPUTERINMODERNSOCIETYTOPROMOTETHEUSEOFTHESITUATIONANDDEVELOPMENTPROSPECTS,ANDTHESYSTEMISMAINLYBASEDONTHEREALIZATIONPRINCIPLEANDTHEPRINCIPLEOFSINGLECHIPINFRAREDCOMMUNICATIONEQUIPMENTTODESIGNTHEEMISSIONTHATREMOTECONTROLANDRECEIVERTHETRANSMITTERINCLUDESAKEYINPUT,TOCONTROLTHEOPERATIONOFTHEMOTORANDTHELIQUIDCRYSTALDISPLAYTHERECEIVINGENDOFTHEDISPLAYANDADETAILEDSTUDYONTHEFEASIBILITY,COMPREHENSIVEFUNCTIONS,MAKEWHOLEDESIGNPROCESSKEYWORDSINFRAREDCOMMUNICATIONTRANSMITTINGTEMINALRECEIVINGTERMINALSYSTEM1绪论红外通讯就是通过红外线传输数据,是目前比较常用的一种无线数据传输手段,它具有无污、信息传输稳定、信息传输安全性高以及使用方便等优点。在电脑技术发展早期,数据都是通过线缆传输的,线缆传输连线麻烦,需要特制接口,颇为不便。自红外通讯技术发明以来,去多早期用线缆传输的设备和通讯工具都改为利用外红线来进行通讯,如家电产品、工业控制、娱乐设施等领域。并且经过多年的发展,有了今天以红外通讯为核心技术的蓝牙、红外、80211等无线数据传输技术1。11课题的研究意义信息时代,通信技术的发展总是走在各种技术的最前沿。随着各种手持式信息终端设备在我们的工作中频繁的使用出现,就标志着无线通信的时代已经到来,也意味着无线通信这种比传统的有线通信更加的让人接受。因为它方便,快捷,安全,稳定,所以无线通信的方式更加容易被人们重视,从而催促着各种无线通信技术的研发。红外通信是一种无线的传输方式,正在被日益广泛的应用,大的应用范围从军用,医疗,超市,银行等设备,小的应用则小到家用电器,无一没有涉及到红外通信技术,所以有不断的新的红外通信产品涌进市场,重而也推动了对红外通信技术的研究和发展。红外发射装置电路简单,易于实现,并且对空气污染小。在某些应用场合,比无线电通信具有更好的综合效果。红外无线通信在我国古代已有应用,只是比较简单。在第一次世界大战中德国就研制并运用了红外通信。第二次世界大战中美国、日本、苏联也都是用过红外无线通信。但在这漫长的时间里、由于红外无线通信系统光源均为热辐射源,调制困难,接收器又是光电池,内部噪音很大,影响了通信距离和可靠性,所以发展被怠慢。近年来由于微电子技术发展,发射器件和接受器件已经被半导体器件所代替,又由于它具有无需铺设电路、保密性好、抗干扰能力强、价格低廉、设备简单等优点,再加上近年来各种市场应用设备、家用设备的自动化提高,红外通信又重新被人们重视,从而得到发展。12红外通信的国内外现状红外线是由一位叫WILLIAMHERSCHEL的天文学家于19世纪发现的,是一种点对点连接的高科技通讯方式,它要求两个通讯端之间的红外发射口对准发射连接,并且不能相隔太远,中间也不能有障碍物,即红外。自1800年发现红外线以来,人们从没停过对它的研究,以至于后人能够利用红外开发出众多应用产品,在安防监控领域,汽车夜视系统,医疗器械行业,家庭电子行业,通讯领域等范围都已经被得到广泛的应用。而随着社会的不断发展,人们的安全防范意识愈来愈强烈,通讯的必要性也越来越突出可见,由于红外线为不可见光,具有很强的隐藏性和保密性,因此红外在安防和通讯领域大展身手,不论国内外,目前正在市场掀起一股”红外潮”。传统的红外通讯应用主要在与家电和汽车防盗遥控器方面,由于调制技术、相关收发器技术的快速发展,红外传输应用也发生了质的飞跃。1993年国际红外线协会在美国成立,积极整合建立红外传输的标准,极大地推动了红外产品的发展。2000年全球已有17亿台配有国际红外线协会模组的电子产品进入市场,尤其在电子游戏机市场有极大的潜力。2001年,在信息收发模组方面,由于国际红外线协会模组的价格已从早期的5美元降至2美元,国际大厂纷纷在亚太地区一些劳动力相对低廉的地方寻求加工场所,估计年产值将有1亿多美元的规模,当时一些IC设计公司、系统与应用软件厂商已积极投入应用产品的研究与生产,目前已经形成一定规模。但人们对她的研究仍然延续,时不时出现的新发明新应用,带给我们惊讶与感叹,人类对这座宝藏的开发还远远不够,红外产业还有广阔的扩张空间27。13目前红外通信技术的应用热点红外应用产品种类繁多,但是比较热门的应用的主要是红外热像、红外摄像、红外通讯、红外光谱仪、红外传感器等几个比较大的领域,但是我们做的是红外通讯所以这里只介绍下红外通讯应用。红外通讯传统的红外通讯应用主要在与家电和汽车防盗遥控器方面,由于调制技术、相关收发器技术的快速发展,红外传输应用也发生了质的飞跃。1993年国际红外线协会在美国成立,积极整合建立红外传输的标准,极大地推动了红外产品的发展。14系统设计思路分析系统分为接收端和发射端两部分,接收端采用44矩阵键盘用来接受用户的输入(09的数字输入,AF的字母输入),经过放大器放大后再通过载波信号的调制,把编码信号的有用信号传播出去;接收端接收到信号后,经过解码得到发射端用户输入的信号,最后在数码管或者LCD中显示出来。因为本系统的功能都属89C51单片机的应用范畴,所以使用89C51单片机来完成设计。15系统设计需解决的难点要点整个系统设计中有几个部分是难点也是系统正常运行的关键核心。键盘输入设计一个44的矩阵键盘来用接受用户的输入,利用8个IO口,在程序中对矩阵键盘进行行列的高低电平的判断,并在程序中对某个按键的按下返回预先设定的数字键或者字母键,从而完成用户的输入。红外发射电路选择基于通用UART红外通信,是因为可以利用通用UART成熟的硬件机制,实现红外数据通信。这种设计模式实际上是红外通信原理与串口通信机制的有机结合。且有实践证明,这种红外通信模式是可行可靠的8。载波信号电路红外线的传播不一定准确而且不一定够远,所以利用89C51单片机定时器产生38KHZ的方波输出电路,在编码信号输出端加上一个高频载波信号,通过载波信号的调制,把编码信号的有用信“携带着”传播出去,这样的红外线信号能够传得更远而且也能更有效的避免干扰红外接受器红外接收器部分使用红外专用接收集成电路HS0038来完成红外信号的光电转换及接收。HS0038是塑封一体化红外线接收器,它是一种集红外线接收、放大、整形于一体的集成电路,不需要任何外接元件,就能完成从红外线接收到输出与TTL电平信号兼容的所有工作,没有红外遥控信号时为高电平,收到红外信号时为低电平,而体积和普通的塑封三极管大小一样,它适合于各种红外线遥控和红外线数据传输。2系统方案设计21系统功能设计通用红外遥控系统由发射和接收两大部分组成9。故,系统设计应该分为两部分电路,发射和接收。系统所带功能如下能通过发射端来控制接收端(用电机模拟的电风扇)进行实时的控制;接收端(电机模拟的电风扇)能够分档次的运行在大、中、小三个档次,并且能够实现定时功能,电风扇的开关。接收端(电机模拟的电风扇)能够在LCD液晶显示器上显示风扇实时运转的转速档次,定时的时间。22系统的总体方案设计221系统的总体设计思路本次的系统设计是采用AT89C51作为发射电路(控制器)和接受电路(电风扇)以及38KHZ的红外信号载波调制电路的核心CPU,发射电路可以分为基本电路模块、键盘接受模块、红外发射模块三个模块,接收电路可分为基本电路模块、液晶显示模块、电机电路模块三个模块,单独的红外信号载波电路调制电路89。发射电路键盘采用四乘四矩阵键盘电路,通过程序检索用户的输入,返回相应的按键值到程序中;程序使用得到的按键值,得知用户的输入后取得相应程序中预先设定的操作码发送给红外发射器;再通过红外发射器发射出去的信号经过载波电路38KHZ方波调制后,由接收端的红外接收器接受到操作码后进行解码操作得操作码从而得知发射端的按键输入,从而改变接收端的电机运转情况和LCD液晶显示情况,达到红外通讯控制的目的。基本电路模块基本电路分为AT89C51正常运行所需的晶振电路和复位电路,主要由硬件来控制和实现没有采用软件的控制。键盘接受模块键盘接受模块采用四乘四的外接矩阵键盘,在程序中对矩阵键盘行和列的高低变换来得到用户在键盘的输入情况,需要用到单片机的8个管脚,系统中使用了发射端的P2口的八个管脚,若使用的是P0口的八个管脚则需要外接上拉电阻,阻值大约在510K之间。红外发射模块红外发射模块采用SE303红外发射装置来发送信号,发射的操作码为程序中预先设定。液晶显示模块液晶显示模块使用LM016L液晶显示器来显示电机的运转情况,如电机的运转的转速档次、电机定时时间。电机电路模块电机电路模块用一个电机模拟电风扇的运转,电机可以改变转速档次,定时运行,并且在相关的线路上接有LED指示灯,分为别为小档指示灯,中档指示灯,大档指示灯,定时指示灯,停转指示灯,用于提示用户电机的运转状态。222系统总体设计流程图进行编码操作通过发射器发送到接收端等待用户输入启动接收端等待发射端发送数据电机做出相应的运行电机停转启动发射端LCD显示电机状态223系统总体结构图23系统设计所需用到的主要器件89C51单片机作为两个电路的核心CPU,用M50462作为红外发射器,HS0038作为红外接收器,LM016L液晶显示器,一个四乘四的矩阵键盘,绿色和红色的LED指示灯,电机。24系统设计技巧在系统仿真过程中没有现成的SE303的红外发射器和HS0038红外接收器,所以本系统仿真时采用引用接收端和发射端的各自一个管脚相连通,中间装一个LED指示灯来指示信号的传递;在发射的根据UPD6121的编码发射原理,对发射端的管脚进行,低电平脉宽为056MS高电平脉宽为056MS组成一个周期为112MS的位“0”,而低电平脉宽为056MS高电平脉宽为1685MS组成一个周期为224MS的位“1”,发送接收端的管脚。每16位组成一个操作码,在接收端解码操作码得到相应的改变电机运转的动作。最小系统按键电路载波信号调制电路最小系统发射电路接收电路解码电路编码电路显示电路按键电路直流电机单位3系统硬件设计基于单片机的红外通讯硬件方面的在本章介绍,根据系统的设计方案和功能要求介绍系统总体的构成和各部分的硬件。系统两大电路模块都采用AT89C51单片机作为核心CPU,键盘部分采四乘四的矩阵键盘;显示部分使用LCD1602液晶显示器;红外发射器使用PH303红外发光二极管;红外遥控编码芯片使用M50462;红外接收器使HS003塑封一体化红外线接收器,它是一种集红外线接收、放大、整形于一体的集成电路;电机采用直流电机。31主要元器件的简单介绍和选择311单片机介绍及选择单片机是微机控制的典型代表,它在一片硅片上集成了中央处理器、存储器和各种输入输出接口,如I/O口,定时器/计数器接口,外部中断接口,串口,读/写接口等)。这样的芯片因为具有和计算机一样的功能,所以称之为单片微型计算机,简称单片机。而单片机又主要应用于实时控制,并通常作为其他系统的组成部分使用,故又称之为嵌入式控制器。自从20世纪70年代中期美国仙童公司推出第一台F8单片机以来,单片机已经有30多年的发展历史。直至今天,单片的生产厂家和型号已经是各式各样。红外通讯系统的单片机中,采用AT89C51单片机作为中央处理器。89C51单片机带有4K闪烁可编程可擦除只读存储器(FPEROMFALSHPROGRAMMABLEANDERASABLEREADONLYMEMORY),128字节内部RAM,32个I/O接口,2个16位定时器/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51可降至0HZ的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU工作,但允许RAM、定时/计数器、串行通信口及中断系统继续工作,掉电方式保存RAM的数据,但振荡器停止工作并禁止其它所有部件工作指导下一个硬件复位。312红外通讯编码解码芯片选择红外通讯电路若要将数据通过红外发射头和红外接收头发送出去,则需要在电路的发射端先进行编码操作编码成操作码,然后通过载波电路将编码后的芯片进行38KHZ的调制后,才能更远更安全稳定地发送出去;红外接受电路在接收到信号后,则需要进行解码操作,还原发射端的最原始数据,才能知道发射端是发送一个什么样的请求。由于我个人在用PROTEUS进行仿真时,并没有编码和解码芯片可以使用,所以程序中我全面模拟了编码和解码芯片的功能;我选定了UPD6121为编码芯片,BC7210为解码芯片;之所以选择这两个芯片分别作为发射端和接收端的编码解码芯片是因为BC7210解码芯片成本低,常见,而且BC7210的输出可以设置为并行输出或者串行输出,串行输出方式兼容SPI和UART两种接口,可以轻松完成与各种MCU、PC机的接口。可以取代SAA3049等芯片;而能够与BC7210解码芯片互相支持的多个芯片中又属UPD6121编码芯片最为合适13。UPD6121编码芯片和BC7210解码芯片如图31所示图31313红外发射头和接收头红外发射二极管是红外通信系统中用来发射信号的一个非常重要的元件,虽然它看起来比较小,不太显眼,但是没有它,红外通信就只能是一句空话。它是实现红外通信的桥梁,其重要性就好像灯泡在照明系统中的重要性一样,是整个红外通信系统的焦点。选用常用的红外发光二极管SE303,外形类似LED发光二极管,发出红外光(近红外线约093M)。管压降约14V,工作电流一般小于20MA。为了适应不同的工作电压,回路中常串有限流电阻。SE303实物图如图32所示图32红外接收器是红外发光二极管的受控装置,其里面有相应的红外光电转换电路。这里我们采用的接收器是一种红外专用接收集成电路HS0038,用它来完成红外信号的光电转换及接收。接收方一般使用HS0038一体化红外线接收器进行接收解码,当HS0038接收到38KHZ红外信号时,输出端输出低电平,否则为高电平。所以红外遥控器发送红外信号时,参考上面遥控串行数据编码波形图,在低电平处发送38KHZ红外信号,高电平处则不发送红外信号。HS0038实物图如图33所示。图3332红外通讯系统电路设计321最小系统电路单片机如果要能够正常工作,那么最小系统是必不可少的。而所谓的最小系统,就是单片机的XTAL1,XTAL2两个IO口外接晶振电路,RST口外接复位电路,EA、VCC接5V电源,VSS接地,这样组成的一个小系统成为最小系统。所以,红外通讯系统中的发射端和接收端都需要有如下图所示的基本电路模块图34这里值得注意的是仿真的时候VCC和VSS都默认地接5V电源和接地,所以不需要再添加,但是绘制原理图和制作PCB板时,不能将VCC和VSS遗漏,否则单片机无法正常工作。323按键输入电路用来接收用户输入的按键模块,采用四乘四矩阵键盘与单片机的P0八个管脚相连,在程序中进行行列检测,从而得出用户对哪个按键进行的单击操作(具体算法实现在第四章软件设计中详解)。这里值得注意的是,使用P0口时,单片机内部是没有接上拉电阻,所以我们需要外部添加上路电阻。按键输入模块电路如下图所示图35图35324红外编码电路及其红外发射红外编码电路的编码主要是由用户码和数据码构成,用户码和数据码统称为传送码,通常为8位或16位的“0”“1”码,为了避免出现差错,每次发射的传送码中一般都包含两次编码一次为原码,一次为反码或相同的码连续发两次。本系统采用8位的传送码,并且再发送一次反补作为验证。采用UPD6121编码芯片,KL/O0至KL/O7七个管脚接受未编码的原始操作数据;也可以用KI1至KI4四个管脚与KL/O0至O7组成矩阵键盘直接接受输入数据。本系统采用第一种方案。(这里的编码电路没有经过载波就发送,是因为这是单独绘制的编码和红外发射电路,并没有应用到仿真。而本次系统设计仿真中并没有编码芯片,所以在仿真电路中单独绘制解码发射模块,用于学习不参与程序运行。)电路模块电路图如下图所示图36325载波信号电路在所有的高频通信电路中,载波信号的存在是必不可少的。为使红外信号能够正确的传送出去和传送更长的距离,我们也需要在编码信号输出的同端加上一个高频载波信号。通过这个高频载波信号的调制,把编码信号的有用信息“携带”出去,这样信号的传送距离就能更长,而且能够有效的避免其他信号的干扰,从而提高了信息传送的准确性。本系统采用89C51单片机内部定时器产生38KHZ信号的方波,与编码后的传送码结合,调制后传送出去。图中的SENDIO用于接收来自用户输入的数据编码后得到的传送码(操作码)。载波信号调制电路如下图所示图37326解码电路及其红外接图38通过解码电路后,得到用户最原始的输出数据,从而控制LCD液晶显示器显示电机运转的相关信息,并且控制电机运转。327LCD液晶显示电路和电机电路根据解码后得到的用户原始输入数据,通过程序控制液晶显示器的显示,和电机的运转。液晶显示器使用LCD1602。RS,RW,E三个控制端口分别接单片机P0口的P05,P06,P07,外接上路电阻,而数据传输端口接单片机的P2口,因为内部已经有上路电阻,所以不再需要外部接上拉电阻。这里电机采用直流电机,而控制直流电机的转速主要是通过控制其电压实现,所以电路中用三个2N3055三极管,三个三极管的基极分别接单片机的P11,P12,P13三个管脚,集电极接不同大小的电阻再接电源,然后通过程序来控制使用不同的三极管,从而控制不同的直流电机电压,达到改变转速的效果。液晶显示模块电路和电机电路分别如图39所示图39总体发射端综合仿真电路图总体接收端综合仿真电路图4系统软件设计41红外通讯系统软件设计的编程语言选择现在程序编程语言很多如C语言,C语言,汇编语言,机器语言等,这些语言主要都应用于嵌入式开发之中,但由于机器语言的难以阅读,所以现在已经基本不再使用。而在单片机应用系统开发过程中,程序设计有两种方法一种是基于汇编语言的程序设计方法,另一种是基于C语言的程序设计方法。汇编语言的机器代码生成效率高但可读性不强,而C语言在大多数情况下,其机器代码生成效率和汇编语言相当,而可读性和可移植性却远远超过汇编语言。此外,由于C语言有很好的层次结构,使其编写的程序更容易阅读和维护。且C编写的程序比汇编更符合人们的思考习惯,开发者能更专心的考虑程序设计而不是考虑些细节问题,这样就减少了开发和调试的时间10。选用C语言设计程序具有一些特点14C语言代码简洁易读,使用灵活方便,装性好,代码重用性高。C语言具有函数,相对于汇编语言来说,代码的封装性远远高于汇编语言,代码的重用性高,并且具有一定的模块化。并且表达能力强,丰富的数据结构类型,用户根据需要,采用多种数据类型来控制各种复杂的数据;C语言还有多种运算符,用户可以灵活地进行简单或者复杂的算术运算,表达方式也很灵活。而且C语言是一种结构化程序设计语言。这一点很适合单片机的设计,C语言以函数作为程序设计的基本单位,C语言程序中的函数相当于一般语言中的子程序。还有很关键的一点是C语言拥有指针,直接操作计算机硬件。C语言具有直接访问机器物理地址的能力,KEIL的C51编译器和FRANKLIN的C51编译器都可以直接对单片机的内部特殊功能寄存器和I/O端口进行操作,可以直接访问片内或片尾存储器,还可以进行各种位操作。42开发环境,即编程软件的选择本次红外通讯系统的程序编写的开发环境,选择使用KEILUVERSION3。它是美国KEILSOFTWARE公司出品的主要用于51系列单片机主要用于C语言软件程序开发工具。KEIL还提供了包括C语言编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等完全的开发方案。在KEILUVERSION3上编写的C语言程序可以直接生成一个HEX文件在PROTEUS中直接将HEX文件调入到单片机中便可直接运行程序,方便程序在单片机环境下的运行和调试。而使用C编译器在产生代码的准确性和效率方面达到了较高的水平,而且可以附加灵活地控制选项,在开发大型项目时非常理想,是目前应用最广泛的单片机开发环境之一15。所以,如果是用C语言编写单片机程序没那么KEIL几乎就是第一选择。43软件设计原则软件是连接需求分析硬件系统以及使得系统实现的桥梁,对软件进行编写设计之前应该先了解软件设计的原则。软件要有一定的可靠性,软件系统规模越大越复杂,可知这时候软件的可靠性就越来越难保证。软件的可靠性意味着该软件在测试运行过程中避免可能发生故障的能力,且一旦发生故障后,具有解脱和排除故障的能力。软件可靠性和硬件可靠性本质区别在于后者为物理机理的衰变和老化所致,而前者是由于设计和实现的错误所致。在进行软件设计之前的软件的可靠性必须在设计阶段就确定,在生产和测试阶段再考虑就困难了。软件需要有健壮性,又称为鲁棒性,是指软件对于规范要求以外的输入能够判断出这个输入不符合规范要求,并能有合理的处理方式。但是它的健壮性是一个较模糊的概念,但是却是非常重要的软件外部量度标准。软件设计的健壮与否直接反应了分析设计和编码人员的水平软件的可修改性,在软件编写完成后,可能在后续部分根据用户的需求反应,或者其他原因,可能需要修改软件。这时候,就要求软件开发人员在软件开发时要编写完整的文档和良好的结构,如模块化。软件编写要容易理解,这个其实和可修改性是相关联的。拥有良好的结构、明朗的注释,便于修改时候的阅读。软件要有可测试性,就是设计一个适当的数据集合,用来测试所建立的系统,并保证系统得到全面的检验。软件有效率性,效率性是指软件在编写的时候应该注意运行时,尽可能得少用计算机内存,并且采用最优的算法来处理数据结构,让软件在计算机中运行时所占用的内存达到最低,这点很考研开发人员的水平。软件标准化原则,软件编写要基于业界的一些规范、协议、接口、命名规则。软件要有先进些和可扩展性,软件要能满足客户的要求,并且做好模块化,便于日后对软件的升级。44系统软件设计441主程序功能的设计及其实现系统功能的要求决定了系统软件设计的方向,本次系统程序设计流程图如图41所示。红外通讯的数据发送是通过区别脉冲的低电平宽度来区分位0和位1,位0和位1的高电平均为056MS,而低电平位0为056MS,位1为1685MS。对于发射端程序,运行后先初始化定时器0用于后面程序编码,然后开始进行对矩阵键盘的行和列进行检测,等待用户的输入;若有用户输入,程序先判定用户输入的按键,然后用将指定的按键数字送入TRANSMIT编码函数中进行编码。根据发射端和接收端的通信协议(在“COMMUNICATIONPROTOCOLH”头文件中)在TRANSMIT编码函数中发送按键数值指定的数据码,依次先发送一次起始码9MS高电平,45MS低电平,然后发送两次系统识别码0X55与0XAA,一次数据码码一次数据码的反码,最后再发送一次结束码(9MS高电平,45MS低电平,225MS高电平),这样一套顺序组成一个完整操作码,完全模拟编码芯片。接收端程序启动后,先对LCD液晶显示器,定时器0,定时器1,外部中断1。显示器显示电机初始状态,主程序开始停留在WHILEISNEWCODE的循环等待新的发射端用户输入。定时器0开始计数50US中断一次,定时器0的中断函数TIME0内部对COUNT进行计数。外部中断接受到下降沿的脉冲后将会进入外部中断函数RECIVE,获取COUNT的计数,根据COUNT的次数来计算接受到的脉冲的宽度,如果脉冲的宽度不是合法的信号,那么就去除。如果脉冲的宽度是合法的信号宽度即,20300因为9MS45MS135MS即,13500/50275,这时候接受状态IR_STATUS1,表示已经接受过起始码,那么接下来接受的应该是系统识别码。同起始码一样,判断16位的数据是否接受完毕,如果完毕则COMMON_CODE_COUNT为大于等于15,IR_STATUS为2表示系统码也已经接受完毕,接下来便开始接受操作码(数据码)。根据位0和位1的脉冲宽度可知,如果4020/微秒延时函数定义,以微秒为单位的参数/VOIDDELAYUSUINTTWHILET/毫秒延时函数定义,以毫秒为单位的参数/VOIDDELAYMSUINTTWHILET/大致延时2MSDELAYUS245DELAYUS245/函数功能检测矩阵键盘的输入参数无该函数在MAINFILEC中实现/UCHARKEYCHECK/函数功能键值码转换成数字值参数无该函数在MAINFILEC中实现/UCHARKEYVALTRANSLATE/函数功能发送红外发射数据结束时的结束码参数无该函数在MAINFILEC中实现/VOIDOVERCODE/函数功能发送红外发射数据开始时的起始码参数无该函数在MAINFILEC中实现/VOIDSTARTCODE/函数功能发送红外发射数据过程中所需的数据码参数UCHARDATA该函数在MAINFILEC中实现/VOIDDATACODEUCHARDAT/函数功能发送数据参数UCHARSENDCODE该函数在MAINFILEC中实现/VOIDTRANSMITUCHARSENDCODE/MAINFILEC运行文件发射端主程序文件/主程序所需头文件调用/INCLUDEINCLUDEINCLUDEINCLUDE“CODESENDH“/函数声明文件INCLUDE“COMMUNICATIONPROTOCOLH“/通讯协议声明文件DEFINEKEYPORTP0/全局变量定义/UCHARVALUCHARIUCHARBUFSBITTP30/程序主要运行部分/MAINTMOD0X01TR01T0WHILE1SWITCHKEYVALTRANSLATECASE0TRANSMITSENDCODE0BREAK/数字0至9为电机定时使用的数字键CASE1TRANSMITSENDCODE1BREAKCASE2TRANSMITSENDCODE2BREAKCASE3TRANSMITSENDCODE3BREAKCASE4TRANSMITSENDCODE4BREAKCASE5TRANSMITSENDCODE5BREAKCASE6TRANSMITSENDCODE6BREAKCASE7TRANSMITSENDCODE7BREAKCASE8TRANSMITSENDCODE8BREAKCASE9TRANSMITSENDCODE9BREAKCASEATRANSMITSENDCODEABREAK/按键A对应矩阵键盘的ON/C,控制电机的启动停止CASEBTRANSMITSENDCODEBBREAK/按键B对应矩阵键盘的,定时设置CASECTRANSMITSENDCODECBREAK/按键C对应矩阵键盘的,调大电机转速CASEDTRANSMITSENDCODEDBREAK/按键D对应矩阵键盘的,调小电机转速CASEETRANSMITSENDCODEEBREAK/按键E与按键F不控制电机CASEFTRANSMITSENDCODEFBREAK/部分函数功能实现部分/键盘行列检测函数,根据行和列高低电位的组合,来获取键位码,再通过KEYVALTRANSLATE函数将键位码转换成相应的数字键值/UCHARKEYCHECK/矩阵键盘高位置高电平,低位置低电平如果有按键按下,则置高电平的所有行列不可能全为高电平,必然有一列为低电平,所以不可能为0XF0在该列的基础上再检测行则将行都置低电平,如果该行有键按下则为高电平;结合之前检测出来的列,就可以得出按下按键的行和列从而确定按键/KEYPORT0XF0IFKEYPORT0XF0/有键按下,但还不知道是哪个键,接下来开始组行检测DELAYMS25/组行检测同理,将其他行置高电平,检测哪一列置低电平如果该列有键按下,则端口不可能为高电平,没有键按下则该行保持高电平/先检测第一行,将所有行置高电平,如果第一行KEYPORT0XFEIFKEYPORT0XFE/该行有键按下,且该行是P00行VALKEYPORT/用KEYPORT与0XF0相乘,得到保留列状态的值VAL0X0E/在将保留列状态的值加上所检测的行就得到行和列的指定的按键。WHILEKEYPORT0XFEDELAYMS25WHILEKEYPORT0XFEDELAYMS25RETURNVAL/检测第二行KEYPORT0XFDIFKEYPORT0XFDVALKEYPORTVAL0X0DWHILEKEYPORT0XFDDELAYMS25WHILEKEYPORT0XFDDELAYMS25RETURNVAL/检测第三行KEYPORT0XFBIFKEYPORT0XFBVALKEYPORTVAL0X0BWHILEKEYPORT0XFBDELAYMS25WHILEKEYPORT0XFBDELAYMS25RETURNVAL/检测第四行KEYPORT0XF7IFKEYPORT0XF7VALKEYPORTVAL0X07WHILEKEYPORT0XF7DELAYMS25WHILEKEYPORT0XF7DELAYMS25RETURNVAL/键值码转换成数字值函数通过KEYCHECK的按键检测函数获得键值码转换成数字值/UCHARKEYVALTRANSLATE/使用SWITCH语句来选择状态键值码从而获得相应的数字值/SWITCHKEYCHECK/键盘模式/CASE0X7BRETURN1/789FCASE0XBBRETURN2/CASE0XDBRETURN3/456ECASE0X7DRETURN4/CASE0XBDRETURN5/123DCASE0XDDRETURN6/CASE0X7ERETURN7/A0BCCASE0XBERETURN8/CASE0XDERETURN9CASE0X77RETURNACASE0XB7RETURN0CASE0XD7RETURNBCASE0XE7RETURNCCASE0XEBRETURND/CASE0XEDRETURNE/CASE0XEERETURNF/DEFAULTRETURNZ/结束码函数实现/VOIDOVERCODE/结束码TH00XFDTL00XD0/056MST1WHILETF00TF00T0TF00TH00XDCTL00X5C/912MSWHILETF00T1TH00XA6TL00X28/23MSWHILETF00T0TF00TH00XDCTL00X5C/912MSWHILETF00T1TF00TH00XF7TL00X36/225MSWHILETF00TF00T0/起始码函数实现/VOIDSTARTCODE/起始码T0/45MS延时TH00XEETL00X69TR01WHILETF00TF00T1TH00XDCTL00X5C/912MSTR01/启动定时器0WHILETF00T0TF00TH00XEETL00X69/45MSWHILETF00TF00/数据码函数实现/VOIDDATACODEUCHARDAT/数据码FORI0I1/数据发送函数/VOIDTRANSMITUCHARSENDCODESTARTCODE/起始码DATACODE0X55/识别码1DATACODE0XAA/识别码2DATACODESENDCODE/数据码DATACODESENDCODE/数据反码OVERCODE/结束码/CODERECVH头文件接收端函数声明文件/头文件CODESENDH声明用于红外结束信息的函数,LCD控制显示函数及其辅助红外接受所需的函数/INCLUDE“COMMUNICATIONPROTOCOLH“/通讯协议声明文件/函数功能延时参数UCHARCOUNT/VOIDDELAY_10USUCHARCOUNTUCHARXFORXCOUNTX0X/延时一毫秒,与若干毫秒/VOIDDELAYNMSINTXINTI,JFORIXI0IFORJ110J0J/LCD函数声明/函数功能将模式设置指令或显示地址写入液晶模块入口参数DICTATE/VOIDWRITEINSTRUCTIONUCHARDICTATE/函数功能指定字符显示的实际地址入口参数X/VOIDWRITEADDRESSUCHARX/函数功能将数据写入液晶模块入口参数Y/VOIDWRITEDATAUCHARDAT/函数功能将字符串写入液晶模块参数UCHARSTRING/VOIDWRITESTRINGUCHARSTRING/函数功能初始化LCD/VOIDLCDINIT/函数功能LCD显示电机状态/VOIDSHOWSTATUSUCHARMOTORSTATUS,UINTTIME,UCHARTIMEPOS/GETINFRAMAINFILEC执行文件接收端主程序文件INCLUDEINCLUDE“CODERECVH“/函数声明文件INCLUDE“COMMUNICATIONPROTOCOLH“/通讯协议声明文件/P1口对电机控制的宏定义DEFINEMOTORRUN0X02/电启动控制DEFINESTOP0X00/电机停止DEFINERUNLOW0X02/电机低速档DEFINERUNMIDDLE0X04/电机中速档DEFINERUNLARGE0X08/电机高速档/LCD数据、控制口定义/SBITRSP05/控制LCD的RS端SBITRWP06/控制LCD的RW端SBITEP07/控制LCD的E端SBITRECVIOP33/接受端口SBITTIMELEDP37/定时闪烁灯UINTCOUNT0,BUF_COUNT0UCHARCOMMON_CODE_COUNT0,KEY_BIT_COUNT0,BUF_KEY_CODE0X00,KEY_CODE0X00,IR_STATUS0,BUF0/系统码2UINTISNEWCODE0UINTISMOTORRUN0/电机是否运转UCHARMOTORSPEED0X02UINTTIME0/定时计数UCHARTIMEPOS0X46UINTTIMECOUNT0/以毫秒为单位计数秒级UINTTIMESHOWCOUNT0/计数毫秒,一秒显示修改一次LCD/主程序部分/MAINP10X00TIMELED0TMOD0X12EA1/全局中断允许EX11/允许外部中断ET01/允许定时器0中断IT11/选择为边沿触发方式,高到低的负跳变触发RECVIO1/P33TH00XD2/定时50USTL00XD2TR01/开定时器0中断ET11/允许定时器1中断TH150000/256/定时50MSTL150000256LCDINITWRITEINSTRUCTION0X01WRITEADDRESS0X00WRITESTRING“MOTORSTATE“WRITEADDRESS0X40WRITESTRING“TIME0“WHILE1WHILEISNEWCODE/等待新的数据码/有新数据码传来SWITCHKEY_CODECASESENDCODEEIFISMOTORRUN1P1STOPISMOTORRUN0MOTORSPEED0X02BREAK/电机停转CASESENDCODE0IFISMOTORRUN1TIMETIME100WRITEADDRESSTIMEPOSWRITEDATA0TIMEPOS0X01BREAKCASESENDCODE1IFISMOTORRUN1TIMETIME101WRITEADDRESSTIMEPOSWRITEDATA1TIMEPOS0X01BREAKCASESENDCODE2IFISMOTORRUN1TIMETIME102WRITEADDRESSTIMEPOSWRITEDATA2TIMEPOS0X01BREAKCASESENDCODE3IFISMOTORRUN1TIMETIME103WRITEADDRESSTIMEPOSWRITEDATA3TIMEPOS0X01BREAKCASESENDCODE4IFISMOTORRUN1TIMETIME104WRITEADDRESSTIMEPOSWRITEDATA4TIMEPOS0X01BREAKCASESENDCODE5IFISMOTORRUN1TIMETIME105WRITEADDRESSTIMEPOSWRITEDATA5TIMEPOS0X01BREAKCASESENDCODE6IFISMOTORRUN1TIMETIME106WRITEADDRESSTIMEPOSWRITEDATA6TIMEPOS0X01BREAKCASESENDCODE7IFISMOTORRUN1TIMETIME107WRITEADDRESSTIMEPOSWRITEDATA7TIMEPOS0X01BREAKCASESENDCODE8IFISMOTORRUN1TIMETIME108WRITEADDRESSTIMEPOSWRITEDATA8TIMEPOS0X01BREAKCASESENDCODE9IFISMOTORRUN1TIMETIME109WRITEADDRESSTIMEPOSWRITEDATA9TIMEPOS0X01BREAKCASESENDCODEBIFISMOTORRUN1TR11TIMELED1BREAK/设置好定时时间后,定时开启CASESENDCODECIFISMOTORRUN1MOTORSPEEDMOTORSPEEDRUNLOWRUNLARGERUNMIDDLE/判断电机是否为低速档,若不是则为中速当,提速提为高速档P1MOTORSPEED/若是低速档,则提速为中速当SHOWSTATUSMOTORSPEED,TIME,TIMEPOSBREAK/电机提速CASESENDCODEDIFISMOTORRUN1MOTORSPEEDMOTORSPEED20/数据解码标记COMMON_CODE_COUNT0/系统码计算清零BUF_COUNT0/中断计数暂存清0ELSEIFBUF_COUNT40BUF_KEY_CODE|0X80/收到1KEY_BIT_COUNT/数据脉冲累加ELSEIFBUF_COUNT20/收到0KEY_BIT_COUNTELSE/若收完8位数据则做以下处理IR_STATUS0/接收状态返回到空闲KEY_CODEBUF_KEY_CODEKEY_BIT_COUNT0BUF_KEY_CODE0X00BUF_COUNT0TR00ISNEWCODE1/定时器0中断函数VOIDTIME0INTERRUPT1USING1COUNT/定时器1中断函数VOIDTIME1INTERRUPT3USING1TIMECOUNTIFTIME1000/90TIMECOUNTP1STOPMOTORSPEEDRUNLOWISMOTORRUN0TR10TIMELED0TIMECOUNT0TIMEPOS0X46

温馨提示

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

评论

0/150

提交评论