基于Labview串口通信Word文档下载推荐.docx
《基于Labview串口通信Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《基于Labview串口通信Word文档下载推荐.docx(13页珍藏版)》请在冰点文库上搜索。
![基于Labview串口通信Word文档下载推荐.docx](https://file1.bingdoc.com/fileroot1/2023-5/4/ffdb5ca7-12e6-4bde-b1dd-4dab4ed20df6/ffdb5ca7-12e6-4bde-b1dd-4dab4ed20df61.gif)
#include<
REG52.H>
#include<
math.h>
INTRINS.H>
#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
//拉高总线
delay(10);
x=DQ;
//稍做延时后如果x=0则初始化成功x=1则初始化失败
delay(5);
//读一个字节
unsignedcharReadOneChar(void)
unsignedchari=0;
unsignedchardat=0;
for(i=8;
i>
0;
i--)
//给脉冲信号
dat>
>
=1;
if(DQ)
dat|=0x80;
return(dat);
//写一个字节
voidWriteOneChar(unsignedchardat)
unsignedchari=0;
for(i=8;
i>
i--)
DQ=dat&
0x01;
delay(5);
//读取温度
unsignedcharReadTemperature(void)
unsignedchara=0;
unsignedcharb=0;
unsignedchart=0;
//floattt=0;
Init_DS18B20();
WriteOneChar(0xCC);
//跳过读序号列号的操作
WriteOneChar(0x44);
//启动温度转换
delay(200);
//跳过读序号列号的操作
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;
//定时器设置
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;
for(j=1000;
j>
j--)
;
voidUART_SER(void)interrupt4//串行中断服务程序
if(TI==1)
TI=0;
if(s_count!
=4)
四:
LabVIEW程序
对串口基本参数进行配置
2读取单片机发送至串口的数据,如果没有接受到数据就不读取串口
3:
将读取到得数据进行处理,然后用各种显示器件显示出来
4:
测试结果显示
五:
总结
经过演示,本温度报警器可以显示当前温度,并能在温度超过警报值时发出报警信号,通过此温度系统的设计,使我熟悉了使用LabVIEW的串口与其他系统的通信。
但是由于该系统仅使用了一些比较简单的结构,所以程序框图不够简化,这是需要改进的地方,但是这不影响其正常使用。