如何利用C语言,C++语言打开USB串口,然後对其发送信号? 跪求回答! 可行比加分!!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何利用C语言,C++语言打开USB串口,然後对其发送信号? 跪求回答! 可行比加分!!相关的知识,希望对你有一定的参考价值。

USB外接一个硬件电路,其能够根据USB输入信号来实现一些功能,在利用XP系统的超级终端机写入信号可以实现。现在的问题是我需要在VS2010环境中利用C语言或者C++语言打开USB串口,写入信号,请问这部分使用C/C++语言怎么实现?

openfile和createfile,就可以,可以打开串口号的,创建接收信息,发送。。。 参考技术A 你是用USB的虚拟串口吧。
如果是的,你就要用到串口相关的设置
1,打开串口:
HANDLE hComm; 
hComm = CreateFile("\\\\.\\COM1",GENERIC_READ | GENERIC_WRITE,
0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);
2,设置超时
SetCommTimeouts
3,通信信息设置(波特率,校验位,停止位等)
SetCommState
4,方式
PurgeComm
5,发送
WriteFile
6,读取
ReadFile
关闭:CloseHandle(hComm);

还可以用第三方的串口控件。本回答被提问者采纳
参考技术B 这一段是Linux 下C编写的代码,在C++下也能编译过.主要是那几个函数.

#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <termios.h>
#include "math.h"
#define max_buffer_size 100

int fd,s;
int open_serial(int k)

if(k==0)

fd=open("/dev/ttyS0",O_RDWR|O_NOCTTY);
perror("open /dev/ttyS0");

else

fd=open("/dev/ttyS1",O_RDWR|O_NOCTTY);
perror("open /dev/ttyS1");

if(fd == -1)
return -1;
else
return 0;


int main()

char buf[max_buffer_size],recvbuf[max_buffer_size];
int flag_close,retv,length,retval;
struct termios opt;
struct timeval tv;

open_serial(0);
tcgetattr(fd,&opt);
cfmakeraw(&opt);
cfsetispeed(&opt,B9600);
cfsetospeed(&opt,B9600);
tcsetattr(fd,TCSANOW,&opt);
length=sizeof(buf);

while(1)

fd_set rfdr;
FD_ZERO(&rfdr);
FD_SET(0,&rfdr);
FD_SET(fd,&rfdr);
tv.tv_sec=1;
tv.tv_usec=0;
retval=select(fd+1,&rfdr,NULL,NULL,&tv);
if(retval==-1)
break;
else if (retval==0)
continue;
if(FD_ISSET(fd,&rfdr))

bzero(buf,length);
printf("ready for receiving data...\n");
if((retv=read(fd,buf,sizeof(buf)))==-1)

perror("read");
break;

if(strstr(buf,"\r"))

strcat(recvbuf, buf);
printf("recv %s \n",recvbuf);
bzero(recvbuf, sizeof(recvbuf));

else strcat(recvbuf, buf);

else if(FD_ISSET(0,&rfdr))

bzero(buf,length);
fgets(buf,length,stdin);
if((retv=write(fd,buf,length))==-1)
perror("Write");
printf("the number of char sent is %d\n",retv);
if(strstr(buf,"quit"))

printf("trans quit");
break;



if((flag_close=close(fd))==-1)
printf("Close the Device failur!\n");
return 0;
参考技术C woshilaizuorenwude

C 语言利用动态库实现C++中的对象

众所周知,C++ 是面向对象程序设计语言,而C语言并不是面向对象的程序设计语言。那么,C 语言能否实现面向对象程序设计么?它的实际意义又如何呢? 本文谈谈这个问题。

实际意义

       C++ 语言比较庞大,在嵌入式系统中,C语言更加适合。比如在RT-Thread OS 中,OS 本身是C语言实现的。应用程序可以使用C++实现面向对象程序设计。但是许多场合需要C 语言接口。例如 当实现动态库模块时,好像无法使用C++来实现动态库。如此一来,程序注定是C与C++ 混搭模式实现。

   当你采取了面向对象程序设计时,程序结构也随之改变。比如对象的创建。当你希望动态库也能够创建多个对象。

  因此,如果C 语言能够实现简单的对象。能够带来许多便捷。使程序更加清晰。

使用C 语言实现简单的对象,是有实际意义的。

使用C 实现对象

  通俗地讲,所谓对象就是一堆数据以及对其操作的函数构成的软件组件。所以我们可以写出一个及其简单的类

在C++中的创建一个类"Person"。

//Person.h
class rectangle
{
private:
    int width
    int height;
    int pos_x;
    int pos_y;
    int color;
public:
    rectangle(int width,int height);    //constructor
    ~rectangle();    //destructor
    void move(int x,int y);
    void fillColor(int Color);

};
 

用C语言来表示上面的类,我们可以使用结构体,并用操作结构体的函数表示成员函数。

typedef struct _Rectangle
{
     int width
    int height;
    int pos_x;
    int pos_y;
    int color;
} Rectangle;
 
   void  new_rectangle(int width,int height);    //constructor
   void delete_rectangle();    //destructor
   void move(int x,int y);
   void fillColor(int Color);
 

数据隐藏和static变量

        我们知道在函数内部定义的变量,当程序执行到它的定义处时,编译器为它在栈上分配空间,函数在栈上分配的空间在此函数执行结束时会释放掉,这样就产生了一个问题: 如果想将函数中此变量的值保存至下一次调用时,如何实现? 最容易想到的方法是定义为全局的变量,但定义一个全局变量有许多缺点,最明显的缺点是破坏了此变量的访问范围(使得在此函数中定义的变量,不仅仅只受此函数控制)。static 关键字则可以很好的解决这个问题。

 在下面的例子中,你可以视同x 是一个全局变量,但是作用域仅限于_X 函数。局部变量用关键字 static 声明为“静态局部变量”

int _X(){
static x=0;
return x;
}

 静态全局变量

静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的。

实例化

  C语言实现继承和多态 这篇文章讲的比较详细。我这里介绍另一种方式。使用C 语言的动态库实现对象实例化。

将上面的C 语言程序改写为:

typedef struct _Rectangle
{
     int width
    int height;
    int pos_x;
    int pos_y;
    int color;
} ;
static struct _Rectangle Rectangle;
 
   void  new_rectangle(int width,int height);//constructor
   void delete_rectangle();    //destructor
   void move(int x,int y);
   void fillColor(int Color);

注意:static 关键字。

将其编译成动态库函数。

        每次导入一次动态函数rectangle,就新建一组static 数据。并且使用不同的动态库handle 来调用不同的对象。

以上是关于如何利用C语言,C++语言打开USB串口,然後对其发送信号? 跪求回答! 可行比加分!!的主要内容,如果未能解决你的问题,请参考以下文章

c语言win7 USB插上后怎么查找所在的串口?

在 Linux 上用 C 语言读写串口

C 语言利用动态库实现C++中的对象

想利用C或C++做界面设计,怎么做?

C++面向对象编程介绍

C语言 怎么调试程序