1、2008年(第三届)四川省大学生电子设计竞赛基于NRF905无线收发芯片温度监测无线通信系统的设计设计与总结报告目录摘要31方案论证与比较31.1温度采集方案设计41.2显示部分方案设计41.3无线接收发射方案设计51.4上位计算机通信方案设计52硬件电路设计52.1温度采集模块工作原理与计算52.1.1工作原理52.1.2温度计算62.2显示模块电路62.3无线发射接收模块72.3.1 SPI接口设计82.3.2 工作模式92.3.3 工作电源92.3.4 NRF905无线收发工作参数102.4上位计算机通信模块112.4.1串口通信的工作参数113软件设计113.1主程序设计113.1.1
2、被监测端(发射端)113.1.2监测端(接收端)133.6计算机监控软件设计144系统测试154.1测试所使用的仪器154.2软硬件测试154.2.1显示(LCD1602)测试及数据154.2.2温度采集测试及数据164.2.3无线接收发送测试及数据164.2.4上位计算机通信测试及数据175总结17附录18计算机监控软件使用说明:18被检测端(发射端)主程序:18检测端(接收端)主程序:21计算机监控软件主程序:24基于NRF905无线收发芯片温度监测无线通信系统的设计摘要本系统采用NRF905无线收发模块实现了被监测端(发射端)至监测端(接收端)的单工数据传输。被监测端以单片机AT89S5
3、1为核心,使用DS18B20温度传感器进行数据的采集;AT89S51对采集到的温度进行处理,然后通过NRF905把温度数据发送给监测端。监测端采用NRF905内置的CRC检测,从而保证数据的准确。通过LCD1602液晶显示器来实现数据的显示;通过MAX232芯片实现与上位计算机通信的功能;可以同时放置若干个监测端(接收端)从而实现多点监测。1方案论证与比较针对题目要求,经过分析,系统主要包括温度传感器、无线收发模块、单片机控制模块、显示模块及上位计算机通信模块。系统采用软件工程的UML建模语言进行建模,系统的设计框图如图1.1:图1.1“操作人员”给“控制器”上电,“控制器1”以串口方式读取“
4、温度采集”模块的数据,经“控制器1”处理,处理后的温度数据传输给“本地显示”模块以进行显示,最后在通过“无线发射”模块把温度数据发送出去。“无线接收”模块接收到温度数据后传输“控制器2”,“控制器2”进行数据处理,处理后的温度数据传输给“本地显示”模块以进行显示,然后再通过串口通信,把温度数据传输给上位计算机的“PC温度监控”模块,计算机内部处理后显示在计算机屏幕上,以便“监控人员”进行监控。1.1温度采集方案设计温度采集模块是系统设计的重点之一,直接影响整个系统对环境温度变化的反应速度、采集准确度以及精度等指标。【方案一】采用数字温度传感器DS18B20,具有连接简单、采集速度快、精度高等特
5、点。它采用单线总线与单片机相连(和地线),这允许在许多不同地方放置温度传感器。它可在1秒内把温度变换为数字,采集速度较快能及时反应温度的变化。最高12位温度读数,精度可达到0.0625摄氏度,温度采集范围-55125摄氏度,在很多场合下都能使用,并且价格低,很容易买到。【方案二】采用模拟传感器。虽然它能及时的反应出温度变化,但是它的精度较低,并且还要使用A/D转换器,这样增加了成本和控制的难度,所以采用方案一。1.2显示部分方案设计显示部分能在本地及时的显示出当前的温度,方便操作人员了解本地的温度。【方案一】采用LCD液晶显示屏,它是以若干个5 X 10点阵块组成,能显示英文字符和数字。具有低
6、功耗、长寿命、高可靠性、清晰、体积小等特点。【方案二】采用LED八段显示器。虽然LED具有原理简单、显示快速等特点。但是它不能显示英文字符,如果使用锁存方式显示,增加了电路难度。不使用锁存方式则增加了控制的难度。所以采用方案一。1.3无线接收发射方案设计无线接收发射是系统设计的重点之一,它是连接监测端和被监测端的桥梁。无线模块对环境比较敏感,同时,无线模块的功耗、传输距离也是影响系统可用度的一个因素。所以必须选用能自己检测传输错误,并且功耗较小、传输距离长的无线模块。【方案一】采用NRF905无线收发芯片。具有体积小、功耗低、发射电流小、抗干扰能力强、发射速率高等特点,同时自带CRC检测,传输
7、距离可达300M。【方案二】采用PTR2000进行温度的发送和接收,该方案具有模块体积超小型,超低功耗,高速率,抗干扰能力强,开阔地时的使用距离最远可达1000米,但接收到发射的转换时间较长,不能及时传输时空变化的温度,所以采用方案一。1.4上位计算机通信方案设计【方案一】采用MAX232串口通信芯片。具有电路简单、编程容易等特点,并且价格便宜,容易买到。【方案二】采用USB通信。采用此方案技术难度较大,编程困难。所以采用方案一。综上所述,总体方案是:控制部分采用通用的AT89S51芯片,温度采集使用数字温度传感器DS18B20,本地显示采用点阵液晶屏,无线收发采用NRF905芯片,采用MAX
8、232串口方式与上位计算机通信。2硬件电路设计2.1温度采集模块工作原理与计算2.1.1工作原理系统在被监测端(发射端)采用数字温度传感器DS18B20实现温度的采集,DS18B20才用单总线接口,只占用单片机的一个端口。DS18B20可以采用数据线供电的方式,但是为了采集速度更快,我们使用外部供电方式。其测量范围从55摄氏度到125摄氏度,能满足一般民用需求。其连接电路如图2.1:图2.1工作原理:首先单片机初始化DS18B20,然后发送启动温度转换命令,然后再发送准备读取温度命令,最后读取2字节的温度数据。具体步骤如下:单片机给DS18B20一个初始化命令,然后发送0xcc命令跳过读序列号
9、,发送0x44命令以启动温度转换。再发送一个初始化命令,同样发送0xcc命令跳过读序列号,发送0xbe命令准备读取温度,单片机连续读取2字节的温度数据。2.1.2温度计算DS18B20采用2字节来存储温度,其中1511位表示温度符号,104位表示温度的整数位,30位表示温度的小数位,如图2.2所示:图2.2正温度计算:由于1511位全为0,DS18B20采用正码形式存储温度,所以只需把100位右移4位就能算出温度,也就是除以16。比如采集到的温度0550H,除以16,的十进制的85,那么温度就为85摄氏度。采集到的温度为0191H则温度为25.0625摄氏度。负温度计算:对于负温度,DS18B
10、20采用补码形式存储温度,1511位全为1,100位为补码,所以要转换为正码,然后再用正温度的计算方式。比如采集到的温度为FC90H,二进制为1100 1001 0000,转换为正码为0011 0111 0000,十六进制为370H,除以16为十进制55摄氏度,再加上符号位则计算出来的温度为-55摄氏度。2.2显示模块电路显示模块使用比较通用的LCD1602液晶屏,它是以若干个5 X 10点阵块组成,具有清晰、快速、可靠等特点。其电路如图2.3:图2.3本系统采用单片机P0口作为LCD1602的数据端口,E使能端使用单片机的P2.3口,RW使用单片机的P2.2口,RS使用单片机的P2.1口,V
11、O背光接地,电源采用+5v。排阻RR1为单片机P0口的上拉电阻。2.3无线发射接收模块无线发射接收模块使用NRF905芯片,它与控制器采用SPI协议进行通信,其内部原理如下图:NRF905单片无线收发模块工作在433/868/915MHZ的ISM频段,本系统采用433MHZ频段。由一个完全集成的频率调节器,一个带解调器的接收器,一个功率放大器,一个晶体振荡器和一个调节器组成。ShockBurst工作模式的特点是自动产生前导码和CRC。可以很容易通过SPI接口进行编程配置。电流消耗很低,在发射功率为-10dBm时,发射电流为11mA,接收电流为12.5mA,进入POWERDOWN模式可以很容易实
12、现节电。由于AT89S51没有SPI端口,所以我们用AT89S51模拟SPI,从而与NRF905通信。与单片机的连接如图2.4:图2.4NRF905管脚的具体含义请参考下图:2.3.1 SPI接口设计SPI接口由状态寄存器、射频配置寄存器、发送地址寄存器、发送数据寄存器和接收寄存器5个寄存器组成。1. 状态寄存器:包含数据就绪DR和地址匹配AM状态2. 射频配置寄存器:包含收发器的频率,输出功率等配置信息3. 发送地址寄存器:包含目标器件地址字节长度由配置寄存器设置4. 发送数据寄存器:包含发送的有效数据包数据字节长度由配置寄存器设置5. 接收寄存器:包含接收到的有效数据包数据字节长度由配置寄
13、存器设置在寄存器中的有效数据由数据准备就绪DR指示2.3.2 工作模式NRF905有4种工作模式,本系统采用其中的3种模式:SPI编程模式、发送模式、接收模式。其工作模式由TRXCE、TXEN、PWRUP的设置来设定的。如表2.1表2.1Standby模式(SPI编程模式):Standby模式在保持电流消耗最小的同时保证最短的到shockBurst Rx,ShouckBurst Tx的启动时间。当进入这种模式时,一部分晶体振荡器是活动的。电流消耗取决于晶体振荡器的频率。在此模式中,配置字的内容保持不变。ShockBurst Rx模式(接收模式):当有相应的温度数据要传送时,则通过SPI接口,按
14、时序把接收机的地址和要发送的数据送传给NRF905,SPI接口的速率在通信协议和器件配置时确定;TRXCE和TXEN置高电平,使NRF905的发送模式启动;NRF905进行数据的发送。NRF905不断重发,直到TRXCE被置低电平时,NRF905发送过程完成,自动进入空闲模式。ShockBurst Tx模式(发射模式):当TRXCE为高电平,TXEN为低电平时,NRF905进入接收模式;650S后,NRF905不断监测,等待接收数据;当NRF905检测到同一频段的载波时,载波检测引脚被置高电平;当接收到一个相匹配的地址,AM引脚被置高电平;当数据包正确接收完毕,NRF905自动移去字头、地址和
15、CRC校验位,然后把DR引脚置为高电平;TRXCE置为低电平,NRF905进入空闲模式;在一次通过SPI口,以一定的速率把数据移到微控制器内,当所有数据接收完毕,NRF905把DR引脚和AM引脚置为低电平。这时NRF905可以进入接收模式、发送模式或关机模式。2.3.3 工作电源NRF905使用的是3.3v电源,所以必须给它单独配置一个电源,3.3v电源电路如图2.5:图2.5VDD输入为9V直流电压,稳压块采用的是德州仪器公司的TLV2217-33电源模块,具有精度高等特点。TLV2217-33输入512V,输出3.3V。无论NRF905工作在什么模式,它的电流都不大,所以,使用德州仪器公司
16、的TLV2217-33电源模块给NRF905供电是比较合适的。我们在监测端(接收端)使用了2个NRF905信号指示灯,信号指示灯电路如图2.6:图2.6其中CD为NRF905的载波检测脚,AM为NRF905的地址匹配脚,sn74ahc1g86dbc为德州仪器公司的单通道异或门,对CD和AM进行异或。操作人员通过观察发光二极管DS2从而判断NRF905是否在接收数据,通过观察发光二极管DS1从而判断NRF905是否接收到了正确的数据。2.3.4 NRF905无线收发工作参数写入配置寄存器的参数为:0x01, 0x0c, 0x44, 0x02,0x02,0xcc, 0xcc, 0xcc,0xcc,
17、 0x58其含义为:不自动重发数据,正常模式,输出功率为10dBm,器件工作在433MHZ,发射接收地址宽度为4字节,发射接收2字节数据,接收地址为0xcc,内部16MHZ晶振,不使用外部晶振,8位CRC自检。还能配置为:自动重发,节能模式,输出功率有-10dBm、-2dBm、+6dBm,可选的工作频率有433MHZ、868MHZ,收发字节最多32字节数据。可以使用外部晶振,可以不使用CRC检测。2.4上位计算机通信模块上位计算机通信模块使用通用的MAX232串口通信方式,电路如图2.7:图2.7MAX232的主要作用是进行电平转换,从而使单片机AT89S51能和计算机进行通信。我们只使用了1
18、1、12来连接单片机AT89S51的P3.0口和P3.1口。MAX232的13和14脚与串口相连,将数据传送到计算机。2.4.1串口通信的工作参数波特率:9600;数据位是8位;停止位是1位;没有校验位。3软件设计3.1主程序设计主程序主要的功能是组织并协调各模块的工作,处理“温度采集”模块传来的温度。3.1.1被监测端(发射端)被监测端(发射端)主程序时序图如图3.1:图3.11. “操作人员”给“控制器1(AT89S51)”上电;2. “控制器1(AT89S51)”对“本地显示(LCD1602)”进行初始化;3. “控制器1(AT89S51)”对“无线收发(NRF905)”进行初始化;4.
19、 “控制器1(AT89S51)”给“温度采集(DS18B20)”一个温度采集命令;5. “温度采集(DS18B20)”把采集到的温度数据传输给“控制器1(AT89S51)”;6. “控制器1(AT89S51)”对采集到的温度数据进行处理。判断温度的正负,把负温度转换为正码,再把温度数据计算为实际温度,最后把温度数据传换成“本地显示(LCD1602)”能显示的格式。7. “控制器1(AT89S51)”把处理后的温度数据传输给“本地显示(LCD1602)”以进行显示;8. “控制器1(AT89S51)”设置“无线收发(NRF905)”为发射模式,以便发射原始温度数据;9. “控制器1(AT89S5
20、1)”把未处理过的温度数据传输给“无线收发(NRF905)”,从而把温度数据发射出去;10. 回到第4步继续采集温度数据,一直这样循环;以下是各模块对应的程序文件名称:模块名称程序文件名称控制器1(AT89S51)Main.c本地显示(LCD1602)Lcd1602.c及lcd1602.h无线收发(NRF905)Nrf905.c及nrf905.h温度采集(DS18B20)Ds1820.c及ds1820.h3.1.2监测端(接收端)监测端(接收端)主程序时序图如图3.2:图3.21. “操作人员”给“控制器1(AT89S51)”上电;2. “控制器2(AT89S51)”对“本地显示(LCD160
21、2)”进行初始化;3. “控制器2(AT89S51)”对“无线收发(NRF905)”进行初始化;4. “控制器2(AT89S51)”初始化串口通信,设置串口通信的参数;5. “控制器2(AT89S51)”设置“无线收发(NRF905)”为接收模式,以便接收被监测端(发射端)发射出来的原始温度数据;6. “无线收发(NRF905)”接收到原始温度数据,进行CRC校验,如果数据正确则把数据传输给“控制器2(AT89S51)”;7. “控制器2(AT89S51)”对接收到的数据进行处理,处理方法同被监测端(发射端)一样,这里就不重述。8. “控制器2(AT89S51)”把处理后的温度数据传输给“本地
22、显示(LCD1602)”以进行显示;9. “控制器2(AT89S51)”向上位计算机传输温度数据,以便上位计算机对温度数据进行监控;10. 回到第15步继续接收温度数据,一直这样循环;以下是各模块对应的程序文件名称:模块名称程序文件名称控制器1(AT89S51)Main.c本地显示(LCD1602)Lcd1602.c及lcd1602.h无线收发(NRF905)Nrf905.c及nrf905.h串口通信Comm.c及comm.h3.6计算机监控软件设计计算机端监控软件的主要功能是接收单片机通过串口传输过来的温度数据,然后显示在屏幕上;采用对平台兼容性很好的JAVA语言编写。此软件的附加功能:1.
23、 设置报警温度,当温度超过报警温度时,屏幕上会报警;2. 可以任意选择监控端口;3. 退出软件后,再次启动本软件会恢复上次设置的报警温度;其软件界面如图3.3图3.3由于计算机端监控软件功能很少,所以没有使用现在最流行的MVC模式进行开发。监控软件主要包括2部分:1. 屏幕显示及控制类,类名:MainFrame;2. 串口收发类,类名:SerialComm;使用的串口通信参数和单片机上的串口通信参数一致。控制类(MainFrame)主要控制串口收发类(SerialComm)发送过来的数据,然后设置“现在温度”滑条,当“现在温度”超过“报警温度”时则显示报警,如图3.4所示图3.4由于我们把JA
24、VA语言的运行平台JDK进行了集成,所以计算机监控软件无需安装即可使用。其使用方法如下:1. 解压文件夹下的“PC串口通信程序”。2. 进入解压后的文件夹,打开“温度监控”文件夹下的“温度监控.exe”即可。4系统测试4.1测试所使用的仪器测试所使用的仪器有:数字万用表,温度计,串口调试器软件。4.2软硬件测试4.2.1显示(LCD1602)测试及数据显示(LCD1602)测试方式:单片机AT89S51直接驱动LCD1602显示字符。测试数据如下:被监测端(发射端):标准显示实际显示Temperature is:1234567890+-,./?监测端(接收端):标准显示实际显示Temperat
25、ure is:1234567890+-,./?4.2.2温度采集测试及数据温度采集测试方式:单片机AT89S51接收到DS18B20传来的数据后,在LCD1602上显示原始温度数据及处理过后的温度数据。测试数据如下表:实际温度原始数据测试温度误差-6-34.2.3无线接收发送测试及数据无线接收发测试方法:被监测端(发射端)在LCD1602上显示要发射的数据,通过NRF905发射出去;监测端(接收端)接收到数据后,在LCD1602上显示接收到的数据;收发2字节数据。测试数据如下表: 相距(M)发射数据接收数据13M55M2004.2.4上位计算机通信测试及数据上位计算机端采用“串口调试器”;我们
26、用一下方式测试串口通信:单片机端接收“串口调试器”发送过来的数据,然后单片机在LCD1602上显示接收到的数据,最后在把数据传回“串口调试器”。“串口调试器”发送的数据LCD1602显示的数据“串口调试器”接收的数据5总结我们的设计完成了题目中的基本部分和发挥部分,采用DS18B20温度传感器很准确及时的采集到当前的温度。通过使用NRF905无线发送接收模块将所采集的温度数据能够在0m300m的范围内准确无误的发送给监控端(接收端)。采用LCD1602显示模块完成了显示部分,利用串口通信完成了在计算机上显示所接收到的温度数据,同时也给系统增加了报警功能。附录计算机监控软件使用说明:由于我们把J
27、AVA语言的运行平台JDK进行了集成,所以计算机监控软件无需安装即可使用。其使用方法如下:1. 解压文件夹下的“PC串口通信程序”。2. 进入解压后的文件夹,打开“温度监控”文件夹下的“温度监控.exe”即可。被检测端(发射端)主程序:#include reg51.h#include lcd1602.h#include nrf905.h#include DS1820.h /0 1 2 3 4 5 6 7 8 9 .unsigned code lcdtable=0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x2e;/lcd显示代码;ucha
28、r d1,d2,d3,po4,po3,po2,po1;/个位,十位,百位,1/10位,1/100位,1/1000位,1/10000位;uchar low,tdatalow,tdataheight; /温度低字节,未处理温度的小数位uint temp,tempold,tempnew,point;/采集温度,旧温度,新温度,实际温度的小数位void convert(uchar c)d1=0x00;d2=0x00;d3=0x00;po1=0x00;po2=0x00;po3=0x00;po4=0x00; d3=(c%1000)/100; /取百位d2=(c%100)/10;/取十位d1=(c%10)/
29、1;/取个位po4=(point%10000)/1000; /取1/10位 po3=(point%1000)/100; /取1/100位po2=(point%100)/10; /取1/1000位po1=(point%10)/1; /取1/10000位void display()/LCD显示函数/显示温度wr_byte_ram(1,0x42,lcdtabled3); /显示百位wr_byte_ram(1,0x43,lcdtabled2); /显示十位wr_byte_ram(1,0x44,lcdtabled1); /显示个位 wr_byte_ram(1,0x45,lcdtable10); /显示小
30、数点wr_byte_ram(1,0x46,lcdtablepo4); /显示1/10位wr_byte_ram(1,0x47,lcdtablepo3); /显示1/100位wr_byte_ram(1,0x48,lcdtablepo2); /显示1/1000位wr_byte_ram(1,0x49,lcdtablepo1); /显示1/10000位wr_length_ram(1,0x4A,C,1);/显示温度单位void dispNegativeTemp(uchar l) /LCD显示负温度convert(l);/转换wr_length_ram(1,0x40, ,16);/擦除字符wr_length
31、_ram(1,0x40, -,2);/显示负温度display();/LCD显示函数void dispPositiveTemp(uchar l)/LCD显示正温度convert(l); /转换wr_length_ram(1,0x40, ,16);/擦除字符wr_length_ram(1,0x40, +,2);/显示正温度display();/LCD显示函数main()ini_lcd1602(); /初始化LCD;Config905(); /配置905wr_length_ram(1,0x00, Temperature is:,16);/显示提示字符while(1)temp=0x0000;temp
32、=read_temp();/读取温度if(temp!=tempold) /数据有变化者,重新显示tempnew=temp;tdatalow=temp&0xff;tdataheight=temp8;point=temp&0x000F;/取小数位;point=point*625;/转换为实际温度if(temp & 0x8000) /处理负温度 temp=temp&0x0FFF;/去除高4位的符号;temp=temp0x0FFF;/取反;temp+=1;temp=4; /计算温度,除以16;low=temp|0x00; /取低字节dispNegativeTemp(low); /LCD显示负温度low
33、=low|0x80;else /处理正温度temp=4;/计算温度,除以16;low=temp|0x00;/取低字节dispPositiveTemp(low);/LCD显示正温度SetTxMode();/设置为发送模式TxPacket(tdataheight,tdatalow);/发送函数tempold=tempnew;/存最新数据检测端(接收端)主程序:#include reg51.h#include lcd1602.h#include nrf905.h#include DS1820.h#include comm.h /0 1 2 3 4 5 6 7 8 9 .unsigned code l
34、cdtable=0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x2e;/lcd显示代码;uchar d1,d2,d3,po4,po3,po2,po1;/个位,十位,百位,1/10位,1/100位,1/1000位,1/10000位;uchar low,tdatalow,tdataheight; /温度低字节,未处理温度的小数位uint temp,tempold,tempnew,point;/采集温度,旧温度,新温度,实际温度的小数位void convert(uchar c)d1=0x00;d2=0x00;d3=0x00;po1=0x00;p
35、o2=0x00;po3=0x00;po4=0x00; d3=(c%1000)/100; /取百位d2=(c%100)/10;/取十位d1=(c%10)/1;/取个位po4=(point%10000)/1000; /取1/10位 po3=(point%1000)/100; /取1/100位po2=(point%100)/10; /取1/1000位po1=(point%10)/1; /取1/10000位void display()/LCD显示函数/显示温度wr_byte_ram(1,0x42,lcdtabled3); /显示百位wr_byte_ram(1,0x43,lcdtabled2); /显示
36、十位wr_byte_ram(1,0x44,lcdtabled1); /显示个位 wr_byte_ram(1,0x45,lcdtable10); /显示小数点wr_byte_ram(1,0x46,lcdtablepo4); /显示1/10位wr_byte_ram(1,0x47,lcdtablepo3); /显示1/100位wr_byte_ram(1,0x48,lcdtablepo2); /显示1/1000位wr_byte_ram(1,0x49,lcdtablepo1); /显示1/10000位wr_length_ram(1,0x4A,C,1);/显示温度单位void dispNegativeTe
37、mp(uchar l) /LCD显示负温度convert(l);/转换wr_length_ram(1,0x40, ,16);/擦除字符wr_length_ram(1,0x40, -,2);/显示负温度display();/LCD显示函数void dispPositiveTemp(uchar l)/LCD显示正温度convert(l); /转换wr_length_ram(1,0x40, ,16);/擦除字符wr_length_ram(1,0x40, +,2);/显示正温度display();/LCD显示函数main()ini_lcd1602(); /初始化LCD;Config905(); /配置
38、905init_serialcomm(); /初始化串口wr_length_ram(1,0x00, Temperature is:,16);/显示提示字符while(1)temp=0x0000;SetRxMode();/设置为接收模式temp=RxPacket();/接收温度函数if(temp!=tempold) /数据有变化者,重新显示tempnew=temp;tdatalow=temp&0xff;tdataheight=temp8;point=temp&0x000F;/取小数位;point=point*625;/转换为实际温度if(temp & 0x8000) /处理负温度 temp=te
39、mp&0x0FFF;/去除高4位的符号;temp=temp0x0FFF;/取反;temp+=1;temp=4; /计算温度,除以16;low=temp|0x00; /取低字节dispNegativeTemp(low); /LCD显示负温度low=low|0x80;else /处理正温度temp=4;/计算温度,除以16;low=temp|0x00;/取低字节dispPositiveTemp(low);/LCD显示正温度send_char_com(low);/向串口发送一个字符 计算机监控软件主程序:package com.Frame;import java.awt.BorderLayout;i
40、mport java.awt.Color;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.awt.event.MouseMotionAdapter;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.EOFException;import j
41、ava.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.util.Enumeration;import java.util.TooManyListenersException;import m.CommPortIdentifier;import m.SerialPort;import m.Seria
42、lPortEvent;import m.SerialPortEventListener;import javax.swing.JButton;import javax.swing.JComboBox;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JSlider;import javax.swing.SwingConstants;import javax.swing.event.ChangeEvent;import javax.swing.event.ChangeListener;import com.Serial.SerialComm;public class MainFrameprivate SerialComm serialcomm=null; /串口实例private SerialPort serialPort=null; /串口实例private File file=null;/保存报警值private DataOutputStream fileout=null;/写报警值数据流;private DataInputStream filein=nu