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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機的電子密碼鎖(功能和手機的解鎖一樣 12864顯示 沒有用AT24c02 電路很簡單)

  [復制鏈接]
跳轉到指定樓層
樓主
ID:63839 發表于 2014-8-31 16:05 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. #include<stc12.h>                //頭文件我用的(stc12c5a60s2)
  2. #define uint unsigned int                                                                  //
  3. #define uchar unsigned char                                                                  //
  4. uint k,num,a,b,c,s;        //num數據顯示的位置 abc用于跳出while()循環 s數據輸錯的次數
  5. uchar code table1[12]={"0123456789*"};                                          //
  6. uchar code table2[]={"請輸入密碼:"};                                          //
  7. uchar code table3[]={"密碼證確!"};        //因為我的12864顯示“正”亂碼于是就用“證”
  8. uchar code table4[]={"密碼錯誤!"};                                                 //
  9. uchar code table5[]={"還有"};                                                         //
  10. uchar code table6[]={"請輸入當前密碼:"};                                         //
  11. uchar code table7[]={"修改后的密碼:"};
  12. uchar code table8[]={"次機會"};
  13. uchar code table9[]={"系統已經鎖死"};                                                        //
  14. uint Cipher1[5];                        //儲存你所輸入的數據                                                        
  15. uint Cipher2[5]={0,1,2,3,4,};//儲存密碼(初始密碼123)                                                   
  16.                                                                                                            
  17. sbit LCD_RS=P1^0;        // 數據/命令選擇端                     
  18. sbit LCD_RW=P1^1;        // 讀寫選擇端                           
  19. sbit LCD_EN=P1^2;        // 使能信號                                    
  20. sbit LCD_PSB=P1^6;           // 并/串選擇                                   
  21. sbit beep=P3^1;                                                                                 
  22.                                                                                                          
  23. void shaomiao();                                                                         //矩陣鍵盤掃描
  24. void delay(uint);                                                                        // 延時函數
  25. void lcd_init();                                                                        // 12864初始化
  26. void write_cmd(uchar);                                                                //
  27. void write_dat(uchar);                                                                //
  28. void lcd_pos(uchar,char);                                                         //
  29. void show();                                                                                // 在12864上顯示
  30.                                                                                                    //
  31. void main()                                                                                   //
  32. {        
  33.         s=5;                                                                                //輸錯密碼次數
  34.         lcd_init();                                                                          //
  35.         while(1)                                                                         //
  36.         {                                                                                         //
  37.          show();                                                                         //
  38.          shaomiao();                                                                 //
  39.         }                                                                                         //
  40. }                                                                                                 //
  41.                                                                                                 //
  42. void show()                                                                                //
  43. {        uint i,m;                                                                        //
  44.         m=0;                                                                                //
  45.         lcd_pos(0,0);                                                                //
  46.         i=0;                                                                                //
  47.         while(table2[i]!='\0')                                                //
  48.          {write_dat(table2[i]);i++;}                                //
  49.         shaomiao();                                                                        //
  50.         if(num>0)                                                                        // 輸入密碼
  51.          {                                                                                        //
  52.                 lcd_pos(1,num-1);                                                //
  53.                 write_dat(table1[k]);                                        //
  54.                 Cipher1[num]=k;
  55.          }                                                                                   //刪除上一個數據
  56.          if(b==1)
  57.          {
  58.                  lcd_pos(1,num-1);
  59.                 write_dat('\0');
  60.                 num--;
  61.                 k=Cipher1[num];
  62.                 b=0;
  63.                 while(num<1) {shaomiao();b=0;}
  64.         }
  65. //        while(num>2) {num=3;shaomiao();if(c==1) m=4;if(m==4){c=0;break;}}

  66.         while(c==1)                                 //判斷密碼是否正確
  67.         {
  68.                 for(i=0;i<8;i++)
  69.                  {lcd_pos(0,i);write_dat(table1[11]);lcd_pos(1,i);write_dat(table1[11]);}
  70.                    while((Cipher1[1]==Cipher2[1])&(Cipher1[2]==Cipher2[2])&(Cipher1[3]==Cipher2[3]))
  71.                 {        
  72.                         c=0;s=5;
  73.                         shaomiao();
  74.                         lcd_pos(0,0);
  75.                         i=0;
  76.                         while(table3[i]!='\0')
  77.                          {write_dat(table3[i]);i++;}
  78.                         if(c==1) {m=3;Cipher1[1]=Cipher1[2]=Cipher1[3]='\0';break;}
  79.                 }
  80.                 if(m!=3)
  81.                 {
  82.                         s--;
  83.                         while(!((Cipher1[1]==Cipher2[1])&(Cipher1[2]==Cipher2[2])&(Cipher1[3]==Cipher2[3])))
  84.                          {
  85.                                  c=0;beep=0;delay(500);
  86.                                 shaomiao();
  87.                                 lcd_pos(0,0);
  88.                                 i=0;
  89.                                 while(table5[i]!='\0')
  90.                                   {write_dat(table5[i]);i++;}
  91.                                 lcd_pos(0,2);
  92.                                 write_dat(table1[s]);
  93.                                 write_dat('\0');
  94.                                 lcd_pos(0,3);
  95.                                 i=0;
  96.                                 while(table8[i]!='\0')
  97.                                   {write_dat(table8[i]);i++;}
  98.                                 while(s<1)
  99.                                 {        lcd_pos(0,0);i=0;
  100.                                         while(table9[i]!='\0')
  101.                                           {write_dat(table9[i]);i++;}
  102.                                 }
  103.                                 if(c==1) {m=4;break;}
  104.                          }
  105.                 }
  106.                 if(m==3|m==4) {a=0;b=0;c=0;num=0;}
  107.         }
  108.         
  109.          while(a==1)                                //修改密碼
  110.          {        num=0;
  111.                  for(i=0;i<8;i++)
  112.                  {lcd_pos(1,i);write_dat(table1[11]);}
  113.                 lcd_pos(0,0);
  114.                 i=0;
  115.                 while(table6[i]!='\0')
  116.                   {write_dat(table6[i]);i++;}
  117.                 shaomiao();
  118.                 while(num>0)                                        //輸入當前密碼正確后才可以修改
  119.                  {        shaomiao();
  120.                         lcd_pos(1,num-1);
  121.                         write_dat(table1[k]);
  122.                         Cipher1[num]=k;
  123.                         if(b==1)
  124.                          {
  125.                                  lcd_pos(1,num-1);
  126.                                 write_dat(table1[11]);
  127.                                 num--;
  128.                                 k=Cipher1[num];
  129.                                 b=0;
  130.                          }         
  131.                         while(c==1)
  132.                         {        
  133.                                 num=0;
  134.                                 shaomiao();
  135.                                 for(i=0;i<8;i++)
  136.                                  {lcd_pos(0,i);write_dat(table1[11]);lcd_pos(1,i);write_dat(table1[11]);}
  137.                                 while((Cipher1[1]==Cipher2[1])&(Cipher1[2]==Cipher2[2])&(Cipher1[3]==Cipher2[3]))
  138.                                 {         
  139.                                         c=0;s=5;
  140.                                         lcd_pos(0,0);
  141.                                         i=0;
  142.                                         while(table7[i]!='\0')
  143.                                           {write_dat(table7[i]);i++;}
  144.                                         shaomiao();
  145.                                         while(num>0)
  146.                                          {
  147.                                                 shaomiao();
  148.                                                 lcd_pos(1,num-1);
  149.                                                 write_dat(table1[10]);
  150.                                                 Cipher2[num]=k;
  151.                                                  if(b==1)
  152.                                                  {
  153.                                                  lcd_pos(1,num-1);
  154.                                                 write_dat(table1[11]);
  155.                                                 num--;
  156.                                                 b=0;
  157.                                                 }
  158.                                                 while(num<1) {shaomiao();b=0;}
  159.                                                 m=1;
  160.                                                 if(c==1) break;
  161.                                         }
  162.                                         if(m==1)
  163.                                         {        a=0;b=0;c=0;num=0;
  164.                                                 for(i=0;i<8;i++)
  165.                                                  {lcd_pos(0,i);write_dat(table1[11]);lcd_pos(1,i);write_dat(table1[11]);}
  166.                                         }
  167.                                 }
  168.                                 if(m!=1)
  169.                                 {        s--;
  170.                                         while(!((Cipher1[1]==Cipher2[1])&(Cipher1[2]==Cipher2[2])&(Cipher1[3]==Cipher2[3])))
  171.                                         {
  172.                                                 c=0;
  173.                                                 beep=0;delay(500);
  174.                                                 shaomiao();
  175.                                                 lcd_pos(0,0);
  176.                                                 i=0;
  177.                                                 while(table5[i]!='\0')
  178.                                                   {write_dat(table5[i]);i++;}
  179.                                                 lcd_pos(0,2);
  180.                                                 write_dat(table1[s]);
  181.                                                 write_dat('\0');
  182.                                                 lcd_pos(0,3);
  183.                                                 i=0;
  184.                                                 while(table8[i]!='\0')
  185.                                                   {write_dat(table8[i]);i++;}
  186.                                                 while(s<1)                                            //輸錯5次鎖死系統
  187.                                                 {        
  188.                                                         lcd_pos(0,0);i=0;
  189.                                                         while(table9[i]!='\0')
  190.                                                           {write_dat(table9[i]);i++;}
  191.                                                 }
  192.                                                 m=2;
  193.                                                 if(c==1) break;
  194.                                         }
  195.                                 }
  196.                         if(m==1|m==2) c=0;
  197.                         }
  198.                 }
  199.          }
  200. }
  201. //寫指令數據到LCD
  202. void write_cmd(char cmd)
  203. {
  204.         LCD_RS=0;
  205.         LCD_RW=0;
  206.         LCD_EN=0;
  207.         P0=cmd;         
  208.         delay(5);
  209.         LCD_EN=1;
  210.         delay(5);
  211.         LCD_EN=0;
  212. }
  213. //寫顯示數據到LCD
  214. void write_dat(char dat)
  215. {
  216.         LCD_RS=1;
  217.         LCD_RW=0;
  218.         LCD_EN=0;
  219.         P0=dat;
  220.         delay(5);
  221.         LCD_EN=1;
  222.         delay(5);
  223.         LCD_EN=0;        
  224. }
  225. //設定顯示位置
  226. void lcd_pos(char x,char y)
  227. {
  228.         uchar pos;
  229.         if(x==0)
  230.         {x=0x80;}
  231.         else if(x==1)
  232.         {x=0x90;}
  233.         else if(x==2)
  234.         {x=0x88;}
  235.         else if(x==3)
  236.         {x=0x98;}
  237.         pos=x+y;
  238.         write_cmd(pos);    //顯示的地址
  239. }
  240. //12864初始化
  241. void lcd_init()//12864初始化
  242. {
  243.         LCD_PSB=1;                                //并口模式
  244.         write_cmd(0x30);                //基本指令操作
  245.         delay(5);
  246.         write_cmd(0x0c);                //顯示開,光標關
  247.         delay(5);
  248.         write_cmd(0x01);                //消除所有顯示
  249.         delay(5);
  250. }

  251. void shaomiao()
  252. {
  253.         uchar t;
  254.         P3=0xdf;
  255.         t=P3;
  256.         t=t&0x1c;
  257.         if(t!=0x1c)
  258.         {
  259.                 delay(10);
  260.                 t=P3;
  261.                 t=t&0x1c;
  262.                 if(t!=0x1c)
  263.                  {
  264.                          t=P3;
  265.                         switch(t)
  266.                         {
  267.                                 case 0xdb:k=1;num++;break;
  268.                                 case 0xd7:k=2;num++;break;
  269.                                 case 0xcf:k=3;num++;break;
  270.                                 default:  break;
  271.                         }
  272.                         while(t!=0x1c)
  273.                         {
  274.                                 t=P3;
  275.                                 t=t&0x1c;
  276.                         }
  277.                  }
  278.         }
  279.         P3=0xbf;
  280.         t=P3;
  281.         t=t&0x1c;
  282.         if(t!=0x1c)
  283.         {
  284.                 delay(10);
  285.                 t=P3;
  286.                 t=t&0x1c;
  287.                 if(t!=0x1c)
  288.                  {
  289.                          t=P3;
  290.                         switch(t)
  291.                         {
  292.                                 case 0xbb:a=1;break;
  293.                                 case 0xb7:b=1;break;
  294.                                 case 0xaf:c=1;break;
  295.                                 default:  break;
  296.                         }
  297.                         while(t!=0x1c)
  298.                         {
  299.                                 t=P3;
  300.                                 t=t&0x1c;
  301.                         }
  302.                  }
  303.         }        
  304. }
  305. void delay(uint z)
  306. {
  307.         uint x,y;
  308.         for(x=z;x>0;x--)
  309.          for(y=110;y>0;y--);
  310. } [/hide]因為我的單片機的矩陣鍵盤只有六個鍵 于是上面的三個作為數據  下面三個一個是修改密碼 ,清除鍵 ,確定鍵 功能和手機的解鎖功能一樣
  311. #include<stc12.h>  //頭文件我用的(stc12c5a60s2)
  312. #define uint unsigned int          //
  313. #define uchar unsigned char          //
  314. uint k,num,a,b,c,s; //num數據顯示的位置 abc用于跳出while()循環 s數據輸錯的次數
  315. uchar code table1[12]={"0123456789*"};       //
  316. uchar code table2[]={"請輸入密碼:"};       //
  317. uchar code table3[]={"密碼證確!"}; //因為我的12864顯示“正”亂碼于是就用“證”
  318. uchar code table4[]={"密碼錯誤!"};       //
  319. uchar code table5[]={"還有"};        //
  320. uchar code table6[]={"請輸入當前密碼:"};      //
  321. uchar code table7[]={"修改后的密碼:"};
  322. uchar code table8[]={"次機會"};
  323. uchar code table9[]={"系統已經鎖死"};       //
  324. uint Cipher1[5];   //儲存你所輸入的數據      
  325. uint Cipher2[5]={0,1,2,3,4,};//儲存密碼(初始密碼123)         
  326.                
  327. sbit LCD_RS=P1^0;        // 數據/命令選擇端        
  328. sbit LCD_RW=P1^1;        // 讀寫選擇端      
  329. sbit LCD_EN=P1^2;        // 使能信號        
  330. sbit LCD_PSB=P1^6;    // 并/串選擇      
  331. sbit beep=P3^1;           
  332.               
  333. void shaomiao();          //矩陣鍵盤掃描
  334. void delay(uint);         // 延時函數
  335. void lcd_init();         // 12864初始化
  336. void write_cmd(uchar);        //
  337. void write_dat(uchar);        //
  338. void lcd_pos(uchar,char);        //
  339. void show();          // 在12864上顯示
  340.                //
  341. void main()             //
  342. {
  343. s=5;          //輸錯密碼次數
  344. lcd_init();           //
  345. while(1)          //
  346. {            //
  347.   show();          //
  348.   shaomiao();         //
  349. }            //
  350. }
  351. //部分代碼
復制代碼

電子密碼鎖.zip

32.09 KB, 下載次數: 417, 下載積分: 黑幣 -5

大家如果感覺好就給點分

評分

參與人數 6威望 +55 黑幣 +58 收起 理由
caiyuejian + 5 + 5 贊一個!
瑞雪 + 5 + 5
黑暗主宰 + 5 + 5 很給力!
daliu + 6 + 6 絕世好帖!
liuz + 24 + 27 贊一個!
hujia + 10 + 10 很給力!

查看全部評分

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

使用道具 舉報

沙發
ID:26188 發表于 2014-8-31 16:42 | 只看該作者
根據io接好就行吧,,問下 12864 是帶字庫的嗎? 什么驅動芯片的12864液晶?
回復

使用道具 舉報

板凳
ID:50962 發表于 2014-8-31 16:45 | 只看該作者
果然很給力啊   要是有圖就好了
回復

使用道具 舉報

地板
ID:65608 發表于 2014-8-31 16:48 | 只看該作者
同求 12864液晶的型號???
回復

使用道具 舉報

5#
ID:63839 發表于 2014-8-31 19:56 | 只看該作者
hujia 發表于 2014-8-31 16:42
根據io接好就行吧,,問下 12864 是帶字庫的嗎? 什么驅動芯片的12864液晶?

帶字庫的
回復

使用道具 舉報

6#
ID:63839 發表于 2014-8-31 19:56 | 只看該作者
daliu 發表于 2014-8-31 16:48
同求 12864液晶的型號???

QC pass
回復

使用道具 舉報

7#
ID:63839 發表于 2014-8-31 19:57 | 只看該作者
liuz 發表于 2014-8-31 16:45
果然很給力啊   要是有圖就好了

根據I/O就知道大概原理圖了  就用到矩陣鍵盤和12864
回復

使用道具 舉報

8#
ID:64888 發表于 2014-9-1 13:03 | 只看該作者
贊一個
回復

使用道具 舉報

9#
ID:65680 發表于 2014-9-1 21:16 | 只看該作者
看起來很牛的樣子,新人學習
回復

使用道具 舉報

10#
ID:51024 發表于 2014-9-2 01:26 | 只看該作者
牛人大作啊 值得仔細研讀.
回復

使用道具 舉報

11#
ID:63427 發表于 2014-9-14 21:34 | 只看該作者
學習學習
回復

使用道具 舉報

12#
ID:66462 發表于 2014-9-21 20:18 | 只看該作者
學習了
回復

使用道具 舉報

13#
ID:66811 發表于 2014-9-29 18:07 | 只看該作者
有沒有成品?
回復

使用道具 舉報

14#
ID:63839 發表于 2014-9-30 14:28 | 只看該作者

拆了!
回復

使用道具 舉報

15#
ID:60246 發表于 2014-10-6 10:02 | 只看該作者
謝謝分享
回復

使用道具 舉報

16#
ID:49065 發表于 2014-10-8 15:40 | 只看該作者
點個贊。
回復

使用道具 舉報

17#
ID:67111 發表于 2014-10-8 21:37 | 只看該作者
看哈有成果沒有
回復

使用道具 舉報

18#
ID:55219 發表于 2014-10-11 14:17 | 只看該作者
不錯不錯~~~~~good!
回復

使用道具 舉報

19#
ID:65318 發表于 2014-10-11 22:42 | 只看該作者
新人學習
回復

使用道具 舉報

20#
ID:61475 發表于 2014-10-11 22:58 | 只看該作者
來看看,學習了。
回復

使用道具 舉報

21#
ID:51348 發表于 2014-10-16 01:52 | 只看該作者
很好  學習  謝謝
回復

使用道具 舉報

22#
ID:65403 發表于 2014-10-19 09:25 | 只看該作者
要是有圖就好了
回復

使用道具 舉報

23#
ID:58625 發表于 2014-10-19 13:38 | 只看該作者
學習下
回復

使用道具 舉報

24#
ID:58624 發表于 2014-10-20 10:13 | 只看該作者
很好很強大
回復

使用道具 舉報

25#
ID:65965 發表于 2014-10-21 11:47 | 只看該作者
好好 好 好  好 好 好 好 好
回復

使用道具 舉報

26#
ID:50751 發表于 2014-11-3 09:30 | 只看該作者
贊一個
回復

使用道具 舉報

27#
ID:68432 發表于 2014-11-6 12:45 | 只看該作者
我是新加入的,想下點東西但是M幣不夠,想問下怎樣可以獲得M幣啊?求指教
回復

使用道具 舉報

28#
ID:68589 發表于 2014-11-10 16:22 | 只看該作者
非常感謝樓主!
回復

使用道具 舉報

29#
ID:68625 發表于 2014-11-12 23:03 | 只看該作者
好東西,謝謝分享
回復

使用道具 舉報

30#
ID:69124 發表于 2014-11-20 19:59 | 只看該作者
看看               
回復

使用道具 舉報

31#
ID:61200 發表于 2014-11-29 09:01 | 只看該作者
看看                             
回復

使用道具 舉報

32#
ID:69747 發表于 2014-12-1 12:10 | 只看該作者
PCBPCBPCBPCB
回復

使用道具 舉報

33#
ID:69783 發表于 2014-12-1 19:32 | 只看該作者
謝謝分享       收下了
回復

使用道具 舉報

34#
ID:69781 發表于 2014-12-1 22:29 | 只看該作者
樓主掉啊
回復

使用道具 舉報

35#
ID:69706 發表于 2014-12-8 14:09 | 只看該作者
進來逛逛!!!!!!!!!!
回復

使用道具 舉報

36#
ID:70267 發表于 2014-12-18 17:30 | 只看該作者
學習一下
回復

使用道具 舉報

37#
ID:70737 發表于 2014-12-19 16:19 | 只看該作者
不錯開始學習
回復

使用道具 舉報

38#
ID:71889 發表于 2015-1-8 23:59 | 只看該作者
贊一個
回復

使用道具 舉報

39#
ID:71891 發表于 2015-1-9 01:00 來自手機 | 只看該作者
不用at24c02,修改密碼后怎么掉電存儲
回復

使用道具 舉報

40#
ID:63171 發表于 2015-1-9 21:57 | 只看該作者

很好  學習  謝謝
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕国产第一页 | 国产成人一区二区三区精 | 亚洲一区在线观看视频 | 91精品国产色综合久久不卡98 | 亚洲视频免费观看 | 精品久久久一区 | 天天看天天爽 | 九九综合九九 | 成人夜晚看av| 日韩精品在线网站 | 成人在线免费观看av | 久久精品播放 | 欧美一级毛片在线播放 | 国产中文视频 | 国产高清性xxxxxxxx | 国产精品免费av | 国产精品综合视频 | 欧美成年人视频在线观看 | 欧美一区二区三区电影 | 国产免费一区二区三区网站免费 | 成人免费在线视频 | 国产精品一区二区三区在线 | 亚洲精品免费在线 | 日韩欧美三级电影在线观看 | 亚洲黄色av | 精品一区国产 | 4h影视| 2019精品手机国产品在线 | 日韩av在线免费 | 午夜视频免费在线观看 | 视频一区在线观看 | 精品久久久久国产免费第一页 | 神马久久春色视频 | 亚洲电影一区二区三区 | 久艹av| 精品视频一区二区三区 | 午夜精品在线观看 | 欧美日韩在线观看一区二区三区 | 五月激情综合 | 成人欧美一区二区三区在线观看 | 激情麻豆视频 |