写的时候想,这个值不值得写篇日志 用的是深圳指昂公司的指纹模块zaz010,全部材料是一个模块,一个讲模块串口通信协议和指令的pdf文档,都是rs232口的,参考做过的手机模块,倒是很简单 注:此模块出来的是TTL电平,连到电脑上要加一个Max232之类的芯片,我用的是Max3232 Linux下所有设备都是文件,所以怎么操作不用说了,无非打开,设置,读写,关闭 这个模块只接受16进制字符,所以输入的16进制,然后转换成字符串,再写到串口里,主要过程如下(一个测试函数): char cmd[254]; while(1) { printf("?:"); gets(cmd); //sprintf(cmd,"ef01ffffffff010003010005"); if(cmd[0] == 'q'||cmd[0] == "Q") return 0; iSpot = strlen(cmd); sCmd[iSpot] = 0x0d; sCmd[iSpot+1] = 0x00; printf("length of sCmd %d\n",strlen(cmd)); if(writeHex2UnixPort(fd,cmd) < 0) return 0; usleep(1000000); if((sResultLen = readUnixPort(fd,sResult,254)) > 0) displayReading (sResult, sResultLen); else printf("sResultLen %d\n",sResultLen); } 主要函数: 1.十六进制转十进制 int hex2dec (char *s) { int n, i; int dec = 0; i = strlen (s) - 1; while (i >= 0) { if (isdigit (*s)) n = *s - 48; else n = toupper (*s) - 55; if ((n < 0) || (n > 15)) return -1; dec += (int)pow (16, i--) * n; s++; } return dec; } 2.将转换后的字符串写入串口 int writeHex2UnixPort (int fd, char *psOutput) { char *cp = psOutput; char h[3]; char c; char s[254]; int i = 0; h[2]='\0'; do { if (*cp == ' ') ++cp; h[0]=*(cp++); h[1]=*(cp); c = (char)hex2dec (h); if (write (fd, &c, 1) != 1) { fprintf (stderr, "error: write\n"); return -1; } i++; } while (*(++cp) != '\0'); return i; } |
|
来自: wwwijhyt图书馆 > 《单片机编程》