【基于Java的串口通信设计17000字(论文)】_第1页
【基于Java的串口通信设计17000字(论文)】_第2页
【基于Java的串口通信设计17000字(论文)】_第3页
【基于Java的串口通信设计17000字(论文)】_第4页
【基于Java的串口通信设计17000字(论文)】_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

基于Java的串口通信设计摘要随着计算机技术和通信技术的不断发展与融合,一方面,计算机与其它终端设备的性能不断提高,处理数据的速度不断增大;另一方面,计算机和其它终端设备之间的通信速度要求越来越高,调制解调器处理信号的速度也越来越快。连接终端与调制解调器进行串并数据格式转换和信号控制的电路是串口通信接口电路。对于普通的串口通信电路,当由于缓存数据的容量较小,就会导致在高速的通信系统下,接口电路频繁向终端发送中断请求,这样就会降低终端设备处理器的工作效率,同时也降低整个通信系统的速度,不利于实现高速的通信。本论文所涉及的实验,改进了传统的串口通信电路缓存容量小的缺点。结合自动进样检测系统的开发实践,研究了一种基于Java串口通信的检测系统的设计和实现方法,并对系统的结构设计及系统实现中Java串口通信做了介绍。在计算机或终端设备与接口电路之间加入FIFO(先入先出)存储器,用来缓存要存储的数据。由于基于Java的逻辑器件设计的电路具有低功耗,高性能,设计方便,可扩展,可重复等优点,本实验对整个电路的设计都采用Java可编程的方式。分别基于Java设计异步高速FIFO存储器,串口通信接收与发送电路的各个模块。再对整个电路进行综合与仿真,得到了较为理想的结果。关键词:Java;串口通信设计;存储器;接口目录3257第一章绪论 1308051.1研究背景及研究意义 123441.2国内外研究现状 229201.3论文主要内容 36001第二章论文采用的主要相关技术和理论 5266652.1Zigbee技术 5204702.1.1技术说明 585412.1.2技术特点 537572.1.3应用实例 6282542.2USB技术 7132762.2.1USB技术发展历史 7254442.2.2软件结构 930012.2.3硬件结构 1023382.2.4数据传输 1071972.3密钥协商和加密算法 11138822.3.1密钥协商 11206442.3.2加密算法 11249152.4已有方案分析 132402.4.1方案一 1363552.4.2方案二 13271142.4.3方案比较 1330100第三章系统总体设计 15149073.1系统的需求分析 15184393.2总体框架 1549433.2.1上位机程序 15316483.2.2下位机硬件结构 16111663.3详细方案设计 17190803.3.1硬件方案设计 17256143.3.2下位机软件方案设计 20276143.3.3上位机软件方案设计 21291073.4方案实现及验证 21309993.4.1安装NetBeansIDE环境 2115873.4.2安装RXTX串口包 22274463.4.3编写上位机程序 23298443.4.4安装IAR环境 27222633.5系统运行结果 3432070第四章总结与展望 38926参考文献 40第一章绪论1.1研究背景及研究意义自上个世纪四十年代第一台计算机问世以来,计算机便以惊人的速度发展着,而且渗透到各行各业中,从各个角度影响着人们的生活。工业控制作为人们工业生产的重要组成部分,计算机的应用自然也十分广泛。然而,由于工业现场面临的情况越来越多样化、复杂化,人们需要一种可以界面更加自由、友好的软件以应对复杂多样的工业现场。组态软件便应运而生[1-3]。组态软件是伴随着DCS(DistributedControlSystem,集散控制系统)[4]的出现走进工业自动化应用领域的,并逐渐发展成为第三方独立的自动化应用软件,尤其是Windows操作系统的广泛应用,有力地推动了基于个人计算机的组态软件的发展和普及[5,6]。目前,大量的工业过程控制系统采用上位计算机加可编程程序控制器(SCADA-PLC)[7]的方案以实现分散控制和集中管理。其中,安装了组态软件的上位计算机主要完成数据通信、网络管理、人机交互和数据处理的功能;数据采集和设备的控制一般有Java等完成。Java是计算机发展到一定程度的产物,是一种专门应用在工业控制中的计算机。自从上个世纪70年代第一代Java在德国诞生以来,由于其灵活的构成、很强的可扩展性、以及简单方便的使用方法,使得Java在工业控制中的应用迅速的广泛起来。串口通信是一种简便的信号传输方式,普遍使用于PC机和很多工业设备当中,其简单的远距离传输使得其在工业生产当中的应用有很大优势。使用串口通信来做组态软件的通信基础,用于上位机和下位机之间的通信是十分合适的[8]。目前,大部分用于工业自动化控制的下位机设备都可以使用串口通信这样一种简单稳定的通信方式,设计一种基于串口通信的组态软件可以应用广泛且设计简单,既提高了效率,又降低了成本。目前市面上其他的组态软件如组态王KingView,WinCC等,已经十分普及,但是普遍成本过高,且不能针对目标客户定制,但这恰是本产品的优势之一。在过程控制的实时检测和监控系统中,温度的采集是很普遍的。快速可靠的采集到工业现场中的高精度温度数据可以为过程控制系统提供可靠的依据。而传统的测温方法多以热电阻和热电偶等为温度敏感元件,但这些温度传感器构成的测温系统必须经过A/D转换环节获得数字信号后才能与Java等微处理器接口,使得硬件电路结构复杂,制作成本较高。而用美国DALLAS公司生产的DS18B20数字温度传感器集温度测量和A/D转换于一体,直接输出数字量,硬件电路结构简单,与Java接口几乎不需要外围元件。广泛使用于距离远、节点分布多的场合,具有较强的推广应用价值。本次设计的目的就是以数字传感器DS18B20作为前端,采集温度经过单片机处理后,通过LCD1602液晶显示器将温度显示出来,且采用串口通信,把温度显示在VB边界的PC机界面上,实现与PC机的通信。新型数字化、网络化传感器在工程中的应用具有极其重要的意义,这类传感器是各种参量送入计算机系统,进行智能监测、控制的最前端。随着科技的发展,数字化、网络化传感器应用日益广泛,以其传统方式不可比拟的优势渐渐成为技术的趋势和主流。1.2国内外研究现状在数字通信应用领域,RS-232、I2C和SPI是三种常用的串口通信总线接口。作为其中一种串行数据传输的通信标准,RS-232串行接口是1969年由美国EIA与BELL公司、Modem厂家及相关的计算机终端生产商联合制定的一种典型的通信接口,它被广泛应用于监视系统和控制系统设备中。它的使用非常方便,接口的设备驱动程序由操作系统提供,只需在程序设计中将传输数据位、奇偶检验位、停止位、传输波特率通过相关系统函数的调用就可以实现RS-232与外围设备的通信。飞利浦和摩托罗拉两家公司出于不同背景和市场需求制定的另外两种标准通信协议I²C和SPI应用也比较普遍。这两个协议都非常适合集成电路,用于板载外设近距离之间的通信。Philips实验室为了尽可能的满足节省微控制器的引脚和和逻辑芯片、使PCB板更简单、降低成本的要求,于1982年研发出了一种I2C通信总线,只需两根线就可实现自身设备与外围设备的连接和通信,其初衷是为了提供一种简便的方式将电视机内的CPU和外围芯片互联起来。现在I2C总线根据传输速度划分共分为标准、快速和高速三种模式。标准模式的I2C总线出现于20世纪80年代,当时它7位地址编码,规定的最高传输速率为100kb/s。由于现代设备在功能和性能上的要求越来越高,I2C总线为了满足现代设备的需求,它的地址位和速率的相关规范被不断升级,现在已有10位寻址模式,根据模式不同位速率可达400kb/s和3.4Mb/s(薛长斌,2010)。SPI总线是一种微控制器四线型的外部环形结构总线。1979年由摩托罗拉公司开发,并且将它集成在了他们公司第一支改自68000微处理器的微控制器芯片上。区别于I2C总线的标准规定不同,SPI总线只是作为一种事实上的标准,抽象的描述设备间交互的实现,芯片制造者和相关驱动开发人员通过datasheets和applicationnotes沟通实现上的细节。SPI总线接口传输数据的速率大小与所选取的SPI硬件紧密相关,例如Xicor公司生产的SPI串行器件传输速率能够达到5Mbit/s(张文超等,2005;Agaretal.,2014)。利用创新USB系统实现通用的数据传输接口技术,在国内尚无先例,但国际上对于通用USB的探索却没有停止,只要抓住这一契机,利用FPGA设计创新USB系统,克服目前数据传输所存在的速率受限、帧长受限、同步复杂的缺点,避免不同数据格式间的转换,最终实现真正意义上的通用的串行总线。目前USB芯片技术受国外控制,国内使用没有自己的知识产权,需要额外付费,增加应用芯片成本。研制创新USB可获得自主知识产权,对推动我国在该领域的技术发展具有积极的意义。在农业生产过程中,为了提高农业生产的技术含量,提高生产管理的现代化水平,有许多来自温室的实时数据(如温度、湿度、CO2、光照等)需要采集、记录、处理及显示以便及时掌握动植物生长环境。随着电子技术水平的不断提高,温室控制不断向智能化方向发展。串口通信线路简单,应用灵活,方便、可靠,占用系统资源少,所以在温室智能控制系统(GICS)中与下位机的通信方式选择了RS232串口通信,结合数据库的数据维护及统计等优点,根据实时数据库和专家数据库来反馈控制温室环境,有利于动植物科学生长,促进农业增产增收。最早的温度计是在1593年由意大利科学家伽利略(1564~1642)发明的。后来又相继出现华氏温度计、列式温度计、摄氏温度计,均用水银和酒精等制作,现在英、美国家多用华氏温度计,德国多用列氏温度计,而世界科技界和工农业生产中,以及我国、法国等大多数国家则多用摄氏温度计。随着科学技术的发展和现代工业技术的需要,测温技术也在不断地改进和提高。由于测温范围变得越来越广,根据不同的要求,又制造出不同的测温仪器:气体温度计、电阻温度计、温差电偶温度计、高温温度计等。而本设计研究的是数字温度计,它是通过一定的电路和温度传感器进行测控,将温度用数字准确的显示出来。数据显示比较直观而且测量精度也比较高,范围也比较大。Java程序语言具有面向对象、平台无关、开放性、安全等特性,是一种理想的的编程语言。应用JavaCommunicationAPI简化了串口通信程序的开发。多线程技术能很好地解决各种逻辑并发性和物理并行性问题,改善系统的各项性能。本文结合多线程技术及数据库技术开发出了基于Java串口通信的数据采控系统。1.3论文主要内容论文共分为五章,主要研究内容及章节安排如下:第一章对Java技术测温系统做了概览介绍,讨论了课题研究的意义,国内外研究的动态。第二章首先简述了论文应用到的相关理论,介绍了系统的设计方案,接着对系统的硬件进行选型。第三章首先介绍了系统的结构框图,接着详细地介绍了系统的硬件设计,最后给出了系统连接图,并分析了系统的工作原理。第四章在软件方面对整体和各模块的程序进行了设计。第五章总结了本文的设计特点和创新点,并指出了今后待研究的问题。第二章论文采用的主要相关技术和理论2.1串口通信技术串口是计算机上一种非常通用设备通信的协议。大多数计算机包含两个基于RS232的串口。串口同时也是仪器仪表设备通用的通信协议;很多GPIB兼容的设备也带有RS-232口。同时,串口通信协议也可以用于获取远程采集设备的数据。串行接口是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接受的串行数据流转换为并行的数据字符供给CPU的器件。一般完成这种功能的电路,我们称为串行接口电路。2.1.1基本原理串口通信(SerialCommunications)的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。比如IEEE488定义并行通行状态时,规定设备线总长不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。典型地,串口用于ASCII码字符的传输。通信使用3根线完成,分别是地线、发送、接收。由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。其他线用于握手,但不是必须的。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通信的端口,这些参数必须匹配。a,波特率:这是一个衡量符号传输速率的参数。指的是信号被调制以后在单位时间内的变化,即单位时间内载波参数变化的次数,如每秒钟传送240个字符,而每个字符格式包含10位(1个起始位,1个停止位,8个数据位),这时的波特率为240Bd,比特率为10位*240个/秒=2400bps。一般调制速率大于波特率,比如曼彻斯特编码)。通常电话线的波特率为14400,28800和36600。波特率可以远远大于这些值,但是波特率和距离成反比。高波特率常常用于放置的很近的仪器间的通信,典型的例子就是GPIB设备的通信。b,数据位:这是衡量通信中实际数据位的参数。当计算机发送一个信息包,实际的数据往往不会是8位的,标准的值是6、7和8位。如何设置取决于你想传送的信息。比如,标准的ASCII码是0~127(7位)。扩展的ASCII码是0~255(8位)。如果数据使用简单的文本(标准ASCII码),那么每个数据包使用7位数据。每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。由于实际数据位取决于通信协议的选取,术语"包"指任何通信的情况。c,停止位:用于表示单个包的最后一位。典型的值为1,1.5和2位。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。d,奇偶校验位:在串口通信中一种简单的检错方式。有四种检错方式:偶、奇、高和低。当然没有校验位也是可以的。对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。例如,如果数据是011,那么对于偶校验,校验位为0,保证逻辑高的位数是偶数个。如果是奇校验,校验位为1,这样就有3个逻辑高位。高位和低位不真正的检查数据,简单置位逻辑高或者逻辑低校验。这样使得接收设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和接收数据是否不同步。图2.1串行通信2.1.2结构特点串口通信是指外设和计算机间,通过数据信号线、地线、控制线等,按位进行传输数据的一种通讯方式。这种通信方式使用的数据线少,在远距离通信中可以节约通信成本,但其传输速度比并行传输低。串口是计算机上一种非常通用的设备通信协议。大多数计算机(不包括笔记本电脑)包含两个基于RS-232的串口。串口同时也是仪器仪表设备通用的通信协议;很多GPIB兼容的设备也带有RS-232口。同时,串口通信协议也可以用于获取远程采集设备的数据。RS-232(ANSI/EIA-232标准)是IBM-PC及其兼容机上的串行连接标准。可用于许多用途,比如连接鼠标、打印机或者Modem,同时也可以接工业仪器仪表。用于驱动和连线的改进,实际应用中RS-232的传输长度或者速度常常超过标准的值。RS-232只限于PC串口和设备间点对点的通信。RS-232串口通信最远距离是50英尺。图2.2串口通信程序框图2.2USB技术USB,是英文Universal

Serial

Bus(通用串行总线)的缩写,是一个外部总线标准,用于规范电脑与外部设备的连接和通讯。是应用在PC领域的接口技术。USB接口支持设备的即插即用和热插拔功能。USB是在1994年底由英特尔、康柏、IBM、Microsoft等多家公司联合提出的。下一代USB接口将会有改动方向,下一代的Type-C

USB接口,可支持正反两面插,并且传输数据信号强,但目前(2014年)生产商有限。截至2015年12月26日,国内众多厂商已经大规模在自己生产的手机设备商使用基于该标准的数据线。2.2.1USB技术发展历史从1994年11月11日发表了USBV0.7版本以后,USB版本经历了多年的发展,已经发展为3.1版本,成为二十一世纪电脑中的标准扩展接口。当前(2016年)主板中主要是采用USB2.0和USB3.0接口,各USB版本间能很好的兼容。USB用一个4针(USB3.0标准为9针)插头作为标准插头,采用菊花链形式可以把所有的外设连接起来,最多可以连接127个外部设备,并且不会损失带宽。USB需要主机硬件、操作系统和外设三个方面的支持才能工作。二十一世纪的主板一般都采用支持USB功能的控制芯片组,主板上也安装有USB接口插座,而且除了背板的插座之外,主板上还预留有USB插针,可以通过连线接到机箱前面作为前置USB接口以方便使用(注意,在接线时要仔细阅读主板说明书并按图连接,千万不可接错而使设备损坏)。而且USB接口还可以通过专门的USB连机线实现双机互连,并可以通过Hub扩展出更多的接口。USB具有传输速度快,使用方便,支持热插拔,连接灵活,独立供电等优点,可以连接鼠标、键盘、打印机、扫描仪、摄像头、充电器、闪存盘、MP3机、手机、数码相机、移动硬盘、外置光驱/软驱、USB网卡、ADSLModem、CableModem等,几乎所有的外部设备。理论上USB接口可用于连接多达127个外设,如鼠标、调制解调器和键盘等。USB自从1996年推出后,已成功替代串口和并口,并成为二十一世纪个人电脑和大量智能设备的必配的接口之一。表2.1USB发展历史USB版本理论最大传输速率速率称号最大输出电流推出时间USB1.01.5Mbps(192KB/s)低速(Low-Speed)5V/500mA1996年1月USB1.112Mbps(1.5MB/s)全速(Full-Speed)5V/500mA1998年9月USB2.0480Mbps(60MB/s)高速(High-Speed)5V/500mA2000年4月USB3.05Gbps(500MB/s)超高速(Super-Speed)5V/900mA2008年11月/2013年12月USB3.1Gen210Gbps(1280MB/s)[1]超高速+(Super-speed+)20V/5A2013年12月图2.1USB数据线2.2.2软件结构每个USB只有一个主机,它包括以下几层:总线接口USB总线接口处理电气层与协议层的互连。从互连的角度来看,相似的总线接口由设备及主机同时给出,例如串行接口机(SIE)。USB总线接口由主控制器实现。USB系统用主控制器管理主机与USB设备间的数据传输。它与主控制器间的接口依赖于主控制器的硬件定义。同时,USB系统也负责管理USB资源,例如带宽和总线能量,这使客户访问USB成为可能。USB系统还有三个基本组件:主控制器驱动程序(HCD)这可把不同主控制器设备映射到USB系统中。HCD与USB之间的接口叫HCDI,特定的HCDI由支持不同主控制器的操作系统定义,通用主控制器驱动器(UHCD)处于软结构的最底层,由它来管理和控制主控制器。UHCD实现了与USB主控制器通信和控制USB主控制器,并且它对系统软件的其他部分是隐蔽的。系统软件中的最高层通过UHCD的软件接口与主控制器通信。USB驱动程序(USBD)它在UHCD驱动器之上,它提供驱动器级的接口,满足现有设备驱动器设计的要求。USBD以I/O请求包(IRPs)的形式提供数据传输架构,它由通过特定管道(Pipe)传输数据的需求组成。此外,USBD使客户端出现设备的一个抽象,以便于抽象和管理。作为抽象的一部分,USBD拥有缺省的管道。通过它可以访问所有的USB设备以进行标准的USB控制。该缺省管道描述了一条USBD和USB设备间通信的逻辑通道。主机软件在某些操作系统中,没有提供USB系统软件。这些软件本来是用于向设备驱动程序提供配置信息和装载结构的。在这些操作系统中,设备驱动程序将应用提供的接口而不是直接访问USBDI(USB驱动程序接口)结构。USB客户软件它是位于软件结构的最高层,负责处理特定USB设备驱动器。客户程序层描述所有直接作用于设备的软件入口。当设备被系统检测到后,这些客户程序将直接作用于外围硬件。这个共享的特性将USB系统软件置于客户和它的设备之间,这就要根据USBD在客户端形成的设备映像由客户程序对它进行处理。主机各层有以下功能:检测连接和移去的USB设备。管理主机和USB设备间的数据流。连接USB状态和活动统计。控制主控制器和USB设备间的电气接口,包括限量能量供应。HCD提供了主控制器的抽象和通过USB传输的数据的主控制器视角的一个抽象。USBD提供了USB设备的抽象和USBD客户与USB功能间数据传输的一个抽象。USB系统促进客户和功能间的数据传输,并作为USB设备的规范接口的一个控制点。USB系统提供缓冲区管理能力并允许数据传输同步于客户和功能的需求。2.2.3硬件结构USB采用四线电缆,其中两根是用来传送数据的串行通道,另两根为下游(Downstream)设备提供电源,对于任何已经成功连接且相互识别的外设,将以双方设备均能够支持的最高速率传输数据。USB总线会根据外设情况在所兼容的传输模式中自动地由高速向低速动态转换且匹配锁定在合适的速率。USB是基于令牌的总线。类似于令牌环网络或FDDI基于令牌的总线。USB主控制器广播令牌,总线上设备检测令牌中的地址是否与自身相符,通过接收或发送数据给主机来响应。USB通过支持悬挂/恢复操作来管理USB总线电源。USB系统采用级联星型拓扑,该拓扑由三个基本部分组成:主机(Host),集线器(Hub)和功能设备。主机,也称为根,根结或根Hub,它做在主板上或作为适配卡安装在计算机上,主机包含有主控制器和根集线器(RootHub),控制着USB总线上的数据和控制信息的流动,每个USB系统只能有一个根集线器,它连接在主控制器上,一台计算机可能有多个根集线器。集线器是USB结构中的特定成分,它提供叫做端口(Port)的点将设备连接到USB总线上,同时检测连接在总线上的设备,并为这些设备提供电源管理,负责总线的故障检测和恢复。集线可为总线提供能源,亦可为自身提供能源(从外部得到电源)。功能设备通过端口与总线连接。USB同时可做Hub使用。2.2.4数据传输主控制器负责主机和USB设备间数据流的传输。这些传输数据被当作连续的比特流。每个设备提供了一个或多个可以与客户程序通信的接口,每个接口由0个或多个管道组成,它们分别独立地在客户程序和设备的特定终端间传输数据。USBD为主机软件的现实需求建立了接口和管道,当提出配置请求时,主控制器根据主机软件提供的参数提供服务。USB支持四种基本的数据传输模式:控制传输,等时传输,中断传输及数据块传输。每种传输模式应用到具有相同名字的终端,则具有不同的性质。控制传输类型支持外设与主机之间的控制,状态,配置等信息的传输,为外设与主机之间提供一个控制通道。每种外设都支持控制传输类型,这样主机与外设之间就可以传送配置和命令/状态信息。等时(lsochronous)传输类型(或称同步传输)支持有周期性,有限的时延和带宽且数据传输速率不变的外设与主机间的数据传输。该类型无差错校验,故不能保证正确的数据传输,支持像计算机-电话集成系统(CTI)和音频系统与主机的数据传输。中断传输类型支持像游戏手柄,鼠标和键盘等输入设备,这些设备与主机间数据传输量小,无周期性,但对响应时间敏感,要求马上响应。数据块(Bulk)传输类型支持打印机,扫描仪,数码相机等外设,这些外设与主机间传输的数据量大,USB在满足带宽的情况下才进行该类型的数据传输。USB采用分块带宽分配方案,若外设超过当前带宽分配或潜在的要求,则不能进入该设备。同步和中断传输类型的终端保留带宽,并保证数据按一定的速率传送。集中和控制终端按可用的最佳带宽来传输传输数据。2.3密钥协商和加密算法2.3.1密钥协商密钥协商:两个或多个实体协商,共同建立会话密钥,任何一个参与者均对结果产生影响,不需要任何可信的第三方(TTP)。密钥协商协议:会话密钥由每个协议参与者分别产生的参数通过一定的计算得出。常见的密钥协商协议,如IKE。密钥协商协议的生成方式:可分为证书型和无证书型。证书型是指在会话密钥的产生过程中,由一个可信的证书中心(CA)给参与密钥协商的各方各分发一个证书,此证书中含有此方的公钥,ID及其他信息。证书型密钥协商协议的优点是提供认证,目前PKI(公钥密码体制)广泛部署,比较成熟,应用面广,且由PKG管理公私钥对有利于统一管理,缺点是计算代价大,需要一个可信的CA,同时证书还需要维护。无证书型是指各方在进行会话密钥的协商过程中不需要证书的参与,这是目前密钥协商协议的主流种类,优点是不需要CA的参与,减少了计算量,尤其是在低耗环境下应用的更多,同时安全性也不比证书型弱。几乎没有明显的缺点,只是设计一个安全的更加低耗的无证书密钥协商方案不是很容易。2.3.2加密算法数据加密的基本过程就是对原来为明文的文件或数据按某种算法进行处理,使其成为不可读的一段代码,通常称为“密文”,使其只能在输入相应的密钥之后才能显示出本来内容,通过这样的途径来达到保护数据不被非法人窃取、阅读的目的。

该过程的逆过程为解密,即将该编码信息转化为其原来数据的过程。加密技术通常分为两大类:"对称式"和"非对称式"。折叠对称式加密技术对称式加密就是加密和解密使用同一个密钥,通常称之为"SessionKey"这种加密技术在当今被广泛采用,如美国政府所采用的DES加密标准就是一种典型的"对称式"加密法,它的SessionKey长度为56bits。折叠非对称式加密技术非对称式加密就是加密和解密所使用的不是同一个密钥,通常有两个密钥,称为"公钥"和"私钥",它们两个必需配对使用,否则不能打开加密文件。这里的"公钥"是指可以对外公布的,"私钥"则不能,只能由持有人一个人知道。它的优越性就在这里,因为对称式的加密方法如果是在网络上传输加密文件就很难不把密钥告诉对方,不管用什么方法都有可能被别窃听到。而非对称式的加密方法有两个密钥,且其中的"公钥"是可以公开的,也就不怕别人知道,收件人解密时只要用自己的私钥即可以,这样就很好地避免了密钥的传输安全性问题。折叠算法一个加密系统S可以用数学符号描述如下:S={P,C,K,E,D}其中P--明文空间,表示全体可能出现的明文集合,C--密文空间,表示全体可能出现的密文集合,K--密钥空间,密钥是加密算法中的可变参数,E--加密算法,由一些公式、法则或程序构成,D--解密算法,它是E的逆。当给定密钥kÎK时,各符号之间有如下关系:C=Ek(P),对明文P加密后得到密文CP=Dk(C)=Dk(Ek(P)),对密文C解密后得明文P如用E-1表示E的逆,D-1表示D的逆,则有:Ek=Dk-1且Dk=Ek-1因此,加密设计主要是确定E,D,K。RSA是Rivest、Shamir和Adleman提出来的基于数论非对称性(公开钥)加密算法。大整数的素因子难分解是RSA算法的基础。RSA在国外早已进入实用阶段,已研制出多种高速的RSA的专用芯片。尽管RSA的许多特性并不十分理想,但迫于信息安全的实际需要,许多重要的信息系统还是采用RSA作为基础加密机制。从RSA提出不久,我国有关部门就一直对它进行研究。从应用的角度看,软件实现的RSA已经开始用于计算机网络加密,用来完成密钥分配、数字签名等功能。除了RSA之外,还有DES(数据加密标准)。尽管DES公开了其加密算法并曾被美国列为"标准",但很快被废弃。加密技术又回归到"算法保密"的传统上。2.4已有方案分析该系统主要由温度测量和数据采集两部分电路组成,实现的方法有很多种,下面将列出两种在日常生活中和工农业生产中经常用到的实现方案。2.4.1方案一采用热电偶温差电路测量温度,温度检测部分可以使用低温热偶,热电偶由两个焊接在一起的异金属导线所组成,热电偶产生的热电势由两种金属的接触电势和单一导体的温差电势组成。通过将参考结点保持在已知温度并测量该电压,便可推断出检测结点的温度。数据采集部分则使用带有A/D通道的单片机,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来。热电偶的优点是工作温度范围非常宽,且体积小,但是它们也存在着输出电压小,容易遭受来自导线环路的噪声影响以及漂移较高的缺点,并且这种设计需要用到A/D转换电路,感温电路比较麻烦。2.4.2方案二采用数字温度芯片DS18B20测量温度,输出信号全数字化。便于单片机处理及控制,省去传统的测温方法的很多外围电路。DS18B20的最大优点是之一是采用了单总线的数据传输,由数字温度计DS18B20和微控制器AT89S52构成的温度测量装置,它直接输出温度的数字信号,可直接与计算机连接。这样,测温系统的结构就比较简单,体积也不大。采用Java控制,软件编程的自由度大,可通过编程实现各种各样的算术算法和逻辑控制,且体积小,硬件实现简单,安装方便。2.4.3方案比较从以上两种方案,很容易看出方案一的测温装置可测温度范围宽、体积小,但是线性误差较大,外围电路复杂。而方案二的测温装置电路简单、精确度较高、实现方便、软件设计也比较简单,故本次设计采用方案二。本系统利用AT89S52芯片控制温度传感器DS18B20进行实时温度检测并显示,能够实现快速测量环境温度,获得的温度可以通过MAX232芯片与PC机的RS-232接口进行串口通信,方便采集和整理温度数据。

第三章系统总体设计3.1系统的需求分析1.利用Java设计一个上位机程序2.实现串口通信功能3.和MSP430或其他开发板进行通信,能够驱动蜂鸣器,启动18B20和5110的显示4.Java上位机程序可对MSP430开发板发送指令并显示在5110显示屏上3.2总体框架主要分为三个部分来详细论述系统的软硬件结构。首先是上位机程序,然后是下位机硬件结构,最后是下位机程序结构。利用Java设计一个上位机程序实现串口通信功能和MSP430或其他开发板进行通信,能够驱动蜂鸣器,启动18B20和5110的显示Java上位机程序可对MSP430开发板发送指令并显示在5110显示屏上3.2.1上位机程序上位机程序使用java语言进行编写。为了便于用户操作,提供了swingUI开发的界面提供图形化的操作。程序主要负责搜寻管理上位机的串口,并在用户选定了指定的串口以后,正确配置串口通讯参数,与下位机通讯并同时接受来自下位机的状态反馈。MSP430G255MSP430G255单片机电源5110LED液晶显示板232接口DS18B20温度探头蜂鸣器硬件结构示意图图3.1系统硬件模块示意图3.2.2下位机硬件结构 下位机的硬件结构框架如图3.2,利用MSP430作为MCU的处理能力,驱动5110LCD的显示、蜂鸣器的显示、驱动DS18B20的工作,同时处理来自上位机的指令。串口中断串口中断下位机软件结构示意图接受串口数据并存入队列程序开始初始化外设刷新屏幕显示读取温度信息检查串口数据是否有数据显示数据输出蜂鸣音有无数据图3.2系统软件模块示意图3.3详细方案设计3.3.1硬件方案设计总体设计思路系统的核心是一款MSP430G255的MCU,利用MCU的功能,完成系统功能。MSP430G255IPM是TI公司设计生产的一款超低功耗的16位单片机。具有低电压、超低功耗;快速苏醒;具有片内比较器等特点。LCD接口 NOKIA5110液晶板的核心是飞利浦在1999年推出的一款名为PCD8544的48×84点矩阵LCD控制/驱动IC。一般应用时,需要连接8个针脚,分别是:1-RST针脚,功能是重启IC;2-CE针脚,功能是激活IC,类似于片选信号;3-DC针脚,用于标明输入的是数据还是命令;4-DIN针脚,功能是串行数据输入;5-CLK针脚,功能是外部时钟源;6-Vcc针脚,电源引脚,标称3.3V供电;7-BL针脚,功能是LED屏幕背光;8-GND针脚,电源地。 本文把LCD的功能引脚和MSP430G255的通用引脚P6相连,具体对应如下表所示:表3.1LCD显示屏和MCU引脚对应表序号LCD屏幕引脚MCU引脚备注1RSTP6.02CEP6.13DCP6.24DINP6.35CLKP6.46VCC3.3V7BLP6.58GNDGNDDS18B20接口电路DS18B20是常用的数字温度传感器,具有体积小,硬件开销低,抗干扰能力强,精度高的特点。DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,型号多种多样,有LTM8877,LTM8874等等。主要根据应用场合的不同而改变其外观。封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。DS18B20采用单总线的接口方式与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。单总线具有经济性好,抗干扰能力强,适合于恶劣环境的现场温度测量,使用方便等优点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。 在单总线模式下,DS18B20只需要三根连线即可,分别为电源,信号,地线。其中电源和地线直接同电源相连,信号线连接MCU的P1.7口。串口接口电路 MSP430本身具有UART异步串口,可以方便的收发数据。但要和上位机通讯,必须符合RS232的规定。UART和RS232主要的区别在于电平,MSP430的UART接口输出的电平最高只有3.3V,远远达不到RS232的要求。同时如果直接连接,RS232的高电平也会操作MSP430端口的耐压极限,造成器件损坏。 这里使用MAX232芯片来解决这一问题,通过MAX232的匹配,我们可以使用MSP430的UART模块来操作串口,收发数据。系统电源设计 系统电源采用双电源冗余接口,可以使用5V的外接电源输入,同时可以使用USB接口为系统供电。目前系统耗电较低,完全可以单独使用USB系统进行供电。蜂鸣器设计 考虑蜂鸣器采用CMOS驱动,要得到频率不同的声音信号,还需要单片机输出频率不同的脉冲来驱动。这里蜂鸣器直接连接到单片机的UART模块的TX脚,利用UART输出的信号来替代脉冲信号,驱动蜂鸣器。时钟源设计 MCU内部带有时钟源,但是外部时钟源更加准确,所以采用外部时钟源 外部8M的无源晶振采用两个22pF的陶瓷电容耦合后连接到单片机对应引脚。3.3.2下位机软件方案设计 首先我们讨论本文中下位机主体程序的结构。本文没有在MSP430上使用操作系统,这也意味着我们的程序是顺序运行的。在这个模式下,最有效的手段就是通过循环实现多种任务的协同处理。本文的下位机主要的工作就是通过循环来完成,配合中断的辅助,完成既定功能。LCD显示模块 通过查阅PCD8544的数据手册可以得知,LCD显示主要通过修改PCD8544内部的数据寄存器实现,但是直接修改数据寄存器来完成显示功能不便于处理显示中的需求,所以我们换一种实现方式,在单片机内部规划出一个和液晶显示区域对应的二位数组,数组内的内容就是对应位置液晶屏需要显示的值。 48×84点矩阵LCD在加载8*6的点阵字库以后,可以显示6×16的一个字符增列。第一排数据我们规划用来显示温度值,所以我们用于显示串口数据内容的二位数组大小就是5*16.。 程序周期性的读取二位数组的内容,并且把他们完整的投射到LED液晶屏上。而每次我们需要修改显示内容时,则通过封装好的函数修改二位数组的内容即可。UART通讯模块 UART接收串口数据通过中断完成,和主程序循环无关。MSP430是独立中断,并且本文只使用了UART终端,所以并不需要考虑终端嵌套的问题。终端处理的要求是尽量快,并且最好避免函数调用。在这个原则的指导下,本文设计使用一个队列来存储收到的数据。针对队列溢出这种极端的情况,本文作了简单的处理,丢弃原队列中的全部内容,存储最新收到的数据。DS18B20驱动模块 DS18B20的驱动只需要一个IO就能完成,并且其通讯速率较慢,可以通过程序中顺序控制时序来完成。蜂鸣器驱动模块蜂鸣器需要一个脉冲队列来驱动发声。MSP430可以使用PWM模块来驱动,也可以在软件中模拟输出方波来驱动。本文采用UART输出的信号来代替方波驱动。例如输出0x55是,就是一串占空比50%的方波信号。利用这一点,可以使蜂鸣器发出多种不同的声音。3.3.3上位机软件方案设计考虑到兼容性,使用java可以跨平台的获得最大的兼容性,使得我们的编码工作以最小投入获得最大收益。同时考虑操作方便,我们还是要求图形界面。综合考虑,java中队图形界面支持最好的IDE环境就是NetBeansIDE下的swing。本文既是利用swing编写的图形界面的上位机程序。在上位机程序中,我们使用了开源的RXTX,该项目提供了Windows,Linux,MacosX,Solaris操作系统下的兼容m串口通讯包API的实现,为其他研发人员在此类系统下研发串口应用提供了相当的方便。程序只有一个页面,按钮采用事件驱动。串口接收则采用多线程驱动。额外创建的线程不停的扫描串口,一旦接收到串口数据,则通知主界面修改显示内容。3.4方案实现及验证3.4.1安装NetBeansIDE环境 首先安装NetBeansIDE环境。NetBeans可以从java网站免费获取,也可以免费使用。按照软件提示一步一步安装好以后即可。 需要安装JavaSE开发工具包(JDK)7Update10(或更高版本)或JDK8才能安装NetBeansIDE。您可以从以下网址下载JDK7和JDK8的最新更新:/technetwork/java/javase/downloads。PHP和C/C++NetBeans包仅要求安装并运行Java运行时环境(JRE)7或8。如果您打算使用某项Java功能,则需要JDK7或8。 NetBeansIDE下载页上提供了多种安装程序,您可以下载其中的任何一种,每种安装程序都包含基本IDE和一些附加工具。以下是可供选择的安装程序下载选项:JavaSE。支持所有标准的JavaSE开发功能以及NetBeans平台开发和JavaFX2.2SDK(或更高版本)或JavaFX8SDK。JavaEE。提供了用于开发JavaSE和JavaEE应用程序的工具,并且支持NetBeans平台开发和JavaFX2.2SDK(或更高版本)或JavaFX8SDK。此下载选项还包括GlassFishServerOpenSourceEdition4.1.1和ApacheTomcat8.0.27软件。HTML5/JavaScript。提供用于开发HTML5/Javascript的工具。包含Java运行时环境,并且不需要单独的Java安装。PHP。提供了PHP5.x开发工具,并且支持Zend和Symfony框架。包含Java运行时环境,并且不需要单独的Java安装。C/C++。支持使用C、C++、Qt、Fortran和汇编语言进行开发。包含Java运行时环境,并且不需要单独的Java安装。全部。这是完整下载选项,其中包含NetBeansIDE的所有可用运行时和技术。3.4.2安装RXTX串口包 RXTXcomm是一款开源的针对串口操作的java包,RXTX是个提供串口和并口通信的开源java类库,由该项目发布的文档均遵循LGPL协议。该项目的主页位于/jarvi/rxtx/index.html。RXTX项目提供了Windows,Linux,MacosX,Solaris操作系统下的兼容m串口通讯包API的实现,为其他研发人员在此类系统下研发串口应用提供了相当的方便。针对x86体系结构的Linux操作系统平台,RXTX的部署包括下面几个文档:*RXTXcomm.jarRXTX自己的实现*librxtxSerial.so由调用的底层串口库文档*librxtxParallel.so由RXTXcomm.jar调用的底层并口库文档驱动的类配置文档,内容是Driver=gnu.io.RXTXCommDriver这里仅介绍如何在window系统下进行安装。在Netbeans界面中,在左边得项目栏中右键点击项目名-->属性-->库,点击“添加JAR/文件夹”按钮,选择RXTXcomm.jar文件。接下来只需要确认:importgnu.io.*;是一个有效语句就可以了。 如果这时候运行,会得到运行时错误,因为rxtxSerial.DLL库没办法找到。我需要右键点击项目名-->属性-->运行,在界面总添加VM参数:-Djava.library.path="C:/where-ever-you-stuck-rxtxSerial.DLL-file;%PATH%例如:-Djava.library.path="C:/rxtx-2.1-7-bins-r2/Windows/i368-mingw32/;%PATH%"当然你也可以复制那个目录下的所有dll文件到C:/Windows/System32/中,JAVA会自动找到它们的。注意。你不能在64bit的JRE中使用32bitDLL文件,不然你将会得到类似下文的错误:Can'tloadIA32-bit.dllonaAMD64-bitplatformthrownwhileloadinggnu.io.RXTXCommDriver解决这个问题的方式就是安装32bitJDK,并在Netbeans中添加新平台(工具-->JAVA平台-->添加平台)并且将项目设置切换到新的平台,然后就可以输入"importgnu.io.*",确认是否有效了。3.4.3编写上位机程序 在成功安装RXTX之后,就开始使用NetBeansIDE新建工程,并使用图形化界面直接编辑窗口。本文中的串口主要有四个元素:下拉菜单 在计算机应用中,下拉式选单是选单的一种表现形式。具体表现为:当用户选中一个选项后,该选单会向下延伸出具有其他选项的另一个选单。下拉式选单通常应用于把一些具有相同分类的功能放在同一个下拉式选单中,并把这个下拉式选单置于主选单的一个选项下。下拉菜单内的项目可以据需要设置为多选或单选,可以用来替代一组复选框(设置为多选)或单选框(设置为单选)。这样比复选框组或单选框组的占用位置小,但不如它们直观。 本文使用下拉菜单来显示当前计算机所有的串口。所以在程序启动时,就要扫描所有当前计算机所有存在的串口,并且加入下拉菜单://列出所有可以使用的串口publicvoidlistPort(){CommPortIdentifiercpid;Enumerationen=CommPortIdentifier.getPortIdentifiers();jComboBox1.removeAllItems();AddTextOut("nowtolistallPortofthisPC:"+en+"\r\n");while(en.hasMoreElements()){cpid=(CommPortIdentifier)en.nextElement();if(cpid.getPortType()==CommPortIdentifier.PORT_SERIAL){AddTextOut("FindCom:"+cpid.getName()+","+cpid.getCurrentOwner()+"\r\n");jComboBox1.addItem(cpid.getName());}}}打开按钮 一旦用户从下来菜单选择一个串口之后,接下来的动作就是打开串口。打开串口意味着一系列的操作,首先是找到并且打开指定的串口;打开成功之后,这个按钮便不能够再被操作;最后,还要建立并启动一个线程,这个线程不停的扫描打开的串口,接受串口数据并且在界面上显示。privateSerialPortserialPort;privatevoidopenPort(StringPortName){CommPortIdentifiercpid;Enumerationen=CommPortIdentifier.getPortIdentifiers();//listallPortofthisPCwhile(en.hasMoreElements()){cpid=(CommPortIdentifier)en.nextElement();if(cpid.getPortType()==CommPortIdentifier.PORT_SERIAL){//AddTextOut("发现串口:"+cpid.getName()+","+cpid.getCurrentOwner());if(cpid.getName()==PortName){try{serialPort=(SerialPort)cpid.open("UART",500);//log("实例SerialPort成功!");}catch(PortInUseExceptione){serialPort=null;}if(null!=serialPort){//成功打开串口//jTextArea2.setText("成功打开串口:"+cpid.getName());jButton1.setText("OpenedCom:"+cpid.getName());jButton1.setEnabled(false);jButton2.setEnabled(true);try{//设置一下串口的波特率等参数serialPort.setSerialPortParams(9600,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);}catch(UnsupportedCommOperationExceptione){AddTextOut("ConfigError\r\n");}//开设新线程,接受串口数据finalThreadComRcvThread=newThread(newRunnable(){publicvoidrun(){InputStreamin=null;byte[]bytes=null;while(true){try{in=null;in=serialPort.getInputStream();intbufflenth=in.available();//获取buffer里的数据长度if(bufflenth>0){bytes=newbyte[bufflenth];//初始化byte数组为buffer中数据的长度in.read(bytes);AddTextOut(newString(bytes));}else{Thread.sleep(1000);}}catch(Exceptione){}finally{try{if(in!=null){in.close();in=null;}}catch(IOExceptione){//thrownewSerialPortInputStreamCloseFailure();}}}}});ComRcvThread.start();}}}}}文本显示区域 文本显示区域是程序界面中最大的一块区域,也是用户关注的重点。任何一string结构的数据内容都可以被显示在这个区域,在串口打开之前,他负责显示一些程序的状态;在串口打开之后,这个区域就被用来专门显示打开窗口的收发内容。本文对这个区域的显示作了简单的封装:privatevoidAddTextOut(StringMessage2display){Stringo_content=jTextArea2.getText();o_content+=Message2display;//o_content+="\r\n";jTextArea2.setText(o_content);}文本输入区域这个区域被用来输入要先串口发送的数据内容。发送按钮点击【发送按钮】之后,文本输入区域的数据内容就被发送给打开的串口。同时清空文本输入区域,等待新的数据。privatevoidcommitContent(){if(null!=serialPort){OutputStreamout=null;try{out=serialPort.getOutputStream();out.write(jTextField1.getText().getBytes());out.flush();}catch(IOExceptione){}finally{AddTextOut("\r\n[SEND]:"+jTextField1.getText()+"\r\n");jTextField1.setText(null);try{if(out!=null){out.close();out=null;}}catch(IOExceptione){}}}}3.4.4安装IAR环境IAREW430软件为收费软件,不过IAR公司提供4K/8K的限制版,可以无限期使用,或者30天全功能版,用户可以根据需要自行下载,编写下位机程序。3.4.5编写下位机程序下位机程序分为几个部分:串口操作 首先是初始化串口UART模块。MAX232不需要额外的初始化操作,只需要正确配置MSP430上的UART模块即可正常工作://*****************************************************************//MSP430串口初始化//*****************************************************************voidUART_Init(){U0CTL|=SWRST;//复位SWRSTU0CTL|=CHAR;//8位数据模式U0TCTL|=SSEL1;//SMCLK为串口时钟U0BR1=baud_h;//BRCLK=8MHZ,Baud=BRCLK/NU0BR0=baud_l;//N=UBR+(UxMCTL)/8U0MCTL=0x00;//微调寄存器为0,波特率9600bpsME1|=UTXE0;//UART1发送使能ME1|=URXE0;//UART1接收使能U0CTL&=~SWRST;IE1|=URXIE0;//接收中断使能位P3SEL|=BIT4;//设置IO口为普通I/O模式P3DIR|=BIT4;//设置IO口方向为输出P3SEL|=BIT5;}这里需要注意的是MSP430上的IO口都有方向寄存器,需要正确配置。接下来处理UART的接收功能//*************************************************************************//处理来自串口0的接收中断//*************************************************************************ucharRCVBUF[32];ucharRCVPTR=0;#pragmavector=UART0RX_VECTOR__interruptvoidUART0_RX_ISR(void){//uchardata=0;RCVBUF[RCVPTR++]=U0RXBUF;//接收到的数据存起来//Send_Byte(data);//将接收到的数据再发送出去RCVPTR=RCVPTR%(sizeof(RCVBUF)/sizeof(RCVBUF[0]));} 上面的代码的工作逻辑很简单,首先建立一个32个字长的队列,每次收到串口数据后,我们都会进入中断,此时把接收到的数据放入队列即可。同时注意处理队列溢出的情况。对于发送,我们简单对发送过程进行封装://*************************************************************************//串口0发送数据函数//*************************************************************************voidSend_Byte(uchardata){while((IFG1&UTXIFG0)==0);//发送寄存器空的时候发送数据U0TXBUF=data;} 最后是处理,我们在主循环进行处理,并在处理结束后清理串口接收缓存数据的队列。//RCVCMDfromCOMif(RCVPTR>0){处理数据RCVBUF[RCVPTR]=0;ScreenPrint(RCVBUF);RCVPTR=0;}LCD液晶屏操作首先还是初始化工作:voidLCD_init(void){P6DIR=0xff;//P3DIR=0xff;P6OUT=0xff;//P3OUT=0xff;lcd_write_byte(0x21,0);//初始化Lcd,功能设定使用扩充指令lcd_write_byte(0xd0,0);//设定液晶偏置电压lcd_write_byte(0x20,0);//使用基本指令lcd_write_byte(0x0C,0);//设定显示模式,正常显示}此外我们封装一些对LCD的操作函数voidlcd_write_byte(unsignedchartemp,unsignedcharmingmin){unsignedchari;CSL;if(mingmin==1)DCH;if(mingmin==0)DCL; for(i=0;i<8;i++){if(temp&0x80)DINH;if((temp&0x80)==0)DINL;CLKL;CLKH;temp=temp<<1;}}voidlcd_set_xy(unsignedcharX,unsignedcharY){lcd_write_byte(0x40|Y,0);//columnlcd_write_byte(0x80|X,0);//row}voidLCD_clear(void) //清屏{unsignedchart,k;lcd_set_xy(0,0);for(t=0;t<6;t++){for(k=0;k<84;k++){lcd_write_byte(0x00,1);}}} 最后我们建立一个数组,并且将数组内容和LCD屏幕内容对应,并且写出维护对应的函数,要求周期性执行这个函数:unsignedcharScreenPix[14*5];unsignedcharCursor=0;voidScreen_work(void){chari;lcd_set_xy(0,1);for(i=0;i<sizeof(ScreenPix)/sizeof(ScreenPix[0]);i++){LCD_write_char(ScreenPix[i]);}}此外,本文还准备了两个函数用于显示内容,一个是清空屏幕,一个是在屏幕已有的现实基础上添加一个字符串显示:voidScreenCl

温馨提示

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

评论

0/150

提交评论