找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6087|回复: 14
收起左侧

单片机指纹密码锁程序基于AS608,可能有问题,请多多包含

  [复制链接]
ID:270492 发表于 2018-1-2 22:57 | 显示全部楼层 |阅读模式
指纹密码锁程序基于AS608,可能有问题,请多多包含

单片机源程序如下:
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #include"24C0x.h"
  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  0x84
  11. #define shanchu 0x82

  12. #define User 1                                     

  13. void fan();
  14.   
  15. sbit BEE=P2^1;      
  16. sbit B0=B^0;
  17. sbit B7=B^7;
  18. sbit k2=P3^7;
  19. sbit jidianqi=P3^6;

  20.         
  21. extern unsigned char times[];
  22. uchar  Member=1,sec;

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


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

  44. uchar  xdata UserPassword[7]={0};//密码
  45. uchar  xdata DSY_BUFFER[16] ={0};//缓存


  46. void Red_Init(void);

  47. //检测脉冲宽度
  48. unsigned char check(void);

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

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

  57. /********************************************************************
  58. * 名称 : Chack(uchar User_Number)
  59. * 功能 : 单一用户密码检测
  60. * 输入 : User_Number
  61. * 输出 : 密码正确与错误,错误返回0,正确返回1
  62. ********************************************************************/
  63. uchar Chack(uchar User_Number)
  64. {
  65.         uchar flag, i,temp[6],Address;
  66.         Address=User_Number*10;
  67.         for(i=0;i<6;i++)
  68.         {
  69.                 temp[i]=x24c02_read(Address);
  70.                 delayms(10);
  71.                 Address++;
  72.         }
  73.         for(i=0;i<6;i++)
  74.         {
  75.                 if(temp[i]==UserPassword[i])
  76.                         flag++;       
  77.         }
  78.         if(flag==6) flag=1;
  79.         else flag=0;
  80.         return flag;
  81. }

  82. /********************************************************************
  83. * 名称 : PassWord_Chack()
  84. * 功能 : 所有用户密码检测
  85. * 输入 : 无
  86. * 输出 : 密码正确与错误,错误返回0,正确返回1
  87. ********************************************************************/
  88. uchar PassWord_Chack()
  89. {
  90.         uchar i=0;
  91.         while(i<User)
  92.         {
  93.                 if(Chack(i)==1)
  94.                 {
  95.                         Member=i+1;
  96.                         return 1;
  97.                 }
  98.                 i++;       
  99.         }
  100.         return 0;       
  101. }
  102.    
  103. void delay(uint tt)
  104. {  uchar i;
  105.    while(tt--)
  106.    {
  107.    for(i=0;i<125;i++);
  108.    }
  109. }
  110. /********************************************************************
  111. * 名称 : UART_Init()
  112. * 功能 : 单片机串口初始化
  113. * 单片机:晶振11.0592MHz 波特率为9600bps
  114. * 指纹模块:波特率为9600bps,
  115. ********************************************************************/        
  116. void UART_Init()
  117. {
  118.         SCON= 0x50;               //串口方式1        //REN=1; 允许接收
  119.         PCON=0x00;                //SMOD=0
  120.         TMOD= 0x21;               //定时器1定时方式2
  121.         TH1= 0xFD;                //11.0592MHz  模块默认波特率为9600bps
  122.         TL1= 0xFD;                                                                                 
  123.         TR1= 1;                   //启动定时器
  124.         EA=1;      
  125. }
  126.    
  127. unsigned char Keycan(void) //按键扫描程序 P1.0--P1.3为行线 P1.4--P1.7为列线
  128. {
  129.   unsigned char rcode, ccode;
  130.   P1 = 0xF0;      // 发全0行扫描码,列线输入
  131.   if((P1&0xF0) != 0xF0) // 若有键按下
  132.   {
  133.     delay(1);// 延时去抖动
  134.     if((P1&0xF0) != 0xF0)
  135.     {  rcode = 0xFE;         // 逐行扫描初值
  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.            
  159.                    switch(Key)
  160.                    {
  161.                    case 0x11: K=1; break;         
  162.                    case 0x21: K=2; break;  
  163.                    case 0x41: K=3; break;  
  164.                    case 0x81:  break;      
  165.                    case 0x12: K=4; break;
  166.                    case 0x22: K=5; break;
  167.                    case 0x42: K=6; break;
  168.                    case 0x82: K=34;break;               
  169.                    case 0x14: K=7; break;
  170.                    case 0x24: K=8; break;
  171.                    case 0x44: K=9; break;
  172.                    case 0x84:  break;               
  173.                    case 0x18:  break;               
  174.                    case 0x28: K=0; break;
  175.                    case 0x48:  K=11; break;
  176.                    case 0x88:  break;               
  177.                    default: break;
  178.                    }
  179.   }
  180. }
  181.         
  182.      
  183.         
  184. //*************************************//
  185. void SFG_GetEcho()                              //握手
  186. {
  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.    while(RI==0);
  231.    RI=0;
  232.    querenma=SBUF;
  233.    while(RI==0);
  234.    RI=0;
  235.    sum[1]=SBUF;
  236.    while(RI==0);
  237.    RI=0;
  238.    sum[0]=SBUF;
  239.    summas=(sum[1]<<8)+sum[0];                                                                         
  240. }

  241.         
  242. //***************************************//
  243.         
  244. void SFG_getimage()                              //录入指纹图像
  245. {
  246.    SBUF=0xef;
  247.    while(TI==0);
  248.    TI=0;
  249.    SBUF=0X01;
  250.    while(TI==0);
  251.    TI=0;
  252.         
  253.    SBUF=0XFF;
  254.    while(TI==0);
  255.    TI=0;
  256.    SBUF=0XFF;
  257.    while(TI==0);
  258.    TI=0;

  259.    TI=0;
  260.         
  261.    SBUF=0X01;
  262.    while(TI==0);
  263.    TI=0;
  264.         
  265.    SBUF=0X00;
  266.    while(TI==0);
  267.    TI=0;
  268.         
  269.    while(RI==0);
  270.    RI=0;
  271.    querenma=SBUF;
  272.    while(RI==0);
  273.    RI=0;
  274.    sum[1]=SBUF;
  275.    while(RI==0);
  276.    RI=0;
  277.    sum[0]=SBUF;
  278.    summas=(sum[1]<<8)+sum[0];                                                                         
  279. }
  280.         
  281. void SFG_genchar(uchar bufferID) //生成特征并存于charbuffer1/2  调用后单片机波特率变化@@@
  282. {
  283.    uchar i;
  284.    SBUF=0xef;
  285.    while(TI==0);
  286.    TI=0;
  287.    SBUF=0X01;
  288.    while(TI==0);
  289.    TI=0;
  290.         
  291.    SBUF=0XFF;
  292.    while(TI==0);
  293.    TI=0;
  294.    SBUF=0XFF;
  295.    while(TI==0);
  296.    TI=0;
  297.    SBUF=0XFF;
  298.    while(TI==0);
  299.    TI=0;
  300.    SBUF=0XFF;
  301.    while(TI==0);
  302.    TI=0;
  303.         
  304.    SBUF=0X01;
  305.    while(TI==0);
  306.    TI=0;
  307.         
  308.    SBUF=0X00;
  309.    while(TI==0);
  310.    TI=0;
  311.    SBUF=0X04;
  312.    while(TI==0);
  313.    TI=0;
  314.         
  315.    summaf=0x07+bufferID;
  316.    sum[0]=summaf;
  317.    sum[1]=summaf>>8;
  318.    SBUF=sum[1];
  319.         
  320.    for(i=0;i<9;i++)
  321.    {
  322.     while(RI==0);
  323.     RI=0;}
  324.    while(RI==0);
  325.    RI=0;
  326.    querenma=SBUF;
  327.    while(RI==0);
  328.    RI=0;
  329.    sum[1]=SBUF;
  330.    while(RI==0);
  331.    RI=0;
  332.    sum[0]=SBUF;
  333.    summas=(sum[1]<<8)+sum[0];                                                                         
  334. }

  335. void SFG_fastsearch(uchar bufferID)  //搜索指纹返回指纹ID号   sum、pagenum>255都会使程序卡@@@
  336. {
  337.    uchar ID1,ID2;
  338.    SBUF=0xef;
  339.    while(TI==0);
  340.    TI=0;
  341.    SBUF=0X01;
  342.    while(TI==0);
  343.    TI=0;
  344.    SBUF=0XFF;
  345.    while(TI==0);
  346.    TI=0;
  347.         
  348.    SBUF=0X01;
  349.    while(TI==0);
  350.    TI=0;
  351.         
  352.    SBUF=0X1b;
  353.    while(TI==0);
  354.    TI=0;
  355.         
  356.    SBUF=bufferID;
  357.    while(TI==0);
  358.    TI=0;
  359.         
  360.    SBUF=0X00;
  361.    while(TI==0);
  362.    TI=0;
  363.    SBUF=0;
  364.    while(TI==0);
  365.    TI=0;
  366.         
  367.    SBUF=0X00;
  368.    while(TI==0);
  369.    TI=0;
  370.    SBUF=180;
  371.    while(TI==0);
  372.    TI=0;
  373.         
  374.    summaf=9+0x1b+bufferID+180;
  375.    sum[0]=summaf;
  376.    sum[1]=summaf>>8;
  377.    SBUF=sum[1];
  378.    while(TI==0);
  379.    TI=0;
  380.    SBUF=sum[0];
  381.    while(TI==0);
  382.    TI=0;
  383.         
  384.    while(RI==0);
  385.    RI=0;
  386.    ID1=SBUF;
  387.    while(RI==0);
  388.    RI=0;
  389.    ID2=SBUF;                                  //接收到的ID号
  390.    while(RI==0);
  391.    RI=0;
  392.    while(RI==0);
  393.    RI=0;

  394.    sum[1]=SBUF;
  395.    while(RI==0);
  396.    RI=0;
  397.    sum[0]=SBUF;
  398.    summas=(sum[1]<<8)+sum[0];                                                                         
  399.    //PageID=ID1;
  400.    PageID=(ID1<<8)+ID2;
  401. }
  402.         
  403. void SFG_enroll()                                 //自动注册模板返回存储ID  =录图像+合并生成模板+储存模板
  404. {
  405.    uchar i,ID1,ID2;
  406.    SBUF=0xef;
  407.    while(TI==0);
  408.    TI=0;
  409.    SBUF=0X01;
  410.    while(TI==0);
  411.    TI=0;
  412.         
  413.    SBUF=0XFF;
  414.    while(TI==0);
  415.    TI=0;
  416.    SBUF=0XFF;
  417.    while(TI==0);
  418.    TI=0;
  419.    SBUF=0XFF;
  420.    while(TI==0);
  421.    TI=0;
  422.    SBUF=0XFF;
  423.    while(TI==0);
  424.    TI=0;
  425.         
  426.    SBUF=0X00;
  427.    while(TI==0);
  428.    TI=0;
  429.    SBUF=0X03;
  430.    while(TI==0);
  431.    TI=0;
  432.         
  433.    SBUF=0X10;
  434.    while(TI==0);
  435.    TI=0;
  436.         
  437.    for(i=0;i<9;i++)
  438.    {
  439.     while(RI==0);
  440.     RI=0;}
  441.    while(RI==0);
  442.    RI=0;
  443.    querenma=SBUF;
  444.    while(RI==0);
  445.    RI=0;
  446.    ID1=SBUF;
  447.    while(RI==0);
  448.    RI=0;
  449.    ID2=SBUF;
  450.         
  451.    while(RI==0);
  452.    RI=0;
  453.    sum[0]=SBUF;
  454.    summas=(sum[1]<<8)+sum[0];                                                                         
  455.    //PageID=ID1;
  456.    PageID=(ID1<<8)+ID2;
  457. }
  458. void SFG_deletchar(uint pageID)   //删除指纹                     校验和在2字节的页码处应分高低字节相加
  459. {
  460.    uchar ID1,ID2;
  461.    pageID=0;
  462.    SBUF=0xef;
  463.    while(TI==0);
  464.    TI=0;
  465.    SBUF=0X01;
  466.    while(TI==0);
  467.    TI=0;
  468.         
  469.    SBUF=0XFF;
  470.    while(TI==0);
  471.    TI=0;
  472.    SBUF=0XFF;
  473.    while(TI==0);
  474.    TI=0;
  475.    SBUF=0XFF;
  476.    while(TI==0);
  477.    TI=0;
  478.    SBUF=0XFF;
  479.    while(TI==0);
  480.    TI=0;
  481.         
  482.    SBUF=0X01;
  483.    while(TI==0);
  484.    TI=0;
  485.         
  486.    SBUF=0X00;
  487.    while(TI==0);
  488.    TI=0;
  489.    SBUF=0X07;
  490.    while(TI==0);
  491.    TI=0;
  492.         
  493.    SBUF=0X0c;
  494.    while(TI==0);
  495.    TI=0;
  496.         
  497.    SBUF=0X00;
  498.    while(TI==0);
  499.    TI=0;
  500.    SBUF=1;
  501.    while(TI==0);
  502.    TI=0;
  503.         
  504.    summaf=0x15+ID1+ID2;
  505.    sum[0]=summaf;
  506.    sum[1]=summaf>>8;
  507.    SBUF=sum[1];
  508.    while(TI==0);
  509.    TI=0;

  510.    while(RI==0);
  511.    RI=0;
  512.    querenma=SBUF;
  513.    while(RI==0);
  514.    RI=0;
  515.    sum[1]=SBUF;
  516.    while(RI==0);
  517.    RI=0;
  518.    sum[0]=SBUF;
  519.    summas=(sum[1]<<8)+sum[0];                                                                         
  520. }
  521.    
  522. void SFG_identify()                                //自动验证指纹     录图像+生成特征+搜索
  523. {
  524.    uchar i,ID1,ID2;
  525.    SBUF=0xef;
  526.    while(TI==0);
  527.    SBUF=0XFF;
  528.    while(TI==0);
  529.    TI=0;
  530.    SBUF=0XFF;
  531.    while(TI==0);
  532.    TI=0;
  533.    SBUF=0XFF;
  534.    while(TI==0);
  535.    TI=0;
  536.    SBUF=0XFF;
  537.    while(TI==0);
  538.    TI=0;
  539.         
  540.    SBUF=0X00;
  541.    while(TI==0);
  542.    TI=0;
  543.    SBUF=0X03;
  544.    while(TI==0);
  545.    TI=0;
  546.         
  547.    SBUF=0X11;
  548.    while(TI==0);
  549.    TI=0;
  550.            
  551.    SBUF=0X00;
  552.    while(TI==0);
  553.    TI=0;
  554.    summaf=0x15;
  555.    SBUF=summaf;           //校验和
  556.    while(TI==0);
  557.    TI=0;
  558.         
  559.    for(i=0;i<9;i++)
  560.    {
  561.     while(RI==0);
  562.     RI=0;}
  563.    while(RI==0);
  564.    RI=0;
  565.    querenma=SBUF;
  566.    while(RI==0);
  567.    RI=0;
  568.    ID1=SBUF;
  569.    while(RI==0);
  570.    RI=0;
  571.    ID2=SBUF;
  572.         
  573.    while(RI==0);
  574.    RI=0;
  575.    while(RI==0);
  576.    RI=0;                          //得分
  577.         
  578.    while(RI==0);
  579.    RI=0;
  580.    sum[1]=SBUF;
  581.    while(RI==0);
  582.    RI=0;
  583.    sum[0]=SBUF;
  584.    summas=(sum[1]<<8)+sum[0];                                                                         
  585.    //PageID=ID1;
  586.    PageID=(ID1<<8)+ID2;
  587. }
  588. void shuazhiwen()
  589. {
  590.     uchar IDs1,IDs2,IDs3;         
  591.         LcmClearTXT();
  592.         PutStr(1,1,"请按手指开锁");      
  593.         SFG_identify();
  594.         while(querenma==2)
  595.         SFG_identify();
  596.         if(querenma==0)
  597.    {
  598.                 LcmClearTXT();
  599.                 PutStr(1,2,"门已打开");
  600.                 IDs1=PageID/100;
  601.                 IDs2=PageID/10%10;
  602.                 IDs3=PageID%10;
  603.                 PutStr(2,1,"编号为:");
  604.                 WriteCommand(0x8D);                //指定第三行显示位置
  605.                 WriteData(0x30+IDs1);
  606.                 WriteData(0x30+IDs2);
  607.                 WriteData(0x30+IDs3);
  608.                 jidianqi=0;
  609.                 delay(2500);
  610.                 jidianqi=1;       
  611.         }
  612.            else if(querenma==9)
  613.                 {
  614.                         LcmClearTXT();
  615.                         PutStr(1,1,"没搜索到指纹");
  616.                         PutStr(2,1,"请重新按手指");       
  617.                         BEE=0;delayms(1000);BEE=1;
  618.                         delay(1000);
  619.                 }
  620. //                   else
  621. //                {
  622. //                        LcmClearTXT();
  623. //                        PutStr(1,1,"接收包出错");
  624. //                }

  625.    //         while(Keycan()==0);
  626. }
  627. void addfinger()
  628. {
  629.         uchar IDa1,IDa2,IDa3;
  630.         LcmClearTXT();
  631.         PutStr(1,2,"请按手指");   
  632.         SFG_getimage();
  633.         while(querenma!=0)
  634.         SFG_getimage();
  635.         SFG_genchar(buffer1ID);
  636.         UART_Init();
  637.         SFG_fastsearch(buffer1ID);
  638.         while(querenma==1)
  639.         SFG_fastsearch(buffer1ID);
  640.         if(querenma==0)
  641.         {
  642.                 LcmClearTXT();
  643.                 PutStr(1,1,"该指纹已存储");
  644.                 PutStr(3,0,"  按任意键继续");
  645.             while(Keycan()==0);
  646.         }
  647.         else if(querenma==9)
  648.                 {
  649.                         LcmClearTXT();
  650.                         PutStr(1,1,"请再次按手指");
  651.                         SFG_enroll();
  652.                         while(querenma==2)
  653.                         SFG_enroll();
  654.                         LcmClearTXT();
  655.                         if(querenma==0)
  656.                         {
  657.                                 IDa1=PageID/100;IDa2=PageID/10%10;IDa3=PageID%10;
  658.                                 PutStr(1,1,"指纹采集成功");
  659.                                 PutStr(2,1,"编号为:");
  660.                                 WriteCommand(0x8D);
  661.                                 WriteData(0x30+IDa1);WriteData(0x30+IDa2);WriteData(0x30+IDa3);
  662.                           }
  663.                   else if(querenma!=0)
  664.                           {
  665.                                 PutStr(1,1,"指纹采集失败");
  666.                                 PutStr(2,1,"请重新操作");
  667.                          }
  668.                 PutStr(3,0,"  按任意键继续");
  669.             while(Keycan()==0);
  670.                    }
  671.         LcmClearTXT();
  672. }
  673. void deletfinger()
  674. {
  675.         uchar i,j=0;
  676.         LcmClearTXT();
  677.         PutStr(1,0,"输入删去的指纹号");
  678.         for(i=0;i<5;i++)dz[i]=0;       
  679.            Key=Keycan();
  680.            while(Key!=queren)
  681.            {
  682.              Key=Keycan();
  683.              KeyDeal(Key);
  684.              delay(30);                                                              //按键有抖动@@@
  685.              if(Key==0)K=10;
  686.              if((K>=0)&&(K<=9))
  687.              {
  688.               dz[j]=K;
  689.                   if(j<3)
  690.                   {       
  691.                                 WriteCommand(0x88+j);                //指定第三行显示位置
  692.                                 WriteData(0x30+dz[j]);       
  693.                   }
  694.               ++j;
  695.                   if(j==4)
  696.               j=3;                                                                                                   //@@#yinhuang
  697.              }   //显示LCD12864并行显示
  698.                  if(K==34)                //按了删除键
  699.                   {
  700.                     if(j==0)
  701.                         {
  702.                                 WriteCommand(0x88);                //指定第三行显示位置
  703.                                 WriteData(0x20);
  704.                         }
  705.                         else
  706.                         {
  707.                                 --j;
  708.                                 WriteCommand(0x88+j);            //指定第三行显示位置
  709.                                 WriteData(0x20);
  710.                         }
  711.                 }
  712.         }
  713.         if(j>=2)
  714.         PageID=dz[2]+dz[1]*10+dz[0]*100;
  715.         if(j==1)
  716.         PageID=dz[1]+dz[0]*10;
  717.         if(j==0)
  718.         PageID=dz[0];
  719.         SFG_deletchar(PageID);
  720.         if(querenma==0)
  721.         {
  722.                 LcmClearTXT();
  723.                 PutStr(1,1,"删去指纹号成功!");
  724.         }
  725.         else
  726.         {
  727.                 LcmClearTXT();
  728.                 PutStr(1,2,"删去指纹号失败!");  
  729.         }
  730.         PutStr(2,0,"  按任意键继续");
  731.         while(Keycan()==0);
  732.         LcmClearTXT();
  733. }
  734.         
  735. void gaimima()
  736. {
  737.         uchar i,j=0,mima1[6],mima2[6];
  738.         uchar k,temp;
  739.         LcmClearTXT();
  740.         PutStr(1,1,"请输入新密码");
  741.         for(i=0;i<6;i++)mima1[i]=0;                                                                       
  742.            Key=Keycan();
  743.       while(Key!=queren)
  744.            {
  745.              Key=Keycan();
  746.              KeyDeal(Key);
  747.              delay(30);                                                             
  748.              if(Key==0)K=10;
  749.              if((K>=0)&&(K<=9))
  750.              {
  751.               mima1[j]=K;
  752.                   if(j<6)
  753.                   {       
  754.                                 WriteCommand(0x89+j);                //指定第三行显示位置
  755.                                 WriteData(0x0f);       
  756.                   }
  757.               ++j;
  758.                   if(j==7)
  759.               j=6;                                                                                                   //@@#yinhuang
  760.              }   //显示LCD12864并行显示
  761.                  if(K==34)                //按了删除键
  762.                   {
  763.                     if(j==0)
  764.                         {
  765.                                 WriteCommand(0x89);                //指定第三行显示位置
  766.                                 WriteData(0x20);
  767.                         }
  768.                         else
  769.                         {
  770.                                 --j;
  771.                                 WriteCommand(0x89+j);            //指定第三行显示位置
  772.                                 WriteData(0x20);
  773.                         }
  774.                 }
  775.         }
  776.         LcmClearTXT();
  777.         LcmClearTXT();
  778.         j=0;
  779.         PutStr(1,0,"请再次输入新密码");
  780.         for(i=0;i<6;i++)mima2[i]=0;                                                                       
  781.            Key=Keycan();
  782.       while(Key!=queren)
  783.            {
  784.              Key=Keycan();
  785.              KeyDeal(Key);
  786.              delay(30);                                                             
  787.              if(Key==0)K=10;
  788.              if((K>=0)&&(K<=9))
  789.              {
  790.               mima2[j]=K;
  791.                   if(j<6)
  792.                   {               
  793.                                 WriteCommand(0x89+j);                //指定第三行显示位置
  794.                                 WriteData(0x0f);       
  795.                   }
  796.               ++j;
  797.                   if(j==7)
  798.               j=6;                                                                                                   //@@#yinhuang
  799.              }   //显示LCD12864并行显示
  800.                  if(K==34)                //按了删除键
  801.                   {
  802.                     if(j==0)
  803.                         {
  804.                                 WriteCommand(0x89);                //指定第三行显示位置
  805.                                 WriteData(0x20);
  806.                         }
  807.                         else
  808.                         {
  809.                                 --j;
  810.                                 WriteCommand(0x89+j);            //指定第三行显示位置
  811.                                 WriteData(0x20);
  812.                         }
  813.                 }
  814.         }
  815.         LcmClearTXT();
  816.         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]))
  817.         {
  818.                 for(i=0;i<6;i++)
  819.                 mimaID[i]=mima1[i];
  820.                 /////////////////////////////////////////////////////
  821.                 for(i=0;i<6;i++)           //密码限制在6位以内
  822.                 {
  823.                         UserPassword[i]=mima1[i]+0x30;                                 
  824.                 }
  825.                 temp=(Member-1)*10;       
  826.                 delayms(5);
  827.                 for(k=0;k<6;k++)
  828.                 {
  829.                         x24c02_write(temp,UserPassword[k]);
  830.                         delayms(10);
  831.                         temp++;
  832.                 }  
  833.                 //////////////////////////////////////////////////////
  834.                 PutStr(0,1,"密码修改成功");
  835.                 PutStr(3,0,"  按任意键继续");
  836.                 while(Keycan()==0);
  837.         }
  838.         else
  839.         {
  840.                 PutStr(0,0,"  密码修改失败  ");
  841.                 PutStr(1,0,"两次输入的密码不");
  842.                 PutStr(2,0,"一致,请重新操作");      
  843.                 PutStr(3,0,"  按任意键继续");
  844.                 while(Keycan()==0);
  845.         }
  846.         LcmClearTXT();
  847. }


  848. void zhu()
  849. {           
  850.     LcmClearTXT();
  851.         PutStr(1,2,"门已打开");
  852.            jidianqi=0;
  853.         delay(2500);
  854.         jidianqi=1;
  855.         PutStr(3,0,"  按任意键继续");
  856.         while(Keycan()==0);
  857. }


  858. void guanliyuan()
  859. { uchar i,j=0,x=1;
  860.            uchar Right_flag;
  861.      LcmClearTXT();
  862.                 PutStr(1,1,"请输入密码:");       
  863.            for(i=0;i<6;i++)mima[i]=0;                                                                       
  864.            Key=Keycan();
  865.       while(Key!=queren)
  866.            {
  867.              Key=Keycan();
  868.              KeyDeal(Key);
  869.              delay(30);                                                             
  870.              if(Key==0)K=10;
  871. ……………………

  872. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
1-程序.zip (227.67 KB, 下载次数: 139)
回复

使用道具 举报

ID:304712 发表于 2018-4-9 20:36 | 显示全部楼层
厉害了,小白学习,学习
回复

使用道具 举报

ID:306809 发表于 2018-4-12 18:42 | 显示全部楼层
真心求资料啊,可是积分不够啊啊啊啊啊啊
回复

使用道具 举报

ID:184793 发表于 2018-5-10 14:27 | 显示全部楼层
谢谢参考
回复

使用道具 举报

ID:334798 发表于 2018-5-21 13:21 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:334798 发表于 2018-5-21 13:22 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:370100 发表于 2018-7-12 12:02 | 显示全部楼层
感谢你的分享
回复

使用道具 举报

ID:280876 发表于 2018-7-13 10:15 | 显示全部楼层
这个代码指纹部分是错的。。。。
回复

使用道具 举报

ID:214999 发表于 2018-8-24 11:20 | 显示全部楼层
顶一个吧
回复

使用道具 举报

ID:52915 发表于 2018-9-19 18:17 | 显示全部楼层
可能有BUG?下来看看吧,谢谢!
回复

使用道具 举报

ID:367614 发表于 2018-10-31 20:22 | 显示全部楼层
wushiye54 发表于 2018-7-13 10:15
这个代码指纹部分是错的。。。。

请问有没有正确的?
回复

使用道具 举报

ID:423361 发表于 2018-11-9 00:22 | 显示全部楼层
学习学习
回复

使用道具 举报

ID:195740 发表于 2019-1-21 15:25 | 显示全部楼层
先下载下来,最近在研究
回复

使用道具 举报

ID:323102 发表于 2019-3-28 07:36 来自手机 | 显示全部楼层
wushiye54 发表于 2018-7-13 10:15
这个代码指纹部分是错的。。。。

你解决了吗?怎么改?
回复

使用道具 举报

ID:457649 发表于 2019-4-25 19:57 | 显示全部楼层
兄弟在否,这个at24c02有问题吧,
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表