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

QQ登錄

只需一步,快速開始

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

密碼鎖程序精華版89c52單片機(jī)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:91897 發(fā)表于 2016-5-12 15:45 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式


89C52單片機(jī)的密碼鎖:
密碼鎖主程序精華版89c52.rar (89.5 KB, 下載次數(shù): 51)



部分程序預(yù)覽:
  1. /****************************************************************/
  2. /****通過借鑒別人作品自己加以修改才完成了此作品*****************/
  3. /****如果大家有啥建議歡迎聯(lián)系我,我們共同改進(jìn)*******************/
  4. /*************************************************/
  5. /********這個(gè)程序舍去了外部eeprom簡(jiǎn)化了外圍電路****************/
  6. #include<reg52.h>
  7. #include<intrins.h>
  8. #include<1602yj.h>
  9. #include<key.h>
  10. #include<bujing.h>
  11. #include<eeprom.h>
  12. #include<buzzer.h>
  13. #include<time.h>
  14. #include<mima.h>
  15. #define address 0x2000
  16. uchar idata mima_5[6] = {1,2,3,4,5,6}; //初始密碼
  17. uchar idata mima_6[6]={1,1,1,1,1,1};        //管理員密碼
  18. uchar flag_change,flag;
  19. uchar aa;//存放密碼錯(cuò)誤的次數(shù),夠三次報(bào)警
  20. uint num;//計(jì)數(shù)
  21. uchar flag_bg,flag_h,m;
  22. uchar flag_key=1;
  23. uchar i;
  24. void init()               
  25. {

  26.     init_lcd();//液晶初始化
  27.     fen=1;          //關(guān)閉蜂鳴器
  28.     beiguang=0;//打開液晶背光
  29.         TMOD |= 0x11;          //使用模式1,16位定時(shí)器,使用"|"符號(hào)可以在使用多個(gè)定時(shí)器時(shí)不受影響                     
  30.    //TH0=0x00;              //給定初值
  31.    //TL0=0x00;

  32.    ET1=0;           //定時(shí)器中斷關(guān)閉 警報(bào)用
  33.    TR1=0;           //定時(shí)器開關(guān)關(guān)閉 警報(bào)用

  34.         EA = 1;//打開總中斷
  35.         ET0 = 1;//打開定時(shí)器0中斷
  36.         TR0 = 0;//關(guān)閉定時(shí)器
  37.         TH0 = 0x4c;//50ms裝初值
  38.         TL0 = 0x00;
  39.     EX1=1;
  40.     IT1=1;       //外部中斷0為下降沿觸發(fā)  



  41. }


  42. void mima()
  43. {       
  44.     uchar key;
  45.     uchar idata mima_1[6]={' ',' ',' ',' ',' ',' '};//存放密碼緩沖區(qū)
  46.         uchar idata mima_2[6]={' ',' ',' ',' ',' ',' '};
  47.         uchar idata mima_3[6]={' ',' ',' ',' ',' ',' '};
  48.           key=step_choose();
  49.                
  50.      beiguang=0;
  51.        
  52.           TR0=0;   
  53. switch (key)                                                   //switch語句比if語句效率高  在這里選擇這種語句  
  54.         {
  55.            case E:                //恢復(fù)出廠設(shè)置                                                                  
  56.                                   {
  57.                          
  58.                                           lcdpos(0,0);
  59.                                           write_com(0x06);//寫一個(gè)字符后地址指針加 1
  60.                                       write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
  61.                                       write_com(0x0f);//顯示光標(biāo)
  62.                                           display_n(" Admin Password ");
  63.                                           lcdpos(1,0);
  64.                                           if(input_mima(mima_2)) //處理輸入密碼
  65.                                             {
  66.                                                                 if(mimaduibi(mima_2,mima_6)) //密碼正確
  67.                                                                                 {
  68.                                                                                         lcdpos(0,0);
  69.                                                                                         write_com(0x0c);
  70.                                                                                 write_com(0x06);//寫一個(gè)字符后地址指針加 1
  71.                                                                                  write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
  72.                                                                                         display_n(" PassWord Right ");
  73.                                                                                        
  74.                                                                                         ERASE(address);  
  75.                                                                                     for(i=0;i<6;i++)
  76.                                                                               {        Write_ISP (address+i, mima_5[i]);}
  77.                                                                 delayx(1500);
  78.                                                                                         aa = 0; //清除密碼錯(cuò)誤次數(shù)
  79.                                                                                         fen = 0; //響一下
  80.                                                                                         delayx(1000);
  81.                                                                                         fen = 1;       
  82.                                                                                 }
  83.                                                 else //密碼 不正確
  84.                                                  {
  85.                                                                 lcdpos(0,0);
  86.                                                                 write_com(0x0c); //關(guān)光標(biāo)
  87.                                                                 write_com(0x06);//寫一個(gè)字符后地址指針加 1
  88.                                                                 write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
  89.                                                                 display_n("PassWord  Error");
  90.                                                                 delayx(1000);
  91.                                                                 aa++;
  92.                                                         if(aa == 4)
  93.                                                                 {
  94.                                                                         aa = 0;
  95.                                                                         warn();        //密碼不正確報(bào)警
  96.                                                                 }
  97.                        
  98.                                                  }
  99.                                  }
  100.                         else //密碼沒有輸入正確或完成
  101.                                 {
  102.                                         lcdpos(0,0);
  103.                                         write_com(0x0c); //關(guān)光標(biāo)
  104.                                        write_com(0x06);//寫一個(gè)字符后地址指針加 1
  105.                                     write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
  106.                                         display_n("PassWord  Error");
  107.                                         delayx(1000);
  108.                                         aa++;
  109.                                         if(aa == 4)
  110.                                                  {
  111.                                                         aa = 0;
  112.                                                         warn();        //密碼不正確報(bào)警
  113.                                                  }
  114.                
  115.                                 }
  116.                
  117.                                                
  118.                                          
  119.                      
  120.                               }
  121.                   
  122.                                                             break;       

  123.        case A:         //A被按下,接收輸入密碼,
  124.                       {       
  125.                            for(i=0;i<6;i++)
  126.                                  {           
  127.                                      
  128.                                    mima_1[i]= Read_ISP(address+i);
  129.                                           
  130.                                   }       
  131.                                 write_com(0x06);//寫一個(gè)字符后地址指針加 1
  132.                                 write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
  133.                                 write_com(0x0f);//顯示光標(biāo)
  134.                                 lcdpos(0,0);
  135.                                 display_n(" Input PassWord");       
  136.        
  137.                                 if(input_mima(mima_2)) //處理輸入密碼
  138.                                         {
  139.                                                 if(mimaduibi(mima_2,mima_1)) //密碼正確
  140.                                                                 {
  141.                                                                         lcdpos(0,0);
  142.                                                                         write_com(0x0c);
  143.                                                                 write_com(0x06);//寫一個(gè)字符后地址指針加 1
  144.                                                                          
  145.                                                                  write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
  146.                                                                         display_n(" PassWord Right ");
  147.                                                                         aa = 0; //清除密碼錯(cuò)誤次數(shù)
  148.                                                                         kai(); //開鎖
  149.                                                                         fen = 0; //響一下
  150.                                                                         delayx(1000);
  151.                                                                         fen = 1;
  152.                                                                         TR0 = 1;
  153.                                                                         flag_h=1;
  154.                                                                         flag=0;
  155.                                                                
  156.                                                                         while(key != C&&flag_h!=0) //C沒按下一直開 如果忘記關(guān)門定時(shí)器10s到了會(huì)自動(dòng)關(guān)門
  157.                                                                                 {                       
  158.                                                                                   key = scan();               
  159.                                                                     
  160.                                                                                 }
  161.                                                                    if(flag_h==1||m==0)//檢測(cè)是不關(guān)過門        flag_h==1表示沒關(guān)門        m檢測(cè)進(jìn)入外部中斷后執(zhí)行關(guān)門指令 也除去一個(gè)警告                                               
  162.                                                                         { guan();
  163.                                                                              flag=1;
  164.                                                                           TR0 = 0;
  165.                                                                         }
  166.                                                                 }
  167.                                            else //密碼 不正確
  168.                                                         {
  169.                                                                 lcdpos(0,0);
  170.                                                                 write_com(0x0c); //關(guān)光標(biāo)
  171.                                                                 write_com(0x06);//寫一個(gè)字符后地址指針加 1
  172.                                                                 write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
  173.                                                             display_n("PassWord  Error");
  174.                                                                 delayx(1000);
  175.                                                                 aa++;
  176.                                                                 if(aa == 4)
  177.                                                                         {
  178.                                                                        
  179.                                                                   aa = 0;
  180.                                                                     warn();        //密碼不正確報(bào)警
  181.                                                                         }
  182.                                
  183.                                                         }
  184.                                          }
  185.                                 else //密碼沒有輸入正確或完成
  186.                                         {
  187.                                                 lcdpos(0,0);
  188.                                                 write_com(0x0c); //關(guān)光標(biāo)
  189.                                                write_com(0x06);//寫一個(gè)字符后地址指針加 1
  190.                                             write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
  191.                                                 display_n("PassWord  Error");
  192.                                                 delayx(1000);
  193.                                                 aa++;
  194.                                                 if(aa == 4)
  195.                                                          {
  196.                                                                 aa = 0;
  197.                                                                 warn();        //密碼不正確報(bào)警
  198.                                                          }
  199.                        
  200.                                         }
  201.                   }
  202.                                                            break;

  203.        case F:                  //F被按下,修改密
  204.                            {
  205.                                 for(i=0;i<6;i++)
  206.                                  {           
  207.                                      
  208.                                    mima_1[i]= Read_ISP(address+i);
  209.                                           
  210.                                   }       
  211.                                         write_com(0x06);//寫一個(gè)字符后地址指針加 1
  212.                                         write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
  213.                                         write_com(0x0f);//顯示光標(biāo)
  214.                                         lcdpos(0,0);
  215.                                         display_n(" Input PassWord");               
  216.                                         write_com(0x0f);//顯示光標(biāo)       
  217.                                         if(input_mima(mima_2)) //處理輸入密碼
  218.                                         {
  219.                                                 if(mimaduibi(mima_2,mima_1)) //密碼正確
  220.                                                 {
  221.                                                         lcdpos(0,0);
  222.                                                         write_com(0x0c);
  223.                                                       write_com(0x06);//寫一個(gè)字符后地址指針加 1
  224.                                                       write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
  225.                                                         display_n(" PassWord Right ");
  226.                                                
  227.                                                         aa = 0; //清除密碼錯(cuò)誤次數(shù)
  228.                                                         delayx(1000);
  229.                                                        
  230.                                                         flag_change = 1;
  231.                                                         if(flag_change) //下面開始修改密碼
  232.                                                         {        lcdpos(0,0);
  233.                                                                 write_com(0x0c); //關(guān)閉光標(biāo)
  234.                                                             write_com(0x06);//寫一個(gè)字符后地址指針加 1
  235.                                                             write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
  236.                                                                 display_n("In New PassWord");
  237.                                                                 delayx(1000);
  238.                                                                 lcdpos(1,0);
  239.                                                                 write_com(0x0f);//顯示光標(biāo)       
  240.                                                        
  241.                        
  242.                                                                 if(input_mima(mima_2)) //處理輸入密碼
  243.                                                                 {
  244.                        
  245.                                                                         lcdpos(0,0);
  246.                                                                         write_com(0x0c);
  247.                                                                 write_com(0x06);//寫一個(gè)字符后地址指針加 1
  248.                                                                 write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
  249.                                                                         display_n("Input New Pass"); //確定新密碼
  250.                                                                         lcdpos(1,0);
  251.                                                                         display_n("PassWord again");
  252.                                                                         delayx(2000);
  253.                                                                         lcdpos(0,0);
  254.                                                                         write_com(0x0f);//顯示光標(biāo)
  255.                                                                 write_com(0x06);//寫一個(gè)字符后地址指針加 1
  256.                                                                 write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
  257.                                                                         display_n("In New PassWord");                                               
  258.                                                                                 if(input_mima(mima_3)) //處理輸入密碼
  259.                                                                                 {
  260.                                                                                         if(mimaduibi(mima_2,mima_3)) //密碼正確
  261.                                                                                         {
  262.                                                                                                 lcdpos(0,0);
  263.                                                                                                 write_com(0x0c);
  264.                                                                                               write_com(0x06);//寫一個(gè)字符后地址指針加 1
  265.                                                                                               write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
  266.                                                                                                 display_n("Change  PassWord");
  267.                                                                                                 lcdpos(1,0);
  268.                                                                                                 display_n("  SUCCESSFULLY  ");
  269.                                                                                            ERASE(address);  
  270.                                                                                     for(i=0;i<6;i++)
  271.                                                                               {        Write_ISP (address+i, mima_3[i]);}//把修改的密碼存進(jìn)內(nèi)部rom
  272.                                                                                                 delayx(2000);
  273.                                                                                                 flag_change = 0;
  274.                                                                                         }
  275.                                                                                         else //密碼 不正確
  276.                                                                                         {
  277.                                                                                                 lcdpos(0,0);
  278.                                                                                                 write_com(0x0c); //關(guān)光標(biāo)
  279.                                                                                                 write_com(0x06);//寫一個(gè)字符后地址指針加 1
  280.                                                                                                 write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
  281.                                                                                                 display_n("PassWord  Error");
  282.                                                                                                 delayx(1000);
  283.                                                                                                 aa++;
  284.                                                                                                 if(aa == 4)
  285.                                                                                                 {
  286.                                                                                                     aa = 0;
  287.                                                                                warn();        //密碼不正確報(bào)警
  288.                                                                                                 }
  289.                                                                                                 flag_change = 0;
  290.                                                                                         }
  291.                                                                                 }
  292.                                                                                 else //密碼沒有輸入正確或完成
  293.                                                                                 {
  294.                                                                                         lcdpos(0,0);
  295.                                                                                         write_com(0x0c); //關(guān)光標(biāo)
  296.                                                                                        write_com(0x06);//寫一個(gè)字符后地址指針加 1
  297.                                                                                     write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
  298.                                                                                         display_n("PassWord  Error");
  299.                                                                                         delayx(1000);
  300.                                                                                         aa++;
  301.                                                                                         if(aa == 4)
  302.                                                                                         {
  303.                                                                                              aa = 0;
  304.                                                                              warn();        //密碼不正確報(bào)警
  305.                                                                                         }
  306.                                                                                 }
  307.                                                                        
  308.                                                                 }  
  309.                                                                 else //密碼沒有輸入正確或完成
  310.                                                                 {
  311.                                                                         lcdpos(0,0);
  312.                                                                         write_com(0x0c); //關(guān)光標(biāo)
  313.                                                                      write_com(0x06);//寫一個(gè)字符后地址指針加 1
  314.                                                                     write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
  315.                                                                         display_n("PassWord  Error");
  316.                                                                         delayx(1000);
  317.                                                                         flag_change = 0;
  318.                                                                         aa++;
  319.                                                                         if(aa == 4)
  320.                                                                         {
  321.                                                                             aa = 0;
  322.                                                                     warn();        //密碼不正確報(bào)警
  323.                                                                         }
  324.                                                                 }
  325.                                                                                                
  326.                                                         }
  327.                                                 }
  328.                                                 else //密碼 不正確
  329.                                                 {
  330.                                                         lcdpos(0,0);
  331.                                                         write_com(0x0c); //關(guān)光標(biāo)
  332.                                                         write_com(0x06);//寫一個(gè)字符后地址指針加 1
  333.                                                         write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
  334.                                                         display_n("PassWord  Error");
  335.                                                         delayx(1000);
  336.                                                         aa++;
  337.                                                         if(aa == 4)
  338.                                                         {
  339.                                                                 aa = 0;
  340.                                                                 warn();        //密碼不正確報(bào)警
  341.                                                         }
  342.                                                 }
  343.                                         }
  344.                                         else          //密碼沒有輸入正確或完成
  345.                                         {
  346.                                                 lcdpos(0,0);
  347.                                                 write_com(0x0c); //關(guān)光標(biāo)
  348.                                                write_com(0x06);//寫一個(gè)字符后地址指針加 1
  349.                                             write_com(0x01);//顯示清零,數(shù)據(jù)指針清零
  350.                                                 display_n("PassWord  Error");
  351.                                                 delayx(1000);
  352.                                                 aa++;
  353.                                                 if(aa == 4)
  354.                                                 {
  355.                                                         aa = 0;
  356.                                                         warn();        //密碼不正確報(bào)警
  357.                                                 }
  358.                                         }               
  359.                                 }
  360.                                                            break;
  361.        case C:        if(flag==0)
  362.                                    {
  363.                                           guan();
  364.                                   flag=1;
  365.                                   }
  366.                                                            break;       

  367.            default:
  368.                                                                break;
  369.         }

  370. }       


  371. void main()
  372. {
  373.    init();
  374.             
  375.         while(1)
  376.            {
  377.                         
  378.                      mima();
  379.                
  380.                    /*        lcdpos(0,1);
  381.                         display1(scan());//  *///測(cè)試矩陣鍵盤程序  鍵盤必須改成‘1’字符形式
  382.            }
  383.           
  384. }
  385. void timer0() interrupt 1 //定時(shí)器0中斷,   背光//         自鎖
  386. {
  387.         TH0 = 0x4c;//50ms定時(shí)
  388.         TL0 = 0x00;
  389.         num++;
  390.         if(num ==600)//30s時(shí)間到
  391.         {         
  392.                 num = 0;
  393.                 flag_bg=1;
  394.         }

  395. }  
  396. void counter(void) interrupt 2
  397. {     

  398. if(flag==0)
  399. {
  400.   flag=1;
  401.    TR0 = 0;
  402.            flag_h=0;
  403.            m=0;
  404.    //guan(); 有1個(gè)警告 所以不在此調(diào)用關(guān)鎖函數(shù)
  405. }

  406. }  
  407. /***************因兩個(gè)定時(shí)器工作要考慮優(yōu)先級(jí)********/
  408. /*************定時(shí)不準(zhǔn)*****************************/
  409. /*********所以用了一個(gè)定時(shí)器**********************/
復(fù)制代碼


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:120850 發(fā)表于 2016-5-15 22:06 | 只看該作者
這個(gè)是用到單片機(jī)的什么?
回復(fù)

使用道具 舉報(bào)

板凳
ID:142439 發(fā)表于 2016-10-12 15:01 | 只看該作者
請(qǐng)問這個(gè)有沒有原理圖
回復(fù)

使用道具 舉報(bào)

地板
ID:152262 發(fā)表于 2016-12-7 22:06 | 只看該作者
沒有原理圖呀
回復(fù)

使用道具 舉報(bào)

5#
ID:156130 發(fā)表于 2016-12-25 06:17 | 只看該作者
沒圖說個(gè)毛
回復(fù)

使用道具 舉報(bào)

6#
ID:157512 發(fā)表于 2016-12-25 14:24 | 只看該作者
好東西,學(xué)習(xí)下
回復(fù)

使用道具 舉報(bào)

7#
ID:274244 發(fā)表于 2018-1-10 13:16 | 只看該作者
我想知道怎么看啊
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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