实现自定义化串口工具(一)

由于工作需要实现某些功能,为了解放双手(懒惰是驱动力→_→),决定写一个小工具解决手工输入的问题。

之前玩单片机,没有接触过windows编程,思来想去决定还是用熟悉的控制台的小黑框来实现这个功能~~~~~~

IDE ---Dev C++

需要实现的功能:

目标设备需要通过串口手动输入一系列固定格式字符串来接受命令 如:w 0001 0x00ff实现这个功能,控制串口是最重要的部分,找了很久,决定用最简便的方法:fprintf();

 

---------------------------------------我叫分割线-------------------------------------------

 

根据命令格式,用二维数组能很好的储存和管理数据(初始化配置命令)

 

//***********************************PICC初始化命令********************************************//
char cmd_1_1[6][14]={"ton","w 0005 0x0001","w 0001 0x000f","w 0008 0x00f0","w 0012,0x0fff","enablepcm"};
char cmd_3_1[6][14]={"ton","w 0005 0x0001","w 0001 0x005a","w 0008 0x00a5","w 0012 0xffff","enablepcm"};
char cmd_1_2[6][14]={"w 1000 0x0001","w 2000 0x0001","w 3000 0x0001","w 4000 0x0001","w 5000 0x0001","w 6000 0x0001"};
char cmd_1_3[6][14]={"w 7000 0x0001","w 8000 0x0001","w 9000 0x0001","w a000 0x0001","w b000 0x0001","w c000 0x0001"};
char cmd_1_4[4][14]={"w 0002 0x3f00","w 000d 0xc000","w 0003 0x3f00","w 000c 0xc000"};

 

需要用到的头文件:

 

#include 
#include 
#include 
#include 
#include 
#include 

 

 

对串口进行操作首先要打开串口,选择比特率、数据位、停止位.........

可以调用system()函数对串口进行配置:

 

system("mode com3: baud=115200 parity=n data=8 stop=1 to=off xon=off");
//com3 波特率115200  8位数据 停止位1

 

函数执行效果如下:

实现自定义化串口工具(一)_第1张图片

函数参数为字符串,调用后打开com口成功了将输出串口配置信息,但是这样就失去了配置灵活性,于是乎:

 

 

char set[69]="mode com : baud=       parity=n data=8 stop=1 to=off xon=off";
system(set);

 

现在对串口号和比特率的选择变成了对 set[] 的自由填充。

 

主要函数:

 

int setup(char* btl) //自动搜索串口,设置com和波特率
void open_com(void) //打开com

 

 

 

函数实现:

 

int setup(char* btl) //自动搜索可用串口,设置com和波特率 
{
	int i=0,num=1;
	for(i=0;i<6;i++)
	{
		set[i+16] = *btl;//填充波特率 
		btl++; 
	}
	for(i=1;i<=10;i++) //扫描com1--10 
	{
		set[8]=i+'0'; //将串口号转换为字符,再填充 
		if((-1)==system(set)); // 判断串口是否可用 
		else
		{
			//system(set);
			return i; //返回可用串口号 
		}
	}
	return 0; //没有可用串口 
}

 

 

 

 

利用fprintf()函数可以将串口当作文件来读写(设备文件),使用之前需要打开串口设备文件fopen():

 

调用方式;

 

FILE* portfp=NULL; //com设备文件指针 
void open_com(void) //打开com 
{
	if(com==1)
		portfp = fopen("com1", "wb+");
	else if(com==2)
		portfp = fopen("com2", "wb+");
	else if(com==3)
		portfp = fopen("com3", "wb+");
	else if(com==4)
		portfp = fopen("com4", "wb+");
	else if(com==5)
		portfp = fopen("com5", "wb+");
	else if(com==6)
		portfp = fopen("com6", "wb+");
}

 

 

 

 

发送数据方法:

 

open_com();
Sleep(300);//防止高占用
fprintf(portfp,"%s",cmd_1_1[i],'L');//将字符串写入设备文件
printf(" %s\n",cmd_1_1[i]);//回显
fclose(portfp);//关闭文件

 

 

由于数据是在文件关闭后发送,于是为了发送6条命令字符串,只能反复打开和关闭串口

 

手动输入选择比特率:

 

new: 	 
    printf("\n\n先选个波特率:1:9600  2:19200  3:38400  4:115200        \n选择编号:");
    scanf(" %c",&btl);
    
    if(btl=='1')
    	com=setup("9600  ");
    else if(btl=='2')
    	com=setup("19200 ");
    else if(btl=='3')
    	com=setup("38400 ");
    else if(btl=='4')
    	com=setup("115200");
    else{
    	printf("无该波特率选项!\n\n");
    	goto new;
	}

 

 

 

至此就实现了简单串口发送和比特率自由选择和串口搜索,后续篇将逐步完善功能

 

 

你可能感兴趣的:(C/C++)