基于51单片机和Labview的多路温度采集系统
基于51单片机和Labview的多路模拟数据采集(AD采集)

write_first(3,adc3);
write_first(12,adc2);
write_second(3,adc1);
write_second(12,adc0); } }
void intrr() interrupt 4
//接收中断
{
RI = 0;
tmp = SBUF;
// 暂存接收到的数据
if(tmp==0x7A) {
* *
* *
实现 DA 输出 0 到 5V 的变化
* *
通过电压比较放大为 0 到 15V 输出
* *
检测采样电阻的电压,计算出输出电流
******************************************************************************* ****/ #include "main.h" #include "DAAD.h" #include "lcd1602.h" //#include "keyscan.h" #define PCF8591 0x90 //PCF8591 地址
ES=1;//ES-串行中断允许控制位 ES = 1 允许串行中断。 TR1=1;//启动定时器开始工作 } void send_char(unsigned char txd)// 传送一个字符 { SBUF = txd; while(!TI); // 等特数据传送 TI = 0; // 清除数据传送标志 }
main() {
csh(); lcd_init(); dac = 65; DACconversion(PCF8591,0x40, 65); //DAC 数模转换 while(1) {
最新51单片机的多路温度采集控制系统设计汇总

51单片机的多路温度采集控制系统设计基于51单片机的多路温度采集控制系统设计言:随着现代信息技术的飞速发展,温度测量控制系统在工业、农业及人们的日常生活中扮演着一个越来越重要的角色,它对人们的生活具有很大的影响,所以温度采集控制系统的设计与研究有十分重要的意义。
本次设计的目的在于学习基于51单片机的多路温度采集控制系统设计的基本流程。
本设计采用单片机作为数据处理与控制单元,为了进行数据处理,单片机控制数字温度传感器,把温度信号通过单总线从数字温度传感器传递到单片机上。
单片机数据处理之后,发出控制信息改变报警和控制执行模块的状态,同时将当前温度信息发送到LED进行显示。
本系统可以实现多路温度信号采集与显示,可以使用按键来设置温度限定值,通过进行温度数据的运算处理,发出控制信号达到控制蜂鸣器和继电器的目的。
我所采用的控制芯片为AT89c51,此芯片功能较为强大,能够满足设计要求。
通过对电路的设计,对芯片的外围扩展,来达到对某一车间温度的控制和调节功能。
关键词:温度多路温度采集驱动电路正文:1、温度控制器电路设计本电路由89C51单片机温度传感器、模数转换器ADC0809、窜入并出移位寄存器74LS164、数码管、和LED显示电路等组成。
由热敏电阻温度传感器测量环境温度,将其电压值送入ADC0809的IN0通道进行模数转换,转换所得的数字量由数据端D7-D0输出到89C51的P0口,经软件处理后将测量的温度值经单片机的RXD端窜行输出到74LS164,经74LS164 窜并转换后,输出到数码管的7个显示段,用数字形式显示出当前的温度值。
89C51的P2.0、P2.1、P2.2分别接入ADC0809通道地址选择端A、B、C,因此ADC0809的IN0通道的地址为F0FFH。
输出驱动控制信号由p1.0输出,4个LED 为状态指示,其中,LED1为输出驱动指示,LED2为温度正常指示,LED3为高于上限温度指示,LED4为低于下限温度指示。
基于LabVIEW与单片机的温度采集监控系统设计

基于 犔犪犫犞犐犈犠 与单片机的温度采集监控系统设计
朱 银 龙1,2,3, 华 超1, 陈 昕1, 耿 令 波2, 胡 志 强2, 宋 爱 国3
(1. 南京林业大学 机械电子工程学院,南京 210037; 2. 机器人学国家重点实验室 (中国科学院沈阳自动化研究所),沈阳 110016;
3. 东南大学 仪器科学与工程学院,南京 210096)
(1.CollegeofMechanicalandElectronicEngineering,NanjingForestryUniversity,Nanjing 210037,China;2.Statekey LaboratoryofRobotics,ShenyangInstituteofAutomation,ChineseAcademyofSciences,Shenyang 110016,China; 3.SchoolofMaterialsScience & Engineering,SoutheastUniversity,Nanjing 210096,China) 犃犫狊狋狉犪犮狋:Atemperature measurementandcontrolsystem wasproposed withdigitalthermometerDS18B20and AT89C51as
将虚拟仪器技术引入温度监测研究领域已是一个重要 趋势,例如 王 恒 海 等 开 发 的 基 于 LabVIEW 的 温 度 测 控 系 统 、 [4] 隋秀梅等设计的基于 LabVIEW 的八路智 能 温 度 巡 检 仪 、 [5] 吴卓葵等设计的基于 LabVIEW 的多点报 警 温 度 监 测 系统 等 [6] 。这 些 监 测 系 统 通 常 采 用 数 据 采 集 卡 采 集 温 度, 数据采集比较方便,但缺少灵活性且价格相对较高。只能 在上位机显示温度,难以在监测装置端实现温度显示,不 利于现场 操 作 人 员 实 时 观 察, 没 有 提 出 相 应 的 温 控 方 案。 针对以上问题,本文提出一种基于 LabVIEW 和单片机 的温 度监控系统,采用低功耗的 AT89C51单 片机 和 数 字 温 度 传 感器 DS18B20作 为 硬 件 构 成 温 度 采 集 节 点, 在 LabVIEW 平台 上 通 过 调 用 VISA 库 函 数 配 置 设 备 参 数 实 现 单 片 机 串 口与 PC 机之间的数据传输。开发系统软件界 面 实现 温度采 集与健康。
《2024年基于单片机和LabVIEW的多路数据采集系统设计》范文

《基于单片机和LabVIEW的多路数据采集系统设计》篇一一、引言随着科技的飞速发展,多路数据采集系统在众多领域的应用日益广泛。
基于单片机和LabVIEW技术的多路数据采集系统,因其高效、可靠、灵活的特点,正逐渐成为现代数据采集的主流方案。
本文将详细介绍基于单片机和LabVIEW的多路数据采集系统的设计思路、实现方法和应用前景。
二、系统设计概述本系统以单片机为核心控制器,采用LabVIEW软件进行上位机界面设计和数据处理。
系统可实现多路数据的同步采集、实时显示、数据存储及远程传输等功能。
通过单片机的高效数据处理能力和LabVIEW的强大数据分析能力,实现对多路数据的精确采集和处理。
三、硬件设计1. 单片机选择:选用高性能、低功耗的单片机作为核心控制器,负责数据的采集、处理和传输。
2. 数据采集模块:根据实际需求,设计多路数据采集模块,包括传感器接口、数据转换电路等。
3. 通信接口:设计合适的通信接口,如USB、串口等,实现单片机与上位机之间的数据传输。
4. 电源模块:为整个系统提供稳定的电源供应,保证系统的正常运行。
四、软件设计1. LabVIEW界面设计:使用LabVIEW软件进行上位机界面设计,包括数据采集、数据处理、数据显示等模块。
2. 数据处理算法:根据实际需求,设计合适的数据处理算法,如滤波、放大、数字化等。
3. 数据存储与传输:将处理后的数据存储到本地或通过网络传输到其他设备。
4. 程序调试与优化:对程序进行调试和优化,保证系统的稳定性和性能。
五、系统实现1. 单片机编程:使用C语言或汇编语言对单片机进行编程,实现数据的采集、处理和传输。
2. LabVIEW程序设计:使用LabVIEW软件进行上位机程序设计,实现数据的实时显示、存储和传输。
3. 系统调试:对系统进行整体调试,确保各模块的正常运行和数据的准确性。
4. 系统优化:根据实际运行情况,对系统进行优化,提高系统的性能和稳定性。
六、应用前景基于单片机和LabVIEW的多路数据采集系统具有广泛的应用前景。
《2024年基于单片机和LabVIEW的多路数据采集系统设计》范文

《基于单片机和LabVIEW的多路数据采集系统设计》篇一一、引言随着科技的发展,多路数据采集系统在工业、医疗、环境监测等领域的应用越来越广泛。
为了满足多路数据的高效、准确采集需求,本文提出了一种基于单片机和LabVIEW的多路数据采集系统设计。
该系统设计旨在实现多路信号的同时采集、处理及实时监控,以适应复杂多变的应用环境。
二、系统概述本系统采用单片机作为核心控制器,结合LabVIEW软件进行数据采集和处理。
系统由多个传感器模块、单片机控制器、数据传输模块以及上位机软件组成。
传感器模块负责实时监测各种物理量,如温度、湿度、压力等,并将采集到的数据传输给单片机控制器。
单片机控制器对数据进行处理和存储,并通过数据传输模块将数据发送至上位机软件进行进一步的处理和显示。
三、硬件设计1. 传感器模块:传感器模块采用高精度、高稳定性的传感器,如温度传感器、湿度传感器等,实现对物理量的实时监测。
传感器模块的输出为数字信号或模拟信号,方便与单片机进行通信。
2. 单片机控制器:采用具有高速处理能力的单片机作为核心控制器,实现对数据的快速处理和存储。
单片机与传感器模块和数据传输模块进行通信,实现数据的实时采集和传输。
3. 数据传输模块:数据传输模块采用无线或有线的方式,将单片机控制器的数据传输至上位机软件。
无线传输方式具有灵活性高、安装方便等优点,但需要考虑信号干扰和传输距离的问题;有线传输方式则具有传输速度快、稳定性好等优点。
四、软件设计1. 单片机程序设计:单片机程序采用C语言编写,实现对传感器数据的实时采集、处理和存储。
同时,程序还需要与上位机软件进行通信,实现数据的实时传输。
2. LabVIEW程序设计:LabVIEW程序采用图形化编程语言编写,实现对单片机传输的数据进行实时处理和显示。
同时,LabVIEW程序还可以实现对数据的存储、分析和报警等功能。
五、系统实现1. 数据采集:传感器模块实时监测各种物理量,并将采集到的数据传输给单片机控制器。
《2024年基于单片机和LabVIEW的多路数据采集系统设计》范文

《基于单片机和LabVIEW的多路数据采集系统设计》篇一一、引言随着现代工业自动化和智能化的发展,多路数据采集系统在各种应用领域中发挥着越来越重要的作用。
为了满足高精度、高效率的数据采集需求,本文提出了一种基于单片机和LabVIEW 的多路数据采集系统设计。
该系统不仅具备多路数据同时采集和处理的能力,而且具有良好的实时性和可扩展性。
二、系统设计概述本系统以单片机作为核心控制器,通过多路传感器实现对多种数据的实时采集。
同时,利用LabVIEW软件进行上位机界面设计和数据处理。
系统设计主要包括硬件设计和软件设计两部分。
三、硬件设计1. 单片机选择:选用性能稳定、处理速度快、功耗低的单片机作为核心控制器。
单片机应具备多路ADC(模数转换器)接口,以便于连接多种传感器。
2. 传感器选择:根据实际需求选择合适的传感器,如温度传感器、湿度传感器、压力传感器等。
传感器应具备高精度、低噪声、快速响应等特点。
3. 数据采集电路:设计多路数据采集电路,将传感器输出的信号转换为单片机可处理的数字信号。
4. 通信接口:设计单片机与上位机之间的通信接口,如USB、串口等,以便于数据的传输和处理。
四、软件设计1. LabVIEW界面设计:利用LabVIEW软件进行上位机界面设计,包括数据采集、数据处理、数据存储等功能。
界面应具备友好的操作界面和丰富的功能选项。
2. 数据处理算法:设计合适的数据处理算法,如滤波、放大、计算等,以提高数据的准确性和可靠性。
3. 通信协议:制定单片机与上位机之间的通信协议,确保数据的准确传输和实时性。
4. 系统调试与优化:对系统进行调试和优化,确保系统的稳定性和可靠性。
五、系统实现1. 硬件连接:将单片机与传感器、通信接口等硬件设备连接起来,形成完整的数据采集系统。
2. 软件编程:编写单片机和上位机的程序,实现数据的实时采集、处理和传输。
3. 系统测试:对系统进行测试,包括功能测试、性能测试和稳定性测试等,确保系统满足设计要求。
毕业设计(论文)基于51单片机的多路温度采集控制系统设计
基于51单片机的多路温度采集控制系统设计言:随着现代信息技术的飞速发展,温度测量控制系统在工业、农业及人们的日常生活中扮演着一个越来越重要的角色,它对人们的生活具有很大的影响,所以温度采集控制系统的设计与研究有十分重要的意义。
本次设计的目的在于学习基于51单片机的多路温度采集控制系统设计的基本流程。
本设计采用单片机作为数据处理与控制单元,为了进行数据处理,单片机控制数字温度传感器,把温度信号通过单总线从数字温度传感器传递到单片机上。
单片机数据处理之后,发出控制信息改变报警和控制执行模块的状态,同时将当前温度信息发送到LED进行显示。
本系统可以实现多路温度信号采集与显示,可以使用按键来设置温度限定值,通过进行温度数据的运算处理,发出控制信号达到控制蜂鸣器和继电器的目的。
我所采用的控制芯片为AT89c51,此芯片功能较为强大,能够满足设计要求。
通过对电路的设计,对芯片的外围扩展,来达到对某一车间温度的控制和调节功能。
关键词:温度多路温度采集驱动电路正文:1、温度控制器电路设计本电路由89C51单片机温度传感器、模数转换器ADC0809、窜入并出移位寄存器74LS164、数码管、和LED显示电路等组成。
由热敏电阻温度传感器测量环境温度,将其电压值送入ADC0809的IN0通道进行模数转换,转换所得的数字量由数据端D7-D0输出到89C51的P0口,经软件处理后将测量的温度值经单片机的RXD端窜行输出到74LS164,经74LS164 窜并转换后,输出到数码管的7个显示段,用数字形式显示出当前的温度值。
89C51的P2.0、P2.1、P2.2分别接入ADC0809通道地址选择端A、B、C,因此ADC0809的IN0通道的地址为F0FFH。
输出驱动控制信号由p1.0输出,4个LED为状态指示,其中,LED1为输出驱动指示,LED2为温度正常指示,LED3为高于上限温度指示,LED4为低于下限温度指示。
当温度高于上限温度值时,有p1.0输出驱动信号,驱动外设电路工作,同时LED1亮、LED2灭、LED3亮、LED4灭。
《2024年基于单片机和LabVIEW的多路数据采集系统设计》范文
《基于单片机和LabVIEW的多路数据采集系统设计》篇一一、引言在现代工业和科学研究领域中,数据采集系统的设计与实现已成为一种重要且必要的任务。
通过设计一种基于单片机和LabVIEW的多路数据采集系统,可以有效地对多路数据进行高效、快速且精确的采集。
该系统具有多路并行数据传输和处理能力,以及高度自动化和可扩展的特点,能够满足各种复杂应用场景的需求。
二、系统设计概述本系统设计以单片机作为核心控制器,通过与LabVIEW软件相结合,实现多路数据的实时采集、处理和显示。
系统主要由以下几个部分组成:单片机控制器、多路数据采集模块、数据传输模块、LabVIEW上位机软件等。
三、硬件设计1. 单片机控制器:作为整个系统的核心,单片机控制器负责协调各个模块的工作,并执行上位机软件的指令。
本系统采用高性能的单片机,具有高速处理能力和低功耗的特点。
2. 多路数据采集模块:该模块负责实现对多路数据的实时采集。
通过与各种传感器相连接,实现对温度、湿度、压力、电压等多种数据的采集。
每个数据采集通道都具有一定的滤波和抗干扰能力,以确保数据的准确性。
3. 数据传输模块:该模块负责将单片机控制器处理后的数据传输到上位机软件进行进一步的处理和显示。
本系统采用高速、稳定的通信协议,确保数据的实时传输和可靠性。
四、软件设计1. LabVIEW上位机软件:作为整个系统的控制中心,LabVIEW上位机软件负责实现对单片机的控制、数据的处理和显示。
通过编写各种控制算法和显示界面,实现对多路数据的实时监控和数据处理。
2. 数据处理与算法:在LabVIEW上位机软件中,通过编写各种数据处理算法,实现对数据的滤波、去噪、平滑处理等操作,以提高数据的准确性和可靠性。
同时,通过编写各种分析算法,实现对数据的进一步分析和处理。
3. 用户界面设计:为方便用户使用和操作,本系统设计了友好的用户界面。
用户可以通过界面实现对单片机的控制、数据的查看和处理等操作。
基于51单片机温度采集系统
基于51单片机温度采集系统姓名:学号:班级:1. 摘要:本系统基于51系列的单片机AT89C51,选用电子开关CD4051分别对三路温度信号进行控制,经运算放大器与A/D双积分式转换芯片ICL7135相连,将数据采集进入控制器,进而对其进行控制显示。
2. 方案选择:被控对象:设计要求选用热电偶对温度进行采集,在用热电偶进行温度测量时,热电偶的冷端补偿是必不可少的,从热电偶的测温原理知道,热电偶热电势大小不但与热端温度有关,而且与冷端温度有关。
只有在冷端温度恒定的情况下,热电势才能正确反映热端温度大小。
根据系统整体流程选用K型的热电偶,其输出热电势在0-20mV 之间。
本系统采用可编程测温集成器件18B20,其输出数据已转换为串行输出的数字量,较为容易采集。
信号采集通路:系统是对三路温度信号进行采集因此需要选用一片电子开关芯片,由于信号经电子开关后接运算放大器,电子开关的导通电阻不会对温度信号产生影响,因此可选用成本较低的,导通电阻稍大的电子开关芯片CD4051。
为防止零点漂移,应将地端得电压信号也采集进CPU。
信号的放大滤波电路:热电偶采集的温度信号仅为mv级,不能满足A/D ICL7135对输入电压的要求,因此要将此信号进行放大可选择比较精密的运放OP07,为保证CD4051的导通电阻不会影响运算放大器的增益,使CD4051的输出信号直接与OP07的同向输入端相连。
在采集温度时,会受到现场电磁的干扰,具有工频50HZ的干扰信号,所以要对信号进行滤波处理,本系统采用比较简单的RC滤波电路。
A/D转换芯片:热电偶采集的温度信号为模拟信号,要想与单片机相连就需要用数模转换芯片,由于ICL7135是双积分式的转换芯片,其转换精度可达1/20000,又可有效的抵抗外界干扰。
控制芯片:此系统对数据处理的要求不高,可选用成本较低,应用比较广泛的51系列单片机AT89C51。
显示部分:将采集进单片机的温度信号用LED数码管进行显示,虽然LCD能很方便的编程显示,但其成本是数码管的十多倍,所以选用成本较为低廉的数码管。
基于LabView和51单片机的温度报警器
uchar Ds18b20Init()
{
uchar i;
DSPORT=0; //拉低总线
delay_15us(33); //延时 495us
DSPORT=1;
i=0;
while(DSPO RT)
{
i++;
5
武汉理工大学《测控设备软硬件集成设计》课程设计说明书
if(i>5) {
return 0; //5ms 没有初始化成功,则认为初始化失败 } delay_1ms(1); } return 1; }
3.2.4 从 DS18B20 读取数据
图 3.4 DS18B20 读时序图 由时序图可知:读周期是从主机把单总线拉低 1 微秒之后就得释放单总线为高电平, 以让 DS18B20 把数据传输到单总线上。作为从机 DS18B20 在检测到总线被拉低 1 微秒后, 便开始送出数据,若是要送出 0 就把总线拉为低电平直到读周期结束。若要送出 1 则释放 总线为高电平。主机在一开始拉低总线 1 微秒后释放总线,然后在包括前面的拉低总线电 平 1 微秒在内的 15 微秒时间内完成对总线进行采样检测,采样期内总线为低电平则确认 为 0。采样期内总线为高电平则确认为 1。完成一个读时序过程,至少需要 60 微秒才能完 成。
为了保证测量温度的准确性和实时性,本次设计采用了 DS18B20 温度传感器。DS18B20 是一种具有独特的单线接口方式的数字温度计,在与微控制器(MCU)连接时仅需要一个接 口即可实现微处理器与 DS18B20 的双向通讯,测温范围为-55℃~+125℃。在-10℃~+85℃ 范围内,精度为±0.5℃,能够满足测量的精度需要。DS18B20 的可编程的分辨率为 9~12 位 温度转换为 12 位数字格式最大值为 750 毫秒,能够满足测量的实时性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
干货联盟原理图外接USB转TTL线最小系统传感器程序/*************************此部分为18B20的驱动程序*************************************/#include <reg52.H>#include <intrins.h>sbit D18B20=P3^7;#define NOP() _nop_() /* 定义空指令*/#define _Nop() _nop_() /*定义空指令*/void TempDelay (unsigned char idata us);void Init18b20 (void);void WriteByte (unsigned char idata wr); //单字节写入void read_bytes (unsigned char idata j);unsigned char CRC (unsigned char j);void GemTemp (void);void Config18b20 (void);void ReadID (void);void TemperatuerResult(void);bit flag;unsigned int idata Temperature;unsigned char idata temp_buff[9]; //存储读取的字节,read scratchpad为9字节,read rom ID 为8字节unsigned char idata id_buff[8];unsigned char idata *p,TIM;unsigned char idata crc_data;unsigned char code CrcTable [256]={0, 94, 188, 226, 97, 63, 221, 131, 194, 156, 126, 32, 163, 253, 31, 65, 157, 195, 33, 127, 252, 162, 64, 30, 95, 1, 227, 189, 62, 96, 130, 220, 35, 125, 159, 193, 66, 28, 254, 160, 225, 191, 93, 3, 128, 222, 60, 98, 190, 224, 2, 92, 223, 129, 99, 61, 124, 34, 192, 158, 29, 67, 161, 255,70, 24, 250, 164, 39, 121, 155, 197, 132, 218, 56, 102, 229, 187, 89, 7,219, 133, 103, 57, 186, 228, 6, 88, 25, 71, 165, 251, 120, 38, 196, 154, 101, 59, 217, 135, 4, 90, 184, 230, 167, 249, 27, 69, 198, 152, 122, 36, 248, 166, 68, 26, 153, 199, 37, 123, 58, 100, 134, 216, 91, 5, 231, 185, 140, 210, 48, 110, 237, 179, 81, 15, 78, 16, 242, 172, 47, 113, 147, 205, 17, 79, 173, 243, 112, 46, 204, 146, 211, 141, 111, 49, 178, 236, 14, 80,175, 241, 19, 77, 206, 144, 114, 44, 109, 51, 209, 143, 12, 82, 176, 238, 50, 108, 142, 208, 83, 13, 239, 177, 240, 174, 76, 18, 145, 207, 45, 115,202, 148, 118, 40, 171, 245, 23, 73, 8, 86, 180, 234, 105, 55, 213, 139, 87, 9, 235, 181, 54, 104, 138, 212, 149, 203, 41, 119, 244, 170, 72, 22,233, 183, 85, 11, 136, 214, 52, 106, 43, 117, 151, 201, 74, 20, 246, 168,116, 42, 200, 150, 21, 75, 169, 247, 182, 232, 10, 84, 215, 137, 107, 53};///*************************************************************Function:延时处理*parameter:*Return:*Modify:*************************************************************/void TempDelay (unsigned char idata us){while(us--);}/************************************************************ *Function:18B20初始化*parameter:*Return:*Modify:*************************************************************/ void Init18b20 (void){D18B20=1;_nop_();D18B20=0;TempDelay(75); //delay 530 uS//80 _nop_();D18B20=1;TempDelay(12); //delay 100 uS//14 _nop_();_nop_();_nop_();if(D18B20==0)flag = 1; //detect 1820 success! elseflag = 0; //detect 1820 fail!TempDelay(18); //20_nop_();_nop_();D18B20 = 1;}/************************************************************ *Function:向18B20写入一个字节*parameter:*Return:*Modify:*************************************************************/ void WriteByte (unsigned char idata wr) //单字节写入{unsigned char idata i;for (i=0;i<8;i++){D18B20 = 0;_nop_();D18B20=wr&0x01;TempDelay(2); //delay 45 uS //3_nop_();_nop_();D18B20=1;wr >>= 1;}}/************************************************************ *Function:读18B20的一个字节*parameter:*Return:*Modify:*************************************************************/ unsigned char ReadByte (void) //读取单字节{unsigned char idata i,u=0;for(i=0;i<8;i++){D18B20 = 0;u >>= 1;D18B20 = 1;if(D18B20==1)u |= 0x80;TempDelay (2);_nop_();}return(u);}/************************************************************ *Function:读18B20*parameter:*Return:*Modify:*************************************************************/ void read_bytes (unsigned char idata j){unsigned char idata i;for(i=0;i<j;i++){*p = ReadByte();p++;}}/************************************************************ *Function:CRC校验*parameter:*Return:*Modify:*************************************************************/ unsigned char CRC (unsigned char j){unsigned char idata i,crc_data=0;for(i=0;i<j;i++) //查表校验crc_data = CrcTable[crc_data^temp_buff[i]];return (crc_data);}/************************************************************ *Function:读取温度*parameter:*Return:*Modify:*************************************************************/ void GemTemp (void){read_bytes (9);if (CRC(9)==0) //校验正确{Temperature = temp_buff[1]*0x100 + temp_buff[0];// Temperature *= 0.625;Temperature /= 16;TempDelay(1);}}/************************************************************ *Function:内部配置*parameter:*Return:*Modify:*************************************************************/void Config18b20 (void) //重新配置报警限定值和分辨率{Init18b20();WriteByte(0xcc); //skip romWriteByte(0x4e); //write scratchpadWriteByte(0x19); //上限WriteByte(0x1a); //下限WriteByte(0x7f); //set 11 bit (0.125)Init18b20();WriteByte(0xcc); //skip romWriteByte(0x48); //保存设定值Init18b20();WriteByte(0xcc); //skip romWriteByte(0xb8); //回调设定值}/************************************************************ *Function:读18B20ID*parameter:*Return:*Modify:*************************************************************/ void ReadID (void)//读取器件id{Init18b20();WriteByte(0x33); //read romread_bytes(8);}/************************************************************ *Function:18B20ID全处理*parameter:*Return:*Modify:*************************************************************/ void TemperatuerResult(void){p = id_buff;ReadID();Config18b20();Init18b20 ();WriteByte(0xcc); //skip romWriteByte(0x44); //Temperature convertInit18b20 ();WriteByte(0xcc); //skip romWriteByte(0xbe); //read Temperaturep = temp_buff;GemTemp();}void GetT emp(){if(TIM==100) //每隔1000ms 读取温度{ TIM=0;TemperatuerResult();}}/************************************* [ t1 (10ms)中断] 中断*************************************/ void timer1() interrupt 1{TH0=(65536-10000)/256;TL0=(65536-10000)%256;TIM++;}} Labview界面。