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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機電子密碼鎖制作 24C02存儲密碼 LCD1602顯示

  [復制鏈接]
跳轉到指定樓層
樓主
..!!1來拿吧一個非常全面的密碼鎖制作資料,帶源程序.用 24C02 iic芯片存儲密碼 LCD1602液晶顯示


以上壓縮包全部資料下載: 單片機密碼鎖.zip (4.71 MB, 下載次數: 229)

以下是51單片機密碼鎖的主程序預覽:
  1. #include<reg52.h>
  2. #include<intrinS.h>
  3. #include<absacc.h>
  4. #include "keyc1.h" //見3.12
  5. #include "LCD1602.h"
  6. #include "24C02.h"   //見2.2
  7.    //見4.1
  8. #define unchar unsigned char
  9. #define uint unsigned int

  10. #define C02_write 0xa0
  11. #define C02_read 0xa1

  12. //----------------------------------------------------------------------------------------------
  13. #define enter 0x0c    //確定
  14. #define backspace 0x0f   //退格
  15. #define A 0x0a           //輸入密碼
  16. #define B 0x0b           //修改密碼
  17. //-----------------------------------------------------------------------------------------------
  18. unchar idata temp5_password[6]=
  19. {0,0,0,0,0,0};           //設置初始密碼為"123456"
  20. unchar num;//錯誤次數
  21. uint  M1,M2=0,M3,M4,M5,M6;
  22. //-----------------------------------------------------------------------------------------------
  23. sbit SET=P3^2;               //恢復出廠密碼設置鍵
  24. sbit Lock_BIT=P2^0;          //鎖控制信號,輸出低電平
  25. sbit SPK=P2^2;             //報警信號輸出端
  26. //-----------------------------------------------------------------------------------------------
  27. unchar int_count_1;
  28. unsigned int int_count_2;
  29. void SPKdelay(uint z)  //蜂鳴器延時
  30. {         uint i;
  31.    for(i=z;i>0;i--);
  32. }

  33. //===============================================================================================
  34. void Longdelay(unsigned int i)  //長時間延時函數
  35. {
  36.         unsigned int j;
  37.         for (;i>0;i--)
  38.         for(j=10000;j>0;j--);

  39. }

  40. //================================================================================================
  41. bit compare_string(unchar *string1,unchar *string2)//密碼對比函數
  42. {
  43.         unchar count;//設置循環對比計數器
  44.         for(count=0;count<6;count++)//設置要對比的密碼為六位
  45.         {
  46.                 if(string1[count]!=string2[count])
  47.                 return(0);//輸入密碼與原密碼不相同時返回出錯函數0

  48.         }
  49.         return(1);//輸入密碼正確返回正確參數1
  50. }
  51. //---------------------------------------------------------------------------------------------------
  52. unchar step_choose(void)//選擇輸入密碼或修改密碼處理函數
  53. {
  54.         unsigned int i;
  55.         unchar key;
  56.         do{
  57.                   WR_CMD(0x01);//清屏
  58.                 WR_CMD(0x06);//AC遞增,畫面不動
  59.                 GotoXY(0,0);//設置顯示“input password”的地址
  60.                 Show_Char("Input Password");//顯示"輸入密碼"
  61.                 GotoXY(0,1);//設置顯示plaese press A的首地址
  62.                 Show_Char("Please Press A");//顯示請輸入A
  63.                 for(i=0;i<30000;i++)//循環讀鍵盤
  64.                         {
  65.                                 key=key1();//讀鍵盤
  66.                                 if((key==A)||(key==B)) break;//如果是A或B就退出
  67.                         }
  68.                 if((key!=A)&&(key!=B))//如果不是A也不是B,就執行下列程序
  69.                   {
  70.                           WR_CMD(0x01);//清屏
  71.                         WR_CMD(0x06);//        AC遞增,畫面不動
  72.                         GotoXY(0,0);//設置顯示“input password”的地址
  73.                         Show_Char("Change Password");//顯示修改密碼
  74.                         GotoXY(0,1);//設置顯示“please press B”的首地址
  75.                         Show_Char("Please Press B");//顯示請輸入B
  76.                         for(i=0;i<30000;i++)//循環讀鍵盤
  77.                         {         
  78.                                 key=key1();//讀鍵盤
  79.                                 if((key==A)||(key==B)) break;//如果是A或B就退出
  80.                         }
  81.                   }
  82.           }
  83.           while((key!=A)&&(key!=B));//如果不是A也不是B,就循環讀鍵盤
  84.           return (key);//是A或B就帶參數返回
  85. }
  86. //=================================================================================================
  87. bit input_password(unchar *password)//輸入密碼函數
  88. {
  89.      unchar count,count1;//設置輸入密碼位數計數器
  90.         unchar key;//設置鍵值變量
  91.         GotoXY(0,1);
  92.         for(count=0;count<7;count++)
  93.         {
  94.                 Longdelay(3);//延時
  95.                 if(count<6);//輸入密碼小于六位嗎?
  96.                 {        
  97.                         do{key=key1();}//是的,讀鍵盤
  98.                         while(key==0xff);//如果鍵盤值為0xff,繼續讀鍵盤
  99.                     if(key==0x0d) break;   //退出鍵,回到初始界面
  100.                         if((key!=backspace)&&(key!=enter)&&(key>=0)&&(key<=9))//不是退格或確認鍵嗎?
  101.                         {         
  102.                                 Show_1_Char('*');//不是,是數字鍵就顯示'*'號
  103.                                 password[count]=key;//鍵值送入輸入密碼數組對應位
  104.                         }
  105.                 if(key==backspace)//是退格鍵嗎?
  106.                         {
  107.                                 if(count>0)//輸入位數大于0嗎?
  108.                                 {
  109.                                         GotoXY(--count,1);//是的,送刪除位的顯示地址
  110.                                         Show_1_Char(' '); //刪除位顯示空白
  111.                                         password[count]=' '; //輸入密碼數組對應位置空白
  112.                                         GotoXY(count,1); //送閃爍位
  113.                                         count--;//密碼位計數器減1
  114.                                        
  115.                                 }

  116.                         }
  117.                  if(key==enter)//是確認鍵嗎
  118.                         {
  119.                                 GotoXY(0,0);//是的,改變顯示首地址
  120.                                 return(0);//返回出錯參數0                        

  121.                         }
  122.                 }
  123.                 if(count==6)//密碼位計數器等于6嗎
  124.                 {
  125.                         do{key=key1();}//等于6,讀鍵盤
  126.                         while((key!=backspace)&&(key!=enter));//不是退格鍵或確認鍵,繼續讀鍵盤
  127.                         if(key==backspace)//是退格鍵嗎
  128.                         {
  129.                                 GotoXY(--count,1);//是的,送刪除位的顯示地址
  130.                                 Show_1_Char(' ');//刪除位顯示空白
  131.                                 GotoXY(count,1);//送閃爍位
  132.                                 count--;//密碼位計數器減1
  133.                         }
  134.                            if(key==enter)//是確認鍵嗎
  135.                         {return(1);}//是的,輸入密碼完成,返回正確參數1
  136.                 }
  137.         }
  138. }
  139. //===================================================================================================
  140. void password()//密碼處理函數
  141. {
  142.     uchar key,key2;
  143.         uint kscount=0;
  144.         unchar idata temp1_password[6]={' ',' ',' ',' ',' ',' '};//設置4組6位密碼變量
  145.         unchar idata temp3_password[6]={' ',' ',' ',' ',' ',' '};        //初始化為空白
  146.         unchar idata temp2_password[6]={' ',' ',' ',' ',' ',' '};
  147.         unchar idata temp4_password[6]={' ',' ',' ',' ',' ',' '};
  148.         key=step_choose( );//讀選擇狀態
  149.         if(key==A)//是選擇輸入密碼嗎?
  150.         {
  151.         Read_Flash(temp1_password,0x00,6);//是的從24c02中讀取密碼送入第一組密碼變量中
  152.                 WR_CMD(0x01);//清屏
  153.                 WR_CMD(0x06);//AC遞增,畫面不動
  154.                 GotoXY(0,0);//設置顯示“input password”的首地址
  155.                 Show_Char("Input Password");//顯示“輸入密碼”
  156.                 if(input_password(temp2_password))//完成輸入密碼了嗎?
  157.                 {
  158.                         if(compare_string(temp1_password,temp2_password))//完成,比較密碼正確嗎
  159.                         {        num=0;
  160.                                 WR_CMD(0x01);//清屏
  161.                         WR_CMD(0x06);//AC遞增,畫面不動
  162.                                 GotoXY(0,0);//正確,設置顯示“password correct”的首地址
  163.                                 Show_Char("Password Correct");//顯示"密碼正確"
  164.                                 GotoXY(0,1);//正確,設置顯示“password correct”的首地址
  165.                                 Show_Char("Open Lock");//顯示"密碼正確"        Lock_BIT=0;//密碼正確,開鎖
  166.                            Lock_BIT=0;//關開鎖信號
  167.                            while(1)
  168.                            {
  169.                              kscount++;
  170.                                  if(kscount==1000)
  171.                                   break;
  172.                                 SPK=0;
  173.                                 SPKdelay(10);//發開鎖提示聲
  174.                                 SPK=1;
  175.                            SPKdelay(40);
  176.                                 }        
  177.                           
  178.                     while(1)
  179.                         {  key2=key1();
  180.                             if(key2==0x0e)
  181.                           {
  182.                                 Lock_BIT=1;//關開鎖信號
  183.                                 break;
  184.                                 }
  185.                           }
  186.                                 SPK=0;
  187.                                 //關開鎖提示音
  188.                                 TR0=0;//關定時器0
  189.                                 return;//返回
  190.                         }
  191.                         else
  192.                                 {
  193.                                 WR_CMD(0x01);//清屏
  194.                         WR_CMD(0x06);//AC遞增,畫面不動
  195.                                 GotoXY(0,0);//錯誤,設置顯示“wrong password”的首地址
  196.                                 Show_Char("Wrong Password");//顯示“密碼錯誤”
  197.                                   Longdelay(25);
  198.                                 num++;
  199.                                   if(num==3)
  200.                                   {
  201.                                     WR_CMD(0x01);//清屏
  202.                         WR_CMD(0x06);//AC遞增,畫面不動
  203.                                 GotoXY(0,0);
  204.                                            Show_Char("Please Wait For");
  205.                                            GotoXY(0,1);
  206.                                         Show_Char(" 3 Minute");
  207.                                         while(1)
  208.                                         {
  209.                                            SPK=0;
  210.                                            SPKdelay(100);
  211.                                            SPK=1;
  212.                                            SPKdelay(100);
  213.                                            M1++;
  214.                                            if(M1==24000)
  215.                                             {
  216.                                                  break;
  217.                                                 }
  218.                                         }
  219.                                         Longdelay(1400);
  220.                                      }
  221.                                 Longdelay(10);//延時
  222.                                 return;//返回
  223.                                 }
  224.                 }
  225.                 else
  226.                         {
  227.                                 GotoXY(0,1);//沒有完成密碼輸入,設置顯示“error!”的首地址
  228.                                 Show_Char("Error!");//顯示“出錯”
  229.                                 Longdelay(15);//延時
  230.                         }                                                                                 
  231.         }
  232.         else//是,修改密碼
  233.          {
  234.                  Read_Flash(temp1_password,0x00,6);//從24c02中讀取密碼送入第一組密碼變量中
  235.                 WR_CMD(0x01);//清屏
  236.                 WR_CMD(0x06);//AC遞增,畫面不動
  237.                 GotoXY(0,0);//設置顯示“input old password”的首地址
  238.                 Show_Char("Input Old Password");//顯示輸入舊密碼
  239.                 if(input_password(temp2_password))//完成輸入密碼了嗎(輸入的舊密碼放在數組2中)
  240.                  {
  241.                          if(compare_string(temp1_password,temp2_password))//完成,比較密碼正確嗎?
  242.                          {
  243.                                  GotoXY(0,1);//正確,設置顯示“password correct!”的首地址
  244.                                 Show_Char("Password Correct!");//顯示“密碼正確”
  245.                                 Longdelay(6);//延時
  246.                                 WR_CMD(0x01);
  247.                                 WR_CMD(0x06);
  248.                                 GotoXY(0,0);
  249.                                 Show_Char("Input New Password!");
  250.                                 if(input_password(temp3_password))//完成第一次新密碼輸入嗎?(輸入密碼放在數組三中)
  251.                                 {
  252.                                         WR_CMD(0x01);
  253.                                         WR_CMD(0x06);
  254.                                         GotoXY(0,0);
  255.                                         Show_Char("Input Again");//顯示再次輸入密碼
  256.                                         if(input_password(temp4_password))//完成第二次新密碼輸入嗎?(輸入的密碼放在密碼組4中)
  257.                                         {
  258.                                                 if(compare_string(temp3_password,temp4_password))//比較兩次輸入密碼屬否相同
  259.                                                 {
  260.                                                         Write_Flash(temp3_password,0x00,6);//相同,將新密碼存入24c02中
  261.                                                         WR_CMD(0x01);//清屏
  262.                                                         WR_CMD(0x06);//AC遞增,畫面不動
  263.                                                         GotoXY(0,0);
  264.                                                         Show_Char("Password has");
  265.                                                         GotoXY(0,1);
  266.                                                         Show_Char("been changed");
  267.                                                         Longdelay(10);
  268.                                                         return;
  269.                                                 }
  270.                                                 else
  271.                                                 {
  272.                                                         WR_CMD(0x01);//兩次輸入不同清屏
  273.                                                         WR_CMD(0x06);//AC遞增,畫面不動
  274.                                                         GotoXY(0,0);
  275.                                                         Show_Char("Twice input");  //顯示”兩次輸入“
  276.                                                         GotoXY(0,1);
  277.                                                         Show_Char("is different");        //顯示是“不同的”
  278.                                                         Longdelay(10);
  279.                                                         return;        
  280.                                                 }
  281.                                         }
  282.                                         else
  283.                                         {
  284.                                                 GotoXY(0,1);//沒有正確完成第二次新密碼的輸入,設置顯示“error”的首地址
  285.                                                 Show_Char("Error!");//顯示錯誤
  286.                                                 Longdelay(15);
  287.                                                 return;
  288.                                         }
  289.                                 }
  290.                                 else
  291.                                 {
  292.                                         GotoXY(0,1);//沒有正確完成第一次新密碼輸入,設置顯示“error”的首地址
  293.                                         Show_Char("Error!");
  294.                                         Longdelay(15);
  295.                                         return;
  296.                                 }
  297.                          }
  298.                          else
  299.                             {
  300.                                     WR_CMD(0x01);//兩次輸入不同清屏
  301.                                         WR_CMD(0x06);//AC遞增,畫面不動
  302.                                      GotoXY(3,0);//舊密碼輸入錯誤,設置顯示“wrong password”的首地址
  303.                                     Show_Char("Sorry");
  304.                                     GotoXY(0,1);        
  305.                                     Show_Char("Wrong password");

  306.                                   num++;
  307.                                   if(num==3)
  308.                                   {
  309.                                     WR_CMD(0x01);//清屏
  310.                             WR_CMD(0x06);//AC遞增,畫面不動
  311.                                      GotoXY(0,0);
  312.                                            Show_Char("Please Wait For");
  313.                                            GotoXY(0,1);
  314.                                         Show_Char(" 3 Minute");
  315.                                         while(1)
  316.                                         {
  317.                                            SPK=0;
  318.                                            SPKdelay(100);
  319.                                            SPK=1;
  320.                                            SPKdelay(100);
  321.                                            M1++;
  322.                                            if(M1==24000)
  323.                                             {
  324.                                                  break;
  325.                                                 }
  326.                                         }
  327.                                          Longdelay(1400);
  328.                                         }
  329.                                         Longdelay(25);
  330.                                         return;
  331.                             }
  332.                  }
  333.                     else
  334.                         {
  335.                                     GotoXY(0,1);//沒有正確完成舊密碼的輸入,設置顯示“error!”的首地址
  336.                                         Show_Char("Error!");
  337.                                         Longdelay(15);
  338.                                         return;
  339.                         }
  340.          }
  341. }
  342. //============================================================================================================
  343. void int_service(void) interrupt 0 //外部中斷0處理函數
  344. {
  345.         EA=1;//關CPU中斷
  346.         EX0=1;//關外部中斷0
  347.         for(int_count_1=4;int_count_1>0;int_count_1--)//設置延時時間,10秒
  348.          {
  349.                  for(int_count_2=0xffff;int_count_2>0;int_count_2--)
  350.                 {
  351.                         if(SET==1)//恢復出廠密碼設置鍵松開否?
  352.                          {
  353.                         return;
  354.                          }
  355.                 }
  356.          }                  
  357.          WR_CMD(0x01);
  358.          WR_CMD(0x06);
  359.          Show_Char("Reset Cuccess!");//顯示“恢復出廠密碼”
  360.          Longdelay(50);
  361.          Write_Flash(temp5_password,0x00,6); //初始密碼0000000密碼送入24c02中保存
  362.                
  363. /*          EA=1;//關CPU中斷
  364.             EX0=1;         */
  365. }
  366. //==========================================================================================

  367. void t0(void) interrupt 1 using 0//定時、計數器0中斷處理函數
  368. {
  369.         TH0=(65536-1000)/256;//重新將定時1000微秒初值的高八位送入TH0
  370.         TL0=(65536-1000)%256;//         重新將定時1000微秒初值的低八位送入TL0
  371.         SPK=~SPK;//信號輸出位取反,即1000微秒反轉一次,產生周期為2ms的方波

  372. }
  373. //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  374. main()
  375.   {        unchar key;
  376.     Initialize(); //1602初始化
  377.         IT0=1;//設INT0為跳變沿沿觸發方式
  378.         EX0=1;//開外部中斷0
  379.         TMOD=0x01;
  380.         TH0=(65536-1000)/256;//重新將定時1000微秒初值的高八位送入TH0
  381.         TL0=(65536-1000)%256;//         重新將定時1000微秒初值的低八位送入TL0
  382.         TR0=0;
  383.         ET0=1;
  384.         EA=1;
  385.          while(1)
  386.         {         
  387.                    password();//運行密碼處理函數
  388.     }
  389. }
  390. //=================================終于完成了==================================================
  391.                                                          
復制代碼


評分

參與人數 2黑幣 +55 收起 理由
evilbaby + 5 很給力!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:106737 發表于 2016-2-29 16:44 | 只看該作者
.........................
回復

使用道具 舉報

板凳
ID:58924 發表于 2016-3-31 12:30 | 只看該作者
請問下,編譯有警告,而且輸密碼都是錯了,,
回復

使用道具 舉報

地板
ID:105813 發表于 2016-4-1 10:31 | 只看該作者
好牛的樣子呀
回復

使用道具 舉報

5#
ID:618030 發表于 2019-11-27 23:54 | 只看該作者
學習中...鼓勵下
回復

使用道具 舉報

6#
ID:665936 發表于 2019-12-17 10:40 | 只看該作者
注釋中見3.12是什么意思啊
回復

使用道具 舉報

7#
ID:666391 發表于 2019-12-17 15:45 來自手機 | 只看該作者
西路卡 發表于 2019-12-17 10:40
注釋中見3.12是什么意思啊

需要注釋下的.h文件,程序才能運行
回復

使用道具 舉報

8#
ID:186710 發表于 2020-4-1 15:38 | 只看該作者
感謝作者!
回復

使用道具 舉報

9#
ID:647098 發表于 2020-4-21 00:08 | 只看該作者
下載的壓縮包里那個單片機密碼鎖程序文件夾里沒代碼呀,打開提示沒有lock.c文件
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩在线不卡 | 国产成人精品免费视频大全最热 | 天天成人综合网 | 久久久久久久电影 | 日韩av成人| 成人在线视频免费观看 | 亚洲精品一区中文字幕乱码 | 伊人久久综合 | 亚洲精品影院 | 男女网站免费 | 国产一区二区精品在线 | 欧美精品欧美精品系列 | 免费观看羞羞视频网站 | 国产精品久久久久久久久久 | 日韩在线视频观看 | 91原创视频| 亚洲精品一区在线观看 | 国产一区二区精品在线 | 欧美黄色一区 | 亚洲理论在线观看电影 | 自拍偷拍一区二区三区 | 国产精品一区二区无线 | 日韩免费成人av | 国产在线拍偷自揄拍视频 | 日韩精品久久久久久 | 久久亚洲春色中文字幕久久久 | 国产精品亚洲成在人线 | 色视频网站在线观看 | 亚洲精品一区二区在线观看 | 亚洲美女视频 | 欧美日韩中文字幕在线 | 夜色www国产精品资源站 | 亚洲欧洲成人 | 亚洲九九精品 | 男人的天堂在线视频 | 国产成人免费视频网站视频社区 | 久久久999国产精品 中文字幕在线精品 | 久久久久久国产精品免费免费 | 国产日韩欧美在线观看 | 成人欧美一区二区三区黑人孕妇 | 亚洲天堂精品一区 |