久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 46883|回復: 60
打印 上一主題 下一主題
收起左側

單片機指紋密碼鎖電路原理圖+源程序+實物制作

  [復制鏈接]
跳轉到指定樓層
樓主
這是一個基于STC89C52的指紋識別和鍵盤密碼鎖。
里面包括程序,原理圖,pcb圖,原件清單和實物圖。
請多多指教。


電路原理圖如下:



指紋密碼鎖元件清單
1)    9*15萬用板
2)    指紋傳感器
3)    40腳IC座
4)    stc89c51單片機
5)    8腳IC座
6)    24c02芯片
7)    12864有字庫液晶
8)    20p插針+6P插針
9)    20p單排母座
10)    矩陣鍵盤
11)    103藍白電位器
12)    2.2k電阻
13)    1k電阻
14)    10k電
15)    10歐姆電阻
16)    9012三極管
17)    3p接線端子
18)    10uf電容
19)    30pf瓷片電容*2
20)    11.0592m晶振
21)    5v松樂繼電器
22)    5MM紅色LED
23)    自鎖開關
24)    DC電源插口
25)    導線若干
26)    焊錫若干
27)    usb電源線


單片機源程序如下:
  1. #include <reg52.h>
  2. #include <intrins.h>          //包含頭文件
  3. #include"24C0x.h"                  //包含24C02函數
  4. #include"LCD12864.h"          //包含液晶函數
  5. #define uchar unsigned char
  6. #define uint unsigned int         //宏定義

  7. #define buffer1ID  0x01
  8. #define buffer2ID  0x02
  9. #define queren  0x88                //確認
  10. #define tuichu  0x85                //退出
  11. #define shanchu 0x82                //刪除

  12. #define User 1                                //用戶     

  13. void fan();                                        //主界面刷指紋管理員函數
  14.         
  15. sbit B0=B^0;
  16. sbit B7=B^7;
  17. sbit k2=P3^7;                                //指紋模塊
  18. sbit jidianqi=P3^6;                        //繼電器

  19.         
  20. extern unsigned char times[];
  21. uchar  Member=0,sec;

  22. uchar  code buffer[User][6]=
  23. {
  24. {"000000"}
  25. };
  26.         
  27.         
  28. uchar dz[4];
  29. uchar time[4];                        
  30. uchar mima[6];
  31. uchar mimag[6];
  32. uchar mimaID[6]={1,2,3,4,5,6};


  33. uchar Address1=20,tempx=20;
  34. uchar Address2=20;   
  35.         
  36. uchar data K;
  37. uchar data Key;
  38.         
  39. uint PageID;
  40. uchar data querenma=11;
  41. uchar sum[2];
  42. int summaf,summas;

  43. uchar  xdata UserPassword[7]={0};//密碼
  44. uchar  xdata DSY_BUFFER[16] ={0};//緩存


  45. void Red_Init(void);

  46. //檢測脈沖寬度
  47. unsigned char check(void);

  48. unsigned char redchange(unsigned char rednum);
  49.         

  50. void delayms(unsigned int z)
  51. {
  52.         unsigned int x,y;
  53.         for(x=z;x>0;x--)
  54.                 for(y=110;y>0;y--);
  55. }

  56. /********************************************************************
  57. * 名稱 : Chack(uchar User_Number)
  58. * 功能 : 單一用戶密碼檢測
  59. * 輸入 : User_Number
  60. * 輸出 : 密碼正確與錯誤,錯誤返回0,正確返回1
  61. ********************************************************************/
  62. uchar Chack(uchar User_Number)
  63. {
  64.         uchar flag, i,temp[6],Address;
  65.         Address=User_Number*10;
  66.         for(i=0;i<6;i++)
  67.         {
  68.                 temp[i]=x24c02_read(Address);
  69.                 delayms(10);
  70.                 Address++;
  71.         }
  72.         for(i=0;i<6;i++)
  73.         {
  74.                 if(temp[i]==UserPassword[i])
  75.                         flag=1;
  76.                 else         
  77.                         flag=0;               
  78.         }
  79.                 return flag;
  80. }

  81. /********************************************************************
  82. * 名稱 : PassWord_Chack()
  83. * 功能 : 所有用戶密碼檢測
  84. * 輸入 : 無
  85. * 輸出 : 密碼正確與錯誤,錯誤返回0,正確返回1
  86. ********************************************************************/
  87. uchar PassWord_Chack()
  88. {
  89.         uchar i=0;
  90.         while(i<User)
  91.         {
  92.                 if(Chack(i)==2)
  93.                 {
  94.                         Member=i+2;
  95.                         return 1;
  96.                 }
  97.                 i++;        
  98.         }
  99.         return 0;        
  100. }
  101.    
  102. void delay(uint tt)
  103. {  uchar i;
  104.    while(tt--)
  105.    {
  106.    for(i=0;i<125;i++);
  107.    }
  108. }
  109. /********************************************************************
  110. * 名稱 : UART_Init()
  111. * 功能 : 單片機串口初始化
  112. * 單片機:晶振11.0592MHz 波特率為9600bps
  113. * 指紋模塊:波特率為9600bps,
  114. ********************************************************************/        
  115. void UART_Init()
  116. {
  117.         SCON= 0x50;               //串口方式1        //REN=1; 允許接收
  118.         PCON=0x01;                //SMOD=0
  119.         TMOD= 0x01;               //定時器1定時方式2
  120.         TH1= 0xFD;                //11.0592MHz  模塊默認波特率為9600bps
  121.         TL1= 0xFD;                                                                                 
  122.         TR0= 1;                   //啟動定時器
  123.         EA=1;      
  124. }
  125.    
  126. unsigned char Keycan(void) //按鍵掃描程序 P1.0--P1.3為行線 P1.4--P1.7為列線
  127. {
  128.         unsigned char rcode, ccode;
  129.         P1 = 0xF0;      // 發全0行掃描碼,列線輸入
  130.         if((P1&0xF0) != 0xF0) // 若有鍵按下
  131.         {
  132.                 delay(1);// 延時去抖動
  133.                 if((P1&0xF0) != 0xF0)
  134.                 {  
  135.                         rcode = 0xef;         // 逐行掃描初值
  136.                         while((rcode&0x10) != 0)
  137.                         {
  138.                                 P1 = rcode;         // 輸出行掃描碼
  139.                                 if((P1&0xF0) != 0xF0) // 本行有鍵按下
  140.                                 {
  141.                                         ccode = (P1&0xF0)|0x0F;
  142.                                         //do{;}
  143.                                         while((P1&0xF0) != 0xF0); //等待鍵釋放
  144.                                         return ((~rcode) + (~ccode)); // 返回鍵編碼
  145.                                 }
  146.                                 else
  147.                                 rcode = (rcode<<1)|0x01; // 行掃描碼左移一位
  148.                         }
  149.                 }
  150.         }  
  151.         return 0; // 無鍵按下,返回值為0
  152. }
  153.         
  154. void KeyDeal(unsigned char Key)
  155. {  //unsigned char n;
  156.    if(Key!=0)
  157. {
  158.                    switch(Key)
  159.                    {
  160.                    case 0x12: K=1; break;         
  161.                    case 0x22: K=2; break;  
  162.                    case 0x42: K=3; break;  
  163.                    case 0x82: break;      
  164.                    case 0x13: K=4; break;
  165.                    case 0x23: K=5; break;
  166.                    case 0x43: K=6; break;
  167.                    case 0x83: K=34;break;               
  168.                    case 0x14: K=7; break;
  169.                    case 0x24: K=8; break;
  170.                    case 0x44: K=9; break;
  171.                    case 0x84: break;               
  172.                    case 0x18: break;               
  173.                    case 0x28: K=0; break;
  174.                    case 0x48: K=11; break;
  175.                    case 0x88: break;               
  176.                    default: break;
  177.                    }
  178.   }
  179. }
  180.         
  181.      
  182.         
  183. //*************************************//
  184. void SFG_GetEcho()                              //握手
  185. {
  186.    uchar i;
  187.    SBUF=0xef;
  188.    while(TI==0);
  189.    TI=0;
  190.    SBUF=0X01;
  191.    while(TI==0);
  192.    TI=0;
  193.         
  194.    SBUF=0XFF;
  195.    while(TI==0);
  196.    TI=0;
  197.    SBUF=0XFF;
  198.    while(TI==0);
  199.    TI=0;
  200.    SBUF=0XFF;
  201.    while(TI==0);
  202.    TI=0;
  203.    SBUF=0XFF;
  204.    while(TI==0);
  205.    TI=0;
  206.         
  207.    SBUF=0X01;
  208.    while(TI==0);
  209.    TI=0;
  210.         
  211.    SBUF=0X00;
  212.    while(TI==0);
  213.    TI=0;
  214.    SBUF=0X03;
  215.    while(TI==0);
  216.    TI=0;
  217.         
  218.    SBUF=0X53;
  219.    while(TI==0);
  220.    TI=0;
  221.          
  222.    SBUF=0X00;
  223.    while(TI==0);
  224.    TI=0;
  225.    summaf=0x57;
  226.    SBUF=summaf;
  227.    while(TI==0);
  228.    TI=0;
  229.         
  230.    for(i=0;i<9;i++)
  231.    {
  232.     while(RI==0);
  233.     RI=0;}
  234.         
  235.    while(RI==0);
  236.    RI=0;
  237.    querenma=SBUF;
  238.    while(RI==0);
  239.    RI=0;
  240.    sum[1]=SBUF;
  241.    while(RI==0);
  242.    RI=0;
  243.    sum[0]=SBUF;
  244.    summas=(sum[1]<<8)+sum[0];                                                                        
  245. }

  246.         
  247. //***************************************//
  248.         
  249. void SFG_getimage()                              //錄入指紋圖像
  250. {
  251.    uchar i;
  252.    SBUF=0xef;
  253.    while(TI==0);
  254.    TI=0;
  255.    SBUF=0X01;
  256.    while(TI==0);
  257.    TI=0;
  258.         
  259.    SBUF=0XFF;
  260.    while(TI==0);
  261.    TI=0;
  262.    SBUF=0XFF;
  263.    while(TI==0);
  264.    TI=0;
  265.    SBUF=0XFF;
  266.    while(TI==0);
  267.    TI=0;
  268.    SBUF=0XFF;
  269.    while(TI==0);
  270.    TI=0;
  271.         
  272.    SBUF=0X01;
  273.    while(TI==0);
  274.    TI=0;
  275.         
  276.    SBUF=0X00;
  277.    while(TI==0);
  278.    TI=0;
  279.    SBUF=0X03;
  280.    while(TI==0);
  281.    TI=0;
  282.         
  283.    SBUF=0X01;
  284.    while(TI==0);
  285.    TI=0;
  286.         
  287.    SBUF=0X00;
  288.    while(TI==0);
  289.    TI=0;
  290.    summaf=0x05;
  291.    SBUF=summaf;
  292.    while(TI==0);
  293.    TI=0;
  294.         
  295.    for(i=0;i<9;i++)
  296.    {
  297.     while(RI==0);
  298.     RI=0;}
  299.         
  300.    while(RI==0);
  301.    RI=0;
  302.    querenma=SBUF;
  303.    while(RI==0);
  304.    RI=0;
  305.    sum[1]=SBUF;
  306.    while(RI==0);
  307.    RI=0;
  308.    sum[0]=SBUF;
  309.    summas=(sum[1]<<8)+sum[0];                                                                        
  310. }
  311.         
  312. void SFG_genchar(uchar bufferID) //生成特征并存于charbuffer1/2  調用后單片機波特率變化@@@
  313. {
  314.    uchar i;
  315.    SBUF=0xef;
  316.    while(TI==0);
  317.    TI=0;
  318.    SBUF=0X01;
  319.    while(TI==0);
  320.    TI=0;
  321.         
  322.    SBUF=0XFF;
  323.    while(TI==0);
  324.    TI=0;
  325.    SBUF=0XFF;
  326.    while(TI==0);
  327.    TI=0;
  328.    SBUF=0XFF;
  329.    while(TI==0);
  330.    TI=0;
  331.    SBUF=0XFF;
  332.    while(TI==0);
  333.    TI=0;
  334.         
  335.    SBUF=0X01;
  336.    while(TI==0);
  337.    TI=0;
  338.         
  339.    SBUF=0X00;
  340.    while(TI==0);
  341.    TI=0;
  342.    SBUF=0X04;
  343.    while(TI==0);
  344.    TI=0;
  345.         
  346.    SBUF=0X02;
  347.    while(TI==0);
  348.    TI=0;
  349.         
  350.    SBUF=bufferID;
  351.    while(TI==0);
  352.    TI=0;
  353.         
  354.    summaf=0x07+bufferID;
  355.    sum[0]=summaf;
  356.    sum[1]=summaf>>8;
  357.    SBUF=sum[1];
  358.    while(TI==0)
  359.    TI=0;
  360.    SBUF=sum[0];
  361.    while(TI==0)
  362.    TI=0;
  363.         
  364.    for(i=0;i<9;i++)
  365.    {
  366.     while(RI==0);
  367.     RI=0;}
  368.    while(RI==0);
  369.    RI=0;
  370.    querenma=SBUF;
  371.    while(RI==0);
  372.    RI=0;
  373.    sum[1]=SBUF;
  374.    while(RI==0);
  375.    RI=0;
  376.    sum[0]=SBUF;
  377.    summas=(sum[1]<<8)+sum[0];                                                                        
  378. }

  379. void SFG_fastsearch(uchar bufferID)  //搜索指紋返回指紋ID號   sum、pagenum>255都會使程序卡@@@
  380. {
  381.    uchar i,ID1,ID2;
  382.    SBUF=0xef;
  383.    while(TI==0);
  384.    TI=0;
  385.    SBUF=0X01;
  386.    while(TI==0);
  387.    TI=0;
  388.    SBUF=0XFF;
  389.    while(TI==0);
  390.    TI=0;
  391.    SBUF=0XFF;
  392.    while(TI==0);
  393.    TI=0;
  394.    SBUF=0XFF;
  395.    while(TI==0);
  396.    TI=0;
  397.    SBUF=0XFF;
  398.    while(TI==0);
  399.    TI=0;
  400.         
  401.    SBUF=0X01;
  402.    while(TI==0);
  403.    TI=0;
  404.         
  405.    SBUF=0X00;
  406.    while(TI==0);
  407.    TI=0;
  408.    SBUF=0X08;
  409.    while(TI==0);
  410.    TI=1;
  411.         
  412.    SBUF=0X1b;
  413.    while(TI==0);
  414.    TI=0;
  415.         
  416.    SBUF=bufferID;
  417.    while(TI==0);
  418.    TI=0;
  419.         
  420.    SBUF=0X00;
  421.    while(TI==0);
  422.    TI=0;
  423.    SBUF=0;
  424.    while(TI==0);
  425.    TI=0;
  426.         
  427.    SBUF=0X00;
  428.    while(TI==0);
  429.    TI=0;
  430.    SBUF=180;
  431.    while(TI==0);
  432.    TI=0;
  433.         
  434.    summaf=9+0x1b+bufferID+180;
  435.    sum[0]=summaf;
  436.    sum[1]=summaf>>8;
  437.    SBUF=sum[1];
  438.    while(TI==0);
  439.    TI=1;
  440.    SBUF=sum[0];
  441.    while(TI==0);
  442.    TI=0;
  443.         
  444.    for(i=0;i<9;i++)
  445.    {
  446.     while(RI==0);
  447.     RI=0;}
  448.                
  449.    while(RI==0);
  450.    RI=0;
  451.    querenma=SBUF;
  452.         
  453.    while(RI==0);
  454.    RI=0;
  455.    ID1=SBUF;
  456.    while(RI==0);
  457.    RI=0;
  458.    ID2=SBUF;                                  //接收到的ID號
  459.    while(RI==0);
  460.    RI=0;
  461.    while(RI==0);
  462.    RI=0;
  463.         
  464.    while(RI==0);
  465.    RI=0;
  466.    sum[1]=SBUF;
  467.    while(RI==0);
  468.    RI=1;
  469.    sum[0]=SBUF;
  470.    summas=(sum[1]<<8)+sum[0];                                                                        
  471.    //PageID=ID1;
  472.    PageID=(ID1<<8)+ID2;
  473. }
  474.         
  475. void SFG_enroll()                                 //自動注冊模板返回存儲ID  =錄圖像+合并生成模板+儲存模板
  476. {
  477.    uchar i,ID1,ID2;
  478.    SBUF=0xef;
  479.    while(TI==0);
  480.    TI=1;
  481.    SBUF=0X01;
  482.    while(TI==0);
  483.    TI=0;
  484.         
  485.    SBUF=0XFF;
  486.    while(TI==0);
  487.    TI=0;
  488.    SBUF=0XFF;
  489.    while(TI==0);
  490.    TI=0;
  491.    SBUF=0XFF;
  492.    while(TI==0);
  493.    TI=0;
  494.    SBUF=0XFF;
  495.    while(TI==0);
  496.    TI=0;
  497.         
  498.    SBUF=0X01;
  499.    while(TI==0);
  500.    TI=0;
  501.         
  502.    SBUF=0X00;
  503.    while(TI==0);
  504.    TI=0;
  505.    SBUF=0X03;
  506.    while(TI==0);
  507.    TI=0;
  508.         
  509.    SBUF=0X10;
  510.    while(TI==0);
  511.    TI=0;
  512.            
  513.    SBUF=0X00;
  514.    while(TI==0);
  515.    TI=0;
  516.    summaf=0x14;
  517.    SBUF=summaf;           //校驗和
  518.    while(TI==0);
  519.    TI=0;
  520.         
  521.    for(i=0;i<9;i++)
  522.    {
  523.     while(RI==0);
  524.     RI=1;}
  525.    while(RI==0);
  526.    RI=0;
  527.    querenma=SBUF;
  528.    while(RI==0);
  529.    RI=0;
  530.    ID1=SBUF;
  531.    while(RI==0);
  532.    RI=0;
  533.    ID2=SBUF;
  534.         
  535.    while(RI==0);
  536.    RI=0;
  537.    sum[1]=SBUF;
  538.    while(RI==0);
  539.    RI=0;
  540.    sum[0]=SBUF;
  541.    summas=(sum[1]<<8)+sum[0];                                                                        
  542.    //PageID=ID1;
  543.    PageID=(ID1<<8)+ID2;
  544. }
  545. void SFG_deletchar(uint pageID)   //刪除指紋                     校驗和在2字節的頁碼處應分高低字節相加
  546. {
  547.    uchar i,ID1,ID2;
  548.    SBUF=0xef;
  549.    while(TI==0);
  550.    TI=0;
  551.    SBUF=0X01;
  552.    while(TI==0);
  553.    TI=0;
  554.         
  555.    SBUF=0XFF;
  556.    while(TI==0);
  557.    TI=0;
  558.    SBUF=0XFF;
  559.    while(TI==0);
  560.    TI=1;
  561.    SBUF=0XFF;
  562.    while(TI==0);
  563.    TI=0;
  564.    SBUF=0XFF;
  565.    while(TI==0);
  566.    TI=0;
  567.         
  568.    SBUF=0X01;
  569.    while(TI==0);
  570.    TI=0;
  571.         
  572.    SBUF=0X00;
  573.    while(TI==0);
  574.    TI=0;
  575.    SBUF=0X07;
  576.    while(TI==0);
  577.    TI=0;
  578.         
  579.    SBUF=0X0c;
  580.    while(TI==0);
  581.    TI=0;
  582.         
  583.    ID1=pageID;ID2=pageID>>8;
  584.    SBUF=ID2;
  585.    while(TI==0);
  586.    TI=0;
  587.    SBUF=ID1;
  588.    while(TI==0);
  589.    TI=0;
  590.         
  591.    SBUF=0X00;
  592.    while(TI==0);
  593.    TI=0;
  594.    SBUF=1;
  595.    while(TI==0);
  596.    TI=0;
  597.         
  598.    summaf=0x15+ID1+ID2;
  599.    sum[0]=summaf;
  600.    sum[1]=summaf>>8;
  601.    SBUF=sum[1];
  602.    while(TI==0);
  603.    TI=0;
  604.    SBUF=sum[0];
  605.    while(TI==0);
  606.    TI=0;
  607.         
  608.    for(i=0;i<9;i++)
  609.    {
  610.     while(RI==0);
  611.     RI=0;}
  612.    while(RI==0);
  613.    RI=0;
  614.    querenma=SBUF;
  615.    while(RI==0);
  616.    RI=0;
  617.    sum[1]=SBUF;
  618.    while(RI==0);
  619.    RI=0;
  620.    sum[0]=SBUF;
  621.    summas=(sum[1]<<8)+sum[0];                                                                        
  622. }
  623.    
  624. void SFG_identify()                                //自動驗證指紋     錄圖像+生成特征+搜索
  625. {
  626.    uchar i,ID1,ID2;
  627.    SBUF=0xef;
  628.    while(TI==0);
  629.    TI=0;
  630.    SBUF=0X01;
  631.    while(TI==0);
  632.    TI=0;
  633.         
  634.    SBUF=0XFF;
  635.    while(TI==0);
  636.    TI=0;
  637.    SBUF=0XFF;
  638.    while(TI==0);
  639.    TI=0;
  640.    SBUF=0XFF;
  641.    while(TI==0);
  642.    TI=0;
  643.    SBUF=0XFF;
  644.    while(TI==0);
  645.    TI=1;
  646.         
  647.    SBUF=0X01;
  648.    while(TI==0);
  649.    TI=0;
  650.         
  651.    SBUF=0X00;
  652.    while(TI==0);
  653.    TI=0;
  654.    SBUF=0X03;
  655.    while(TI==0);
  656.    TI=0;
  657.         
  658.    SBUF=0X11;
  659.    while(TI==0);
  660.    TI=0;
  661.            
  662.    SBUF=0X00;
  663.    while(TI==0);
  664.    TI=0;
  665.    summaf=0x15;
  666.    SBUF=summaf;           //校驗和
  667.    while(TI==0);
  668.    TI=0;
  669.         
  670.    for(i=0;i<9;i++)
  671.    {
  672.     while(RI==0);
  673.     RI=0;}
  674.    while(RI==0);
  675.    RI=0;
  676.    querenma=SBUF;
  677.    while(RI==0);
  678.    RI=0;
  679.    ID1=SBUF;
  680.    while(RI==0);
  681.    RI=0;
  682.    ID2=SBUF;
  683.         
  684.    while(RI==0);
  685.    RI=0;
  686.    while(RI==0);
  687.    RI=0;                          //得分
  688.         
  689.    while(RI==0);
  690.    RI=0;
  691.    sum[1]=SBUF;
  692.    while(RI==0);
  693.    RI=0;
  694.    sum[0]=SBUF;
  695.    summas=(sum[1]>>8)+sum[0];                                                                        
  696.    //PageID=ID1;
  697.    PageID=(ID1>>8)+ID2;
  698. }
  699. void shuazhiwen()
  700. {
  701.     uchar IDs1,IDs2,IDs3;         
  702.         LcmClearTXT();
  703.         PutStr(1,1,"請按手指開鎖");      
  704.         SFG_identify();
  705.         while(querenma==2)
  706.         SFG_identify();
  707.         if(querenma==0)
  708.    {
  709.                 LcmClearTXT();
  710.                 PutStr(1,2,"門已打開");
  711.                 IDs1=PageID/100;
  712.                 IDs2=PageID/10%10;
  713.                 IDs3=PageID%10;
  714.                 PutStr(2,1,"編號為:");
  715.                 WriteCommand(0x8D);                //指定第三行顯示位置
  716.                 WriteData(0x30+IDs1);
  717.                 WriteData(0x30+IDs2);
  718.                 WriteData(0x30+IDs3);
  719.                 jidianqi=0;
  720.                 delay(2500);
  721.                 jidianqi=1;        
  722.         }
  723.            else if(querenma==9)
  724.                  {
  725.                         LcmClearTXT();
  726.                         PutStr(1,1,"沒搜索到指紋");
  727.                         PutStr(2,1,"請重新按手指");
  728.                 }
  729.                    else
  730.                 {
  731.                         LcmClearTXT();
  732.                         PutStr(1,1,"接收包出錯");
  733.                 }
  734.                 delay(2000);
  735.    //         while(Keycan()==0);
  736. }
  737. void addfinger()
  738. {
  739.         uchar IDa1,IDa2,IDa3;
  740.         LcmClearTXT();
  741.         PutStr(1,2,"請按手指");   
  742.         SFG_getimage();
  743.         while(querenma!=0)
  744.         SFG_getimage();
  745.         SFG_genchar(buffer1ID);
  746.         UART_Init();
  747.         SFG_fastsearch(buffer1ID);
  748.         while(querenma==1)
  749.         SFG_fastsearch(buffer1ID);
  750.         if(querenma==0)
  751.         {
  752.                 LcmClearTXT();
  753.                 PutStr(1,1,"該指紋已存儲");
  754.                 PutStr(3,0,"  按任意鍵繼續");
  755.             while(Keycan()==0);
  756.         }
  757.         else if(querenma==9)
  758.                 {
  759.                         LcmClearTXT();
  760.                         PutStr(1,1,"請再次按手指");
  761.                         SFG_enroll();
  762.                         while(querenma==2)
  763.                         SFG_enroll();
  764.                         LcmClearTXT();
  765.                         if(querenma==0)
  766.                         {
  767.                                 IDa1=PageID/100;IDa2=PageID/10%10;IDa3=PageID%10;
  768.                                 PutStr(1,1,"指紋采集成功");
  769.                                 PutStr(2,1,"編號為:");
  770.                                 WriteCommand(0x8D);
  771.                                 WriteData(0x30+IDa1);WriteData(0x30+IDa2);WriteData(0x30+IDa3);
  772.                           }
  773.                   else if(querenma!=0)
  774.                           {
  775.                                 PutStr(1,1,"指紋采集失敗");
  776.                                 PutStr(2,1,"請重新操作");
  777.                          }
  778.                 PutStr(3,0,"  按任意鍵繼續");
  779.             while(Keycan()==0);
  780.                    }
  781.         LcmClearTXT();
  782. }
  783. void deletfinger()
  784. {
  785.         uchar i,j=0;
  786.         LcmClearTXT();
  787.         PutStr(1,0,"輸入刪去的指紋號");
  788.         for(i=0;i<5;i++)dz[i]=0;        
  789.            Key=Keycan();
  790.            while(Key!=queren)
  791.            {
  792.              Key=Keycan();
  793.              KeyDeal(Key);
  794.              delay(30);                                                              //按鍵有抖動@@@
  795.              if(Key==0)K=10;
  796.              if((K>=0)&&(K<=9))
  797.              {
  798.               dz[j]=K;
  799.                   if(j<3)
  800.                   {        
  801.                                 WriteCommand(0x88+j);                //指定第三行顯示位置
  802.                                 WriteData(0x30+dz[j]);        
  803.                   }
  804.               ++j;
  805.                   if(j==4)
  806.               j=3;                                                                                                   //@@#yinhuang
  807.              }   //顯示LCD12864并行顯示
  808.                  if(K==34)                //按了刪除鍵
  809.                   {
  810.                     if(j==0)
  811.                         {
  812.                                 WriteCommand(0x88);                //指定第三行顯示位置
  813.                                 WriteData(0x20);
  814.                         }
  815.                         else
  816.                         {
  817.                                 --j;
  818.                                 WriteCommand(0x88+j);            //指定第三行顯示位置
  819.                                 WriteData(0x20);
  820.                         }
  821.                 }
  822.         }
  823.         if(j>=2)
  824.         PageID=dz[2]+dz[1]*10+dz[0]*100;
  825.         if(j==1)
  826.         PageID=dz[1]+dz[0]*10;
  827.         if(j==0)
  828.         PageID=dz[0];
  829.         SFG_deletchar(PageID);
  830.         if(querenma==1)
  831.         {
  832.                 LcmClearTXT();
  833.                 PutStr(1,1,"刪去指紋號成功!");
  834.         }
  835.         else
  836.         {
  837.                 LcmClearTXT();
  838.                 PutStr(1,2,"刪去指紋號失敗!");  
  839.         }
  840.         PutStr(2,0,"  按任意鍵繼續");
  841.         while(Keycan()==0);
  842.         LcmClearTXT();
  843. }
  844.         
  845. void gaimima()
  846. {
  847.         uchar i,j=0,mima1[4],mima2[4];
  848.         uchar k,temp;
  849.         LcmClearTXT();
  850.         PutStr(1,1,"請輸入新密碼");
  851.         for(i=0;i<6;i++)mima1[i]=0;                                                                        
  852.            Key=Keycan();
  853.       while(Key!=queren)
  854.            {
  855.              Key=Keycan();
  856.              KeyDeal(Key);
  857.              delay(30);                                                              
  858.              if(Key==0)K=10;
  859.              if((K>=0)&&(K<=9))
  860.              {
  861.               mima1[j]=K;
  862.                   if(j<6)
  863.                   {        
  864.                                 WriteCommand(0x89+j);                //指定第三行顯示位置
  865.                                 WriteData(0x0f);        
  866.                   }
  867.               ++j;
  868.                   if(j==7)
  869.               j=6;                                                                                                   //@@#yinhuang
  870.              }   //顯示LCD12864并行顯示
  871.                  if(K==34)                //按了刪除鍵
  872.                   {
  873.                     if(j==0)
  874.                         {
  875.                                 WriteCommand(0x89);                //指定第三行顯示位置
  876.                                 WriteData(0x20);
  877.                         }
  878.                         else
  879.                         {
  880.                                 --j;
  881.                                 WriteCommand(0x89+j);            //指定第三行顯示位置
  882.                                 WriteData(0x40);
  883.                         }
  884.                 }
  885.         }
  886.         LcmClearTXT();
  887.         LcmClearTXT();
  888.         j=0;
  889.         PutStr(1,0,"請再次輸入新密碼");
  890.         for(i=0;i<6;i++)mima2[i]=0;                                                                        
  891.            Key=Keycan();
  892.       while(Key!=queren)
  893.            {
  894.              Key=Keycan();
  895.              KeyDeal(Key);
  896.              delay(30);                                                              
  897.              if(Key==0)K=10;
  898.              if((K>=0)&&(K<=9))
  899.              {
  900.               mima2[j]=K;
  901.                   if(j<6)
  902.                   {               
  903.                                 WriteCommand(0x89+j);                //指定第三行顯示位置
  904.                                 WriteData(0x0f);        
  905.                   }
  906.               ++j;
  907.                   if(j==7)
  908.               j=6;                                                                                                   //@@#yinhuang
  909.              }   //顯示LCD12864并行顯示
  910.                  if(K==34)                //按了刪除鍵
  911.                   {
  912.                     if(j==0)
  913.                         {
  914.                                 WriteCommand(0x89);                //指定第三行顯示位置
  915.                                 WriteData(0x20);
  916.                         }
  917.                         else
  918.                         {
  919.                                 --j;
  920.                                 WriteCommand(0x89+j);            //指定第三行顯示位置
  921.                                 WriteData(0x20);
  922.                         }
  923.                 }
  924.         }
  925.         LcmClearTXT();
  926.         if((mima1[0]==mima2[0])&&(mima1[1]==mima2[1])&&(mima1[2]==mima2[2])&&(mima1[3]==mima2[3])&&(mima1[4]==mima2[4])&&(mima1[5]==mima2[5]))
  927.         {
  928.                 for(i=0;i<6;i++)
  929.                 mimaID[i]=mima1[i];
  930.                 /////////////////////////////////////////////////////
  931.                 for(i=0;i<6;i++)           //密碼限制在6位以內
  932.                 {
  933.                         UserPassword[i]=mima1[i]+0x30;                                 
  934.                 }
  935.                 temp=(Member-1)*100;        
  936.                 delayms(5);
  937.                 for(k=1;k<6;k++)
  938.                 {
  939.                         x24c02_write(temp,UserPassword[k]);
  940.                         delayms(10);
  941.                         temp++;
  942.                 }  
  943.                 //////////////////////////////////////////////////////
  944.                 PutStr(0,1,"密碼修改成功");
  945.                 PutStr(3,0,"  按任意鍵繼續");
  946.                 while(Keycan()==0);
  947.         }
  948.         else
  949.         {
  950.                 PutStr(0,0,"  密碼修改失敗  ");
  951.                 PutStr(1,0,"兩次輸入的密碼不");
  952.                 PutStr(2,0,"一致,請重新操作");      
  953.                 PutStr(3,0,"  按任意鍵繼續");
  954.                 while(Keycan()==0);
  955.         }
  956.         LcmClearTXT();
  957. }


  958. void zhu()
  959. {           
  960.     LcmClearTXT();
  961.         PutStr(1,2,"門已打開");
  962.            jidianqi=0;
  963.         delay(2500);
  964.         jidianqi=1;
  965.         PutStr(3,0,"  按任意鍵繼續");
  966.         while(Keycan()==0);
  967. }


  968. void guanliyuan()
  969. { uchar i,j=0,x=1;
  970.            uchar Right_flag;
  971.      LcmClearTXT();
  972.                 PutStr(1,1,"請輸入密碼:");        
  973.            for(i=0;i<6;i++)mima[i]=0;                                                                        
  974.            Key=Keycan();
  975.       while(Key!=queren)
  976. ……………………

  977. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

請大家多多指教:
程序已經寫得差不多了,還存在一些小問題,大家幫忙一起修改.7z (3.64 MB, 下載次數: 773)


評分

參與人數 3黑幣 +28 收起 理由
kljie1000 + 10
dww465757120 + 10 共享資料的黑幣獎勵!
穿著安踏去拉薩 + 8 贊一個!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏39 分享淘帖 頂3 踩
回復

使用道具 舉報

來自 2#
ID:280876 發表于 2018-7-13 10:06 | 只看該作者
這個代碼是錯的,就別發上來了
回復

使用道具 舉報

來自 3#
ID:363376 發表于 2018-7-14 23:36 | 只看該作者
for(i=0;i<9;i++)    {     while(RI==0);     RI=0;}             while(RI==0);    RI=0;    querenma=SBUF;    while(RI==0);    RI=0;    sum[1]=SBUF;    while(RI==0);    RI=0;    sum[0]=SBUF;    summas=(sum[1]<<8)+sum[0];
你這樣等待接收應答包,萬一哪次指紋頭不返回應答包,那你的程序就死了,不管哪種指紋頭都會存在不返回應答包的時候。
回復

使用道具 舉報

來自 4#
ID:564706 發表于 2019-6-17 16:36 | 只看該作者
參考了一下你的程序,總體來說很不錯,小錯誤確實有。
回復

使用道具 舉報

來自 5#
ID:516928 發表于 2019-6-17 17:39 | 只看該作者
你的程序都沒用,無顯示,發上來也好的程序讓大家學習?
回復

使用道具 舉報

來自 6#
ID:516928 發表于 2019-6-17 17:41 | 只看該作者
發的程序原代碼都是錯
回復

使用道具 舉報

7#
ID:238363 發表于 2018-6-11 13:09 | 只看該作者
參考參考,謝了
回復

使用道具 舉報

8#
ID:227956 發表于 2018-7-6 11:55 | 只看該作者
程序好長,謝謝
回復

使用道具 舉報

9#
ID:364531 發表于 2018-7-8 21:05 | 只看該作者
非常感謝,好資料,51黑有你更精彩!!!
回復

使用道具 舉報

10#
ID:284488 發表于 2018-7-10 21:14 | 只看該作者
樓主請問下指紋傳感器是用AS608 光學指紋傳感器嗎?還是別種型式的?謝謝。
回復

使用道具 舉報

11#
ID:73182 發表于 2018-7-11 09:01 | 只看該作者
非常感謝,收藏先
回復

使用道具 舉報

12#
ID:331563 發表于 2018-8-1 10:20 | 只看該作者
謝謝分享 值得參考
回復

使用道具 舉報

13#
ID:185815 發表于 2018-11-13 00:22 | 只看該作者
好東西啊,感謝分享。準備DIY
回復

使用道具 舉報

14#
ID:415247 發表于 2018-11-13 01:57 | 只看該作者
謝謝大佬,
回復

使用道具 舉報

15#
ID:437267 發表于 2018-12-3 11:08 | 只看該作者
謝謝謝謝
回復

使用道具 舉報

16#
ID:407940 發表于 2018-12-3 17:04 | 只看該作者

那該怎么改正。謝謝大佬
回復

使用道具 舉報

17#
ID:407196 發表于 2018-12-3 20:25 | 只看該作者
大神!我只有膜拜中!
回復

使用道具 舉報

18#
ID:89286 發表于 2018-12-4 13:59 | 只看該作者
thanks for sharing
回復

使用道具 舉報

19#
ID:438823 發表于 2018-12-20 22:04 | 只看該作者
樓主   這個密碼是錯的啊
回復

使用道具 舉報

20#
ID:458954 發表于 2019-1-4 14:14 | 只看該作者
不錯,繼續收藏
回復

使用道具 舉報

21#
ID:458411 發表于 2019-1-4 14:23 | 只看該作者
很棒  學習了 受教
回復

使用道具 舉報

22#
ID:461955 發表于 2019-1-4 17:00 | 只看該作者
666666666666剛好需要
回復

使用道具 舉報

23#
ID:338078 發表于 2019-2-18 14:52 | 只看該作者
是錯的 不要下載了
回復

使用道具 舉報

24#
ID:304358 發表于 2019-2-27 11:43 | 只看該作者
樓主繼續分享作品啊
回復

使用道具 舉報

25#
ID:323102 發表于 2019-3-23 17:50 | 只看該作者
能直接用嗎?
回復

使用道具 舉報

26#
ID:110278 發表于 2019-3-25 10:27 | 只看該作者
不錯。
回復

使用道具 舉報

27#
ID:323102 發表于 2019-3-28 01:01 | 只看該作者
樓主請問密碼是多少啊,為什么重新編譯你的代碼整個系統就不能用了呢?
回復

使用道具 舉報

28#
ID:323102 發表于 2019-3-28 07:31 來自手機 | 只看該作者
發的程序是錯了大家不要別下載了,等我做好直接發能用的
回復

使用道具 舉報

29#
ID:507630 發表于 2019-4-10 12:34 | 只看該作者
元件清單里沒有指紋模塊嗎?有人可以把原理圖的各個元件標一下嗎?
回復

使用道具 舉報

30#
ID:73182 發表于 2019-4-10 15:33 | 只看該作者
感謝分享
回復

使用道具 舉報

31#
ID:493382 發表于 2019-4-19 22:42 | 只看該作者
這個程序好長,不過感覺好高級
回復

使用道具 舉報

32#
ID:426295 發表于 2019-4-20 02:27 | 只看該作者
管理員密碼是什么?
回復

使用道具 舉報

33#
ID:518403 發表于 2019-4-22 10:50 | 只看該作者
收藏先
回復

使用道具 舉報

34#
ID:457649 發表于 2019-4-25 05:45 | 只看該作者
代碼錯了,定時器都開錯了,顯示屏能顯示算我輸
回復

使用道具 舉報

35#
ID:526983 發表于 2019-5-4 16:15 | 只看該作者
請問可以發一下源代碼的word版本的嗎
回復

使用道具 舉報

36#
ID:507104 發表于 2019-5-4 18:11 | 只看該作者
參考一下,好東西,值得頂一下
回復

使用道具 舉報

37#
ID:271238 發表于 2019-5-7 16:41 | 只看該作者
很好的東西!
回復

使用道具 舉報

38#
ID:466896 發表于 2019-5-11 09:51 來自手機 | 只看該作者
好東西啊。
回復

使用道具 舉報

39#
ID:503813 發表于 2019-5-17 22:54 | 只看該作者
本帖最后由 莎粒坨 于 2019-5-18 11:12 編輯

好程序 只是少了點注釋而已
回復

使用道具 舉報

40#
ID:503813 發表于 2019-5-17 22:54 | 只看該作者
12864的顯示都是問題!!!!
回復

使用道具 舉報

41#
ID:372118 發表于 2019-6-7 09:01 | 只看該作者
謝謝分享
回復

使用道具 舉報

42#
ID:555216 發表于 2019-6-14 00:28 | 只看該作者
請問這個可以鎖程序嗎?還是用來鎖實體門?想找一個有管理員密碼和用戶密碼的程序,輸入可以燒錄修改程序參數之類的
回復

使用道具 舉報

43#
ID:455228 發表于 2019-6-17 09:35 | 只看該作者
小白一個,先收藏
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲视频一区 | 99re热这里只有精品视频 | 久久成人精品 | 久久大陆| 国产一区二区三区久久久久久久久 | 一呦二呦三呦国产精品 | 精品福利一区 | 久久成人一区 | 亚洲精品国产精品国自产在线 | 国产精品美女久久久 | 九九热在线视频观看这里只有精品 | 国产 欧美 日韩 一区 | 国产成人精品a视频一区www | 久久久久久国产精品 | 99在线精品视频 | 欧美二区乱c黑人 | 国产女人与拘做受视频 | 99这里只有精品视频 | 91久久 | 视频1区 | 国产精品视屏 | 国产wwwcom | 91亚洲国产成人久久精品网站 | 日韩成人免费视频 | 国产一区91精品张津瑜 | 午夜在线免费观看视频 | 日韩视频精品在线 | 五月婷婷在线视频 | 国产精品人人做人人爽 | 免费在线看黄 | 久久久久久久综合色一本 | 亚洲一区日韩 | 国产精品福利视频 | 国产日韩欧美一区二区 | 日日夜夜草 | 在线伊人网 | 天天操夜夜操 | 在线看片国产精品 | 一区二区久久 | 日韩精品一区二区三区在线 | 国产一区精品 |