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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

我的單片機設計,里面包含proteus仿真和程序代碼

[復制鏈接]
跳轉到指定樓層
樓主
簡易密碼鎖設計,bug比較多

單片機源程序如下:
  1. /**************************************************************                                                  *
  2. 功能:通過軟件程序設置密碼,初始密碼為123456,當按鍵按下之后  *
  3.           再按下確認鍵,如果密碼正確,則綠燈亮,舵機旋轉90度,如果*
  4.           密碼錯誤,紅燈亮,短暫延時后,數碼管清零,紅燈滅,重新輸*
  5.           入密碼。                                                                                                  *
  6. *//************************************************************/


  7. /****************************************************************/
  8.                                                                                                                                  
  9. #include <reg51.h>                                                                                                

  10. #define uchar unsigned char
  11. #define uint  unsigned int

  12. sbit P2_0 = P2^0;
  13. sbit P2_1 = P2^1;
  14. sbit P2_2 = P2^2;
  15. sbit P2_3 = P2^3;
  16. sbit P2_4 = P2^4;
  17. sbit P2_5 = P2^5;
  18. sbit P2_6 = P2^6;
  19. sbit P3_6 = P3^6;
  20. sbit LED_G = P3^0;
  21. sbit LED_R = P3^1;
  22. sbit beep = P3^7;

  23. uint tab[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
  24. uchar h,l,s,o,zhengque,m = 0,v = 1,w = 0,n = 1,keyval_0 ,keyval_1,keyval_2,keyval_3,
  25. keyval_4,keyval_5,keyval_6,keyval_7,keyval_8,keyval_9,keyval_10,keyval_11,keyval_12,
  26. keyval_13,keyval_14,keyval_15,keyval,temp = 0x01;


  27. void delay(uint z)
  28. {
  29.         uint x , y;
  30.         for(x = z ; x > 0 ; x--)
  31.                 for(y = 114 ; y > 0 ; y--);
  32. }
  33. //有參延時

  34. void key_scan1()
  35. {
  36.         
  37.     P1=0x0f;//檢測是哪一行有按鍵按下;
  38.     if(P1!=0x0f)
  39.     {
  40.         delay(10);
  41.         if(P1!=0x0f)
  42.         {
  43.                         beep = ~beep;
  44.             P1=0x0f;
  45.             switch(P1)
  46.             {
  47.                 case(0x0e):h=1;break;
  48.                 case(0x0d):h=2;break;
  49.                 case(0x0b):h=3;break;
  50.                 case(0x07):h=4;break;
  51.             }
  52.         }
  53.         P1=0xf0;//檢測是哪一列有按鍵按下
  54.         switch(P1)
  55.         {
  56.             case(0xe0):l=1;break;
  57.             case(0xd0):l=2;break;
  58.             case(0xb0):l=3;break;
  59.             case(0x70):l=4;break;
  60.         }
  61.         while(P1!=0xf0);//當按鍵復位時  
  62.                
  63.                 w++;
  64.                 beep = ~beep;
  65.                
  66.                 //按一次第一個數碼管顯示,按兩次前兩個數碼管顯示......         
  67.     }
  68.         
  69. }

  70. void shuru()
  71. {

  72.         P2 = 0Xc0;
  73.         //P0 = 0XBF;
  74.         
  75.         while(v)
  76.         {
  77.                
  78.            key_scan1();
  79.            s = 5*h + l;//行列進行線性運算,通過判斷s的值來判斷對應按鍵
  80.            switch(s)
  81.            {
  82.                            case(9):keyval = 0;keyval_0 = 0;break;
  83.             case(8):keyval = 1;keyval_1 = 1;break;                                                                        
  84.             case(7):keyval = 2;keyval_2 = 2;break;                        
  85.             case(6):keyval = 3;keyval_3 = 3;break;
  86.                         case(14):keyval = 4;keyval_4 = 4;break;                        
  87.                         case(13):keyval = 5;keyval_5 = 5;break;        
  88.             case(12):keyval = 6;keyval_6 = 6;break;
  89.             case(11):keyval = 7;keyval_7 = 7;break;
  90.                         case(19):keyval = 8;keyval_8 = 8;break;
  91.             case(18):keyval = 9;keyval_9 = 9;break;
  92.                         case(17):keyval = 10;keyval_10 = 10;break;
  93.             case(16):keyval = 11;keyval_11 = 11;break;
  94.             case(24):keyval = 12;keyval_12 = 12;break;
  95.             case(23):keyval = 13;keyval_13 = 13;break;
  96.                         case(22):keyval = 14;keyval_14 = 14;break;
  97.             case(21):keyval = 15;keyval_15 = 15;break;                           
  98.            }
  99.            
  100.            switch(w)
  101.            {
  102.                    case 1:        P2_0 = 1;P0 = tab[keyval];delay(100);P2_0 = 0;break;
  103.                 case 2:        P2_1 = 1;P0 = tab[keyval];delay(100);P2_1 = 0;break;
  104.                 case 3:        P2_2 = 1;P0 = tab[keyval];delay(100);P2_2 = 0;break;
  105.                 case 4:        P2_3 = 1;P0 = tab[keyval];delay(100);P2_3 = 0;break;
  106.                 case 5:        P2_4 = 1;P0 = tab[keyval];delay(100);P2_4 = 0;break;
  107.                 case 6:        P2_5 = 1;P0 = tab[keyval];delay(100);P2_5 = 0;break;               
  108.            }
  109.            if(P2_6 == 0)
  110.            delay(10);
  111.            if(P2_6 == 0)
  112.            v = 0;
  113.                            
  114.         }  //依次輸入密碼        
  115. }



  116. void main()
  117. {        
  118.         beep = 0;
  119.         shuru();
  120.         zhengque = ((keyval_1==1)&(keyval_2==2)&(keyval_3==3)&(keyval_4==4)&(keyval_5==5)&(keyval_6==6));//設置的密碼        
  121.         if(P2_6 == 0)
  122.         {
  123.                 delay(10);
  124.                 if(P2_6 == 0)         //確認鍵按下時,判斷密碼是否正確
  125.                 {
  126.                   if(zhengque)
  127.                   {
  128.                            LED_G = 0;
  129.                          delay(1000);
  130.                          LED_G = 1;
  131.                          EA = 1;
  132.                          IT0 = 1;
  133.                          TMOD = 0X01;
  134.                          TH0 = (60536%256);
  135.                          TL0 = (60536/256);
  136.                         while(n)
  137.                         {
  138.                                 P3_6 = 0;
  139.                         }                 
  140.                   }
  141.                   else
  142.                   {
  143.                   for(o = 0 ; o < 10 ; o++)
  144.                   {
  145.                           LED_R = 0;
  146.                         beep = ~beep;
  147.                         delay(300);
  148.                         LED_R = 1;
  149.                                                                         
  150.                         
  151.                         }
  152.                   }
  153.                 }
  154.         }                                            
  155. }
  156.         
  157. void timer0() interrupt 1  //定時器0控制舵機的PWM
  158. {
  159.         TH0 = (60536%256);
  160.         TL0 = (60536/256);
  161.         m++;
  162.         if(m == 5)
  163. {
  164.         P3_6 = 1;
  165.         m = 0;
  166.         n = 0;
  167. }
  168. }

  169. /*****************************************************************/

復制代碼

Keil代碼與Proteus仿真下載: 1.zip (116.53 KB, 下載次數: 10)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 毛片链接 | 久久中文字幕一区 | 日韩欧美网 | 亚洲中午字幕 | 在线观看国产视频 | 99精品久久| 久久精品小视频 | 午夜男人天堂 | 国产精品久久久av | 成年无码av片在线 | 中文字幕av网 | 亚洲不卡在线观看 | 国产精品久久久精品 | 日韩精品免费 | 亚洲成人高清 | 国产大片黄色 | 国产精品国产精品国产专区不卡 | 久久精品亚洲精品国产欧美 | 日韩视频精品在线 | 人人看人人爽 | 亚洲一区二区三区在线播放 | 中文字幕在线播放第一页 | 免费xxxx大片国产在线 | 免费成人高清在线视频 | 在线视频国产一区 | 国产精品视频一区二区三区 | 青青草原综合久久大伊人精品 | 亚州中文字幕 | 日日日色 | 黑色丝袜三级在线播放 | 黄片毛片在线观看 | 羞羞网站在线观看 | 在线欧美小视频 | 孕妇一级毛片 | k8久久久一区二区三区 | 中文字幕一区二区三区精彩视频 | 亚洲一区二区三区四区五区午夜 | 国产不卡在线播放 | 日本欧美国产在线 | 免费麻豆视频 | 91看片在线|