收藏 分销(赏)

报告基于温采集无线监测系统论文.doc

上传人:a199****6536 文档编号:2111707 上传时间:2024-05-16 格式:DOC 页数:34 大小:981KB 下载积分:12 金币
下载 相关
报告基于温采集无线监测系统论文.doc_第1页
第1页 / 共34页
报告基于温采集无线监测系统论文.doc_第2页
第2页 / 共34页


点击查看更多>>
资源描述
2008年(第三届) 四川省大学生电子设计竞赛 基于NRF905无线收发芯片温度监测无线 通信系统的设计 设计与总结报告 目录 摘要3 1方案论证与比较3 1.1温度采集方案设计4 1.2显示部分方案设计4 1.3无线接收发射方案设计5 1.4上位计算机通信方案设计5 2硬件电路设计5 2.1温度采集模块工作原理与计算5 2.1.1工作原理5 2.1.2温度计算6 2.2显示模块电路6 2.3无线发射接收模块7 2.3.1 SPI接口设计8 2.3.2 工作模式9 2.3.3 工作电源9 2.3.4 NRF905无线收发工作参数10 2.4上位计算机通信模块11 2.4.1串口通信的工作参数11 3软件设计11 3.1主程序设计11 3.1.1被监测端(发射端)11 3.1.2监测端(接收端)13 3.6计算机监控软件设计14 4系统测试15 4.1测试所使用的仪器15 4.2软硬件测试15 4.2.1显示(LCD1602)测试及数据15 4.2.2温度采集测试及数据16 4.2.3无线接收发送测试及数据16 4.2.4上位计算机通信测试及数据17 5总结17 附录18 计算机监控软件使用说明:18 被检测端(发射端)主程序:18 检测端(接收端)主程序:21 计算机监控软件主程序:24 基于NRF905无线收发芯片温度监测无线 通信系统的设计 摘要 本系统采用NRF905无线收发模块实现了被监测端(发射端)至监测端(接收端)的单工数据传输。被监测端以单片机AT89S51为核心,使用DS18B20温度传感器进行数据的采集;AT89S51对采集到的温度进行处理,然后通过NRF905把温度数据发送给监测端。监测端采用NRF905内置的CRC检测,从而保证数据的准确。通过LCD1602液晶显示器来实现数据的显示;通过MAX232芯片实现与上位计算机通信的功能; 可以同时放置若干个监测端(接收端)从而实现多点监测。 1方案论证与比较 针对题目要求,经过分析,系统主要包括温度传感器、无线收发模块、单片机控制模块、显示模块及上位计算机通信模块。系统采用软件工程的UML建模语言进行建模,系统的设计框图如图1.1: 图1.1 “操作人员”给“控制器”上电,“控制器1”以串口方式读取“温度采集”模块的数据,经“控制器1”处理,处理后的温度数据传输给“本地显示”模块以进行显示,最后在通过“无线发射”模块把温度数据发送出去。“无线接收”模块接收到温度数据后传输“控制器2”,“控制器2”进行数据处理,处理后的温度数据传输给“本地显示”模块以进行显示,然后再通过串口通信,把温度数据传输给上位计算机的“PC温度监控”模块,计算机内部处理后显示在计算机屏幕上,以便“监控人员”进行监控。 1.1温度采集方案设计 温度采集模块是系统设计的重点之一,直接影响整个系统对环境温度变化的反应速度、采集准确度以及精度等指标。 【方案一】采用数字温度传感器DS18B20,具有连接简单、采集速度快、精度高等特点。它采用单线总线与单片机相连(和地线),这允许在许多不同地方放置温度传感器。它可在1秒内把温度变换为数字,采集速度较快能及时反应温度的变化。最高12位温度读数,精度可达到0.0625摄氏度,温度采集范围-55~125摄氏度,在很多场合下都能使用,并且价格低,很容易买到。 【方案二】采用模拟传感器。虽然它能及时的反应出温度变化,但是它的精度较低,并且还要使用A/D转换器,这样增加了成本和控制的难度,所以采用方案一。 1.2显示部分方案设计 显示部分能在本地及时的显示出当前的温度,方便操作人员了解本地的温度。 【方案一】采用LCD液晶显示屏,它是以若干个5 X 10点阵块组成,能显示英文字符和数字。具有低功耗、长寿命、高可靠性、清晰、体积小等特点。 【方案二】采用LED八段显示器。虽然LED具有原理简单、显示快速等特点。但是它不能显示英文字符,如果使用锁存方式显示,增加了电路难度。不使用锁存方式则增加了控制的难度。所以采用方案一。 1.3无线接收发射方案设计 无线接收发射是系统设计的重点之一,它是连接监测端和被监测端的桥梁。无线模块对环境比较敏感,同时,无线模块的功耗、传输距离也是影响系统可用度的一个因素。所以必须选用能自己检测传输错误,并且功耗较小、传输距离长的无线模块。 【方案一】采用NRF905无线收发芯片。具有体积小、功耗低、发射电流小、抗干扰能力强、发射速率高等特点,同时自带CRC检测,传输距离可达300M。 【方案二】采用PTR2000进行温度的发送和接收,该方案具有模块体积超小型,超低功耗,高速率,抗干扰能力强,开阔地时的使用距离最远可达1000米,但接收到发射的转换时间较长,不能及时传输时空变化的温度,所以采用方案一。 1.4上位计算机通信方案设计 【方案一】采用MAX232串口通信芯片。具有电路简单、编程容易等特点,并且价格便宜,容易买到。 【方案二】采用USB通信。采用此方案技术难度较大,编程困难。所以采用方案一。 综上所述,总体方案是:控制部分采用通用的AT89S51芯片,温度采集使用数字温度传感器DS18B20,本地显示采用点阵液晶屏,无线收发采用NRF905芯片,采用MAX232串口方式与上位计算机通信。 2硬件电路设计 2.1温度采集模块工作原理与计算 2.1.1工作原理 系统在被监测端(发射端)采用数字温度传感器DS18B20实现温度的采集,DS18B20才用单总线接口,只占用单片机的一个端口。DS18B20可以采用数据线供电的方式,但是为了采集速度更快,我们使用外部供电方式。其测量范围从-55摄氏度到+125摄氏度,能满足一般民用需求。其连接电路如图2.1: 图2.1 工作原理:首先单片机初始化DS18B20,然后发送启动温度转换命令,然后再发送准备读取温度命令,最后读取2字节的温度数据。具体步骤如下: 单片机给DS18B20一个初始化命令,然后发送0xcc命令跳过读序列号,发送0x44命令以启动温度转换。再发送一个初始化命令,同样发送0xcc命令跳过读序列号,发送0xbe命令准备读取温度,单片机连续读取2字节的温度数据。 2.1.2温度计算 DS18B20采用2字节来存储温度,其中15~11位表示温度符号,10~4位表示温度的整数位,3~0位表示温度的小数位,如图2.2所示: 图2.2 正温度计算: 由于15~11位全为0,DS18B20采用正码形式存储温度,所以只需把10~0位右移4位就能算出温度,也就是除以16。比如采集到的温度0550H,除以16,的十进制的85,那么温度就为85摄氏度。采集到的温度为0191H则温度为25.0625摄氏度。 负温度计算: 对于负温度,DS18B20采用补码形式存储温度,15~11位全为1,10~0位为补码,所以要转换为正码,然后再用正温度的计算方式。比如采集到的温度为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口,VO背光接地,电源采用+5v。排阻RR1为单片机P0口的上拉电阻。 2.3无线发射接收模块 无线发射接收模块使用NRF905芯片,它与控制器采用SPI协议进行通信,其内部原理如下图: NRF905单片无线收发模块工作在433/868/915MHZ的ISM频段,本系统采用433MHZ频段。由一个完全集成的频率调节器,一个带解调器的接收器,一个功率放大器,一个晶体振荡器和一个调节器组成。ShockBurst工作模式的特点是自动产生前导码和CRC。可以很容易通过SPI接口进行编程配置。电流消耗很低,在发射功率为-10dBm时,发射电流为11mA,接收电流为12.5mA,进入POWERDOWN模式可以很容易实现节电。 由于AT89S51没有SPI端口,所以我们用AT89S51模拟SPI,从而与NRF905通信。与单片机的连接如图2.4: 图2.4 NRF905管脚的具体含义请参考下图: 2.3.1 SPI接口设计 SPI接口由状态寄存器、射频配置寄存器、发送地址寄存器、发送数据寄存器和接收寄存器5个寄存器组成。 1. 状态寄存器:包含数据就绪DR和地址匹配AM状态 2. 射频配置寄存器:包含收发器的频率,输出功率等配置信息 3. 发送地址寄存器:包含目标器件地址字节长度由配置寄存器设置 4. 发送数据寄存器:包含发送的有效数据包数据字节长度由配置寄存器设置 5. 接收寄存器:包含接收到的有效数据包数据字节长度由配置寄存器设置在寄存器中的有效数据由数据准备就绪DR指示 2.3.2 工作模式 NRF905有4种工作模式,本系统采用其中的3种模式:SPI编程模式、发送模式、接收模式。其工作模式由TRX-CE、TX-EN、PWR-UP的设置来设定的。如表2.1 表2.1 Standby模式(SPI编程模式): Standby模式在保持电流消耗最小的同时保证最短的到shockBurst Rx,ShouckBurst Tx的启动时间。当进入这种模式时,一部分晶体振荡器是活动的。电流消耗取决于晶体振荡器的频率。在此模式中,配置字的内容保持不变。 ShockBurst Rx模式(接收模式): 当有相应的温度数据要传送时,则通过SPI接口,按时序把接收机的地址和要发送的数据送传给NRF905,SPI接口的速率在通信协议和器件配置时确定;TRX-CE和TX-EN置高电平,使NRF905的发送模式启动;NRF905进行数据的发送。NRF905不断重发,直到TRX-CE被置低电平时,NRF905发送过程完成,自动进入空闲模式。 ShockBurst Tx模式(发射模式): 当TRX-CE为高电平,TX-EN为低电平时,NRF905进入接收模式;650S后,NRF905不断监测,等待接收数据;当NRF905检测到同一频段的载波时,载波检测引脚被置高电平;当接收到一个相匹配的地址,AM引脚被置高电平;当数据包正确接收完毕,NRF905自动移去字头、地址和CRC校验位,然后把DR引脚置为高电平;TRX-CE置为低电平,NRF905进入空闲模式;在一次通过SPI口,以一定的速率把数据移到微控制器内,当所有数据接收完毕,NRF905把DR引脚和AM引脚置为低电平。这时NRF905可以进入接收模式、发送模式或关机模式。 2.3.3 工作电源 NRF905使用的是3.3v电源,所以必须给它单独配置一个电源,3.3v电源电路如图2.5: 图2.5 VDD输入为9V直流电压,稳压块采用的是德州仪器公司的TLV2217-33电源模块,具有精度高等特点。 TLV2217-33输入5~12V,输出3.3V。无论NRF905工作在什么模式,它的电流都不大,所以,使用德州仪器公司的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, 0x58 其含义为:不自动重发数据,正常模式,输出功率为10dBm,器件工作在433MHZ,发射接收地址宽度为4字节,发射接收2字节数据,接收地址为0xcc,内部16MHZ晶振,不使用外部晶振,8位CRC自检。 还能配置为:自动重发,节能模式,输出功率有-10dBm、-2dBm、+6dBm,可选的工作频率有433MHZ、868MHZ,收发字节最多32字节数据。可以使用外部晶振,可以不使用CRC检测。 2.4上位计算机通信模块 上位计算机通信模块使用通用的MAX232串口通信方式,电路如图2.7: 图2.7 MAX232的主要作用是进行电平转换,从而使单片机AT89S51能和计算机进行通信。我们只使用了11、12来连接单片机AT89S51的P3.0口和P3.1口。MAX232的13和14脚与串口相连,将数据传送到计算机。 2.4.1串口通信的工作参数 波特率:9600;数据位是8位;停止位是1位;没有校验位。 3软件设计 3.1主程序设计 主程序主要的功能是组织并协调各模块的工作,处理“温度采集”模块传来的温度。 3.1.1被监测端(发射端) 被监测端(发射端)主程序时序图如图3.1: 图3.1 1. “操作人员”给“控制器1(AT89S51)”上电; 2. “控制器1(AT89S51)”对“本地显示(LCD1602)”进行初始化; 3. “控制器1(AT89S51)”对“无线收发(NRF905)”进行初始化; 4. “控制器1(AT89S51)”给“温度采集(DS18B20)”一个温度采集命令; 5. “温度采集(DS18B20)”把采集到的温度数据传输给“控制器1(AT89S51)”; 6. “控制器1(AT89S51)”对采集到的温度数据进行处理。判断温度的正负,把负温度转换为正码,再把温度数据计算为实际温度,最后把温度数据传换成“本地显示(LCD1602)”能显示的格式。 7. “控制器1(AT89S51)”把处理后的温度数据传输给“本地显示(LCD1602)”以进行显示; 8. “控制器1(AT89S51)”设置“无线收发(NRF905)”为发射模式,以便发射原始温度数据; 9. “控制器1(AT89S51)”把未处理过的温度数据传输给“无线收发(NRF905)”,从而把温度数据发射出去; 10. 回到第4步继续采集温度数据,一直这样循环; 以下是各模块对应的程序文件名称: 模块名称 程序文件名称 控制器1(AT89S51) Main.c 本地显示(LCD1602) Lcd1602.c及lcd1602.h 无线收发(NRF905) Nrf905.c及nrf905.h 温度采集(DS18B20) Ds1820.c及ds1820.h 3.1.2监测端(接收端) 监测端(接收端)主程序时序图如图3.2: 图3.2 1. “操作人员”给“控制器1(AT89S51)”上电; 2. “控制器2(AT89S51)”对“本地显示(LCD1602)”进行初始化; 3. “控制器2(AT89S51)”对“无线收发(NRF905)”进行初始化; 4. “控制器2(AT89S51)”初始化串口通信,设置串口通信的参数; 5. “控制器2(AT89S51)”设置“无线收发(NRF905)”为接收模式,以便接收被监测端(发射端)发射出来的原始温度数据; 6. “无线收发(NRF905)”接收到原始温度数据,进行CRC校验,如果数据正确则把数据传输给“控制器2(AT89S51)”; 7. “控制器2(AT89S51)”对接收到的数据进行处理,处理方法同被监测端(发射端)一样,这里就不重述。 8. “控制器2(AT89S51)”把处理后的温度数据传输给“本地显示(LCD1602)”以进行显示; 9. “控制器2(AT89S51)”向上位计算机传输温度数据,以便上位计算机对温度数据进行监控; 10. 回到第15步继续接收温度数据,一直这样循环; 以下是各模块对应的程序文件名称: 模块名称 程序文件名称 控制器1(AT89S51) Main.c 本地显示(LCD1602) Lcd1602.c及lcd1602.h 无线收发(NRF905) Nrf905.c及nrf905.h 串口通信 Comm..c及comm.h 3.6计算机监控软件设计 计算机端监控软件的主要功能是接收单片机通过串口传输过来的温度数据,然后显示在屏幕上;采用对平台兼容性很好的JAVA语言编写。此软件的附加功能: 1. 设置报警温度,当温度超过报警温度时,屏幕上会报警; 2. 可以任意选择监控端口; 3. 退出软件后,再次启动本软件会恢复上次设置的报警温度; 其软件界面如图3.3 图3.3 由于计算机端监控软件功能很少,所以没有使用现在最流行的MVC模式进行开发。监控软件主要包括2部分: 1. 屏幕显示及控制类,类名:MainFrame; 2. 串口收发类,类名:SerialComm;使用的串口通信参数和单片机上的串口通信参数一致。 控制类(MainFrame)主要控制串口收发类(SerialComm)发送过来的数据,然后设置“现在温度”滑条,当“现在温度”超过“报警温度”时则显示报警,如图3.4所示 图3.4 由于我们把JAVA语言的运行平台JDK进行了集成,所以计算机监控软件无需安装即可使用。其使用方法如下: 1. 解压文件夹下的“PC串口通信程序”。 2. 进入解压后的文件夹,打开“温度监控”文件夹下的“温度监控.exe”即可。 4系统测试 4.1测试所使用的仪器 测试所使用的仪器有:数字万用表,温度计,串口调试器软件。 4.2软硬件测试 4.2.1显示(LCD1602)测试及数据 显示(LCD1602)测试方式:单片机AT89S51直接驱动LCD1602显示字符。测试数据如下: 被监测端(发射端): 标准显示 实际显示 Temperature is:: 1234567890+-,./? 监测端(接收端): 标准显示 实际显示 Temperature is:: 1234567890+-,./? 4.2.2温度采集测试及数据 温度采集测试方式:单片机AT89S51接收到DS18B20传来的数据后,在LCD1602上显示原始温度数据及处理过后的温度数据。测试数据如下表: 实际温度℃ 原始数据 测试温度℃ 误差 -6 -3 4.2.3无线接收发送测试及数据 无线接收发测试方法:被监测端(发射端)在LCD1602上显示要发射的数据,通过NRF905发射出去;监测端(接收端)接收到数据后,在LCD1602上显示接收到的数据;收发2字节数据。测试数据如下表: 相距(M) 发射数据 接收数据 <1 3<M<5 5<M<50 >200 4.2.4上位计算机通信测试及数据 上位计算机端采用“串口调试器”;我们用一下方式测试串口通信:单片机端接收“串口调试器”发送过来的数据,然后单片机在LCD1602上显示接收到的数据,最后在把数据传回“串口调试器”。 “串口调试器”发送的数据 LCD1602显示的数据 “串口调试器”接收的数据 5总结 我们的设计完成了题目中的基本部分和发挥部分,采用DS18B20温度传感器很准确及时的采集到当前的温度。通过使用NRF905无线发送接收模块将所采集的温度数据能够在0m~300m的范围内准确无误的发送给监控端(接收端)。采用LCD1602显示模块完成了显示部分,利用串口通信完成了在计算机上显示所接收到的温度数据,同时也给系统增加了报警功能。 附录 计算机监控软件使用说明: 由于我们把JAVA语言的运行平台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显示代码; 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; po2=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,lcdtable[d3]); //显示百位 wr_byte_ram(1,0x43,lcdtable[d2]); //显示十位 wr_byte_ram(1,0x44,lcdtable[d1]); //显示个位 wr_byte_ram(1,0x45,lcdtable[10]); //显示小数点 wr_byte_ram(1,0x46,lcdtable[po4]); //显示1/10位 wr_byte_ram(1,0x47,lcdtable[po3]); //显示1/100位 wr_byte_ram(1,0x48,lcdtable[po2]); //显示1/1000位 wr_byte_ram(1,0x49,lcdtable[po1]); //显示1/10000位 wr_length_ram(1,0x4A,"C",1);//显示温度单位 } void dispNegativeTemp(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(); //配置905 wr_length_ram(1,0x00," Temperature is:",16);//显示提示字符 while(1) { temp=0x0000; temp=read_temp();//读取温度 if(temp!=tempold) //数据有变化者,重新显示 { tempnew=temp; tdatalow=temp&0xff; tdataheight=temp>>8; point=temp&0x000F;//取小数位; point=point*625;//转换为实际温度 if(temp & 0x8000) //处理负温度 { temp=temp&0x0FFF;//去除高4位的符号; temp=temp^0x0FFF;//取反; temp+=1; temp>>=4; //计算温度,除以16; low=temp|0x00; //取低字节 dispNegativeTemp(low); //LCD显示负温度 low=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 lcdtable[]={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; po2=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,lcdtable[d3]); //显示百位 wr_byte_ram(1,0x43,lcdtable[d2]); //显示十位 wr_byte_ram(1,0x44,lcdtable[d1]); //显示个位 wr_byte_ram(1,0x45,lcdtable[10]); //显示小数点 wr_byte_ram(1,0x46,lcdtable[po4]); //显示1/10位 wr_byte_ram(1,0x47,lcdtable[po3]); //显示1/100位 wr_byte_ram(1,0x48,lcdtable[po2]); //显示1/1000位 wr_byte_ram(1,0x49,lcdtable[po1]); //显示1/10000位 wr_length_ram(1,0x4A,"C",1);//显示温度单位 } void dispNegativeTemp(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(); //配置905 init_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=temp>>8; point=temp&0x000F;//取小数位; point=point*625;//转换为实际温度 if(temp & 0x8000) //处理负温度 { temp=temp&0x0FFF;//去除高4位的符号; temp=temp^0x0FFF;//取反; 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; import 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 java.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.SerialPortEvent; 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 MainFrame { private SerialComm serialcomm=null; //串口实例 private SerialPort serialPort=null; //串口实例 private File file=null;//保存报警值 private DataOutputStream fileout=null;//写报警值数据流; private DataInputStream filein=nu
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服