基于labview的串口温度采集系统设计
更新时间:2024-03-28 18:33:01 阅读量: 综合文库 文档下载
-------------------------------------------基于labview的串口温度采集系统设计----------------------------------------------
基于labview的串口温度采集系统设计
邹海军 07082232
(指导教师:徐静云)
摘要:系统利用DSl8B20数字温度传感器和STC公司的STC89C52单片机设计成智能温度采集模块,采集环境温度,将测得数据经串口传送给计算机。创新之处是采用虚拟仪器技术,利用LabVlEW软件编写相应上位机软件,控制采集模块进行温度采集,串口的数据传输,然后对数据处理和显示。
关键词:DSl8B20;温度传感器;STC89C52;单片机;Labview;串口通信
Design of serial temperature acquisition system
based on labview
Zou Haijun 07082232
(Teacher:Xu Jingyun )
Abstract:This system uses DSl8B20 digital temperature sensor and STC's microcontroller STC89C52 to design a smart temperature acquisition module, collecting surrounding's temperature, measured data will be
transmitted to the computer through the serial port. Innovations is the use of virtual instrument technology, software development using LabVlEW
corresponding PC software to control the temperature acquisition module collecting, serial data transfer, then data processing and display.
Keywords:DS18B20;temperature sensor;STC89C52;MCU;Labview; Serial Communication
0 引言
在生产生活中温度测量有着及其重要的意义。本文使用STC89C52单片机作为温度测量和传输的主控芯片,温度传感器采用单总线方式的集成数字温度传感器DSl8B20。由STC89C52和DSl8B20组成温度测量单元。采集得到的数据利用单片机经串口通讯的方式传输至计算机的串口。计算机上位机软件采用基于图形化编辑语言的LabVIEW软件编写,利用其所带的串口操作模块进行数据采集、处理和显示,实现了基于Labview的串口温度测量。
1 硬件设计
该温度测量系统是由上位机和温度测量单元组成。上位机即计算机,实现对温度测量单元控制,通过串口程序发送命令、接收测量数据,对测量数据处理显示。温度测量单元,接收上位机命令,按照命令进行温度测量和数据传输等操作。
1.1系统组成
实现单点温度测量,采用如图1所示结构。上位机和温度测量单元采用RS232串行通信标准。图中上位机发送的信息可以被温度测量单元所接收,温度测量单元发送的信息也可以被上位机接收。温度测量单元中主控单片机串行口采用方式1。
1
-------------------------------------------基于labview的串口温度采集系统设计----------------------------------------------
图1 单点测温系统结构框图
1.2温度测量单元硬件
温度测量单元硬件设计主要分为三个部分;单片机控制单元、温度测量单元和串口通讯。
STC89C52是一种低功耗,高性能CMOS8位微控制器。具有以下标准功能:8k字节Flash,256字节RAM,32位I/0口线,2个16位定时器/计数器,5个中断源2级中断优先权,1个全双工串行口。目前支持5l单片机编译器的语言主要有汇编语言、c语言等。
单片机部分的电路设计如图2所示,主要包括复位电路、晶振电路。
VCCVCCU1P10P11P12P13P14P15P16+C1R131K123456781312151422ufS1SW-PBP10P11P12P13P14P15P16P17INT1INT0T1T0EA/VPX1X2RESETRDWR8051P00P01P02P03P04P05P06P07P20P21P22P23P24P25P26P2739383736353433322122232425262728R2R3R4R5R6R7R8R9P00P01P02P03P04P05P06P0731RSTX1X2191891716RSTRXDTXDALE/PPSEN10113029P30P31R1210KC2X130pY111.0592MC3X230p10K10K10K10K10K10K10K10K
图2 单片机部分电路
温度测量部分,温度传感器采用单总线方式的集成数宁温度传感器DSl8B20。DSl8B20数字温度计提供9位(二进制)温度读数,指示器件的温度。信息经过单线接口送入DSl8B20或从DSl8B20送出,因此从主机CPU到DSl8B20仅需一条线(和地线),DSl8B20的电源可以由数据线本身提供而不需要外部电源。DSl8B20的测量范围从一55摄氏度到+125摄氏度,增量值为0.5摄氏度。可在1s(典型值)内把温度变换成数字。电路原理图如图3所示。
2
-------------------------------------------基于labview的串口温度采集系统设计----------------------------------------------
VCCR14.7KJ1321DS18B20P10
图3 温度测量电路
串口通信采用Max232实行电平转换,电路原理图如图5所示。
C41uf1345P31111012915M1C1+C1-C2+C2-T1INT2INR1OUTR2OUTGNDMAX232VDDVCC216C6+VCCC7++C5+1uf1uf1ufT1OUTT2OUTR1INR2INVEE147138C861ufP30594837261J4DB9图4 串口电路
2 软件设计 2.1下位机软件
下位机软件由C语言编写,主要包括DSl8B20的读写和串口通信两个部分。串行通信采用中断方式,波特率为9600,测温单元主控单片机串行口工作在方式1。完整程序见附录。程序流程图如下:
图5 程序流程图
3
+
-------------------------------------------基于labview的串口温度采集系统设计----------------------------------------------
2.2上位机软件
上位机软件采用LabVIEW编写。LabVIEW(Laboratory Virtual instrument Engineering)是一种图形化的编程语言,它广泛应用于工业界、学术界和研究实验室,被视为一个标准的数据采集和仪器控制软件。LabVIEW有一个完成任何编程任务的庞大函数库。LabVIEW的函数库包括数据采集、GPIB、串口控制、数据分析、数据显示及数据存储等等,是一个功能强大且灵活的软件。利用它可以方便地建立自己的虚拟仪器,其图形化的界面使得编程及使用过程都生动有趣。
图形化的程序语言,又称为“G”语言。使用这种语言编程时,基本上不写程序代码,取而代之的是流程图。提供了实现仪器编程和数据采集系统的便捷途径。使用它进行原理研究、设计、测试并实现仪器系统时,可以大大提高工作效率。利用LabVIEW,可产生独立运行的可执行文件,它是一个真正的32位编译器。
图6 上位机界面
3 结束语
本系统利用数字化的温度传感器和单片机组成测温单元,实时、方便、可靠的实现对单点温度测量,通过RS232串口将数据传送给计算机。在虚拟仪器开发平台下编写了控制软件,计算机实现控制测温单元,与测温单元通信,计算机将接收到的数据进行处理、显示。该系统具有模块化、体积小、可靠性高、可扩展功能强等优点.
参考文献:
[1]张毅刚等.单片机原理与应用设计.北京:电子工业出版社,2008.4
[2]求是科技.8051系列单片机C程序设计完全手册.北京:人民邮电出版社,2006.4
[3]张桐等.精通LabVIEW程序设计.北京:电子工业出版社,2008.12
4
-------------------------------------------基于labview的串口温度采集系统设计----------------------------------------------
附录:
#include
#include
sbit DQ=P2^7; uint h,temp; bit flag;
uchar code dian_table[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,
0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09}; //温度小数部分用查表法 uchar data temp_data[2]={0x00,0x00}; //读出温度暂放 uchar data display[5]={0x00,0x00,0x00,0x00,0x00};
//显示单元数据,共4个数据和一个运算暂用 uchar idata temp_display[]={0x30,0x31,0x32,0x33,0x34,
0x35,0x36,0x37,0x38,0x39};
void delay(uint t) //11us延时函数 {for (;t>0;t--);}
void ow_reset(void) //DS18B20复位函数 { char presence=1; while(presence) { while(presence)
{ DQ=1;_nop_();_nop_();//从高拉倒低
DQ=0; delay(50); //550 us
DQ=1; delay(6); //66 us
presence=DQ; //presence=0 复位成功,继续下一步 } delay(45); //延时500 us presence=~DQ;
} DQ=1; //拉高电平 }
void write_byte(uchar val) //DS18B20写命令函数 { uchar i;
for(i=8;i>0;i--)
{ DQ=1;_nop_();_nop_(); //从高拉倒低 DQ=0;_nop_();_nop_();_nop_();_nop_(); //5 us
DQ=val&0x01; //最低位移出 delay(6); //66 us val=val/2; //右移1位 }DQ=1; delay(1); }
5
-------------------------------------------基于labview的串口温度采集系统设计----------------------------------------------
uchar read_byte(void) //DS18B20读1字节函数 { uchar i;
uchar value=0; for(i=8;i>0;i--)
{ DQ=1;_nop_();_nop_(); value>>=1;
DQ=0;_nop_();_nop_();_nop_();_nop_(); //4 us DQ=1;_nop_();_nop_();_nop_();_nop_(); //4 us if(DQ)value|=0x80;
delay(6); //66 us }DQ=1;
return(value); }
read_temp() //读出温度函数
{ ow_reset(); //总线复位 delay(200);
write_byte(0xcc); //发命令 write_byte(0x44); //发转换命令 ow_reset(); delay(1);
write_byte(0xcc); //发命令 write_byte(0xbe);
temp_data[0]=read_byte(); //读温度值的低字节 temp_data[1]=read_byte(); //读温度值的高字节 temp=temp_data[1];
temp<<=8; temp=temp|temp_data[0]; // 两字节合成一个整型变量。 return temp; //返回温度值 }
work_temp(uint tem) //温度数据处理函数 { uchar n=0;
if(tem>6348) // 温度值正负判断
{tem=65536-tem;n=1;} // 负温度求补码,标志位置1 display[4]=tem&0x0f; // 取小数部分的值
display[0]=dian_table[display[4]]; // 存入小数部分显示值 temp_display[0]=display[0]+0x30;
display[4]=tem>>4; // 取中间八位,即整数部分的值 display[3]=display[4]/100; // 取百位数据暂存 temp_display[4]=display[3]+0x30;
display[1]=display[4]0; // 取后两位数据暂存 display[2]=display[1]/10; // 取十位数据暂存 temp_display[3]=display[2]+0x30; display[1]=display[1];
temp_display[2]=display[1]+0x30;
6
-------------------------------------------基于labview的串口温度采集系统设计----------------------------------------------
}
void init() //串口初始化
{ SCON= 0x50; //串口方式1 允许接收 PCON=0; //SMOD=0
TMOD= 0x20; //定时器1定时方式2 TH1= 0xfd; //11.0592MHz 9600波特率 TL1= 0xfd; TR1= 1; EA = 1; ES = 1; }
void main() //主函数 { uint i; init();
ow_reset(); //开机先转换一次 write_byte(0xcc); //Skip ROM write_byte(0x44); //发转换命令 while(1)
{ work_temp(read_temp()); //处理温度数据 if(flag==1)
{ for(i=0;i<5;i++)
{ SBUF=temp_display[4-i]; while(!TI); TI=0; }
flag=0; } } }
void serial() interrupt 4 //串口中断 { if(RI)
{ RI = 0; flag=1; } }
7
temp_display[1]='.';
if(!display[3])
{ temp_display[4]=' '; //最高位为0时不显示 if(!display[2]) {
temp_display[3]=' '; //次高位为0时不显示
} }
if(n){temp_display[4]='-';} //负温度时最高位显示\
正在阅读:
基于labview的串口温度采集系统设计03-28
常见的肝炎类型01-06
力控工业监控组态软件01-09
异步电动机故障诊断技术的研究05-10
24.4.2弧长及扇形面积习题.ppt204-22
2010初中信息技术考试题库,教师编制04-20
肝胆外科相关文章(4)10-06
新西方经济学重点复习资料03-16
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 串口
- 采集
- 温度
- 基于
- labview
- 设计
- 系统
- 企业赢得“80后”和“90后”的营销策略
- 高二物理电磁感应单元测试题
- 普通起重机与变频起重机的优缺点分析
- 2016年成人高考医学综合真题及答案
- 军事医学科学院三级以上研究员(146)
- 北师大版七上第3课《传说时代的文明曙光》word教学设计
- 赞美荷花的句子大全
- 富民强县计划申报材料 - 图文
- 3年级数学思维训练汇编-第8讲 和差倍问题
- 党课测试题及答案
- MATLAB - 主成分数据处理
- -基于PLC的楼宇消防系统设计
- 第一章 总则
- 妙用手势,让数学课堂更灵动
- 内科学主治医师(中级职称)考试题库及答案(基础知识)
- 全县特种设备安全生产工作会议上的讲话
- 青池小学创建乒乓球特色学校实施方案
- 物业违建拆除通知书
- 六年级作文痛读《遮蔽与记忆赵一曼》刘志华
- 2017年 安规考试题库 工作票实操题库-配电