[51单片机] 请教弄过指纹模块的高手或前辈,下面程序哪里出错使指纹模块无应答,与电脑通信正常

[复制链接]
2127|2
 楼主| gan_elec 发表于 2015-3-30 01:22 | 显示全部楼层 |阅读模式
  1. #include <reg52.h>
  2. #include <string.h>

  3. typedef unsigned char uchar;
  4. typedef unsigned int uint;
  5. //#define MAXSIZE 50

  6. sbit LED1 = P1^0;
  7. sbit LED8 = P1^1;
  8. sbit LED2 = P1^2;
  9. sbit K1 = P2^7;
  10. uchar a = 0;
  11. uint summas;
  12. uchar sum[2];
  13. uchar confcode;           //指纹模块应答确认码
  14. //uchar  arr_mem[MAXSIZE];
  15. //uchar head, tail;

  16. //FINGERPRINT通信协议定义

  17. unsigned char  FP_Pack_Head[6] = {0xEF,0x01,0xFF,0xFF,0xFF,0xFF}; //协议包头

  18. unsigned char  PF_Verify_Pwd[10] = {0x01, 0x00, 0x07, 0x13, 0X00, 0X00, 0X00, 0X00, 0x00, 0x1b};  // 验证口令, 模块才正常工作

  19. unsigned char  FP_Get_Img[6] = {0x01,0x00,0x03,0x01,0x00,0x05};         //获得指纹图像

  20. unsigned char  FP_Change_Com[8] = {0x01,0x0,0x05,0x0e,0x04,0x01,0x0,0x19}; //修改波特率 9600   
  21.    
  22. unsigned char  FP_Templete_Num[6] ={0x01,0x00,0x03,0x1D,0x00,0x21 };  //获得模版总数

  23. unsigned char  FP_Search[11]={0x01,0x0,0x08,0x04,0x01,0x0,0x0,0x03,0xA1,0x0,0xB2}; //搜索指纹搜索范围0 - 929

  24. unsigned char  FP_Search_0_9[11]={0x01,0x00,0x08,0x04,0x01,0x00,0x00,0x00,0x13,0x00,0x21};  //搜索0-9号指纹

  25. unsigned char  FP_Img_To_Buffer1[7]={0x01,0x00,0x04,0x02,0x01,0x00,0x08};        //将图像放入到BUFFER1

  26. unsigned char  FP_Img_To_Buffer2[7]={0x01,0x00,0x04,0x02,0x02,0x00,0x09};        //将图像放入到BUFFER2

  27. unsigned char  FP_Reg_Model[6]={0x01,0x0,0x03,0x05,0x0,0x09};         //将BUFFER1跟BUFFER2合成特征模版

  28. unsigned char code FP_Delet_All_Model[6]={0x01,0x0,0x03,0x0d,0x00,0x11}; //删除指纹模块里所有的模版

  29. volatile unsigned char xdata FP_Save_Finger[9]={0x01,0x00,0x06,0x06,0x01,0x00,0x0B,0x00,0x19}; //将BUFFER1中的特征码存放到指定的位置

  30. volatile unsigned char xdata FP_Delete_Model[10]={0x01,0x00,0x07,0x0C,0x0,0x0,0x0,0x1,0x0,0x0}; //删除指定的模版


  31. void UART_Init()  // 通信波特率9600
  32. {
  33. TMOD = 0x20;
  34. //        PCON = 0x80;
  35. TH1  = 0xfd;
  36. TL1  = 0xfd;
  37. TR1  = 1;
  38. SM0  = 0;
  39. SM1  = 1;
  40. REN  = 1;
  41. ES   = 1;
  42. EA   = 1;
  43. }
  44. void UART_Send_Byte(uchar c) // 发送一个字节的数据
  45. {
  46. //        TI = 0;
  47. SBUF = c;
  48. while(!TI);
  49. TI = 0;
  50. }

  51. void Delay_1ms(uint z)
  52. {
  53. uchar x, y;
  54. for (x = z; x > 0; x--)
  55. for (y = 110; y > 0; y--);       
  56. }

  57. uchar Verify_Pwd()    // 与指纹模块实现握手, 握手成功方能实行下一步动作
  58. {
  59. uchar i;
  60. Delay_1ms(20);
  61. for (i = 0; i < 6; i++)
  62. {
  63. UART_Send_Byte(FP_Pack_Head[i]);   //发送指令包头
  64. Delay_1ms(20);
  65. }
  66. Delay_1ms(20);
  67. for (i = 0; i < 10; i++)
  68. {
  69. UART_Send_Byte(PF_Verify_Pwd[i]);  //发送指令数据
  70. Delay_1ms(20);
  71. }
  72. for (i = 0; i < 9; i++)        //  指纹应答数据前9个字节
  73. {
  74. while (!RI);
  75. RI = 0;
  76. Delay_1ms(20);
  77. }
  78. Delay_1ms(20);
  79. while (!RI);
  80. RI = 0;
  81. confcode = SBUF;         // 将应答数据第10个字节也就是确认码读出
  82. Delay_1ms(20);
  83. while (!RI);
  84. RI = 0;
  85. sum[1] = SBUF;
  86. Delay_1ms(20);
  87. while (!RI);
  88. RI = 0;
  89. sum[0] = SBUF;
  90. Delay_1ms(20);
  91. summas = (sum[1] << 8) + sum[0];
  92. if (confcode == 0x00)        // 确认码正确就返回1 , 错误就返回0
  93. return 1;
  94. else
  95. return 0;
  96. }


  97. main()
  98. {

  99. UART_Init();
  100. while (1)
  101. {

  102. //        UART_Send_Byte(0xEF);
  103. //        if (a = 1)
  104. //        LED1 = 0;

  105. if (Verify_Pwd())
  106. {
  107. LED8 = 0;
  108. Delay_1ms(2000);
  109. break;
  110. }
  111. else
  112. LED2 = 0;
  113. }
  114. }
 楼主| gan_elec 发表于 2015-4-1 15:15 | 显示全部楼层
   会不会有可能外围电路多导致单片机的TXD,RXD和其他模块的TXD,RXD连接异常。   因为从现象看好像模块收不到单片机发送的数据, 用串口中断判断RI没有置1
690420334 发表于 2015-4-1 15:30 | 显示全部楼层
gan_elec 发表于 2015-4-1 15:15
会不会有可能外围电路多导致单片机的TXD,RXD和其他模块的TXD,RXD连接异常。   因为从现象看好像模块收 ...

指纹模块卖么?qq690420334
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

14

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部