由于工作需要实现某些功能,为了解放双手(懒惰是驱动力→_→),决定写一个小工具解决手工输入的问题。
之前玩单片机,没有接触过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 <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <math.h>
#include <time.h>
#include <string.h>
对串口进行操作首先要打开串口,选择比特率、数据位、停止位.........
可以调用system()函数对串口进行配置:
system("mode com3: baud=115200 parity=n data=8 stop=1 to=off xon=off");
//com3 波特率115200 8位数据 停止位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;
}
至此就实现了简单串口发送和比特率自由选择和串口搜索,后续篇将逐步完善功能