基于VC++的上位机控制软件的TCPIP 协议实现 能解释一下这个课题是干

基于VC++的上位机控制软件的TCPIP 协议实现 能解释一下这个课题是干,第1张

我的理解是用VC写一个软件软件完成串口与下位机(单片机)通信,并将下位机传输来的数据打包通过TCP/IP协议将数据传到远程服务器上面。TCP/IP 协议的实现可以利用MFC来写,或者利用VC的API来实现。

在MFC里用一个串口控件,选中控件属性,里面有个控件属性OnComm。点击添加,在对话框CPP里会添加一个消息事件,用于实施监控串口的。除此之外还要为这个串口控件添加一个相关的变量

这个控件事件函数里可以这么写:m_COM为这个串口控件对应的变量,m_SendData,m_strReceive,为CString类型数据,全局变量,自己在xxxxDlgh中自己定义

void CxxxxDlg::OnCommMscomm1()

{

VARIANT m_Input1;

COleSafeArray m_Input2;

long length,i;

BYTE data[1024];

CString str;

BYTE a;

if(m_COMget_CommEvent() == 2) //事件值为2表示接收缓冲区内有字符

{

m_Input1 = m_COMget_Input(); //读缓冲区

m_Input2 = m_Input1;

length=m_Input2GetOneDimSize();

for (i=0;i<length;i++)

{

m_Input2GetElement(&i,data+i);

}

for (i=0;i<length;i++)

{

a=(char)(data+i);

strFormat("%c",a);

m_strReceive+=str;

}

}

UpdateData(FALSE); //变量->编辑框

SetDlgItemText(IDC_EDIT_COM_RecText,m_strReceive);//这里是把字符显示到文本控件上

}

下面写PC端 VC的打开这个串口的函数,这里的nIndexSelect为串口号,自己给

void CxxxxDlg::OpenCom()

{

if (m_COMget_PortOpen())

{

m_COMput_PortOpen(FALSE);

}

m_COMput__CommPort(nIndexSelect);//这里的nIndexSelect为串口号

m_COMput_InBufferSize(1024);

m_COMput_OutBufferSize(512);

m_COMput_InputLen(0);

m_COMput_InputMode(1);

m_COMput_RThreshold(1);

m_COMput_Settings("9600,N,8,1");

if (!m_COMget_PortOpen())

m_COMput_PortOpen(TRUE);

else

{

m_COMput_OutBufferCount(0);

}

}

下面是PC上VC的发送函数

void CXXXXXDlg::OnBnClickedButton_Sendcom()

{

int i,Count;

GetDlgItemText(IDC_EDIT_COM_SendText,m_SendData);//获取对话框上编辑框里的要发送的字符,IDC_EDIT_COM_SendText为自己文本编辑框的ID号,自己定

Count=m_SendDataGetLength();

CByteArray m_Array;

m_ArrayRemoveAll();

m_ArraySetSize(Count);

for(i=0;i<Count;i++)

m_ArraySetAt(i,m_SendData[i]);

m_COMput_Output(COleVariant(m_Array));

}

以上是PC上的程序

下面是单片机上的程序,我主要来控制单片机电机和LED的

#include<reg52h>

#include<reg52h>

#include <stringh>

sbit led_send=P1^6;

sbit led_rec=P1^7;

sbit led_working=P1^4;

sbit led_ready=P1^2;

sbit led_close=P1^0;

sbit led_1=P1^1;

sbit led_2=P1^3;

sbit led_3=P1^5;

unsigned int dli,dlj,i,j;

unsigned char ch;

bit read_flag=0;

unsigned char code table[]="I get ";

//步进电机声明

sbit A1=P2^0;

sbit B1=P2^1;

sbit C1=P2^2;

sbit D1=P2^3;

#define Coil_AB1 {A1=1;B1=1;C1=0;D1=0;}

#define Coil_BC1 {A1=0;B1=1;C1=1;D1=0;}

#define Coil_CD1 {A1=0;B1=0;C1=1;D1=1;}

#define Coil_DA1 {A1=1;B1=0;C1=0;D1=1;}

#define Coil_OFF {A1=0;B1=0;C1=0;D1=0;}

unsigned int SPEED;

// 延时函数

void delay(unsigned int xms)

{

for(dli=xms;dli>0;dli--)

for(dlj=110;dlj>0;dlj--);

}

//步进电机正传

void Moto_Left()

{

Coil_AB1

delay(SPEED);

Coil_BC1

delay(SPEED);

Coil_CD1

delay(SPEED);

Coil_DA1

delay(SPEED);

Coil_OFF

}

//步进电机反转

void Moto_Right()

{

Coil_DA1

delay(SPEED);

Coil_CD1

delay(SPEED);

Coil_BC1

delay(SPEED);

Coil_AB1

delay(SPEED);

Coil_OFF

}

//串口初始化

void init_serialcom( void ) //串口通信初始设定

{

// SCON = 0x50 ; //UART为模式1,8位数据,允许接收

//TMOD |= 0x20 ; //定时器1为模式2,8位自动重装

// PCON |= 0x80 ; //SMOD=1;

//TH1 = 0xFD ; //Baud:19200 fosc="11"0592MHz

// IE |= 0x90 ; //Enable Serial Interrupt

//TR1 = 1 ; // timer 1 run

// TI=1;

TMOD=0X20;

TH1=0Xfd;

TL1=0Xfd;

TR1=1;

TI=1;

REN=1;

SM0=0;

SM1=1;

EA=1;

ES=1;

led_ready=0;

delay(2000);

led_ready=1;

}

//串口接收中断函数

void serial () interrupt 4

{

led_rec=0;

RI = 0 ;

ch=SBUF;

if(ch==97)//假如收到的字符在ASKII表里对应号码是97,就让下面的灯亮,以及电机左转

{

led_1=0;

led_2=1;

led_3=1;

j=64;

while(j--)

{

Moto_Left();

}

}

else if(ch==98)//假如收到的字符在ASKII表里对应号码是98,就让下面的灯亮,以及电机右转

{

led_2=0;

led_1=1;

led_3=1;

j=64;

while(j--)

{

Moto_Right();

}

}

led_3=0;

led_2=1;

led_1=1;

delay(100);

led_3=1;

read_flag= 1 ; //就置位取数标志

delay(100);

led_rec=1;

}

void main()

{

j=64;//旋转一周时间

SPEED=5;

Coil_OFF

led_close=0;

delay(2000);

led_close=1;

delay(2000);

init_serialcom(); //初始化串口

while ( 1 )

{

led_working=0;

if (read_flag==1) //如果取数标志已置位,就将读到的数从串口发出

{

ES=0;

led_send=0;

for(i=0;i<6;i++)

{

SBUF=table[i];

while(!TI);

TI=0;

}

SBUF=ch;

while(!TI);

TI=0;

ES=1;

led_send=1;

read_flag= 0 ; //取数标志清0

}

}

}

联系天地华杰   串口通讯产品专业制造商,010-67737811  正在做GPS+GPRS+UART的产品,可以通过以太网连接。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/13493189.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-09-01
下一篇2025-09-01

发表评论

登录后才能评论

评论列表(0条)

    保存