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

QQ登錄

只需一步,快速開(kāi)始

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

單片機(jī)密碼鎖 LCD12864 源碼+仿真

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
圖片如下

主要是用LCD12864來(lái)顯示
也是為了幫助大家
單片機(jī)源程序如下:
  1. #include<reg51.h>
  2. #include<12864.h>
  3. #include<keypad.h>
  4. #include<24C01.h>

  5. #define uchar unsigned char
  6. #define uint unsigned int
  7. sbit LED1=P1^5;
  8. sbit LED2=P1^6;
  9. sbit INIT=P2^2;
  10. sbit SOUND=P1^7;

  11. uchar idata key[6]={0,0,0,0,0,0};
  12. uchar idata iic[6]={0,1,2,3,4,5};

  13. void press(uchar *s)
  14. {
  15.             uchar dat;
  16. //**************************************************
  17.        P3=0xf0;                                                                //保存第一位密碼
  18.            while(P3==0xf0);
  19.        dat=key_scan();
  20.            if((dat!=0x0a)&&(dat!=0x0b))
  21.          {   *s=dat;
  22.                          Left();
  23.                          star_12864(star,0x05,16);
  24.              }
  25.            s++;                  
  26. //**************************************************
  27.            P3=0xf0;                                                          //保存第二位密碼
  28.            while(P3==0xf0);                                                
  29.        dat=key_scan();
  30.            if((dat!=0x0a)&&(dat!=0x0b))
  31.          {   *s=dat;
  32.                          Left();
  33.                          star_12864(star,0x05,24);
  34.                   }
  35.            s++;        
  36. //**************************************************
  37.            P3=0xf0;                                                          //保存第三位密碼
  38.            while(P3==0xf0);                                                
  39.        dat=key_scan();
  40.            if((dat!=0x0a)&&(dat!=0x0b))
  41.          {   *s=dat;
  42.                          Left();
  43.                          star_12864(star,0x05,32);
  44.                   }
  45.            s++;        
  46. //**************************************************
  47.            P3=0xf0;                                                          //保存第四位密碼
  48.            while(P3==0xf0);                                                
  49.            dat=key_scan();
  50.            if((dat!=0x0a)&&(dat!=0x0b))
  51.          {   *s=dat;
  52.                          Left();
  53.                          star_12864(star,0x05,40);
  54.                   }
  55.            s++;        
  56. //**************************************************
  57.            P3=0xf0;                                                          //保存第五位密碼
  58.            while(P3==0xf0);                                                
  59.        dat=key_scan();
  60.            if((dat!=0x0a)&&(dat!=0x0b))
  61.          {   *s=dat;
  62.                          Left();
  63.                          star_12864(star,0x05,48);
  64.                   }
  65.            s++;        
  66. //**************************************************
  67.            P3=0xf0;                                                          //保存第六位密碼
  68.            while(P3==0xf0);                                                
  69.        dat=key_scan();
  70.            if((dat!=0x0a)&&(dat!=0x0b))
  71.          {   *s=dat;
  72.                          Left();
  73.                          star_12864(star,0x05,56);
  74.                   }
  75. //**************************************************
  76.            do{P3=0xf0;                                                        //鍵入Enter鍵盤繼續(xù)執(zhí)行下面語(yǔ)句,否則等待
  77.               while(P3==0xf0);                                                
  78.           dat=key_scan();
  79.               }while(dat!=0x0b);
  80. }

  81. void Delay10ms(void)           //延時(shí)10ms
  82. {
  83.         uint i,j,k;
  84.         for(i=5;i>0;i--)
  85.         for(j=4;j>0;j--)
  86.         for(k=248;k>0;k--);

  87. }

  88. void main()
  89. {
  90.       uchar dat;
  91.       uchar i=0,j=0,k;
  92.       uchar x;
  93.           LED1=1;
  94.           LED2=1;
  95.           SOUND=0;
  96.           INIT=1;
  97.       if(INIT==0)                   //密碼初始化
  98.       {
  99.              x=SendB(iic,0x50,6);
  100.                  Delay10ms();
  101.       }             //首先從IIC器件中讀出密碼以供下面輸入密碼進(jìn)行比較
  102.       x=ReadB(iic,0x50,6);
  103.       Init_12864();
  104.           for(i=0;i<150;i++){Delay10ms();}
  105. //**********************************若密碼不正確,循環(huán)執(zhí)行do{}while()********************************************
  106. do{
  107.              LED1=1;
  108.              System();                  //顯示:"請(qǐng)輸入密碼"字幕  
  109.              press(key);
  110.                  if((key[0]==iic[0])&&(key[1]==iic[1])&&(key[2]==iic[2])&&(key[3]==iic[3])&&(key[4]==iic[4])&&(key[5]==iic[5])) //密碼比較,若密碼正確責(zé)進(jìn)入系統(tǒng),若密碼不正確則顯示密碼錯(cuò)誤,重新輸入密碼
  111.          {
  112.                     true();
  113.                     do
  114.                     {
  115.                        P3=0xf0;                                                        //鍵入1或2繼續(xù)執(zhí)行下面語(yǔ)句,否則等待
  116.                    while(P3==0xf0);                                                
  117.                dat=key_scan();
  118.                  }while(dat!=0x01&&dat!=0x02);
  119.                     if(dat==1)                                                       //開(kāi)鎖
  120.                     {
  121.                         LED1=0;
  122.                                 unlock();
  123.                             for(i=0;i<100;i++){Delay10ms();}
  124.                     continue;
  125.                      }
  126.                     if(dat==2)                                                        //修改密碼
  127.                    {
  128.                        do{
  129.                               System();
  130.                                   press(key);
  131.                                   again();
  132.                                   press(iic);
  133.                                       if((key[0]==iic[0])&&(key[1]==iic[1])&&(key[2]==iic[2])&&(key[3]==iic[3])&&(key[4]==iic[4])&&(key[5]==iic[5]))
  134.                                       {
  135.                                           succeed();                                //修改密碼成功
  136.                                                   for(i=0;i<100;i++){Delay10ms();}
  137.                                       Delay10ms();
  138.                               x=SendB(iic,0x50,6);
  139.                                       Delay10ms();        
  140.                           x=ReadB(iic,0x50,6);break;
  141.                                        }
  142.                                       else                             //修改密碼不成功,重新修改
  143.                                           {
  144.                                               repeat();
  145.                                                   for(i=0;i<100;i++){Delay10ms();}
  146.                                            }
  147.                                   }while(1);   
  148.                     }
  149.                  
  150.                  }
  151.                 else                                                                           //密碼不正確,重新輸入密碼
  152.                 {
  153.                     j++;
  154.                         if(j==3)
  155.                         {
  156.                            for(i=0;i<8;i++)
  157.                            {
  158.                               LED2=0;
  159.                                   for(k=0;k<5;k++){Delay10ms();}
  160.                                   LED2=1;
  161.                                   for(k=0;k<5;k++){Delay10ms();}
  162.                                 }
  163.                                 j=0;
  164.                          }
  165.                         error();
  166.                         for(i=0;i<50;i++){Delay10ms();}
  167.                  }
  168. }while(1);         
  169.       
  170.                     
  171.            
  172. }
復(fù)制代碼



全部資料51hei下載地址:
基于24C02和12864顯示的電子密碼鎖設(shè)計(jì).rar (104.89 KB, 下載次數(shù): 240)


評(píng)分

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

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:163292 發(fā)表于 2021-1-5 08:14 | 只看該作者
不知道 12864是不是帶字庫(kù)
回復(fù)

使用道具 舉報(bào)

板凳
ID:867005 發(fā)表于 2021-5-6 16:54 | 只看該作者
403458608 發(fā)表于 2021-1-5 08:14
不知道 12864是不是帶字庫(kù)

12864帶有中文字庫(kù)
回復(fù)

使用道具 舉報(bào)

地板
ID:836575 發(fā)表于 2021-5-6 18:59 | 只看該作者
繼電器電路怎么畫(huà)啊 求教
回復(fù)

使用道具 舉報(bào)

5#
ID:836575 發(fā)表于 2021-5-9 11:14 | 只看該作者
24c02模塊刪了對(duì)整個(gè)仿真無(wú)影響是為什么啊 求教
回復(fù)

使用道具 舉報(bào)

6#
ID:477512 發(fā)表于 2022-4-2 07:36 | 只看該作者
對(duì)仿真是無(wú)影響,但是在實(shí)際應(yīng)用中沒(méi)有24C02,存儲(chǔ)的密碼掉電時(shí)會(huì)丟失!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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