分享

指纹模块

 wwwijhyt图书馆 2014-05-08
写的时候想,这个值不值得写篇日志
用的是深圳指昂公司的指纹模块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;
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多