欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 10787|回復(fù): 9
打印 上一主題 下一主題
收起左側(cè)

基于51單片機(jī)的紅外遙控指紋電子密碼鎖程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
這是我之前做過的紅外指紋電子密碼鎖程序,采用12864液晶顯示.


單片機(jī)源程序:
  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  0x86
  11. #define shanchu 0x84

  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. sbit Feng=P2^0;
  20.         
  21. extern unsigned char times[];
  22. uchar  Member=1,sec;
  23. uchar  ErrorCount;
  24. //////////////////////////紅外相關(guān)//////////////////////////
  25. //時(shí)間計(jì)算
  26. #define Imax 14000    //此處為晶振為11.0592時(shí)的取值,
  27. #define Imin 8000    //如用其它頻率的晶振時(shí),
  28. #define Inum1 1450    //要改變相應(yīng)的取值。
  29. #define Inum2 7000
  30. #define Inum3 3000
  31. //解碼變量
  32. unsigned char Im[4]={0x00,0x00,0x00,0x00};

  33. //全局變量
  34. uchar f;
  35. unsigned long m,Tc;
  36. unsigned char IrOK;
  37. //////////////////////////紅外相關(guān)//////////////////////////
  38. uchar  code buffer[User][6]=
  39. {
  40. {"000000"}
  41. };
  42.         
  43.         
  44. uchar dz[4];
  45. uchar time[4];                         
  46. uchar mima[6];
  47. uchar mimag[6];
  48. uchar mimaID[6]={1,2,3,4,5,6};


  49. uchar Address1=20,tempx=20;
  50. uchar Address2=20;   
  51.         
  52. uchar data K;
  53. uchar data Key;
  54.         
  55. uint PageID;
  56. uchar data querenma=11;
  57. uchar sum[2];
  58. int summaf,summas;

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


  61. void Red_Init(void);
  62. #include "zhiwen.h"
  63. //檢測(cè)脈沖寬度
  64. unsigned char check(void);

  65. unsigned char redchange(unsigned char rednum);
  66.         

  67. void delayms(unsigned int z)
  68. {
  69.         unsigned int x,y;
  70.         for(x=z;x>0;x--)
  71.                 for(y=110;y>0;y--);
  72. }

  73. /********************************************************************
  74. * 名稱 : Chack(uchar User_Number)
  75. * 功能 : 單一用戶密碼檢測(cè)
  76. * 輸入 : User_Number
  77. * 輸出 : 密碼正確與錯(cuò)誤,錯(cuò)誤返回0,正確返回1
  78. ********************************************************************/
  79. uchar Chack(uchar User_Number)
  80. {
  81.         uchar flag, i,temp[6],Address;
  82.         Address=User_Number*10;
  83.         for(i=0;i<6;i++)
  84.         {
  85.                 temp[i]=x24c02_read(Address);
  86.                 delayms(10);
  87.                 Address++;
  88.         }
  89.         for(i=0;i<6;i++)
  90.         {
  91.                 if(temp[i]==UserPassword[i])
  92.                         flag=1;
  93.                 else        
  94.                         flag=0;               
  95.         }
  96.                 return flag;
  97. }

  98. /********************************************************************
  99. * 名稱 : PassWord_Chack()
  100. * 功能 : 所有用戶密碼檢測(cè)
  101. * 輸入 : 無
  102. * 輸出 : 密碼正確與錯(cuò)誤,錯(cuò)誤返回0,正確返回1
  103. ********************************************************************/
  104. uchar PassWord_Chack()
  105. {
  106.         uchar i=0;
  107.         while(i<User)
  108.         {
  109.                 if(Chack(i)==1)
  110.                 {
  111.                         Member=i+1;
  112.                         return 1;
  113.                 }
  114.                 i++;       
  115.         }
  116.         return 0;       
  117. }
  118.    
  119. void delay(uchar tt)
  120. {  uchar i;
  121.    while(tt--)
  122.    {
  123.    for(i=0;i<125;i++);
  124.    }
  125. }
  126. /********************************************************************
  127. * 名稱 : UART_Init()
  128. * 功能 : 單片機(jī)串口初始化
  129. * 單片機(jī):晶振11.0592MHz 波特率為9600bps
  130. * 指紋模塊:波特率為9600bps,
  131. ********************************************************************/        
  132. void UART_Init()
  133. {
  134.         SCON= 0x50;               //串口方式1        //REN=1; 允許接收
  135.         PCON=0x00;                //SMOD=0
  136.         IT1=1;
  137.         EX1=1;
  138.         TH0=0;
  139.         TL0=0;
  140.         TR0=0;
  141.         TMOD= 0x21;               //定時(shí)器1定時(shí)方式2
  142.         TH1= 0xFD;                //11.0592MHz  模塊默認(rèn)波特率為9600bps
  143.         TL1= 0xFD;                                                                                 
  144.         TR1= 1;                   //啟動(dòng)定時(shí)器
  145.         EA=1;      
  146. }
  147.    
  148. unsigned char Keycan(void) //按鍵掃描程序 P1.0--P1.3為行線 P1.4--P1.7為列線
  149. {
  150.   unsigned char rcode, ccode;
  151.   P1 = 0x0f;      // 發(fā)全0行掃描碼,列線輸入
  152.   if((P1&0x0f) != 0x0f) // 若有鍵按下
  153.   {
  154.     delay(1);// 延時(shí)去抖動(dòng)
  155.     if((P1&0x0f) != 0x0f)
  156.     {  rcode = 0xFE;         // 逐行掃描初值
  157.     while((rcode&0x10) != 0)
  158.     {
  159.        P1 = rcode;         // 輸出行掃描碼
  160.       if((P1&0x0f) != 0x0f) // 本行有鍵按下
  161.       {
  162.        ccode = (P1&0x0f)|0x0f;
  163.        //do{;}
  164.            while((P1&0x0f) != 0x0f); //等待鍵釋放
  165.             Feng=0;
  166.         delay(100);
  167.         Feng=1;
  168.        return ((~rcode) + (~ccode)); // 返回鍵編碼
  169.       }
  170.     else
  171.     rcode = (rcode<<1)|0x01; // 行掃描碼左移一位
  172.     }
  173.     }
  174.   }
  175.   if(IrOK==1)
  176.   {
  177.    IrOK=0;
  178.    Feng=0;
  179.    delay(100);
  180.    Feng=1;
  181.    switch (Im[2])
  182.    {
  183.     case 0x16: return 0x28;break;                  //0
  184.         case 0x0c: return 0x11;break;                         //1
  185.         case 0x18: return 0x71;break;                                //2
  186.         case 0x5e: return 0x41;break;                                  //3
  187.         case 0x08: return 0x12;break;                                        //4
  188.         case 0x1c: return 0x22;break;                           //5
  189.         case 0x5a: return 0x42;break;                                //6
  190.         case 0x42: return 0x14;break;                                  //7
  191.         case 0x52: return 0x24;break;                                  //8
  192.         case 0x4a: return 0x44;break;                                        //9
  193.         case 0x47: return 0x81;break;                                         //a
  194.         case 0x43: return 0x82;break;                                          //b
  195.         case 0x0d: return 0x74;break;                                           //c
  196.         case 0x15: return 0x88;break;                                                //d
  197.         case 0x19: return 0x48;break;
  198.    }
  199.   }  
  200.   return 0; // 無鍵按下,返回值為0
  201. }
  202.         
  203. void KeyDeal(unsigned char Key)
  204. {  //unsigned char n;
  205.    if(Key!=0)
  206. {
  207.            
  208.                    switch(Key)
  209.                    {
  210.                    case 0x11: K=1; break;         
  211.                    case 0x21: K=2; break;  
  212.                    case 0x71: K=3; break;  
  213.                    case 0x81:  break;      
  214.                    case 0x12: K=4; break;
  215.                    case 0x22: K=5; break;
  216.                    case 0x42: K=6; break;
  217.                    case 0x82: K=34;break;               
  218.                    case 0x14: K=7; break;
  219.                    case 0x24: K=8; break;
  220.                    case 0x44: K=9; break;
  221.                    case 0x74:  break;               
  222.                    case 0x18:  break;               
  223.                    case 0x28: K=0; break;
  224.                    case 0x48:  K=11; break;
  225.                    case 0x88:  break;               
  226.                    default: break;
  227.                    }
  228.   }
  229. }
  230.         

  231. void shuazhiwen()
  232. {
  233.     uchar IDs1,IDs2,IDs3;         
  234.         LcmClearTXT();
  235.         PutStr(1,1,"請(qǐng)按手指開鎖");      
  236.         SFG_identify();
  237.         while(querenma==2)
  238.         SFG_identify();
  239.         if(querenma==0)
  240.    {
  241.                 LcmClearTXT();
  242.                 PutStr(1,2,"門已打開");
  243.                 IDs1=PageID/100;
  244.                 IDs2=PageID/10%10;
  245.                 IDs3=PageID%10;
  246.                 PutStr(2,1,"編號(hào)為:");
  247.                 WriteCommand(0x8D);                //指定第三行顯示位置
  248.                 WriteData(0x30+IDs1);
  249.                 WriteData(0x30+IDs2);
  250.                 WriteData(0x30+IDs3);
  251.                 ErrorCount=0;
  252.                 Feng=1;
  253.                 jidianqi=0;
  254.                 delay(2500);
  255.                 jidianqi=1;
  256.                
  257.         }
  258.            else if(querenma==9)
  259.                 {
  260.                         LcmClearTXT();
  261.                         PutStr(1,1,"沒搜索到指紋");
  262.                         PutStr(2,1,"請(qǐng)重新按手指");
  263.                         ErrorCount=3;
  264.                         Feng=0;
  265.                 }
  266.                    else
  267.                 {
  268.                         LcmClearTXT();
  269.                         PutStr(1,1,"接收包出錯(cuò)");
  270.                 }
  271.                 delay(2000);
  272.    //         while(Keycan()==0);
  273. }
  274. void addfinger()
  275. {
  276.         uchar IDa1,IDa2,IDa3;
  277.         LcmClearTXT();
  278.         PutStr(1,2,"請(qǐng)按手指");   
  279.         SFG_getimage();
  280.         while(querenma!=0)
  281.         SFG_getimage();
  282.         SFG_genchar(buffer1ID);
  283.         UART_Init();
  284.         SFG_fastsearch(buffer1ID);
  285.         while(querenma==1)
  286.         SFG_fastsearch(buffer1ID);

  287.         if(querenma==0)
  288.         {
  289.                 LcmClearTXT();
  290.                 PutStr(1,1,"該指紋已存儲(chǔ)");
  291.                 PutStr(3,0,"  按任意鍵繼續(xù)");
  292.             while(Keycan()==0);
  293.         }
  294.         else if(querenma==9)
  295.                 {
  296.                         LcmClearTXT();
  297.                         PutStr(1,1,"請(qǐng)?jiān)俅伟词种?quot;);
  298.                         SFG_enroll();
  299.                         while(querenma==2)
  300.                         SFG_enroll();
  301.                         LcmClearTXT();
  302.                         if(querenma==0)
  303.                         {
  304.                                 IDa1=PageID/100;IDa2=PageID/10%10;IDa3=PageID%10;
  305.                                 PutStr(1,1,"指紋采集成功");
  306.                                 PutStr(2,1,"編號(hào)為:");
  307.                                 WriteCommand(0x8D);
  308.                                 WriteData(0x30+IDa1);WriteData(0x30+IDa2);WriteData(0x30+IDa3);
  309.                           }
  310.                   else  if(querenma!=0)
  311.                           {
  312.                                
  313.                                 PutStr(1,1,"指紋采集失敗");
  314.                                 PutStr(2,1,"請(qǐng)重新操作");
  315.                          }
  316.                 PutStr(3,0,"  按任意鍵繼續(xù)");
  317.             while(Keycan()==0);
  318.                    }
  319.         LcmClearTXT();
  320.                          PutStr(0,0,"按鍵1 : 增加指紋");
  321.                 PutStr(1,0,"按鍵2 : 刪去指紋");
  322.                 PutStr(2,0,"按鍵3 : 手動(dòng)開鎖");
  323.                 PutStr(3,0,"按鍵4 : 修改密碼");
  324. }
  325. void deletfinger()
  326. {
  327.         uchar i,j=0;
  328.         LcmClearTXT();
  329.         PutStr(1,0,"輸入刪去的指紋號(hào)");
  330.         for(i=0;i<5;i++)dz[i]=0;       
  331.            Key=Keycan();
  332.            while(Key!=queren)
  333.            {
  334.              Key=Keycan();
  335.              KeyDeal(Key);
  336.              delay(30);                                                              //按鍵有抖動(dòng)@@@
  337.              if(Key==0)K=10;
  338.              if((K>=0)&&(K<=9))
  339.              {
  340.               dz[j]=K;
  341.                   if(j<3)
  342.                   {       
  343.                                 WriteCommand(0x88+j);                //指定第三行顯示位置
  344.                                 WriteData(0x30+dz[j]);       
  345.                   }
  346.               ++j;
  347.                   if(j==4)
  348.               j=3;                                                                                                   //@@#yinhuang
  349.              }   //顯示LCD12864并行顯示
  350.                  if(K==34)                //按了刪除鍵
  351.                   {
  352.                     if(j==0)
  353.                         {
  354.                                 WriteCommand(0x88);                //指定第三行顯示位置
  355.                                 WriteData(0x20);
  356.                         }
  357.                         else
  358.                         {
  359.                                 --j;
  360.                                 WriteCommand(0x88+j);            //指定第三行顯示位置
  361.                                 WriteData(0x20);
  362.                         }
  363.                 }
  364.         }
  365.         if(j>=2)
  366.         PageID=dz[2]+dz[1]*10+dz[0]*100;
  367.         if(j==1)
  368.         PageID=dz[1]+dz[0]*10;
  369.         if(j==0)
  370.         PageID=dz[0];
  371.         SFG_deletchar(PageID);
  372.         if(querenma==0)
  373.         {
  374.                 LcmClearTXT();
  375.                 PutStr(1,1,"刪去指紋號(hào)成功!");
  376.         }
  377.         else
  378.         {
  379.                 LcmClearTXT();
  380.                 PutStr(1,2,"刪去指紋號(hào)失敗!");  
  381.         }
  382.         PutStr(2,0,"  按任意鍵繼續(xù)");
  383.         while(Keycan()==0);
  384.         LcmClearTXT();
  385.                          PutStr(0,0,"按鍵1 : 增加指紋");
  386.                 PutStr(1,0,"按鍵2 : 刪去指紋");
  387.                 PutStr(2,0,"按鍵3 : 手動(dòng)開鎖");
  388.                 PutStr(3,0,"按鍵4 : 修改密碼");
  389. }
  390.         
  391. void gaimima()
  392. {
  393.         uchar i,j=0,mima1[6],mima2[6];
  394.         uchar k,temp;
  395.         LcmClearTXT();
  396.         PutStr(1,1,"請(qǐng)輸入新密碼");
  397.         for(i=0;i<6;i++)mima1[i]=0;                                                                       
  398.            Key=Keycan();
  399.       while(Key!=queren)
  400.            {
  401.              Key=Keycan();
  402.              KeyDeal(Key);
  403.              delay(30);                                                             
  404.              if(Key==0)K=10;
  405.              if((K>=0)&&(K<=9))
  406.              {
  407.               mima1[j]=K;
  408.                   if(j<6)
  409.                   {       
  410.                                 WriteCommand(0x89+j);                //指定第三行顯示位置
  411.                                 WriteData(0x0f);       
  412.                   }
  413.               ++j;
  414.                   if(j==7)
  415.               j=6;                                                                                                   //@@#yinhuang
  416.              }   //顯示LCD12864并行顯示
  417.                  if(K==34)                //按了刪除鍵
  418.                   {
  419.                     if(j==0)
  420.                         {
  421.                                 WriteCommand(0x89);                //指定第三行顯示位置
  422.                                 WriteData(0x20);
  423.                         }
  424.                         else
  425.                         {
  426.                                 --j;
  427.                                 WriteCommand(0x89+j);            //指定第三行顯示位置
  428.                                 WriteData(0x20);
  429.                         }
  430.                 }
  431.         }
  432.         LcmClearTXT();
  433.         LcmClearTXT();
  434.         j=0;
  435.         PutStr(1,0,"請(qǐng)?jiān)俅屋斎胄旅艽a");
  436.         for(i=0;i<6;i++)mima2[i]=0;                                                                       
  437.            Key=Keycan();
  438.       while(Key!=queren)
  439.            {
  440.              Key=Keycan();
  441.              KeyDeal(Key);
  442.              delay(30);                                                             
  443.              if(Key==0)K=10;
  444.              if((K>=0)&&(K<=9))
  445.              {
  446.               mima2[j]=K;
  447.                   if(j<6)
  448.                   {               
  449.                                 WriteCommand(0x89+j);                //指定第三行顯示位置
  450.                                 WriteData(0x0f);       
  451.                   }
  452.               ++j;
  453.                   if(j==7)
  454.               j=6;                                                                                                   //@@#yinhuang
  455.              }   //顯示LCD12864并行顯示
  456.                  if(K==34)                //按了刪除鍵
  457.                   {
  458.                     if(j==0)
  459.                         {
  460.                                 WriteCommand(0x89);                //指定第三行顯示位置
  461.                                 WriteData(0x20);
  462.                         }
  463.                         else
  464.                         {
  465.                                 --j;
  466.                                 WriteCommand(0x89+j);            //指定第三行顯示位置
  467.                                 WriteData(0x20);
  468.                         }
  469.                 }
  470.         }
  471.         LcmClearTXT();
  472.         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]))
  473.         {
  474.                 for(i=0;i<6;i++)
  475.                 mimaID[i]=mima1[i];
  476.                 /////////////////////////////////////////////////////
  477.                 for(i=0;i<6;i++)           //密碼限制在6位以內(nèi)
  478.                 {
  479.                         UserPassword[i]=mima1[i]+0x30;                                 
  480.                 }
  481.                 temp=(Member-1)*10;       
  482.                 delayms(5);
  483.                 for(k=0;k<6;k++)
  484.                 {
  485.                         x24c02_write(temp,UserPassword[k]);
  486.                         delayms(10);
  487.                         temp++;
  488.                 }  
  489.                 //////////////////////////////////////////////////////
  490.                 PutStr(0,1,"密碼修改成功");
  491.                 PutStr(3,0,"  按任意鍵繼續(xù)");
  492.                 ErrorCount=0;
  493.                 while(Keycan()==0);
  494.         }
  495.         else
  496.         {
  497.                 PutStr(0,0,"  密碼修改失敗  ");
  498.                 PutStr(1,0,"兩次輸入的密碼不");
  499.                 PutStr(2,0,"一致,請(qǐng)重新操作");      
  500.                 PutStr(3,0,"  按任意鍵繼續(xù)");
  501.                 while(Keycan()==0);
  502.         }
  503.         LcmClearTXT();
  504.                          PutStr(0,0,"按鍵1 : 增加指紋");
  505.                 PutStr(1,0,"按鍵2 : 刪去指紋");
  506.                 PutStr(2,0,"按鍵3 : 手動(dòng)開鎖");
  507.                 PutStr(3,0,"按鍵4 : 修改密碼");
  508. }


  509. void zhu()
  510. {           
  511.     LcmClearTXT();
  512.         PutStr(1,2,"門已打開");
  513.            jidianqi=0;
  514.         delay(2500);
  515.         jidianqi=1;
  516.         PutStr(3,0,"  按任意鍵繼續(xù)");
  517.         while(Keycan()==0);
  518.                          PutStr(0,0,"按鍵1 : 增加指紋");
  519.                 PutStr(1,0,"按鍵2 : 刪去指紋");
  520.                 PutStr(2,0,"按鍵3 : 手動(dòng)開鎖");
  521.                 PutStr(3,0,"按鍵4 : 修改密碼");
  522. }


  523. void guanliyuan()
  524. {   
  525.       uchar i,j=0,x=1;
  526.              uchar Right_flag;
  527.       LcmClearTXT();
  528.           PutStr(1,1,"請(qǐng)輸入密碼:");       
  529.            for(i=0;i<6;i++)mima[i]=0;                                                                       
  530.            Key=Keycan();
  531.       while(Key!=queren)
  532.            {
  533.              Key=Keycan();
  534.              KeyDeal(Key);
  535.              delay(30);                                                             
  536.              if(Key==0)K=10;
  537.              if((K>=0)&&(K<=9))
  538.              {
  539.               mima[j]=K;

  540.                   if(j<6)
  541.                   {       
  542.                    WriteCommand(0x89+j);                //指定第三行顯示位置
  543.                WriteData(0x0f);       

  544.                   }
  545.               ++j;
  546.                   if(j==7)
  547.               j=6;                                                                                                  
  548.              }   //顯示LCD12864并行顯示
  549.                  if(K==34)                //按了刪除鍵
  550.                   {
  551.                     if(j==0)
  552.                         {
  553.                       WriteCommand(0x89);                //指定第三行顯示位置
  554.                   WriteData(0x20);
  555.                         }
  556.                         else
  557.                         {
  558.                           --j;
  559.                       WriteCommand(0x89+j);            //指定第三行顯示位置
  560.                   WriteData(0x20);
  561.                         }
  562.                   }
  563.            }
  564.     LcmClearTXT();


  565.           for(i=0;i<6;i++)
  566.          {
  567.             UserPassword[i]=mima[i]+0x30;
  568.        
  569.           }
  570.          if(j==6)
  571.           {
  572.            if(mima[0]==1&&mima[1]==3&&mima[2]==1&&mima[3]==4&&mima[4]==2&&mima[5]==0)
  573.             Right_flag=1;
  574.                 else
  575.                 Right_flag=0;
  576.                       }
  577.           if (Right_flag==1)
  578.          {
  579.                      Right_flag=0;
  580.                     
  581.                    for(i=0;i<6;i++)mima[i]=0;
  582.                 PutStr(0,0,"按鍵1 : 增加指紋");
  583.                 PutStr(1,0,"按鍵2 : 刪去指紋");
  584.                 PutStr(2,0,"按鍵3 : 手動(dòng)開鎖");
  585.                 PutStr(3,0,"按鍵4 : 修改密碼");
  586.      while(i!=tuichu)
  587.       {         
  588.                  i=Keycan();
  589.        
  590.                 KeyDeal(i);  
  591.             switch(K)
  592.             {
  593.              case 1:    addfinger();K=6; break;
  594.              case 2:    deletfinger();    break;
  595.                  case 3:         zhu();        K=8;  break;
  596.                  case 4:    gaimima();        break;
  597.              default: break;
  598.             }
  599.       }
  600.      }
  601.     else
  602.     {

  603.                 PutStr(1,2,"密碼錯(cuò)誤");
  604.                 PutStr(2,0,"  請(qǐng)重新操作!");
  605.                 PutStr(3,0,"  按任意鍵繼續(xù)");
  606.              while(Keycan()==0);
  607.                 PutStr(0,0,"按鍵1 : 增加指紋");
  608.                 PutStr(1,0,"按鍵2 : 刪去指紋");
  609.                 PutStr(2,0,"按鍵3 : 手動(dòng)開鎖");
  610.                 PutStr(3,0,"按鍵4 : 修改密碼");
  611.     }
  612.   Key=0;
  613.    
  614. }
  615. void mimakaisuo()
  616. {
  617. uchar i,j=0,x=1;
  618.              uchar Right_flag;
  619.       LcmClearTXT();
  620.           PutStr(1,0,"請(qǐng)輸入密碼開鎖:");       
  621.            for(i=0;i<6;i++)mima[i]=0;                                                                       
  622.            Key=Keycan();
  623.       while(Key!=queren)
  624.            {
  625.              Key=Keycan();
  626.              KeyDeal(Key);
  627.              delay(30);                                                             
  628.              if(Key==0)K=10;
  629.              if((K>=0)&&(K<=9))
  630.              {
  631.               mima[j]=K;

  632.                   if(j<6)
  633.                   {       
  634.                    WriteCommand(0x89+j);                //指定第三行顯示位置
  635.                WriteData(0x0f);       

  636.                   }
  637.               ++j;
  638.                   if(j==7)
  639.               j=6;                                                                                                  
  640.              }   //顯示LCD12864并行顯示
  641.                  if(K==34)                //按了刪除鍵
  642.                   {
  643.                     if(j==0)
  644.                         {
  645.                       WriteCommand(0x89);                //指定第三行顯示位置
  646.                   WriteData(0x20);
  647.                         }
  648.                         else
  649.                         {
  650.                           --j;
  651.                       WriteCommand(0x89+j);            //指定第三行顯示位置
  652.                   WriteData(0x20);
  653.                         }
  654.                   }
  655.            }
  656.     LcmClearTXT();


  657.           for(i=0;i<6;i++)
  658.          {
  659.             UserPassword[i]=mima[i]+0x30;
  660.        
  661.           }
  662.          if(j==6){Right_flag=PassWord_Chack(); }
  663.           if (Right_flag==1&&ErrorCount<3)
  664.          {
  665.               Right_flag=0;
  666.                    zhu();ErrorCount=0;  
  667.                  Feng=1;
  668.                   for(i=0;i<6;i++)mima[i]=0;
  669.      }
  670.     else
  671.     {
  672.             if(ErrorCount<3)
  673.                 ErrorCount++;
  674.                  if(ErrorCount==3)
  675.                 Feng=0;
  676.                  
  677.                 PutStr(1,2,"密碼錯(cuò)誤");
  678.                 PutStr(2,0,"  還有  次機(jī)會(huì)");
  679.                 PutStr(3,0,"  按任意鍵繼續(xù)");
  680.                 WriteCommand(0x8a);
  681.                 WriteData(' ');
  682.                 WriteData(3-ErrorCount+0x30);
  683.                  
  684.                 delay(1000);
  685.           
  686.     }
  687.   Key=0;
  688.   LcmClearTXT();
  689. }
  690. void fan()
  691. {
  692. //        PutStr(1,2,"請(qǐng)先按鍵");
  693. //        PutStr(2,2,"再刷指紋");
  694.   if(Key!=0x81)                        //管理員操作
  695.   {
  696.         PutStr(0,2,"歡迎使用");
  697.         PutStr(1,0,"指紋密碼門禁系統(tǒng)");
  698.         PutStr(2,0,"密碼開鎖請(qǐng)按 C鍵");
  699.         PutStr(3,1,"請(qǐng)按手指開鎖");
  700.    }
  701.   Key=Keycan();
  702. if(k2==1)                //指紋刷機(jī)
  703.   {
  704.           LcmClearTXT();
  705.         shuazhiwen();
  706.         LcmClearTXT();
  707.   }
  708.   if(Key==0x81)                        //管理員操作
  709.   {
  710.         LcmClearTXT();
  711.         guanliyuan();
  712.     LcmClearTXT();
  713.   }
  714.   if(Key==0x84&&ErrorCount<3)                        //密碼開鎖
  715.   {
  716.         LcmClearTXT();
  717.         mimakaisuo();
  718.     LcmClearTXT();
  719.   }

  720. }       
  721.      
  722. void main()
  723. {        

  724. //PSB=0;
  725.         UART_Init();           //串口初始化                  
  726.           x24c02_init();     //24C02初始化
  727.         LcmInit();               //LCD12864初始化                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
  728.         LcmClearTXT();           //LCD12864清屏       
  729.         while(1)
  730.                 {
  731.                         fan();
  732.                         delay(100);                  
  733.                 }       
  734. }

  735. //外部中斷解碼程序_外部中斷1
  736. void intersvr1(void) interrupt 2
  737. {
  738. TR0=1;
  739. Tc=TL0*256+TH0;//提取中斷時(shí)間間隔時(shí)長
  740. TH0=0;
  741. TL0=0;         //定時(shí)中斷重新置零

  742. if((Tc>Imin)&&(Tc<Imax))
  743. {
  744.         m=0;
  745.         f=1;
  746.         return;
  747. }       //找到啟始碼
  748. if(f==1)
  749. {
  750.         if(Tc>Inum1&&Tc<Inum3)
  751.     {
  752.            Im[m/8]=Im[m/8]>>1|0x80; m++;
  753.     }
  754.     if(Tc>Inum2&&Tc<Inum1)
  755.     {
  756.       Im[m/8]=Im[m/8]>>1; m++; //取碼
  757.            }
  758.            if(m==32)
  759.     {
  760.       m=0;  
  761.       f=0;
  762.       if(Im[2]==~Im[3])
  763.       {
  764.            IrOK=1;
  765.                           TR0=0;
  766.            }
  767.       else IrOK=0;   //取碼完成后判斷讀碼是否正確


  768. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

下載:
1-程序串行.zip (253.88 KB, 下載次數(shù): 137)

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

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:164850 發(fā)表于 2018-1-29 22:34 | 只看該作者
樓主可以畫個(gè)電路圖嗎
回復(fù)

使用道具 舉報(bào)

無效樓層,該帖已經(jīng)被刪除
地板
ID:308257 發(fā)表于 2018-4-14 21:39 | 只看該作者
前來學(xué)習(xí)。
回復(fù)

使用道具 舉報(bào)

5#
ID:335170 發(fā)表于 2018-5-21 20:03 | 只看該作者
學(xué)習(xí) 學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

6#
ID:294596 發(fā)表于 2018-5-26 23:30 | 只看該作者
差圖啊 兄弟
回復(fù)

使用道具 舉報(bào)

7#
ID:304358 發(fā)表于 2018-6-13 17:38 | 只看該作者
為啥我用密碼可以解鎖不能進(jìn)入管理員系統(tǒng)呢???
回復(fù)

使用道具 舉報(bào)

8#
ID:59552 發(fā)表于 2018-10-27 23:29 | 只看該作者
程序是錯(cuò)的
回復(fù)

使用道具 舉報(bào)

9#
ID:416616 發(fā)表于 2018-10-28 10:59 | 只看該作者
鼓勵(lì)一下
回復(fù)

使用道具 舉報(bào)

10#
ID:382912 發(fā)表于 2018-10-28 14:25 | 只看該作者
謝謝樓主~程序可好
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表