久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 834|回復: 0
打印 上一主題 下一主題
收起左側

基于單片機電子密碼鎖

[復制鏈接]
跳轉到指定樓層
樓主
密碼鎖的文件、仿真圖
單片機仿真圖(proteus)


源碼展示:
  1. #include <reg52.h>
  2. typedef unsigned char u8;
  3. typedef unsigned int u16;


  4. #define key P1                   //按鍵io口
  5. sbit fen=P3^0;                   //蜂鳴器io口
  6. sbit rs=P3^1;        //LCD控制口
  7. sbit rw=P3^2;
  8. sbit e=P3^3;
  9. sbit led=P3^4;       //LED燈io口

  10. //bit 位變量聲明:定義一個位變量的值
  11. u8 keyz=17,j=0,biao1=0,a=10,b=10,c=10,d=10;
  12. bit biao=0;
  13. u16 zh;

  14. u8 shu[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,
  15.           0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f};
  16. u8 zi[]={"password:"};
  17. u8 num[]={"0123456789ABCDEF"};


  18. void delay(u16 i){
  19.          while(i--);
  20.                         }

  21. /*蜂鳴器*/
  22. void Fen(u8 a,b)   //蜂鳴器發聲函數
  23. {
  24.         u8 i,j;        
  25.         for(i=0;i<a;i++)
  26.         {
  27.                 for(j=0;j<100;j++)
  28.                  {fen=~fen;delay(b);}
  29.                                           }
  30.                   }


  31. /*LCD*/
  32. void writecom(u8 com){                //LCD寫指令
  33.          rs=0;
  34.          rw=0;
  35.          e=0;
  36.          P0=com;
  37.          delay(5);
  38.          e=1;
  39.          e=0;
  40.                      }

  41. void writedat(u8 dat){                //LCD寫數據
  42.          rs=1;
  43.          rw=0;
  44.          e=0;
  45.          P0=dat;
  46.          delay(5);
  47.          e=1;
  48.          e=0;
  49.                      }

  50. void initlcd(){                           //LCD初始化函數
  51.            writecom(0x38);   //顯示模式設置
  52.            writecom(0x0c);
  53.            writecom(0x06);

  54.                           }

  55. void xian(){         //LCD顯示數字函數
  56.                       writedat(num[keyz]);
  57.                                       if(a==10){a=keyz; }                   //對abcd,四位數的單獨賦值
  58.                                           else if(b==10){b=keyz;}
  59.                                           else if(c==10){c=keyz;}
  60.                                           else{d=keyz;}
  61.                                           if(j!=3){j++;}biao=0;

  62. }

  63. /*鍵盤*/
  64. void Key(){u8 a=0;                         //矩形式鍵盤函數

  65.          if(key!=0x0f){delay(1000);
  66.          if(key!=0x0f){
  67.                  key=0x0f;
  68.                 switch(key){
  69.                            case 0x07: keyz=0;biao=1;break;
  70.                            case 0x0b: keyz=1;biao=1;break;
  71.                            case 0x0d: keyz=2;biao=1;break;
  72.                            case 0x0e: keyz=3;biao=1;break;
  73.                 }
  74.                 key=0xf0;
  75.                 switch(key){
  76.                            case 0x70: keyz=keyz;biao=1;break;
  77.                            case 0xb0: keyz=keyz+4;biao=1;break;
  78.                            case 0xd0: keyz=keyz+8;biao=1;break;
  79.                            case 0xe0: keyz=keyz+12;biao=1;break;
  80.                 }

  81.          }
  82.          while((a<50)&&(key!=0xf0)){a++;delay(10000);}
  83.          }
  84.             }
  85.                                                 
  86. void shi(){u8 i;          // 按鍵值判斷函數
  87.          if(biao&&keyz!=15){  //判斷標志位biao是否為1,為1則有按鍵操作并且按鍵的值不等于15                 
  88.                         
  89.                          writecom(0x80+0x40+j);                          //數字顯示位置進行累加操作
  90.                          if(j<0){j=0;}                                          //數字顯示位置邊界
  91.                   switch(keyz){                                                  //switch判斷按鍵并執行對應操作
  92.                           case 0:xian(); break;
  93.                                 case 1:xian(); break;
  94.                                 case 2:xian(); break;
  95.                                 case 3:xian(); break;
  96.                                 case 4:xian(); break;
  97.                                 case 5:xian(); break;
  98.                                 case 6:xian(); break;
  99.                                 case 7:xian(); break;
  100.                                 case 8:xian(); break;
  101.                                 case 9:xian(); break;
  102.                                 case 10:writedat(num[keyz]);
  103.                                        
  104.                                                 j++;biao=0;break;
  105.                                 case 11:writedat(num[keyz]);
  106.                                        
  107.                                                 j++;biao=0;break;
  108.                                 case 12:
  109.                                                 biao1=0;                                                  //重置標志位biao1,上鎖
  110.                                         biao=0;break;
  111.                                 case 13:writecom(0x01);        delay(1000);          //全屏清除
  112.                                                 for(i=0;i<sizeof(zi);i++){
  113.                             writecom(0x80+i);
  114.                             writedat(zi[i]);                }
  115.                                         j=0;biao=0;break;
  116.                                 case 14:                                                                   //對當前數字位刪除的操作
  117.                                                 writedat(' ');
  118.                                                 j--;
  119.                                                 writecom(0x80+0x40+j);writedat(' ');
  120.                                                 biao=0;break;
  121.                                 case 15:                          //確定按鍵
  122.                                         j++;biao=0;break;
  123.                                        }
  124.                                   }
  125.                         if(keyz==15){                                                                  //判斷按鍵值如果等于15,便視為按下確定鍵
  126.                         writecom(0x01);delay(1000);
  127.                          zh=a*1000+b*100+c*10+d;                                         //將ABCD,四位數合并并進行判斷是否為正確密碼
  128.                           if(zh==1234){  //設密碼為1234
  129.                         j=0;
  130.                     biao1=1;                                                                         //將biao1標志位置1便為密碼正確
  131.                     keyz=17;                                                                           //使按鍵值跳出最大值15便不會循壞顯示
  132.                                                 }
  133.                 else{
  134.                            j=0;
  135.                   biao1=0;                                                                                 //反之密碼錯誤
  136.                            keyz=17;        
  137.                         Fen(20,200);                                    //蜂鳴器報警
  138.                         }
  139.                         zh=0;a=10,b=10,c=10,d=10;                                         //重置ABCD變量
  140.                     for(i=0;i<sizeof(zi);i++){
  141.               writecom(0x80+i);
  142.               writedat(zi[i]);                           }
  143.                                                                         }         
  144.                             }
  145.                   
  146. void main(){u8 i; led=1;
  147.      initlcd();                        //LCD初始化函數
  148.          for(i=0;i<sizeof(zi);i++){
  149.          writecom(0x80+i);
  150.          writedat(zi[i]);                           }
  151.          while(1){
  152.                    Key();               //定義鍵盤函數
  153.                   shi();               //按鍵判斷函數,燈亮或報警
  154.                   P2=shu[keyz];        //數碼管顯示當前輸入值
  155.                   if(biao1==1){ led=0;                                            //判斷標志位biao1 為1則密碼正確顯示ok
  156.                   writecom(0x80+0x40+10);
  157.               writedat('O');
  158.                   writecom(0x80+0x41+10);
  159.               writedat('K'); }

  160.                   else if(biao1==0){led=1;                                   //biao1為0則顯示密碼錯誤顯示no
  161.                   writecom(0x80+0x40+10);
  162.               writedat('N');
  163.                   writecom(0x80+0x41+10);
  164.               writedat('O');}
  165.                       }
  166.            }
復制代碼



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

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本a∨精品中文字幕在线 亚洲91视频 | 999观看免费高清www | 99精品视频网 | 亚洲天堂久久 | 91天堂网 | 91在线精品视频 | 91精品久久久久 | 91在线观 | 久久r精品 | 天天想天天干 | 色婷婷九月 | 亚洲三级在线观看 | 欧美亚洲一区二区三区 | 北条麻妃国产九九九精品小说 | 精品国产aⅴ | 精品国产一区二区三区性色av | 精品久草 | 美女久久 | 成人av网站在线观看 | 国产免费一区二区三区免费视频 | 精品一区二区免费视频 | 99爱视频 | 黄色毛片大全 | 国产一区二区三区在线看 | 国产在线观看一区二区三区 | 欧美涩涩网 | 久久精品小视频 | 精产嫩模国品一二三区 | 美女国产 | a精品视频 | 欧美成视频| www.中文字幕 | 一区在线视频 | 日韩视频一区二区三区 | 一级毛片视频在线观看 | 精品亚洲视频在线 | 日韩在线欧美 | 午夜理伦三级理论三级在线观看 | 大陆一级毛片免费视频观看 | 国产精品亚洲欧美日韩一区在线 | 中国美女av|