找回密码
 立即注册

QQ登录

只需一步,快速开始

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

可设定新密码的单片机密码锁proteus仿真设计 带源程序

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



这是一个可以设定新密码的单片机电子密码锁设计
所有资料下载:
密码锁程序设计.rar (61.02 KB, 下载次数: 21)


密码锁源程序:
  1. #include <reg51.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char   //宏定义
  4. uchar code  LEDData[] ={0xc0,0xf9,0xa4,0xb0,0x99,
  5.                         0x92,0x82,0xf8,0x80,0x90,0xff,0xBF};        //共阳数码管

  6. sbit weixuan1 = P2 ^ 7;        //数码管位选定义
  7. sbit weixuan2 = P2 ^ 6;
  8. sbit weixuan3 = P2 ^ 5;
  9. sbit weixuan4 = P2 ^ 4;

  10. //sbit hongse = P2 ^ 2;
  11. //sbit lvse = P2 ^ 1;
  12. //sbit lanse = P2 ^ 0;

  13. sbit K7 = P1 ^ 0;        //按键
  14. sbit K8 = P1 ^ 1;
  15. sbit K9 = P1 ^ 2;
  16. sbit K4 = P1 ^ 3;
  17. sbit K5 = P1 ^ 4;
  18. sbit K6 = P1 ^ 5;
  19. sbit K1 = P1 ^ 6;
  20. sbit K2 = P1 ^ 7;
  21. sbit K3 = P3 ^ 0;
  22. sbit K0 = P3 ^ 1;
  23. sbit K10 = P3 ^ 2;
  24. sbit K11 = P3 ^ 3;

  25. int a, b, c, d, moshi = 0, jishu = 0;

  26. uint mi[4] = {1, 2, 3, 4};
  27. uint ma[4] = {10, 10, 10, 10};

  28. /*****延时子程序*****/
  29. void Delay(uint i)
  30. {
  31.     while( i-- );
  32. }

  33. void qudou(void)     //去抖延迟
  34. {
  35.     int i;
  36.     for(i = 0; i < 2400; i++);
  37. }

  38. /*****显示温度子程序*****/
  39. void xianshi()
  40. {
  41.     weixuan1 = 0;
  42.     weixuan2 = 0;
  43.     weixuan3 = 0;
  44.     weixuan4 = 0;
  45.     P0 = LEDData[a];
  46.     weixuan1 = 1;
  47.     weixuan2 = 0;
  48.     weixuan3 = 0;
  49.     weixuan4 = 0;
  50.     Delay(300);

  51.     weixuan1 = 0;
  52.     weixuan2 = 0;
  53.     weixuan3 = 0;
  54.     weixuan4 = 0;
  55.     P0 = LEDData[b];
  56.     weixuan1 = 0;
  57.     weixuan2 = 1;
  58.     weixuan3 = 0;
  59.     weixuan4 = 0;
  60.     Delay(300);

  61.     weixuan1 = 0;
  62.     weixuan2 = 0;
  63.     weixuan3 = 0;
  64.     weixuan4 = 0;
  65.     P0 = LEDData[c];
  66.     weixuan1 = 0;
  67.     weixuan2 = 0;
  68.     weixuan3 = 1;
  69.     weixuan4 = 0;
  70.     Delay(300);

  71.     weixuan1 = 0;
  72.     weixuan2 = 0;
  73.     weixuan3 = 0;
  74.     weixuan4 = 0;
  75.     P0 = LEDData[d];
  76.     weixuan1 = 0;
  77.     weixuan2 = 0;
  78.     weixuan3 = 0;
  79.     weixuan4 = 1;
  80.     Delay(300);
  81. }

  82. void key_guan()
  83. {
  84.     if (K0 == 0)                  //按键0按下
  85.     {
  86.         qudou();
  87.         if(K0 == 0)
  88.         {
  89.             jishu = 1;
  90.             ma[0] = 0;
  91.             moshi = 1;
  92.         }
  93.         while(K0 == 0);
  94.     }

  95.     if (K1 == 0)                  //按键1按下
  96.     {
  97.         qudou();
  98.         if(K1 == 0)
  99.         {
  100.             jishu = 1;
  101.             ma[0] = 1;
  102.             moshi = 1;
  103.         }
  104.         while(K1 == 0);
  105.     }

  106.     if (K2 == 0)                  //按键2按下
  107.     {
  108.         qudou();
  109.         if(K2 == 0)
  110.         {
  111.             jishu = 1;
  112.             ma[0] = 2;
  113.             moshi = 1;
  114.         }
  115.         while(K2 == 0);
  116.     }

  117.     if (K3 == 0)                  //按键3按下
  118.     {
  119.         qudou();
  120.         if(K3 == 0)
  121.         {
  122.             jishu = 1;
  123.             ma[0] = 3;
  124.             moshi = 1;
  125.         }
  126.         while(K3 == 0);
  127.     }

  128.     if (K4 == 0)                  //按键4按下
  129.     {
  130.         qudou();
  131.         if(K4 == 0)
  132.         {
  133.             jishu = 1;
  134.             ma[0] = 4;
  135.             moshi = 1;
  136.         }
  137.         while(K4 == 0);
  138.     }

  139.     if (K5 == 0)                  //按键5按下
  140.     {
  141.         qudou();
  142.         if(K5 == 0)
  143.         {
  144.             jishu = 1;
  145.             ma[0] = 5;
  146.             moshi = 1;
  147.         }
  148.         while(K5 == 0);
  149.     }

  150.     if (K6 == 0)                  //按键6按下
  151.     {
  152.         qudou();
  153.         if(K6 == 0)
  154.         {
  155.             jishu = 1;
  156.             ma[0] = 6;
  157.             moshi = 1;
  158.         }
  159.         while(K6 == 0);
  160.     }

  161.     if (K7 == 0)                  //按键7按下
  162.     {
  163.         qudou();
  164.         if(K7 == 0)
  165.         {
  166.             jishu = 1;
  167.             ma[0] = 7;
  168.             moshi = 1;
  169.         }
  170.         while(K7 == 0);
  171.     }

  172.     if (K8 == 0)                  //按键8按下
  173.     {
  174.         qudou();
  175.         if(K8 == 0)
  176.         {
  177.             jishu = 1;
  178.             ma[0] = 8;
  179.             moshi = 1;
  180.         }
  181.         while(K8 == 0);
  182.     }

  183.     if (K9 == 0)                  //按键9按下
  184.     {
  185.         qudou();
  186.         if(K9 == 0)
  187.         {
  188.             jishu = 1;
  189.             ma[0] = 9;
  190.             moshi = 1;
  191.         }
  192.         while(K9 == 0);
  193.     }
  194. }

  195. void key_shuru()
  196. {
  197.     if (K0 == 0)                  //按键0按下
  198.     {
  199.         qudou();
  200.         if(K0 == 0)
  201.         {
  202.             ma[jishu] = 0;
  203.             jishu++;
  204.         }
  205.         while(K0 == 0);
  206.     }

  207.     if (K1 == 0)                  //按键1按下
  208.     {
  209.         qudou();
  210.         if(K1 == 0)
  211.         {
  212.             ma[jishu] = 1;
  213.             jishu++;
  214.         }
  215.         while(K1 == 0);
  216.     }

  217.     if (K2 == 0)                  //按键2按下
  218.     {
  219.         qudou();
  220.         if(K2 == 0)
  221.         {
  222.             ma[jishu] = 2;
  223.             jishu++;
  224.         }
  225.         while(K2 == 0);
  226.     }

  227.     if (K3 == 0)                  //按键3按下
  228.     {
  229.         qudou();
  230.         if(K3 == 0)
  231.         {
  232.             ma[jishu] = 3;
  233.             jishu++;
  234.         }
  235.         while(K3 == 0);
  236.     }

  237.     if (K4 == 0)                  //按键4按下
  238.     {
  239.         qudou();
  240.         if(K4 == 0)
  241.         {
  242.             ma[jishu] = 4;
  243.             jishu++;
  244.         }
  245.         while(K4 == 0);
  246.     }

  247.     if (K5 == 0)                  //按键5按下
  248.     {
  249.         qudou();
  250.         if(K5 == 0)
  251.         {
  252.             ma[jishu] = 5;
  253.             jishu++;
  254.         }
  255.         while(K5 == 0);
  256.     }

  257.     if (K6 == 0)                  //按键6按下
  258.     {
  259.         qudou();
  260.         if(K6 == 0)
  261.         {
  262.             ma[jishu] = 6;
  263.             jishu++;
  264.         }
  265.         while(K6 == 0);
  266.     }

  267.     if (K7 == 0)                  //按键7按下
  268.     {
  269.         qudou();
  270.         if(K7 == 0)
  271.         {
  272.             ma[jishu] = 7;
  273.             jishu++;
  274.         }
  275.         while(K7 == 0);
  276.     }

  277.     if (K8 == 0)                  //按键8按下
  278.     {
  279.         qudou();
  280.         if(K8 == 0)
  281.         {
  282.             ma[jishu] = 8;
  283.             jishu++;
  284.         }
  285.         while(K8 == 0);
  286.     }

  287.     if (K9 == 0)                  //按键9按下
  288.     {
  289.         qudou();
  290.         if(K9 == 0)
  291.         {
  292.             ma[jishu] = 9;
  293.             jishu++;
  294.         }
  295.         while(K9 == 0);
  296.     }
  297. }

  298. void key_xinmima()
  299. {
  300.     if (K0 == 0)                  //按键0按下
  301.     {
  302.         qudou();
  303.         if(K0 == 0)
  304.         {
  305.             ma[jishu] = 0;
  306.             jishu++;
  307.         }
  308.         while(K0 == 0);
  309.     }

  310.     if (K1 == 0)                  //按键1按下
  311.     {
  312.         qudou();
  313.         if(K1 == 0)
  314.         {
  315.             ma[jishu] = 1;
  316.             jishu++;
  317.         }
  318.         while(K1 == 0);
  319.     }

  320.     if (K2 == 0)                  //按键2按下
  321.     {
  322.         qudou();
  323.         if(K2 == 0)
  324.         {
  325.             ma[jishu] = 2;
  326.             jishu++;
  327.         }
  328.         while(K2 == 0);
  329.     }

  330.     if (K3 == 0)                  //按键3按下
  331.     {
  332.         qudou();
  333.         if(K3 == 0)
  334.         {
  335.             ma[jishu] = 3;
  336.             jishu++;
  337.         }
  338.         while(K3 == 0);
  339.     }

  340.     if (K4 == 0)                  //按键4按下
  341.     {
  342.         qudou();
  343.         if(K4 == 0)
  344.         {
  345.             ma[jishu] = 4;
  346.             jishu++;
  347.         }
  348.         while(K4 == 0);
  349.     }

  350.     if (K5 == 0)                  //按键5按下
  351.     {
  352.         qudou();
  353.         if(K5 == 0)
  354.         {
  355.             ma[jishu] = 5;
  356.             jishu++;
  357.         }
  358.         while(K5 == 0);
  359.     }

  360.     if (K6 == 0)                  //按键6按下
  361.     {
  362.         qudou();
  363.         if(K6 == 0)
  364.         {
  365.             ma[jishu] = 6;
  366.             jishu++;
  367.         }
  368.         while(K6 == 0);
  369.     }

  370.     if (K7 == 0)                  //按键7按下
  371.     {
  372.         qudou();
  373.         if(K7 == 0)
  374.         {
  375.             ma[jishu] = 7;
  376.             jishu++;
  377.         }
  378.         while(K7 == 0);
  379.     }

  380.     if (K8 == 0)                  //按键8按下
  381.     {
  382.         qudou();
  383.         if(K8 == 0)
  384.         {
  385.             ma[jishu] = 8;
  386.             jishu++;
  387.         }
  388.         while(K8 == 0);
  389.     }

  390.     if (K9 == 0)                  //按键9按下
  391.     {
  392.         qudou();
  393.         if(K9 == 0)
  394.         {
  395.             ma[jishu] = 9;
  396.             jishu++;
  397.         }
  398.         while(K9 == 0);
  399.     }
  400. }

  401. void guan()
  402. {
  403. //    hongse = 0;
  404. //    lvse = 1;
  405. //    lanse = 1;
  406.     a = 11;
  407.     b = 11;
  408.     c = 11;
  409.     d = 11;
  410.     key_guan();
  411. }

  412. void shuru()
  413. {
  414. //    hongse = 1;
  415. //    lvse = 1;
  416. //    lanse = 0;
  417.     switch(jishu)
  418.     {
  419.     case 1:
  420.         a = 10;
  421.         b = 10;
  422.         c = 10;
  423.         d = 11;
  424.         break;
  425.     case 2:
  426.         a = 10;
  427.         b = 10;
  428.         c = 11;
  429.         d = 11;
  430.         break;
  431.     case 3:
  432.         a = 10;
  433.         b = 11;
  434.         c = 11;
  435.         d = 11;
  436.         break;
  437.     case 4:
  438.         a = 11;
  439.         b = 11;
  440.         c = 11;
  441.         d = 11;
  442.         break;
  443.     }
  444.     if(jishu < 4)
  445.         key_shuru();
  446.     else
  447.     {
  448.         if (K10 == 0)                  //按键4按下
  449.         {
  450.             qudou();
  451.             if(K10 == 0)
  452.             {
  453.                 if(mi[0] == ma[0])
  454.                     if(mi[1] == ma[1])
  455.                         if(mi[2] == ma[2])
  456.                             if(mi[3] == ma[3])
  457.                             {
  458.                                 moshi = 2;
  459.                                 jishu = 0;
  460.                                 ma[0] = 10;
  461.                                 ma[1] = 10;
  462.                                 ma[2] = 10;
  463.                                 ma[3] = 10;
  464.                             }
  465.                             else
  466.                             {
  467.                                 moshi = 0;
  468.                                 jishu = 0;
  469.                                 ma[0] = 10;
  470.                                 ma[1] = 10;
  471.                                 ma[2] = 10;
  472.                                 ma[3] = 10;
  473.                             }
  474.                         else
  475.                         {
  476.                             moshi = 0;
  477.                             jishu = 0;
  478.                             ma[0] = 10;
  479.                             ma[1] = 10;
  480.                             ma[2] = 10;
  481.                             ma[3] = 10;
  482.                         }
  483.                     else
  484.                     {
  485.                         moshi = 0;
  486.                         jishu = 0;
  487.                         ma[0] = 10;
  488.                         ma[1] = 10;
  489.                         ma[2] = 10;
  490.                         ma[3] = 10;
  491.                     }
  492.                 else
  493.                 {
  494.                     moshi = 0;
  495.                     jishu = 0;
  496.                     ma[0] = 10;
  497.                     ma[1] = 10;
  498.                     ma[2] = 10;
  499.                     ma[3] = 10;
  500.                 }
  501.             }
  502.             while(K10 == 0);
  503.         }
  504.     }
  505. }

  506. void kai()
  507. {
  508. //    hongse = 1;
  509. //    lvse = 0;
  510. //    lanse = 1;
  511.     a = 0;
  512.     b = 0;
  513.     c = 0;
  514.     d = 0;
  515.     if (K11 == 0)                  //按键9按下
  516.     {
  517.         qudou();
  518.         if(K11 == 0)
  519.         {
  520.             moshi = 3;
  521.             a = 10;
  522.             b = 10;
  523.             c = 10;
  524.             d = 10;
  525.         }
  526.         while(K11 == 0);
  527.     }
  528. }

  529. void xinmima()
  530. {
  531. //    hongse = 0;
  532. //    lvse = 0;
  533. //    lanse = 0;
  534.     switch(jishu)
  535.     {
  536.     case 1:
  537.         a = 10;
  538.         b = 10;
  539.         c = 10;
  540.         d = ma[0];
  541.         break;
  542.     case 2:
  543.         a = 10;
  544.         b = 10;
  545.         c = ma[0];
  546.         d = ma[1];
  547.         break;
  548.     case 3:
  549.         a = 10;
  550.         b = ma[0];
  551.         c = ma[1];
  552.         d = ma[2];
  553.         break;
  554.     case 4:
  555.         a = ma[0];
  556.         b = ma[1];
  557.         c = ma[2];
  558.         d = ma[3];
  559.         break;
  560.     }
  561.     if(jishu < 4)
  562.         key_xinmima();
  563.     else
  564.     {
  565.         if (K11 == 0)                  //按键4按下
  566.         {
  567.             qudou();
  568.             if(K11 == 0)
  569.             {
  570.                 mi[0] = ma[0];
  571.                 ma[0] = 10;
  572.                 mi[1] = ma[1];
  573.                 ma[1] = 10;
  574.                 mi[2] = ma[2];
  575.                 ma[2] = 10;
  576.                 mi[3] = ma[3];
  577.                 ma[3] = 10;
  578.                 jishu = 0;
  579.                 moshi = 0;
  580.             }
  581.             while(K11 == 0);
  582.         }

  583.     }
  584. }
  585. void zhuangtai()
  586. {
  587.     switch(moshi)
  588.     {
  589.     case 0:
  590.         guan();
  591.         break;
  592.     case 1:
  593.         shuru();
  594.         break;
  595.     case 2:
  596.         kai();
  597.         break;
  598.     case 3:
  599.         xinmima();
  600.         break;
  601.     }
  602. }
  603. /*****主函数*****/
  604. void main(void)
  605. {
  606.     while(1)
  607.     {
  608.         zhuangtai();
  609.         xianshi();
  610.     }
  611. }
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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