单片机与LIBVIEW通信

1.libview配置

1.1 下载ni_visa

NI-VISA驱动官方版_NI-VISA驱动程序免费下载19.5 - 系统之家

这个必须要安装,要不然libview识别不了串口。

安装好后检查是否可以检测到com口,如果不能则说明版本不对。

1.2 libview编程

1.安装libview,(建议安装有中文版的,方便找器件,推荐2018版),新建VI,然后保存。

2.打开后面板,ctrl+E.

 3.在后面板中对各个器件逻辑进行编写。

 参考:Labview与51单片机串口通信控灯_哔哩哔哩_bilibili

4.再按CTRL+E进入前面板,将各个前面板器件摆放整齐。

 5.点击运行即可。

 2.单片机编程

51单片机里面对串口收发程序进行编写,如下。

usart.c

#include "uart.h"
/*********************************
½ÓÊÕÊý¾Ý£¬ÔÚÖжÏÖжÔÊý¾Ý½øÐд¦Àí

***********************************/
unsigned char temp;
unsigned char recv_flag=0;
void UartInit()		//[email protected]
{
	PCON &= 0x7F;		//²¨ÌØÂʲ»±¶ËÙ
	SCON = 0x50;		//8λÊý¾Ý,¿É±ä²¨ÌØÂÊ
	
	TMOD &= 0x0F;		//ÉèÖö¨Ê±Æ÷ģʽ
	TMOD |= 0x20;		//ÉèÖö¨Ê±Æ÷ģʽ
	TL1 = 0xFD;		//ÉèÖö¨Ê±³õʼֵ
	TH1 = 0xFD;		//ÉèÖö¨Ê±ÖØÔØÖµ
	ET1 = 0;		//½ûÖ¹¶¨Ê±Æ÷%dÖжÏ
	TR1 = 1;		//¶¨Ê±Æ÷1¿ªÊ¼¼Æʱ
	ES=1;               //´®¿ÚÖжϴò¿ª
	EA=1;
}
void sendByte(unsigned char dat)
{
	SBUF=dat;
	while(!TI);
		TI=0;
}

void sendString(unsigned char *dat)//×Ö·û´®·¢ËÍ
{
	while(*dat!='\0')//×Ö·û´®·¢Ëͼì²âÊÇ·ñ·¢Íê
	{
		sendByte(*dat++);
	}
}
/***********************************************
¹¦ÄÜ£ºµ±ÉÏλ»úÊý¾Ý·¢ËÍÍ꣬½ÓÊÕµ½±ê־룬RIÓ²¼þÖÃ1¡£ÖÃ1ºó»áÉêÇëÖжϣ¬µ½ÖжϺ¯ÊýÖÐ
Ò»¸öÖжϺ¯Êý½â¾öÁ½¸öÖжÏÎÊÌâ¡£
***************************************************/
void uart_ISR() interrupt 4 //ÖжϷþÎñº¯Êý´¦Àí¶ÁÈ¡Êý¾Ý½â¾öÊÕ·¢ÎÊÌâ
{
	//ÅжÏÊÇ·¢ËÍÖжϻ¹ÊǽÓÊÕÖжÏ
	if(RI==1)             //µ±·¢ËÍÍê±Ïºó£¬×Ô¶¯RI×Ô¶¯±äΪ1
	{
		RI=0;   //½øÈ¥¾ÍÒª°ÑRIÖÃ0
		temp=SBUF;//µ¥Æ¬»ú½ÓÊÕ£¬°ÑÊý¾Ý¶Á×ߣ¬±£´æ
		recv_flag=1;//Ôö¼ÓÒ»¸ö±êÖ¾£¬¿´ÊÇ·ñ½ÓÊÕÍê±Ï£¬ÔÚÖ÷º¯ÊýÖÐʵÏÖ¹¦ÄÜ
	}
	

}
	

usart.h

#ifndef _UART_H_
#define _UART_H_
#include <reg52.h>

void UartInit()	;
void sendByte(unsigned char dat);
void sendString(unsigned char *dat);
 extern unsigned char temp;//ÔÚÖ÷º¯ÊýÖÐÐèҪʹÓÃÔÚÁ½¸ö±äÁ¿£¬ËùÒÔ¼Óextern
extern unsigned char recv_flag;
#endif

main.c

#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include<stdio.h>
#include "lcd1602.h"
#include "delay.h"
#include "customdef.h"
#include "motor_b.h"
#include "DHT11.h"
#include "uart.h"

char dis0[16];			   //打印数组初始化
char dis1[16];			   //打印数组初始化
char DHTdata1[5];
int DHT11_time = 0;        //控制温湿度采样频率
uint readDHTFlags=1;

void main (void)
{
	uint i;
	uint lock = 1;        //控制电机只执行一次       


	
	
	LCD_Init();           //初始化液晶·
	DelayMs(20);          //延时有助于稳定
	LCD_Write_String(0,0," ");//显示
	LCD_Clear(); 
	DelayMs(20);          //延时有助于稳定

	UartInit();
	
	while (1)         //主循环
	{		
		if(recv_flag==1)
		{
			recv_flag=0;
			switch(temp)
			{
				case 0x1:P1=0xfe;sendByte('A');break;
				case 0x2:P1=0xfd;sendByte('B');break;
				case 0x3:P1=0xfb;sendByte('C');break;
				case 0x4:P1=0xf7;sendByte('D');break;
				default :break;
			}	
			
		}
		sprintf(dis0,"temp:%d",temp);
		LCD_Write_String(0,0,dis0);//显示	
			
	}
}

3.测试效果

点击运行,输入1,收到A,输入2,收到B。

 显示结果如果不想用十进制显示,可以在属性里面修改为默认,修改后如下。

3.1 高阶玩法

3.1.1截取出数据里面的温湿度

通过增加截至位,此次设置的是P,ASCII位80.

 增加截至位后,读取的数据变为如下:以P作为结束。

 然后增加偏移量即可。

增加偏移量后,读取的数据就可以单独显示出来了。

 3.1.2 增加图表显示

将数据连接到图标是即可,注意要放在循环里面。

 

3.1.3 增加弹窗并报警

增加一个弹窗显示报警信息,同时增加报警指示灯,如下。

 控件里面加入对应判断即可。

猜你喜欢

转载自blog.csdn.net/weixin_51248645/article/details/130937676