基于单片机的红外通讯软件设计.docx
基于单片机的红外通讯软件设计目要1.课1题的研究意义1 .红2外通信的国内外现状1.3 目前红外通信技术的应用热点1.4 系统设计思路分析1.5 系统设计需解决的难点要点系统方案设计2.系1统功能设计2 .系2统的总体方案设计2.3 系1统的总体设计思路2.4 .统2总体设计流程图2.5 系3统总体结构图2.6 系3统总体结构图2.系3统设计所需用到的主要器件2.系4统设计技巧系统硬件设计3.1主要元器件的简单介绍和选择·3.1单.片1机介绍及选择3.1 红.外2通讯编码解码芯片选择.3.1 红.外3发射头和接收头3.2红外通讯系统电路设计3.2. 最1小系统电路3.3. 按3键输入电路3.4. .外4编码电路及其红外发射.3.5. 载5波信号电路3.6. 解6码电路及其红外接3.7. 7液L晶C显D示电路和电机电路.系统软件设计4 .红1外通讯系统软件设计的编程语言选择5 .2开发环境,即编程软件的选择6 .3软件设计原则4 .系4统软件设计4.4主.程1序功能的设计及其实现.4.4.L2CD1液6晶0显2示器软件设计.4.4矩.阵3键盘行列检测软件设计.4.4模.拟4编码芯片的编码程序设计.4.4.358K载H波z信号调制程序4.4.解6码程序设计4.4发.射7端与接收端的通信协议设计4.4电.机8控制软件设计4.5软件抗干扰技术4.系6统软件设计注意事项调试及其系统误差分析5.软1件编写及调试过程5.调2试过程中遇到的问题及其解决办法.要着科学技术的发展,单片机因其高可靠性和高性价比,在智能化家用电器、仪器仪表等诸多领域内得到了极为广泛的应用。当前单片机对家用电器控制呈现出外型简单化、功能多样化、性能优越化的发展趋向。红外通讯是目前使用较多的一种通讯方法。红外线通讯装置具有体积小、功耗低、功能强、成本低等特点。在家庭生活中,录音机、音响设备、空调彩电都采用了红外通讯系统。本文简述基于单片机的红外通讯设备在现代社会的推广使用情况和发展前景,而系统方面主要基于红外通讯设备的实现原理和单片机原理来设计发射即遥控器和接收端。发射端主要包含按键输入,来控制接收端的电机运转和液晶显示器的显示;并且对可行性进行细致研究,综合功能用途,做出整体设计流程。关键字:红外通讯发射端接收端系统基于单片机的红外通讯软件设计基于单片机的红外通讯软件设计1红外通讯就是通过红外线传输数据,是目前比较常用的一种无线数据传输手段,它具有无污、信息传输稳定、信息传输安全性高以及使用方便等优点。在电脑技术发展早期,数据都是通过线缆传输的,线缆传输连线麻烦,需要特制接口,颇为不便。自红外通讯技术发明以来,去多早期用线缆传输的设备和通讯工具都改为利用外红线来进行通讯,如家电产品、工业控制、娱乐设施等领域。并且经过多年的发展,有了今天以红外通讯为核心技术的蓝牙、红外、802.11等无线数据传输技术1。1.1课题的研究意义信息时代,通信技术的发展总是走在各种技术的最前沿。随着各种手持式信息终端设备在我们的工作中频繁的使用出现,就标志着无线通信的时代已经到来,也意味着无线通信这种比传统的有线通信更加的让人接受。因为它方便,快捷,安全,稳定,所以无线通信的方式更加容易被人们重视,从而催促着各种无线通信技术的研发。红外通信是一种无线的传输方式,正在被日益广泛的应用,大的应用范围从军用,医疗,超市,银行等设备,小的应用则小到家用电器,无一没有涉及到红外通信技术,所以有不断的新的红外通信产品涌进市场,重而也推动了对红外通信技术的研究和发展。红外发射装置电路简单,易于实现,并且对空气污染小。在某些应用场合,比无线电通信具有更好的综合效果。红外无线通信在我国古代已有应用,只是比较简单。在第一次世界大战中德国就研制并运用了红外通信。第二次世界大战中美国、日本、苏联也都是用过红外无线通信。但在这漫长的时间里、由于红外无线通信系统光源均为热辐射源,调制困难,接收器又是光电池,内部噪音很大,影响了通信距离和可靠性,所以发展被怠慢。近年来由于微电子技术发展,发射器件和接受器件已经被半导体器件所代替,又由于它具有无需铺设电路、保密性好、抗干扰能力强、价格低廉、设备简单等优点,再加上近年来各种市场应用设备、家用设备的自动化提高,红外通信又重新被人们重视,从而得到发展。1.2 红外通信的国内外现状红外线是由一位叫WilliamHerschel的天文学家于19世纪发现的,是一种点对点连接的高科技通讯方式,它要求两个通讯端之间的红外发射口对准发射连接,并且不能相隔太远,中间也不能有障碍物,即红外。自1800年发现红外线以来,人们从没停过对它的研究,以至于后人能够利用红外开发出众多应用产品,在安防监控领域,汽车夜视系统,医疗器械行业,家庭电子行业,通讯领域等范围都已经被得到广泛的应用。而随着社会的不断发展,人们的安全防范意识愈来愈强烈,通讯的必要性也越来越突出可见,由于红外线为不可见光,具有很强的隐藏性和保密性,因此红外在安防和通讯领域大展身手,不论国内外,目前正在市场掀起一股”红外潮”。传统的红外通讯应用主要在与家电和汽车防盗遥控器方面,由于调制技术、相关收发器技术的快速发展,红外传输应用也发生了质的飞跃。1993年国际红外线协会在美国成立,积极整合建立红外传输的标准,极大地推动了红外产品的发展。2000年全球已有17亿台配有国际红外线协会模组的电子产品进入市场,尤其在电子游戏机市场有极大的潜力。2001年,在信息收发模组方面,由于国际红外线协会模组的价格已从早期的5美元降至2美元,国际大厂纷纷在亚太地区一些劳动力相对低廉的地方寻求加工场所,估计年产值将有1亿多美元的规模,当时一些IC设计公司、系统与应用软件厂商已积极投入应用产品的研究与生产,目前已经形成一定规模。但人们对她的研究仍然延续,时不时出现的新发明新应用,带给我们惊讶与感叹,人类对这座宝藏的开发还远远不够,红外产业还有广阔的扩张空间2-7。1.3 目前红外通信技术的应用热点红外应用产品种类繁多,但是比较热门的应用的主要是红外热像、红外摄像、红外通讯、红外光谱仪、红外传感器等几个比较大的领域,但是我们做的是红外通讯所以这里只介绍下红外通讯应用。红外通讯传统的红外通讯应用主要在与家电和汽车防盗遥控器方面,由于调制技术、相关收发器技术的快速发展,红外传输应用也发生了质的飞跃。1993年国际红外线协会在美国成立,积极整合建立红外传输的标准,极大地推动了红外产品的发展。1.4 系统设计思路分析系统分为接收端和发射端两部分,接收端采用4*4矩阵键盘用来接受用户的输入(0-9的数字输入,A-F的字母输入),经过放大器放大后再通过载波信号的调制,把编码信号的有用信号传播出去;接收端接收到信号后,经过解码得到发射端用户输入的信号,最后在数码管或者LCD中显示出来。因为本系统的功能都属89C51单片机的应用范畴,所以使用89C51单片机来完成设计。1.5 系统设计需解决的难点要点整个系统设计中有几个部分是难点也是系统正常运行的关键核心。键盘输入设计一个4*4的矩阵键盘来用接受用户的输入,利用8个IO口,在程序中对矩阵键盘进行行列的高低电平的判断,并在程序中对某个按键的按下返回预先设定的数字键或者字母键,从而完成用户的输入。红外发射电路选择基于通用UART红外通信,是因为可以利用通用UART成熟的硬件机制,实现红外数据通信。这种设计模式实际上是红外通信原理与串口通信机制的有机结合。且有实践证明,这种红外通信模式是可行可靠的8。载波信号电路红外线的传播不一定准确而且不一定够远,所以利用89C51单片机定时器产生38KHz的方波输出电路,在编码信号输出端加上一个高频载波信号,通过载波信号的调制,把编码信号的有用信“携带着”传播出去,这样的红外线信号能够传得更远而且也能更有效的避免干扰红外接受器红外接收器部分使用红外专用接收集成电路HS0038来完成红外信号的光电转换及接收。HS0038是塑封一体化红外线接收器,它是一种集红外线接收、放大、整形于一体的集成电路,不需要任何外接元件,就能完成从红外线接收到13基于单片机的红外通讯软件设计输出与TTL电平信号兼容的所有工作,没有红外遥控信号时为高电平,收到红外信号时为低电平,而体积和普通的塑封三极管大小一样,它适合于各种红外线遥控和红外线数据传输。基于单片机的红外通讯软件设计2系统方案设计2.系1统功能设计通用红外遥控系统由发射和接收两大部分组成9。故,系统设计应该分为两部分电路,发射和接收。系统所带功能如下:能通过发射端来控制接收端(用电机模拟的电风扇)进行实时的控制;接收端(电机模拟的电风扇)能够分档次的运行在大、中、小三个档次,并且能够实现定时功能,电风扇的开关。接收端(电机模拟的电风扇)能够在LCD液晶显示器上显示风扇实时运转的转速档次,定时的时间。2.系2统的总体方案设计2.2.系1统的总体设计思路本次的系统设计是采用AT89C51作为发射电路(控制器)和接受电路(电风扇)以及38KHz的红外信号载波调制电路的核心CPU,发射电路可以分为基本电路模块、键盘接受模块、红外发射模块三个模块,接收电路可分为基本电路模块、液晶显示模块、电机电路模块三个模块,单独的红外信号载波电路调制电路8-9。发射电路键盘采用四乘四矩阵键盘电路,通过程序检索用户的输入,返回相应的按键值到程序中;程序使用得到的按键值,得知用户的输入后取得相应程序中预先设定的操作码发送给红外发射器;再通过红外发射器发射出去的信号经过载波电路38KHz方波调制后,由接收端的红外接收器接受到操作码后进行解码操作得操作码从而得知发射端的按键输入,从而改变接收端的电机运转情况和LCD液晶显示情况,达到红外通讯控制的目的。·基本电路模块基本电路分为AT89C51正常运行所需的晶振电路和复位电路,主要由硬件来控制和实现没有采用软件的控制。·键盘接受模块键盘接受模块采用四乘四的外接矩阵键盘,在程序中对矩阵键盘行和列的高低变换来得到用户在键盘的输入情况,需要用到单片机的8个管脚,系统中使用了发射端的P2口的八个管脚,若使用的是P0口的八个管脚则需要外接上拉电阻,阻值大约在5-10K之间。·红外发射模块红外发射模块采用SE303红外发射装置来发送信号,发射的操作码为程序中预先设定。·液晶显示模块液晶显示模块使用LM016L液晶显示器来显示电机的运转情况,如电机的运转的转速档次、电机定时时间。·电机电路模块电机电路模块用一个电机模拟电风扇的运转,电机可以改变转速档次,定时运行,并且在相关的线路上接有LED指示灯,分为别为小档指示灯,中档指示灯,大档指示灯,定时指示灯,停转指示灯,用于提示用户电机的运转状态。2.2. 系2统总体设计流程15基于单片机的红外通讯软件设计2.2.3系统2.3系统设计所需用到的主要器件89C51单片机作为两个电路的核心CPU,用M50462作为红外发射器,HS0038作为红外接收器,LM016L液晶显示器,一个四乘四的矩阵键盘,绿色和红色的LED指示灯,电机。2.4系统设计技巧在系统仿真过程中没有现成的SE303的红外发射器和HS0038红外接收器,所以本系统仿真时采用引用接收端和发射端的各自一个管脚相连通,中间装一个LED指示灯来指示信号的传递;在发射的根据uPD6121的编码发射原理,对发射端的管脚进行,低电平脉宽为0.56ms高电平脉宽为0.56ms组成一个周期为1.12ms的位“0”,而低电平脉宽为0.56ms高电平脉宽为1.685ms组成一个周期为2.24ms的位“1”,发送接收端的管脚。每16位组成一个操作码,在接收端解码操作码得到相应的改变电机运转的动作。1基于单片机的红外通讯软件设计3系统硬件设计基于单片机的红外通讯硬件方面的在本章介绍,根据系统的设计方案和功能要求介绍系统总体的构成和各部分的硬件。系统两大电路模块都采用AT89C51单片机作为核心CPU,键盘部分采四乘四的矩阵键盘;显示部分使用LCD1602液晶显示器;红外发射器使用PH303红外发光二极管;红外遥控编码芯片使用M50462;红外接收器使HS003塑封一体化红外线接收器它,是一种集红外线接收、放大、整形于一体的集成电路;电机采用直流电机。3.1主要元器件的简单介绍和选择·3.1.单1片机介绍及选择单片机是微机控制的典型代表,它在一片硅片上集成了中央处理器、存储器和各种输入输出接口,如I/O口,定时器/计数器接口,外部中断接口,串口,读/写接口等)。这样的芯片因为具有和计算机一样的功能,所以称之为单片微型计算机,简称单片机。而单片机又主要应用于实时控制,并通常作为其他系统的组成部分使用,故又称之为嵌入式控制器。自从20世纪70年代中期美国仙童公司推出第一台F8单片机以来,单片机已经有30多年的发展历史。直至今天,单片的生产厂家和型号已经是各式各样。红外通讯系统的单片机中,采用AT89C51单片机作为中央处理器。89C51单片机带有4K闪烁可编程可擦除只读存储器(FPEROMFalsPhrogrammaanbErasaRbelaOednlMyemor),y128字节内部RAM,32个I/O接口,2个16位定时器/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU工作,但允许RAM、定时/计数器、串行通信口及中断系统继续工作,掉电方式保存RAM的数据,但振荡器停止工作并禁止其它所有部件工作指导下一个硬件复位。3.1.红2外通讯编码解码芯片选择红外通讯电路若要将数据通过红外发射头和红外接收头发送出去,则需要在电路的发射端先进行编码操作编码成操作码,然后通过载波电路将编码后的芯片进行38KHz的调制后,才能更远更安全稳定地发送出去;红外接受电路在接收到信号后,则需要进行解码操作,还原发射端的最原始数据,才能知道发射端是发送一个什么样的请求。由于我个人在用Proteus进行仿真时,并没有编码和解码芯片可以使用,所以程序中我全面模拟了编码和解码芯片的功能;我选定了uPD6121为编码芯片,BC7210为解码芯片;之所以选择这两个芯片分别作为发射端和接收端的编码解码芯片是因为BC7210解码芯片成本低,常见,而且BC7210的输出可以设置为并行输出或者串行输出,串行输出方式兼容SPI和UART两种接口,可以轻松完成与各种MCU、PC机的接口。可以取代SAA3049等芯片;而能够与BC7210解码芯片互相支持的多个芯片中又属Upd6121编码芯片最为合适13。uPD6121编码芯片和BC7210解码芯片如图3-1所示PD6121SOP20KLc-KhQ_aKkO_*-KLc-一REMgVddQSELO-OSCOCOSCI0VssOpG121G601p6121G002123456789KTcCCSK5KIZOo-CKIZOi-ClKI/G2-cKIZO3-CKIZG4-0KIZO5KJKIZO6GNDVCCRESD7DAT)DB(OJCFDS(SS)CME口2EH3KI/07cLMPTrnDD图3-13.1.红3外发射头和接收头红外发射二极管是红外通信系统中用来发射信号的一个非常重要的元件,虽然它看起来比较小,不太显眼,但是没有它,红外通信就只能是一句空话。它是实现红外通信的桥梁,其重要性就好像灯泡在照明系统中的重要性一样,是整个红外通信系统的焦点。选用常用的红外发光二极管SE303,外形类似LED发光二极管,发出红外光(近红外线约0.93m)。管压降约1.4V,工作电流一般小于20mA。为了适应不同的工作电压,回路中常串有限流电阻。SE303实物图如图3-2所示图3-2红外接收器是红外发光二极管的受控装置,其里面有相应的红外光电转换电路。这里我们采用的接收器是一种红外专用接收集成电路HS0038,用它来完成红外信号的光电转换及接收。接收方一般使用HS0038一体化红外线接收器进行接收解码,当HS0038接收到38kHz红外信号时,输出端输出低电平,否则为高电平。所以红外遥控器发送红外信号时,参考上面遥控串行数据编码波形图,在低电平处发送38kHz红外信号,高电平处则不发送红外信号。HS0038实物图如图3-3所示。图3-33.2红外通讯系统电路设计3.2.1 最小系统电路单片机如果要能够正常工作,那么最小系统是必不可少的。而所谓的最小系统,就是单片机的XTAL1,XTAL2两个IO口外接晶振电路,RST口外接复位电路,EA、VCC接5V电源,VSS接地,这样组成的一个小系统成为最小系统。所以,红外通讯系统中的发射端和接收端都需要有如下图所示的基本电路模块:19基于单片机的红外通讯软件设计U1晶振电路模块II-xCRYSTAL<EXT>.C2.33pF-TEr>>TAL1po.oicoFl0.1ACIP0.2AD2XTAL2P0.3AD3PU4妈8P0.5AC6P0.6C6RSTP0.7XD7PND居吕P2.1W3P2.2fA1OPSENP2.3rA11ALEP2.4fA12EAP2.5A13P2.6fA14P2.7,A15P1.0P3.0JRXDP1.1P3.1/TXDPT*P3MT0P+工P3.3MT1P1.4P3.4/T0P1.5-P3EEP1.6P3.6Pl:P37JRDATC51<7EXT>9汽-HitB2XX1£5£_工1O1工l1L3333MMaq-z9一22.2上22.111da,a1图3-4这里值得注意的是:仿真的时候VCC和VSS都默认地接5V电源和接地,所以不需要再添加,但是绘制原理图和制作PCB板时,不能将VCC和VSS遗漏,否则单片机无法正常工作。3.2.按3键输入电路用来接收用户输入的按键模块,采用四乘四矩阵键盘与单片机的P0八个管脚相连,在程序中进行行列检测,从而得出用户对哪个按键进行的单击操作(具体算法实现在第四章软件设计中详解)。这里值得注意的是,使用P0口时,单片机内部是没有接上拉电阻,所以我们需要外部添加上路电阻。按键输入模块电路如下图所示:图3-5基于单片机的红外通讯软件设计3.2.红4外编码电路及其红外发射红外编码电路的编码主要是由用户码和数据码构成,用户码和数据码统称为传送码,通常为8位或16位的“0”“1”码,为了避免出现差错,每次发射的传送码中一般都包含两次编码:一次为原码,一次为反码;或相同的码连续发两次。本系统采用8位的传送码,并且再发送一次反补作为验证。采用uPD6121编码芯片,KL/O0至KL/O7七个管脚接受未编码的原始操作数据;也可以用KI1至KI4四个管脚与KL/O0至O7组成矩阵键盘直接接受输入数据。本系统采用第一种方案。(这里的编码电路没有经过载波就发送,是因为这是单独绘制的编码和红外发射电路,并没有应用到仿真。而本次系统设计仿真中并没有编码芯片,所以在仿真电路中单独绘制解码发射模块,用于学习不参与程序运行。)电路模块电路图如下图所示:1-CCSu,oKU,1KU,2KU,3KL4KL5OSOCKL6SCIKU,7八56_-7-8T.E-图3-63.2.5 载波信号电路在所有的高频通信电路中,载波信号的存在是必不可少的。为使红外信号能够正确的传送出去和传送更长的距离,我们也需要在编码信号输出的同端加上一个高频载波信号。通过这个高频载波信号的调制,把编码信号的有用信息“携带”出去,这样信号的传送距离就能更长,而且能够有效的避免其他信号的干扰,从而提高了信息传送的准确性。本系统采用89C51单片机内部定时器产生38KHz信号的方波,与编码后的传送码结合,调制后传送出去。图中的SendIO用于接收来自用户输入的数据编码后得到的传送码(操作码)。载波信号调制电路如下图所示:图3-71133.2.解6码电路红外接通电,:,T.EXJ>X1CgRYSTAI=VCCRESD7(DAT)D6(CLK)D5(SS)机运转的相关信息,并且控制电机运转。3.2.7 LC液D晶显示电路和电机电路根据解码后得到的用户原始输入数据,通过程序控制液晶显示器的显示,和电机的运转。液晶显示器使用LCD1602。RS,RW,E三个控制端口分别接单片机P0基于单片机的红外通讯软件设计口的P0.5,P0.6,P0.7,外接上路电阻,而数据传输端口接单片机的P2口,因为内部已经有上路电阻,所以不再需要外部接上拉电阻。这里电机采用直流电机,而控制直流电机的转速主要是通过控制其电压实现,所以电路中用三个2N3055三极管,三个三极管的基极分别接单片机的P11,P12,P13三个管脚,集电极接不同大小的电阻再接电源,然后通过程序来控制使用不同的三极管,从而控制不同的直流电机电压,达到改变转速的效果。液晶显示模块电路和电机电路分别如图3-9所示图3-911总体发射端综合仿真电路图发射模块综合电路赶升发*HS号海示il."子手一号亘工寻手H."F÷I耳三i t7三T工二 “二;一甘.IB'÷I基于单片机的红外通讯软件设计总体接收端综合仿真电路图系统软件设计4.红1外通讯系统软件设计的编程语言选择现在程序编程语言很多如C语言,C+语言,汇编语言,机器语言等,这些语言主要都应用于嵌入式开发之中,但由于机器语言的难以阅读,所以现在已经基本不再使用。而在单片机应用系统开发过程中,程序设计有两种方法:一种是基于汇编语言的程序设计方法,另一种是基于C语言的程序设计方法。汇编语言的机器代码生成效率高但可读性不强,而C语言在大多数情况下,其机器代码生成效率和汇编语言相当,而可读性和可移植性却远远超过汇编语言。此外,由于C语言有很好的层次结构,使其编写的程序更容易阅读和维护。且C编写的程序比汇编更符合人们的思考习惯,开发者能更专心的考虑程序设计而不是考虑些细节问题,这样就减少了开发和调试的时间1。0选用C语言设计程序具有一些特点1:4C语言代码简洁易读,使用灵活方便,装性好,代码重用性高。C语言具有函数,相对于汇编语言来说,代码的封装性远远高于汇编语言,代码的重用性高,并且具有一定的模块化。并且表达能力强,丰富的数据结构类型,用户根据需要,采用多种数据类型来控制各种复杂的数据;C语言还有多种运算符,用户可以灵活地进行简单或者复杂的算术运算,表达方式也很灵活。而且C语言是一种结构化程序设计语言。这一点很适合单片机的设计,C语言以函数作为程序设计的基本单位,C语言程序中的函数相当于一般语言中的子程序。还有很关键的一点是C语言拥有指针,直接操作计算机硬件。C语言具有直接访问机器物理地址的能力,Ke的ilC51编译器和Fran的kCl5i1编n译器都可以直接对单片机的内部特殊功能寄存器和I/端O口进行操作,可以直接访问片内或片尾存储器,还可以进行各种位操作。2开发环境,即编程软件的选择本次红外通讯系统的程序编写的开发环境,选择使用KeuiVlers。i它o是美国KeSiolft公w司a出r品e的主要用于51系列单片机主要用于C语言软件程序开发工具。Ke还il提供了包括C语言编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等完全的开发方案。在KeuiVlers上i编o写n的3C语言程序可以直接生成一个.HE文X件在Prot中e直u接s将HEX文件调入到单片机中便可直接运行程序,方便程序在单片机环境下的运行和调试。而使用C编译器在产生代码的准确性和效率方面达到了较高的水平,而且可以附加灵活地控制选项,在开发大型项目时非常理想,是目前应用最广泛的单片机开发环境之一1。5所以,如果是用C语言编写单片机程序没那么Ke几i乎l就是第一选择。4.3 软件设计原则设计之前应该先了解软件设计的原则。· 软件要有一定的可靠性,软件系统规模越大越复杂,可知这时候软件的可靠性就越来越难保证。软件的可靠性意味着该软件在测试运行过程中避免可能发生故障的能力,且一旦发生故障后,具有解脱和排除故障的能力。软件可靠性和硬件可靠性本质区别在于:后者为物理机理的衰变和老化所致,而前者是由于设计和实现的错误所致。在进行软件设计之前的软件的可靠性必须在设计阶段就确定,在生产和测试阶段再考虑就困难了。· 软件需要有健壮性,又称为鲁棒性,是指软件对于规范要求以外的输入能够判断出这个输入不符合规范要求,并能有合理的处理方式。但是它的健壮性是一个较模糊的概念,但是却是非常重要的软件外部量度标准。软件设计的健壮与否直接反应了分析设计和编码人员的水平· 软件的可修改性,在软件编写完成后,可能在后续部分根据用户的需求反应,或者其他原因,可能需要修改软件。这时候,就要求软件开发人员在软件开发时要编写完整的文档和良好的结构,如模块化。· 软件编写要容易理解,这个其实和可修改性是相关联的。拥有良好的结构、明朗的注释,便于修改时候的阅读。基于单片机的红外通讯软件设计·软件要有可测试性,就是设计一个适当的数据集合,用来测试所建立的系统,并保证系统得到全面的检验。·软件有效率性,效率性是指软件在编写的时候应该注意运行时,尽可能得少用计算机内存,并且采用最优的算法来处理数据结构,让软件在计算机中运行时所占用的内存达到最低,这点很考研开发人员的水平。·软件标准化原则,软件编写要基于业界的一些规范、协议、接口、命名规则。·软件要有先进些和可扩展性,软件要能满足客户的要求,并且做好模块化,便于日后对软件的升级。4.4 系统软件设计4.4.1 主程序功能的设计及其实现系统功能的要求决定了系统软件设计的方向,本次系统程序设计流程图如图4-1所示。红外通讯的数据发送是通过区别脉冲的低电平宽度来区分位0和位1,位0和位1的高电平均为0.56ms,而低电平位0为0.56ms,位1为1.685ms。对于发射端程序,运行后先初始化定时器0用于后面程序编码,然后开始进行对矩阵键盘的行和列进行检测,等待用户的输入;若有用户输入,程序先判定用户输入的按键,然后用将指定的按键数字送入Transmit()编码函数中进行编码。根据发射端和接收端的通信协议(在“CommunicationProtocol.h”头文件中)在Transmit()编码函数中发送按键数值指定的数据码,依次先发送一次起始码(9ms高电平,4.5ms低电平),然后发送两次系统识别码(0x55与0xAA),一次数据码码一次数据码的反码,最后再发送一次结束码(9ms高电平,4.5ms低电平,22.5ms高电平),这样一套顺序组成一个完整操作码,完全模拟编码芯片。接收端程序启动后,先对LCD液晶显示器,定时器0,定时器1,外部中断1。显示器显示电机初始状态,主程序开始停留在while(IsNewCode)的循环等待新的发射端用户输入。定时器0开始计数50us中断一次,定时器0的中断函数time0内部对Count进行计数。外部中断接受到下降沿的脉冲后将会进入外部中断函数recive,获取Count的计数,根据Count的次数来计算接受到的脉冲的宽度,如果脉冲的宽度不是合法的信号,那么就去除。如果脉冲的宽度是合法的信号宽度即,20<Count<300。然后再进行判断,是否为起始码,如果是则Count的次数应该为250<Count>300因为9ms+4.5ms=13.5ms即,13500/50=275,这时候接受状态ir_status=1,表示已经接受过起始码,那么接下来接受的应该是系统识别码。同起始码一样,判断16位的数据是否接受完毕,如果完毕则common_code_count为大于等于15,ir_status为2表示系统码也已经接受完毕,接下来便开始接受操作码(数据码)。根据位0和位1的脉冲宽度可知,如果40<Count<50则说明接收到一个1,20<Count<30则说明接收到一个0。每接收一位,key_bit_count就累加一次,加到8位后,IsNewCode=1,程序接下去运行,根据不同的操作码做出不同的电机操作和不同的显示器电机状态显示。然后IsNewCode=0,继续回到等待发射端用户的操作。发射端和接收端的通信协议如下:按键值用于通信的操作码值按键值用于通信的操作码值10X6100X6020X62AA(自动转换成二进制)30X63BB40X64CC50X65DD60X66EE70X67FF80X6890X69按键功能简介如下:按键值功能按键值功能0-9定时数字输入(秒为单位)A(ON/C)启动电机B(=)定时开启C(+)增档D(-)减档F(÷)停止电机119基于单片机的红外通讯软件设计程序流程图如下:基于单片机的红外通讯软件设计121L.CD21602液晶显示器软件设计串行数据传送和并行数据传送。本次设计采用并行数据传送方式。8位并行数据传送时序下图如所示:单片机写数据到LCD1602显示器的时序图单片机从LCD1602读数据时序图RS为并行的指令/数据选择信号,RS=0表示并行指令选择信号,RS=1表示并行数据选择信号;E为LCD1602的使能信号,由时序图可知,使能信号为高电有效;R/W为并行的读写选择信号,逻辑“1”表示读,逻辑“0”表示写。程序中WriteInstruction(uChardictate)用于写指令到显示器中,形参表示要写入的指令;WriteData(uChardat)用于写数据到显示器中,形参dat为要写入要显示器的数据。而不管是写指令还是写数据,都应该注意LCD1602的延时时序,由于E为高脉冲的时候写数据和写指令,所以程序中在E为高脉冲后使用延时函数DelayNMS(1)让其符合LCD1602的延时时序,让指令和数据准确读入到显示器中。LCD1602液晶显示器内部控制指令如下表所示:序号指令KSR制DT映D5D4D3DDlDQ1清显示000:000:0012光标返回0.0OO.01*&置输总嗔式0Q"0OO"01I/D4显京开/关控制000-0统01DCB5光标或字符移位0001CR/L*:花6置功能0QQ1DLNF*7置字符发生存贮器地址0001字符发生存贮W岩地址.8置数据存贮器地址001显示数据存贮器地址3读忙标志或地址01BF计数器地址10写数到CGRAM或DDRMO10要与的数据内容11从CGRMl或DDM读数11豆出的数据内容在写数据之前,应该先指定数据在显示器中的显示地址;程序中用,WriteAddress(uCharx)来指定数据在显示器中的显示位置,参数x为显示字符地址参数,具体的地址映射表如下:(国H标码)。具体字型:将两字节编码写入DDRAMK,范围为A1A0的中文字型编码可参见SG20B中文字型码表。4.4.矩3阵键盘行列检测软件设计发射端的单片机P0口外接一个四行四列的矩阵键盘,由于使用的是P0口所以应该在外部接上拉电阻,才能使P0口正常使用。四乘四矩阵键盘在仿真使用的是KEY-PAD仿真元件,其内部的各按键之间的接线大致如下图所示,C1至C4基于单片机的红外通讯软件设计分别接P0至P3,R1至R4分别接P4至P7。CI程序中的键盘行列检测主要由函数KeyCheck()和KeyValTranslate()函数来实现,在主程序中对KeyCheck()函数不断的循环检测是否有新的按键输入。KeyCheck()函数的开始时,先将P0口的低四位至高电平,高四位至低电平,即P0=0XF0;如果有键按下,根据则根据图中可知,不可能为原本的低四位高电平,高四位低电平,则P0!=0XF0;然后再接下来分别判断,是哪一行,如果是第一行则P0为0XFE,第二行P0为0XFD,第三行P0为0XFB,第四行P0为0XF7,程序中为每一行的判断设置一个if判断语句,若如何判断则说明是该行,进入该行的if语句。得知哪一行后,这时候,通过表达式P0&0XF0得到列的状态值,再将该值加上行值,如是第一行则加上该值加上0X0E,便可得到行和列的值。得到行和列的值后,将值返回给KeyValTranslate()的switch语句中,根据先前设定的矩阵键盘位置值,然后相应的按键值后,完成键盘的行列检测。4.4.4模拟编码芯片的编码程序设计这里编码程序模拟的是uPD6121编码芯片。uPD6121芯片的工作原理和M50462、PT6221类似,都是通过编码后的串行数据对3840kHz的方波进行脉冲宽度调制。编码主要是由用户码和数据码构成,通常还包括引导脉冲,引导脉冲总是出现在编码脉冲的前头,作为遥控接收的启动信号;CPU只有在接收到引导脉冲之后,才可以对接收到的数据进行解码,以防止接收到不完整的发射信号。用户码和数据码统称为传送码,通常为8位或16位的“0”“1”码,为了避免出现差错,每次发射的传送码中一般都包含两次编码:一次为原码,一次为反码;或相同的码连续发两次。程序中,采用的是模拟发送一次原码后再发送一次反码的形式。uPD6121的位”0”组