单片机与LIBVIEW通信 |
您所在的位置:网站首页 › labview只有32位的吗 › 单片机与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 void UartInit() ; void sendByte(unsigned char dat); void sendString(unsigned char *dat); extern unsigned char temp;//ÔÚÖ÷º¯ÊýÖÐÐèҪʹÓÃÔÚÁ½¸ö±äÁ¿£¬ËùÒÔ¼Óextern extern unsigned char recv_flag; #endifmain.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 |