单片机与LIBVIEW通信

您所在的位置:网站首页 labview只有32位的吗 单片机与LIBVIEW通信

单片机与LIBVIEW通信

2023-06-09 22:39| 来源: 网络整理| 查看: 265

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 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 //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 #include #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 增加弹窗并报警

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

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

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3