基于LABVIEW串口通讯的LED控制
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于串口通讯的LED控制前言:LABVIEW的宣言”Software is instrument!”如果我们使用LABVIEW只停留在软件设计上,那就不能完全符合这个宣言的含义!其实NI为LABVIEW提供了一个强大的标准接口驱动应用——NI-VISA。
(/nisearch/app/main/p/bot/no/ap/tech/lang/zhs/pg/1/sn/catnav:du,n8:3.25 .123.1640,ssnav:sup/)
只要你在LABVIEW的基础上再安装这个驱动,那你就可以设计一些连接硬件的实用型VI了!
1.功能说明:
前面板上有8个圆形指示灯与8个LED按键一一对应同时与单片机模块上的8个LED 灯也是一一对应的关系。
A.VISA资源名称通过下拉箭头选择LABVIEW需要连接的接口,本设计选择COM1即串口1。
B.当按下其中一个LED按键,对应的圆形指示灯亮三秒自动熄灭,同时单片机模块上对应的LED灯也是亮三秒自动熄灭。
C.当按下“流水灯”确定按钮,单片机上的8个LED灯按流水灯形式亮一次。
D.当按下“全灯闪烁”确定按钮,单片机上8个LED灯一齐闪烁三次。
E.当按下停止按钮,程序退出。
2.硬件连接
本设计通过“PL2303的USB转串口线”把“STC89C52RC单片机小系统模块”(附带8个LED灯)的串口与笔记本电脑的“USB口”相连!
3.软件设计
A.C51程序部分设计
使用KEIL软件编写下位机程序,即写入到单片机的程序。
程序代码如下:
#include <reg52.h>
typedef unsigned char uchar;
typedef unsigned int uint;
//****************************************IO端口定义***************************************
sbit L ED1=P2^0;
sbit L ED2=P2^1;
sbit L ED3=P2^2;
sbit L ED4=P2^3;
sbit L ED5=P2^4;
sbit L ED6=P2^5;
sbit L ED7=P2^6;
sbit L ED8=P2^7;
uchar RX_Byte=0;
//************************************串口初始化*********************************************************
void StartUART( void )
{ //波特率4800
SCON = 0x50;
TMOD = 0x20;
TH1 = 0xFA;
TL1 = 0xFA;
PCON = 0x00;
TR1 = 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;i<x;i++)
for(j=0;j<110;j++);
}
//************************跑马灯函数***************************
void loop_led(void)
{
uchar i,j;
for(i=0;i<1;i++)
{
P2=0xfe;
Delay(500);
for(j=0;j<7;j++)
{
P2<<=1;
P2|=0x01;
Delay(500);
}
}
}
//****************************全灯闪烁*****************************
void shan(void)
{
uchar i;
for(i=0;i<3;i++)
{
P2=0;
Delay(500);
P2=0xff;
Delay(500);
}
}
//************************************主函数************************************************************
void main(void)
{
uchar TX_data=0x0f;//定义发送数据
StartUART();//串口初始化
P2=0xff;//8个LED灯初始化,全灭
Delay(100);//延时100ms
while(1)//主循环
{
RX_S_Byte();//接收串口数据
switch(RX_Byte)//匹配数据,执行对应分支操作
{
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 0x06: 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;//乱码跳出
}
}
}
BVIEW程序部分设计
1.在前面板添加以下几个控件:8个圆形指示灯、10个确定按钮(8个为LED按钮,2个为功能启动按钮)、VISA资源名称(新式—I/O—VISA资源名称)、停止按钮
2.切换到程序框图窗口,先在上面添加以下两个函数:
串口配置函数和串口关闭函数。
其中串口配置函数中有几个配置端,分别需要配置串口的波特率、数据位数、奇偶校验位数、停止位数。
注:需在函数连线端子右键菜单创建常量,此方法比自己创建常量方便且可靠性更强。
然后按下图连接,那么,你的VI 串口配置就完成了。
注:“串口关闭函数”作用是退出主循环后关闭串口!
3.添加一个While循环结构,作为主循环。
把停止按钮连接到循环停止端,为真则退出循环。
4.在循环结构内添加一个条件结构,在内添加一些函数(如下图),作为事件1即前面板上按下对应一个LED的按键,前面板和单片机模块上的LED灯亮3S自动熄灭。
其中涉及到一个“串口写入”函数(仪器IO—串口—VISA配置串口—串口写入)。
5.其它9个事件与事件1并列(无先后顺序,故不用事件结构,但用着也无妨)且类同,不再具体赘述,整个程序框图连接见下图。
注:
1.本设计涉及到的串口部分函数都在“仪器IO—串口—VISA配置串口”子版块中可以找到。
2.使用串口等其它标注接口做VI时,必须先安装NI-VISA驱动,链接上面已给出。
3.单片机模块必须使用11.0592的晶振(为产生标准波特率,防止通讯出错)。