欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 基于51單片機的密碼鎖代碼 [打印本頁]

作者: longyanzhang    時間: 2019-12-28 11:50
標(biāo)題: 基于51單片機的密碼鎖代碼
2、測試數(shù)據(jù)(表格)
  
輸入數(shù)字
  
LED燈
蜂鳴器
液晶顯示屏
  
000000(初始密碼)
  
全亮
不響
code correct!
  
10000
  
不亮
code wrong!
  
30000
  
不亮
code wrong!
  
  
12345
  

  
順次亮滅

  
code wrong!
  
wrong 3 times
  
lock the screen

3、數(shù)據(jù)分析和結(jié)論
   從實驗的數(shù)據(jù)來看,當(dāng)密碼正確時,LED燈全部亮,蜂鳴器不響,液晶顯示屏上顯示“code correct!”。當(dāng)密碼不正確時,LED燈不亮,蜂鳴器響,液晶顯示屏上顯示“code wrong!”。當(dāng)三次輸錯密碼時,LED燈順次亮滅,蜂鳴器響,液晶顯示屏上顯示“code wrong! wrong 3 times lock the screen”屏幕上鎖。
綜上所述此簡易密碼鎖完成了密碼設(shè)置功能、密碼輸入開鎖功能、輸入錯誤報警功能、輸入錯誤鎖屏功能。
五、系統(tǒng)使用說明
1、系統(tǒng)外觀及接口說明(實物照片)
程序?qū)懭牒螅螺d程序到單片機,要給單片機斷電(約1 秒即可),然后給單片機上電,上電之后,會把程序燒寫到單片機內(nèi)部。兩條數(shù)據(jù)線把單片機和電腦USB接口連接。下面為系統(tǒng)外觀及接口實物圖。
2、系統(tǒng)操作使用說明
獨立按鍵S1:選擇按鈕,可實現(xiàn)光標(biāo)左右移動進(jìn)而設(shè)置密碼。
獨立按鍵S2:選擇按鈕,可實現(xiàn)光標(biāo)左右移動進(jìn)而設(shè)置密碼。
獨立按鍵S3:確定按鈕,以確定密碼。
獨立按鍵S4:加法按鈕,可設(shè)置密碼。
獨立按鍵S5:減法按鈕,可設(shè)置密碼。
簡易密碼鎖的初始密碼為000000,用戶可以對其進(jìn)行重新設(shè)置。當(dāng)用戶輸入密碼時,若密碼正確,LED燈全部亮,蜂鳴器不響,液晶顯示屏上顯示“code correct!”。當(dāng)密碼不正確時,LED燈不亮,蜂鳴器響,液晶顯示屏上顯示“code wrong!”。當(dāng)三次輸錯密碼時,LED燈順次亮滅,蜂鳴器響,液晶顯示屏上顯示“code wrong! wrong 3times lock the screen”屏幕上鎖。

單片機源程序如下:
  1. #include<reg52.h>
  2.         #define        uchar unsigned char
  3.         #define uint  unsigned int
  4.            sbit Key1 = P3^7;
  5.         sbit Key2 = P3^6;       
  6.         sbit Key3 = P3^5;
  7.         sbit Key4 = P3^4;
  8.         sbit Key5 = P3^3;
  9.         sbit Key6 = P3^2;
  10.         sbit RS = P1^0;
  11.         sbit RW = P1^1;
  12.         sbit EN = P1^2;       
  13.         uchar K1num = 0;                 //控制主界面選項
  14.         uchar K2num = 0;                 //控制密碼位數(shù)
  15.         uchar wrong_num = 0;         //記錄密碼錯誤次數(shù)
  16.         uchar interface = 0;         //各個界面的標(biāo)志位         1.主界面2.輸入密碼3.設(shè)置密碼4.重置密碼
  17.     uchar code main1[] = {"1.input code"};
  18.         uchar code main2[] = {"2.reset code"};
  19.         uchar code input[] = {"input your code:"};
  20.         uchar code reset[] = {"input new code:"};
  21.         uchar code code_correct[] = {"code correct!"};
  22.         uchar code code_wrong[] = {"code wrong!"};
  23.         uchar code lockscreen1[] = {"wrong 3 times"};
  24.         uchar code lockscreen2[] = {"lock the screen"};
  25.         uchar code_display[] = {"000000"};
  26.         uchar code_true[] = {"000000"};
  27.         void keyscan();            //按鍵掃描函數(shù)
  28.         void KeyInit();                //按鍵初始化
  29.         void codeinit();        //顯示密碼初始化函數(shù)
  30.         void savecode();        //保存密碼函數(shù)
  31.         char judgecode();        //判斷密碼函數(shù)
  32.         void delay(unsigned int ms);                  //延時函數(shù)
  33.         void write_date(unsigned char date);  //寫數(shù)據(jù)函數(shù)
  34.         void write_com(unsigned char com);    //寫指令函數(shù)
  35.         void LCD_init();                                          //屏幕初始化函數(shù)
  36.         void LCD_main();                                          //顯示主界面
  37.         void LCD_inputcode();                                  //顯示輸入密碼界面
  38.         void LCD_resetcode();                                  //顯示重置密碼界面
  39.         void LCD_setcode();                                          //顯示設(shè)置密碼界面
  40.         void LCD_codeture();                                  //顯示密碼正確界面函數(shù)
  41.         void LCD_codewrong();                                  //顯示密碼錯誤界面函數(shù)
  42.         void LCD_lockscreen();                                  //顯示鎖屏界面函數(shù)
  43. //***************延時函數(shù)********************************
  44.         void delay(uint ms)
  45.         {
  46.                 int i,j;
  47.                 for(i = 0;i < ms; i++)
  48.                         for(j = 0;j < 110;j++);
  49.         }
  50. //***************顯示密碼初始化函數(shù)**********************
  51.         void codeinit()
  52.         {
  53.                 int i;
  54.                 for(i = 0; i < 6; i++)
  55.                                 code_display[i] = '0';
  56.         }
  57. //***************保存密碼函數(shù)**********************
  58.         void savecode()
  59.         {
  60.                 int i;
  61.                 for(i = 0; i < 6; i++)
  62.                         code_true[i] = code_display[i];                               
  63.         }
  64. //***************判斷密碼函數(shù)**********************
  65.         char judgecode()
  66.         {
  67.                 int i;
  68.                 for(i = 0; i < 6;i++)
  69.                         {
  70.                                 if(code_true[i] != code_display[i])
  71.                                         break;
  72.                         }

  73.                 if(i < 6)
  74.                         return '0';
  75.                 else
  76.                         return '1';
  77.         }

  78. //***************按鍵初始化函數(shù)**********************
  79.         void KeyInit()
  80.         {
  81.           Key1 = 1;                 //給全部按鍵的io口賦高電平,等待檢測
  82.           Key2 = 1;
  83.           Key3 = 1;
  84.           Key4 = 1;
  85.           Key5 = 1;
  86.           Key6 = 1;
  87.         }
  88. //***************按鍵掃描函數(shù)**********************
  89.         void keyscan()          
  90.         {
  91.                 char x;
  92.                 if(Key1 == 0 )                 //Key1,菜單欄上下翻動按鍵
  93.                         {
  94.                                 delay(5);
  95.                                 if(Key1 == 0)
  96.                                         {
  97.                                                 K1num++;
  98.                                                 while(!Key1);
  99.                                                         if(K1num == 1)                 //當(dāng)K1按鍵第一次被按下,菜單1閃爍
  100.                                                                 {
  101.                                                                         write_com(0x80);        //設(shè)置光標(biāo)位置,1
  102.                                                                         write_com(0x0f);        //光標(biāo)閃爍
  103.                                                                 //        P2 = 0x0f;                        //測試用,下同
  104.                                                                 }
  105.                                                         if(K1num == 2)                 //當(dāng)K1按鍵第二次被按下,菜單2閃爍
  106.                                                                 {
  107.                                                                         write_com(0x80+0x40);  //設(shè)置光標(biāo)位置,2
  108.                                                                         write_com(0x0f);
  109.                                                                 //        P2 = 0xf0;
  110.                                                                 }
  111.                                                         if(K1num == 3)                 //當(dāng)K1按鍵第三次被按下,計數(shù)清零
  112.                                                                 {
  113.                                                                         K1num = 0;
  114.                                                                         write_com(0x0c);        //關(guān)閉光標(biāo)閃爍
  115.                                                                 //        P2 = 0xff;
  116.                                                                 }                               
  117.                                         }
  118.                         }
  119.                 if(Key2 == 0)                  //Key2,選擇鍵
  120.                         {
  121.                                 delay(10);
  122.                                 if(Key2 == 0)
  123.                                         {
  124.                                            while(!Key2);
  125.                                            switch(interface)           //判斷當(dāng)前處于哪一個界面
  126.                                                    {
  127.                                                         case 1 :          //主界面
  128.                                                                 {
  129.                                                                         if(K1num == 1)
  130.                                                                                 {
  131.                                                                                         K1num = 0;                 //key1計數(shù)清零
  132.                                                                                         codeinit();
  133.                                                                                         LCD_inputcode();                 //進(jìn)入輸入密碼界面
  134.                                                                                 }
  135.                                                                         if(K1num == 2)
  136.                                                                                 {
  137.                                                                                         K1num = 0;
  138.                                                                                         codeinit();
  139.                                                                                         LCD_resetcode();         //進(jìn)入重置密碼界面
  140.                                                                                 }
  141.                                                                 break;                                                               
  142.                                                                 }

  143.                                                         case 2 :         //輸入密碼界面

  144.                                                         case 3 :        //設(shè)置密碼界面

  145.                                                         case 4 :    //重置密碼界面
  146.                                                                 {
  147.                                                                         K2num ++;
  148.                                                                                 if(K2num == 6)
  149.                                                                                         K2num = 0;
  150.                                                                         write_com(0x80+0x40+K2num);                  //設(shè)置光標(biāo)位置
  151.                                                                         write_com(0x0f);
  152.                                                                  break;
  153.                                                                 }
  154.                                                                
  155.                                                                 default:break;
  156.                                                 }
  157.                                         }
  158.                         }
  159.                 if(Key3 == 0)                 //Key3,返回主界面鍵(確認(rèn)鍵)
  160.                         {
  161.                                 delay(10);
  162.                                 if(Key3 == 0)
  163.                                         {
  164.                                                 while(!Key3);        //等待按鍵釋放
  165.                                                 K2num = 0;                //重置K2按鍵次數(shù)

  166.                                                  if(interface == 2)  //若處于輸入密碼界面
  167.                                                         {
  168.                                                                 x = judgecode();
  169.                                                                 if(x == '1')                //需判斷密碼是否正確
  170.                                                                         {
  171.                                                                                  LCD_codeture();
  172.                                                                                 P2 = 0;                                //燈亮代表門開
  173.                                                                                 delay(2000);

  174.                                                                                 P2 = 0xff;
  175.                                                                                 LCD_main();                   //返回主界面
  176.                                                                         }
  177.                                                                 else
  178.                                                                         {
  179.                                                                                 LCD_codewrong();
  180.                                                                                 delay(2000);
  181.                                                                                 codeinit();
  182.                                                                                 LCD_inputcode();

  183.                                                                                 if(wrong_num >= 3)                 //錯誤三次鎖死屏幕并報警
  184.                                                                                 {
  185.                                                                                         LCD_lockscreen();
  186.                                                                                         while(wrong_num >= 3)          
  187.                                                                                                 {
  188.                                                                                                         P2 = 0xf0;         
  189.                                                                                                         delay(300);
  190.                                                                                                         P2 = 0x0f;
  191.                                                                                                         delay(300);                                                                                                                               
  192.                                                                                                 }
  193.                                                                                 }
  194.                                                                         }
  195.                                                         }
  196.                                                        
  197.                                                 if(interface == 4)        //若處于重置密碼界面
  198.                                                         {
  199.                                                                 savecode();        //需保存重置密碼
  200.                                                                 codeinit();

  201.                                                                 write_com(0xc0);   //關(guān)閉光標(biāo)閃爍
  202.                                                                 LCD_main();                   //返回主界面
  203.                                                         }                                               
  204.                                         }
  205.                         }               
  206.                 if(Key4 == 0)                //Key4,數(shù)值+1
  207.                         {                                                                          
  208.                                 delay(10);
  209.                                 if(Key4 == 0)
  210.                                         {
  211.                                                 while(!Key4);
  212.                                                 code_display[K2num] ++;

  213.                                                 if( code_display[K2num] > '9' )
  214.                                                                 code_display[K2num] = '0';
  215.                                                 if( code_display[K2num] < '0')
  216.                                                                 code_display[K2num] = '9';

  217.                                                  if(interface == 2)                //輸入密碼界面
  218.                                                                 LCD_inputcode();

  219.                                                  if(interface == 4)                //重置密碼界面
  220.                                                                 LCD_resetcode();
  221.                                         }
  222.                         }
  223.                 if(Key5 == 0)                //Key5,數(shù)值-1
  224.                         {
  225.                                 delay(10);
  226.                                 if(Key5 == 0)
  227.                                         {
  228.                                                 while(!Key5);
  229.                                                 code_display[K2num] --;

  230.                                                 if( code_display[K2num] > '9' )
  231.                                                                 code_display[K2num] = '0';
  232.                                                 if( code_display[K2num] < '0')
  233.                                                                 code_display[K2num] = '9';

  234.                                                  if(interface == 2)                //輸入密碼界面
  235.                                                                 LCD_inputcode();

  236.                                                  if(interface == 4)                //重置密碼界面
  237.                                                                 LCD_resetcode();                                       
  238.                                         }                       
  239.                         }
  240.                 if(Key6 == 0)
  241.                         {
  242.                                 delay(10);
  243.                                 if(Key6 == 0)
  244.                                         {
  245.                                                 while(!Key6);
  246.                                         }                               
  247.                         }
  248.         }
  249. //***************寫數(shù)據(jù)函數(shù)**********************       
  250.         void write_date(uchar date)  
  251.         {
  252.                 RS = 1;                  //確認(rèn)為寫數(shù)據(jù)模式
  253.                 delay(2);
  254.                 P0 = date;
  255.                 EN = 1;
  256.                 delay(5);
  257.                 EN = 0;
  258.         }

  259. //***************寫指令函數(shù)**********************
  260.         void write_com(uchar com)  
  261.         {
  262.                 RS = 0;                  //確認(rèn)為寫指令模式
  263.                 delay(2);
  264.                 P0 = com;
  265.                 EN = 1;
  266.                 delay(5);
  267.                 EN = 0;
  268.         }

  269. //***************LCD初始化函數(shù)**********************       
  270.         void LCD_init()
  271.         {
  272.                 RW = 0;          //只用到寫模式
  273.                 EN = 0;          //使能口賦低電平
  274.                 write_com(0x38);   //0011 1000        設(shè)置顯示模式:16*2顯示,八位數(shù)據(jù)接口
  275.                 write_com(0x0c);   //0000 1100        開顯示,不顯示光標(biāo)
  276.         //        write_com(0x0f);   //0000 1111  開顯示,顯示光標(biāo),光標(biāo)閃爍
  277.                 write_com(0x06);   //0000 0110        寫一個字符地址指針+1
  278.                 write_com(0x01);   //0000 0001        清屏
  279.         }

  280. //***************顯示主界面函數(shù)**********************
  281.         void LCD_main()
  282.         {
  283.                 int i;
  284.                 interface = 1;
  285.                 LCD_init();
  286.             write_com(0x80);                                //設(shè)定顯示位置為第一行首
  287.             for(i = 0;i < 12;i++)
  288.                                   write_date(main1[i]);
  289.        
  290.                   write_com(0x80+0x40);                        //設(shè)定顯示位置為第二行首
  291.                   for(i = 0;i < 12;i++)
  292.                                   write_date(main2[i]);               
  293.         }

  294. //***************顯示輸入密碼界面函數(shù)**********************
  295.         void LCD_inputcode()
  296.         {
  297.                 int i;
  298.                 interface = 2;
  299.                 write_com(0x80);                                //設(shè)定顯示位置為第一行首
  300.                 write_com(0x01);                                //清屏
  301.                 for(i = 0;i < 16;i++)
  302.                         write_date(input[i]);               
  303.                
  304.                 write_com(0x80+0x40);                        //地址指針指向第二行
  305.                 for(i = 0;i < 6;i++)
  306.                         write_date(code_display[i]);

  307.                 write_com(0x80+0x40+K2num);                        //地址指針指向第二行
  308.                 write_com(0x0f);                                //開光標(biāo)閃爍
  309.         }

  310. //***************顯示重置密碼界面函數(shù)**********************
  311.         void LCD_resetcode()
  312.         {
  313.                 int i;
  314.                 interface = 4;
  315.                 write_com(0x80);                                //設(shè)定顯示位置為第一行首
  316.                 write_com(0x01);                                //清屏
  317.                 for(i = 0;i < 15;i++)
  318.                         write_date(reset[i]);
  319.                                        
  320.                 write_com(0x80+0x40);                        //地址指針指向第二行
  321.                 for(i = 0;i < 6;i++)
  322.                         write_date(code_display[i]);

  323.                 write_com(0x80+0x40+K2num);
  324.                 write_com(0x0f);                                //開光標(biāo)閃爍
  325.         }

  326. //***************顯示設(shè)置密碼界面函數(shù)**********************
  327.         void LCD_setcode()
  328.         {
  329.         //        int i;
  330.                 interface = 3;
  331.         }
  332. //***************顯示密碼正確界面函數(shù)**********************
  333.         void LCD_codeture()
  334.         {
  335.                 int i;
  336.                 write_com(0x01);
  337.                 write_com(0x0c);   //關(guān)閉光標(biāo)閃爍

  338.                 write_com(0x80);
  339.                 for(i = 0; i < 13;i++)
  340.                         write_date(code_correct[i]);
  341.         }

  342. //***************顯示密碼錯誤界面函數(shù)**********************
  343.         void LCD_codewrong()
  344.         {
  345.                 int i;
  346.                 wrong_num ++;
  347.                 write_com(0x01);               
  348.                 write_com(0x0c);   //關(guān)閉光標(biāo)閃爍

  349.                 write_com(0x80);
  350.                 for(i = 0; i < 11;i++)
  351.                         write_date(code_wrong[i]);       
  352.         }

  353. //***************顯示鎖屏界面函數(shù)**********************
  354.         void LCD_lockscreen()
  355.         {
  356.                 int i;

  357.                 write_com(0x01);
  358.                 write_com(0x0c);   //關(guān)閉光標(biāo)閃爍

  359.                 write_com(0x80);
  360.                 for(i = 0; i < 13;i++)
  361.                         write_date(lockscreen1[i]);

  362.                 write_com(0x80+0x40);
  363.                 for(i = 0; i < 15;i++)
  364.                         write_date(lockscreen2[i]);
  365.         }
復(fù)制代碼

所有程序51hei提供下載:
密碼鎖.zip (39.13 KB, 下載次數(shù): 42)



作者: Jwh123    時間: 2020-6-29 20:26
nice 感謝樓主的分享




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1