登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

梦想之鹰的天空

天高任鸟飞......放飞....心情..........放飞.....梦想

 
 
 

日志

 
 

指纹模块  

2011-11-16 12:29:11|  分类: 单片机 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
写的时候想,这个值不值得写篇日志
用的是深圳指昂公司的指纹模块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;
}
  评论这张
 
阅读(528)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018