1、基于串口通讯的 LED 控制前言:LABVIEW 的宣言”Software is instrument!” 如果我们使用 LABVIEW 只停留在软件设计上,那就不能完全符合这个宣言的含义!其实 NI 为 LABVIEW 提供了一个强大的标准接口驱动应用NI-VISA。(http:/ LABVIEW 的基础上再安装这个驱动,那你就可以设计一些连接硬件的实用型 VI了!1.功能说明:前面板上有 8 个圆形指示灯与 8 个 LED 按键一一对应同时与单片机模块上的 8 个 LED灯也是一一对应的关系。A.VISA 资源名称通过下拉箭头选择 LABVIEW 需要连接的接口,本设计选择 COM1 即串
2、口 1。B.当按下其中一个 LED 按键,对应的圆形指示灯亮三秒自动熄灭,同时单片机模块上对应的 LED 灯也是亮三秒自动熄灭。C.当按下“流水灯”确定按钮,单片机上的 8 个 LED 灯按流水灯形式亮一次。D.当按下“全灯闪烁 ”确定按钮,单片机上 8 个 LED 灯一齐闪烁三次。E.当按下停止按钮,程序退出。2.硬件连接本设计通过“PL2303 的 USB 转串口线”把“STC89C52RC 单片机小系统模块” (附带 8个 LED 灯)的串口与笔记本电脑的“USB 口”相连!3.软件设计A.C51 程序部分设计使用 KEIL 软件编写下位机程序,即写入到单片机的程序。程序代码如下:#in
3、clude typedef unsigned char uchar;typedef unsigned int uint;/*IO 端口定义*sbit LED1=P20;sbit LED2=P21;sbit LED3=P22;sbit LED4=P23;sbit LED5=P24;sbit LED6=P25;sbit LED7=P26;sbit LED8=P27;uchar RX_Byte=0;/*串口初始化*void StartUART( void ) /波特率 4800SCON = 0x50;TMOD = 0x20;TH1 = 0xFA;TL1 = 0xFA;PCON = 0x00;TR1
4、= 1;/*通过串口将数据发送给 PC 端*void TX_S_Byte(uchar TX_Byte)SBUF = TX_Byte; while( TI = 0 ); /查询法TI = 0; /*通过串口接收 PC 端的数据*void RX_S_Byte(void)while( RI = 0 ); /查询法RX_Byte = SBUF ;RI = 0; /*ms 延时函数*void Delay(uint x)uint i,j;for(i=0;ix;i+)for(j=0;j110;j+);/*跑马灯函数*void loop_led(void)uchar i,j;for(i=0;i1;i+)P2=
5、0xfe;Delay(500);for(j=0;j7;j+)P2=1;P2|=0x01;Delay(500);/*全灯闪烁*void shan(void)uchar i;for(i=0;i3;i+)P2=0;Delay(500);P2=0xff;Delay(500);/*主函数*void main(void) uchar TX_data=0x0f;/定义发送数据StartUART();/串口初始化P2=0xff;/8 个 LED 灯初始化,全灭Delay(100);/延时 100mswhile(1)/主循环RX_S_Byte();/接收串口数据switch(RX_Byte)/匹配数据,执行对应
6、分支操作case 0x01: LED1=0;Delay(3000);LED1=1;break;/LED1 灯亮 3S 熄灭case 0x02: LED2=0;Delay(3000);LED2=1;break; /LED2 灯亮 3S 熄灭case 0x03: LED3=0;Delay(3000);LED3=1;break; /LED3 灯亮 3S 熄灭case 0x04: LED4=0;Delay(3000);LED4=1;break; /LED4 灯亮 3S 熄灭case 0x05: LED5=0;Delay(3000);LED5=1;break; /LED5 灯亮 3S 熄灭case 0x
7、06: LED6=0;Delay(3000);LED6=1;break; /LED6 灯亮 3S 熄灭case 0x07: LED7=0;Delay(3000);LED7=1;break; /LED7 灯亮 3S 熄灭case 0x08: LED8=0;Delay(3000);LED8=1;break; /LED8 灯亮 3S 熄灭case 0x09: loop_led();P2=0xff;break;/8 个 LED 灯执行流水灯一次后全灭case 0x0a: shan();break;/8 个 LED 灯闪烁 3 次default: break;/乱码跳出B.LABVIEW 程序部分设计1
8、.在前面板添加以下几个控件:8 个圆形指示灯、10 个确定按钮( 8 个为 LED 按钮,2个为功能启动按钮) 、VISA 资源名称(新式 I/OVISA 资源名称) 、停止按钮2.切换到程序框图窗口,先在上面添加以下两个函数:串口配置函数 和串口关闭函数 。其中串口配置函数中有几个配置端,分别需要配置串口的波特率、数据位数、奇偶校验位数、停止位数。注:需在函数连线端子右键菜单创建常量,此方法比自己创建常量方便且可靠性更强。然后按下图连接,那么,你的 VI 串口配置就完成了。注:“串口关闭函数”作用是退出主循环后关闭串口!3.添加一个 While 循环结构,作为主循环。把停止按钮连接到循环停止
9、端,为真则退出循环。4.在循环结构内添加一个条件结构,在内添加一些函数(如下图) ,作为事件 1 即前面板上按下对应一个 LED 的按键,前面板和单片机模块上的 LED 灯亮 3S 自动熄灭。其中涉及到一个“串口写入”函数(仪器 IO串口VISA 配置串口串口写入) 。5.其它 9 个事件与事件 1 并列(无先后顺序,故不用事件结构,但用着也无妨)且类同,不再具体赘述,整个程序框图连接见下图。注:1.本设计涉及到的串口部分函数都在“仪器 IO串口VISA 配置串口”子版块中可以找到。2.使用串口等其它标注接口做 VI 时,必须先安装 NI-VISA 驱动,链接上面已给出。3.单片机模块必须使用 11.0592 的晶振(为产生标准波特率,防止通讯出错) 。