基于Labview串口通信.docx

上传人:b****2 文档编号:2696931 上传时间:2023-05-04 格式:DOCX 页数:13 大小:144.89KB
下载 相关 举报
基于Labview串口通信.docx_第1页
第1页 / 共13页
基于Labview串口通信.docx_第2页
第2页 / 共13页
基于Labview串口通信.docx_第3页
第3页 / 共13页
基于Labview串口通信.docx_第4页
第4页 / 共13页
基于Labview串口通信.docx_第5页
第5页 / 共13页
基于Labview串口通信.docx_第6页
第6页 / 共13页
基于Labview串口通信.docx_第7页
第7页 / 共13页
基于Labview串口通信.docx_第8页
第8页 / 共13页
基于Labview串口通信.docx_第9页
第9页 / 共13页
基于Labview串口通信.docx_第10页
第10页 / 共13页
基于Labview串口通信.docx_第11页
第11页 / 共13页
基于Labview串口通信.docx_第12页
第12页 / 共13页
基于Labview串口通信.docx_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于Labview串口通信.docx

《基于Labview串口通信.docx》由会员分享,可在线阅读,更多相关《基于Labview串口通信.docx(13页珍藏版)》请在冰点文库上搜索。

基于Labview串口通信.docx

基于Labview串口通信

题目:

用串口通信将温度,湿度信息发送到PC机进行显示报警。

要求;需要进行单片机的编程和系统方案的设计

一:

硬件设计及原理图

1:

单片机的选择

由于我们的系统中,单片机要完成的任务只有温度的采集和串口数据的发送,所以我们选择的是既能满足要求又比较便宜的TA89s52这款单片机。

单片机最小系统如下图

2:

温度采集电路

这里我们采集温度的传感器是用的18b20。

它的优点有:

直接输出数字量,精度高达0.0625摄氏度,占用的端口资源少。

3电平转换电路

因为单片机串口发出的数据时使用的是TTL电平,而计算机上的串口用的是RS232电平,所有用了TC232这款电平转换芯片来完成电平的匹配。

二:

软件流程图

三:

单片机系统上的程序:

#include

#include

#include

#defineucharunsignedchar

#defineuintunsignedint;

/*****************************************************************************/

sbitseg1=P2^0;

sbitseg2=P2^1;

sbitseg3=P2^2;

sbitDQ=P1^7;//ds18b20端口

sfrdataled=0x80;//显示数据端口

/**********************************************************************/

uchartemp,s_count=0;

ucharflag_get,count,num,minute,second;

ucharcodetab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//7段数码管段码表共阳

ucharstr[3];

unsignedcharsend_dat[4]={42,00,00,35};//发送数据的格式

/***********************************************************************/

voiddelay1(ucharMS);

unsignedcharReadTemperature(void);

voidInit_DS18B20(void);

unsignedcharReadOneChar(void);

voidWriteOneChar(uchardat);

voiddelay(unsignedinti);

voiduart_init(void);

voidtime_init(void);

//voidsend_data(void);

voidlong_delay(intm);

//voiddelay_c(uinti);

/*主程序*/

main()

{

time_init();

uart_init();

while

(1)

{

str[2]=0x39;//显示C符号

str[0]=tab[temp/10];//十位温度

str[1]=tab[temp%10];//个位温度

if(flag_get==1)//定时读取当前温度

{

temp=ReadTemperature();

flag_get=0;

}

s_count=0;

SBUF=send_dat[s_count++];

long_delay(200);

}

}

voidtim(void)interrupt1using1//中断,用于数码管扫描和温度检测间隔

{

TH0=0xef;//定时器重装值

TL0=0xf0;

num++;

if(num==50)

{num=0;

flag_get=1;//标志位有效

second++;

if(second>=60)

{second=0;

minute++;

}

}

count++;

if(count==1)

{P2=0;

dataled=str[0];}//数码管扫描

if(count==2)

{P2=1;

dataled=str[1];}

if(count==3)

{P2=2;

dataled=str[2];

count=0;}

}

/*************************************************************************************/

voiddelay(unsignedinti)//延时函数

{

while(i--);

}

/***************************************************************************************/

//18b20初始化函数

voidInit_DS18B20(void)

{

unsignedcharx=0;

DQ=1;//DQ复位

delay(8);//稍做延时

DQ=0;//单片机将DQ拉低

delay(80);//精确延时大于480us

DQ=1;//拉高总线

delay(10);

x=DQ;//稍做延时后如果x=0则初始化成功x=1则初始化失败

delay(5);

}

//读一个字节

unsignedcharReadOneChar(void)

{

unsignedchari=0;

unsignedchardat=0;

for(i=8;i>0;i--)

{

DQ=0;//给脉冲信号

dat>>=1;

DQ=1;//给脉冲信号

if(DQ)

dat|=0x80;

delay(5);

}

return(dat);

}

//写一个字节

voidWriteOneChar(unsignedchardat)

{

unsignedchari=0;

for(i=8;i>0;i--)

{

DQ=0;

DQ=dat&0x01;

delay(5);

DQ=1;

dat>>=1;

}

delay(5);

}

//读取温度

unsignedcharReadTemperature(void)

{

unsignedchara=0;

unsignedcharb=0;

unsignedchart=0;

//floattt=0;

Init_DS18B20();

WriteOneChar(0xCC);//跳过读序号列号的操作

WriteOneChar(0x44);//启动温度转换

delay(200);

Init_DS18B20();

WriteOneChar(0xCC);//跳过读序号列号的操作

WriteOneChar(0xBE);//读取温度寄存器等(共可读9个寄存器)前两个就是温度

a=ReadOneChar();

b=ReadOneChar();

//send_dat[2]=b;

//send_dat[3]=a;

b<<=4;

b+=(a&0xf0)>>4;

t=b;

send_dat[1]=t;

//tt=t*0.0625;

//t=tt*10+0.5;//放大10倍输出并四舍五入

return(t);

}

voidtime_init(void)

{

TMOD|=0x01;//定时器设置

TH0=0xef;

TL0=0xf0;

IE=0x82;

TR0=1;

P2=0x00;

count=0;

}

voiduart_init(void)

{

SCON=0x50;/*SCON:

模式1,8-bitUART,使能接收*/

TMOD|=0x20;/*TMOD:

timer1,mode2,8-bitreload*/

TH1=0xFD;/*TH1:

reloadvaluefor9600baud@11.0592MHz*/

TR1=1;/*TR1:

timer1run*/

EA=1;/*打开总中断*/

ES=1;/*打开串口中断*/

}

/*

voidsend_data(void)

{

unsignedchari;

for(i=0;i<3;i++)

{

SBUF=send_dat[i];

delay(1000);

}

}

*/

voidlong_delay(intm)

{

intj,i;

for(i=m;i>0;i--)

for(j=1000;j>0;j--)

;

}

voidUART_SER(void)interrupt4//串行中断服务程序

{

if(TI==1)

{

TI=0;

if(s_count!

=4)

SBUF=send_dat[s_count++];

}

}

四:

LabVIEW程序

1:

对串口基本参数进行配置

2读取单片机发送至串口的数据,如果没有接受到数据就不读取串口

3:

将读取到得数据进行处理,然后用各种显示器件显示出来

4:

测试结果显示

五:

总结

经过演示,本温度报警器可以显示当前温度,并能在温度超过警报值时发出报警信号,通过此温度系统的设计,使我熟悉了使用LabVIEW的串口与其他系统的通信。

但是由于该系统仅使用了一些比较简单的结构,所以程序框图不够简化,这是需要改进的地方,但是这不影响其正常使用。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2