找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3592|回复: 6
打印 上一主题 下一主题
收起左侧

密码锁程序精华版89c52单片机

[复制链接]
跳转到指定楼层
楼主


89C52单片机的密码锁:
密码锁主程序精华版89c52.rar (89.5 KB, 下载次数: 51)



部分程序预览:
  1. /****************************************************************/
  2. /****通过借鉴别人作品自己加以修改才完成了此作品*****************/
  3. /****如果大家有啥建议欢迎联系我,我们共同改进*******************/
  4. /*************************************************/
  5. /********这个程序舍去了外部eeprom简化了外围电路****************/
  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;//存放密码错误的次数,够三次报警
  20. uint num;//计数
  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;          //关闭蜂鸣器
  28.     beiguang=0;//打开液晶背光
  29.         TMOD |= 0x11;          //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响                     
  30.    //TH0=0x00;              //给定初值
  31.    //TL0=0x00;

  32.    ET1=0;           //定时器中断关闭 警报用
  33.    TR1=0;           //定时器开关关闭 警报用

  34.         EA = 1;//打开总中断
  35.         ET0 = 1;//打开定时器0中断
  36.         TR0 = 0;//关闭定时器
  37.         TH0 = 0x4c;//50ms装初值
  38.         TL0 = 0x00;
  39.     EX1=1;
  40.     IT1=1;       //外部中断0为下降沿触发  



  41. }


  42. void mima()
  43. {       
  44.     uchar key;
  45.     uchar idata mima_1[6]={' ',' ',' ',' ',' ',' '};//存放密码缓冲区
  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:                //恢复出厂设置                                                                  
  56.                                   {
  57.                          
  58.                                           lcdpos(0,0);
  59.                                           write_com(0x06);//写一个字符后地址指针加 1
  60.                                       write_com(0x01);//显示清零,数据指针清零
  61.                                       write_com(0x0f);//显示光标
  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);//写一个字符后地址指针加 1
  71.                                                                                  write_com(0x01);//显示清零,数据指针清零
  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; //清除密码错误次数
  79.                                                                                         fen = 0; //响一下
  80.                                                                                         delayx(1000);
  81.                                                                                         fen = 1;       
  82.                                                                                 }
  83.                                                 else //密码 不正确
  84.                                                  {
  85.                                                                 lcdpos(0,0);
  86.                                                                 write_com(0x0c); //关光标
  87.                                                                 write_com(0x06);//写一个字符后地址指针加 1
  88.                                                                 write_com(0x01);//显示清零,数据指针清零
  89.                                                                 display_n("PassWord  Error");
  90.                                                                 delayx(1000);
  91.                                                                 aa++;
  92.                                                         if(aa == 4)
  93.                                                                 {
  94.                                                                         aa = 0;
  95.                                                                         warn();        //密码不正确报警
  96.                                                                 }
  97.                        
  98.                                                  }
  99.                                  }
  100.                         else //密码没有输入正确或完成
  101.                                 {
  102.                                         lcdpos(0,0);
  103.                                         write_com(0x0c); //关光标
  104.                                        write_com(0x06);//写一个字符后地址指针加 1
  105.                                     write_com(0x01);//显示清零,数据指针清零
  106.                                         display_n("PassWord  Error");
  107.                                         delayx(1000);
  108.                                         aa++;
  109.                                         if(aa == 4)
  110.                                                  {
  111.                                                         aa = 0;
  112.                                                         warn();        //密码不正确报警
  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);//写一个字符后地址指针加 1
  132.                                 write_com(0x01);//显示清零,数据指针清零
  133.                                 write_com(0x0f);//显示光标
  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);//写一个字符后地址指针加 1
  144.                                                                          
  145.                                                                  write_com(0x01);//显示清零,数据指针清零
  146.                                                                         display_n(" PassWord Right ");
  147.                                                                         aa = 0; //清除密码错误次数
  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没按下一直开 如果忘记关门定时器10s到了会自动关门
  157.                                                                                 {                       
  158.                                                                                   key = scan();               
  159.                                                                     
  160.                                                                                 }
  161.                                                                    if(flag_h==1||m==0)//检测是不关过门        flag_h==1表示没关门        m检测进入外部中断后执行关门指令 也除去一个警告                                               
  162.                                                                         { guan();
  163.                                                                              flag=1;
  164.                                                                           TR0 = 0;
  165.                                                                         }
  166.                                                                 }
  167.                                            else //密码 不正确
  168.                                                         {
  169.                                                                 lcdpos(0,0);
  170.                                                                 write_com(0x0c); //关光标
  171.                                                                 write_com(0x06);//写一个字符后地址指针加 1
  172.                                                                 write_com(0x01);//显示清零,数据指针清零
  173.                                                             display_n("PassWord  Error");
  174.                                                                 delayx(1000);
  175.                                                                 aa++;
  176.                                                                 if(aa == 4)
  177.                                                                         {
  178.                                                                        
  179.                                                                   aa = 0;
  180.                                                                     warn();        //密码不正确报警
  181.                                                                         }
  182.                                
  183.                                                         }
  184.                                          }
  185.                                 else //密码没有输入正确或完成
  186.                                         {
  187.                                                 lcdpos(0,0);
  188.                                                 write_com(0x0c); //关光标
  189.                                                write_com(0x06);//写一个字符后地址指针加 1
  190.                                             write_com(0x01);//显示清零,数据指针清零
  191.                                                 display_n("PassWord  Error");
  192.                                                 delayx(1000);
  193.                                                 aa++;
  194.                                                 if(aa == 4)
  195.                                                          {
  196.                                                                 aa = 0;
  197.                                                                 warn();        //密码不正确报警
  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);//写一个字符后地址指针加 1
  212.                                         write_com(0x01);//显示清零,数据指针清零
  213.                                         write_com(0x0f);//显示光标
  214.                                         lcdpos(0,0);
  215.                                         display_n(" Input PassWord");               
  216.                                         write_com(0x0f);//显示光标       
  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);//写一个字符后地址指针加 1
  224.                                                       write_com(0x01);//显示清零,数据指针清零
  225.                                                         display_n(" PassWord Right ");
  226.                                                
  227.                                                         aa = 0; //清除密码错误次数
  228.                                                         delayx(1000);
  229.                                                        
  230.                                                         flag_change = 1;
  231.                                                         if(flag_change) //下面开始修改密码
  232.                                                         {        lcdpos(0,0);
  233.                                                                 write_com(0x0c); //关闭光标
  234.                                                             write_com(0x06);//写一个字符后地址指针加 1
  235.                                                             write_com(0x01);//显示清零,数据指针清零
  236.                                                                 display_n("In New PassWord");
  237.                                                                 delayx(1000);
  238.                                                                 lcdpos(1,0);
  239.                                                                 write_com(0x0f);//显示光标       
  240.                                                        
  241.                        
  242.                                                                 if(input_mima(mima_2)) //处理输入密码
  243.                                                                 {
  244.                        
  245.                                                                         lcdpos(0,0);
  246.                                                                         write_com(0x0c);
  247.                                                                 write_com(0x06);//写一个字符后地址指针加 1
  248.                                                                 write_com(0x01);//显示清零,数据指针清零
  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);//显示光标
  255.                                                                 write_com(0x06);//写一个字符后地址指针加 1
  256.                                                                 write_com(0x01);//显示清零,数据指针清零
  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);//写一个字符后地址指针加 1
  265.                                                                                               write_com(0x01);//显示清零,数据指针清零
  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]);}//把修改的密码存进内部rom
  272.                                                                                                 delayx(2000);
  273.                                                                                                 flag_change = 0;
  274.                                                                                         }
  275.                                                                                         else //密码 不正确
  276.                                                                                         {
  277.                                                                                                 lcdpos(0,0);
  278.                                                                                                 write_com(0x0c); //关光标
  279.                                                                                                 write_com(0x06);//写一个字符后地址指针加 1
  280.                                                                                                 write_com(0x01);//显示清零,数据指针清零
  281.                                                                                                 display_n("PassWord  Error");
  282.                                                                                                 delayx(1000);
  283.                                                                                                 aa++;
  284.                                                                                                 if(aa == 4)
  285.                                                                                                 {
  286.                                                                                                     aa = 0;
  287.                                                                                warn();        //密码不正确报警
  288.                                                                                                 }
  289.                                                                                                 flag_change = 0;
  290.                                                                                         }
  291.                                                                                 }
  292.                                                                                 else //密码没有输入正确或完成
  293.                                                                                 {
  294.                                                                                         lcdpos(0,0);
  295.                                                                                         write_com(0x0c); //关光标
  296.                                                                                        write_com(0x06);//写一个字符后地址指针加 1
  297.                                                                                     write_com(0x01);//显示清零,数据指针清零
  298.                                                                                         display_n("PassWord  Error");
  299.                                                                                         delayx(1000);
  300.                                                                                         aa++;
  301.                                                                                         if(aa == 4)
  302.                                                                                         {
  303.                                                                                              aa = 0;
  304.                                                                              warn();        //密码不正确报警
  305.                                                                                         }
  306.                                                                                 }
  307.                                                                        
  308.                                                                 }  
  309.                                                                 else //密码没有输入正确或完成
  310.                                                                 {
  311.                                                                         lcdpos(0,0);
  312.                                                                         write_com(0x0c); //关光标
  313.                                                                      write_com(0x06);//写一个字符后地址指针加 1
  314.                                                                     write_com(0x01);//显示清零,数据指针清零
  315.                                                                         display_n("PassWord  Error");
  316.                                                                         delayx(1000);
  317.                                                                         flag_change = 0;
  318.                                                                         aa++;
  319.                                                                         if(aa == 4)
  320.                                                                         {
  321.                                                                             aa = 0;
  322.                                                                     warn();        //密码不正确报警
  323.                                                                         }
  324.                                                                 }
  325.                                                                                                
  326.                                                         }
  327.                                                 }
  328.                                                 else //密码 不正确
  329.                                                 {
  330.                                                         lcdpos(0,0);
  331.                                                         write_com(0x0c); //关光标
  332.                                                         write_com(0x06);//写一个字符后地址指针加 1
  333.                                                         write_com(0x01);//显示清零,数据指针清零
  334.                                                         display_n("PassWord  Error");
  335.                                                         delayx(1000);
  336.                                                         aa++;
  337.                                                         if(aa == 4)
  338.                                                         {
  339.                                                                 aa = 0;
  340.                                                                 warn();        //密码不正确报警
  341.                                                         }
  342.                                                 }
  343.                                         }
  344.                                         else          //密码没有输入正确或完成
  345.                                         {
  346.                                                 lcdpos(0,0);
  347.                                                 write_com(0x0c); //关光标
  348.                                                write_com(0x06);//写一个字符后地址指针加 1
  349.                                             write_com(0x01);//显示清零,数据指针清零
  350.                                                 display_n("PassWord  Error");
  351.                                                 delayx(1000);
  352.                                                 aa++;
  353.                                                 if(aa == 4)
  354.                                                 {
  355.                                                         aa = 0;
  356.                                                         warn();        //密码不正确报警
  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());//  *///测试矩阵键盘程序  键盘必须改成‘1’字符形式
  382.            }
  383.           
  384. }
  385. void timer0() interrupt 1 //定时器0中断,   背光//         自锁
  386. {
  387.         TH0 = 0x4c;//50ms定时
  388.         TL0 = 0x00;
  389.         num++;
  390.         if(num ==600)//30s时间到
  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个警告 所以不在此调用关锁函数
  405. }

  406. }  
  407. /***************因两个定时器工作要考虑优先级********/
  408. /*************定时不准*****************************/
  409. /*********所以用了一个定时器**********************/
复制代码


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:120850 发表于 2016-5-15 22:06 | 只看该作者
这个是用到单片机的什么?
回复

使用道具 举报

板凳
ID:142439 发表于 2016-10-12 15:01 | 只看该作者
请问这个有没有原理图
回复

使用道具 举报

地板
ID:152262 发表于 2016-12-7 22:06 | 只看该作者
没有原理图呀
回复

使用道具 举报

5#
ID:156130 发表于 2016-12-25 06:17 | 只看该作者
没图说个毛
回复

使用道具 举报

6#
ID:157512 发表于 2016-12-25 14:24 | 只看该作者
好东西,学习下
回复

使用道具 举报

7#
ID:274244 发表于 2018-1-10 13:16 | 只看该作者
我想知道怎么看啊
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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