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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機密碼鎖課程設計

[復制鏈接]
跳轉到指定樓層
樓主
ID:412827 發表于 2018-10-22 17:15 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include <reg51.h>
#include<intrins.h>
#define uchar unsigned char
sbit rs=P1^0; //      LCD1602數據命令選擇輸入
sbit rw=P1^1; //      LCD1602讀寫數據端
sbit en=P1^2; //      LCD1602使能信號端
sbit ledg=P2^0;          //  綠色二極管
sbit ledr=P2^7;                                    //紅色二極管
sbit relay=P1^5;
sbit buzz=P1^4;
char table0[]="error";                           //提示輸入錯誤
char table1[]="open";                          //提示輸入正確
char table2[]="password:****"; //          //提示輸入密碼
int temp,ch,m0,m1,p=0,n0,n1,n2,n3,a=0;//,n4,n5;
  sbit led=P2^1;
  sbit BF = P0^7;  //定義讀忙
  uchar busytest();  //讀忙函數

void delay(int z)    //延時程序
{
int x,c;
for(x=z;x>0;x--)
for(c=100;c>0;c--);
}


      keyscan()           // 掃描輸入的鍵值
{

     temp=P3&0xf0;  
     P3=0xfe;
     delay(1);
     temp=P3&0xf0;
        //led=0;                  
  while(temp!=0xf0)
{
  switch(temp)
  {
     case 0xe0:ch='7';
     break;
     case 0xd0:ch='8';
     break;
     case 0xb0:ch='9';
     break;
     default:ch=p;
     break;
         //led=0;
  }                          
          //led=0;
while(temp!=0xf0)
{
     temp=P3;
     temp=temp&0xf0;
}
}

     P3=0xfd;
     delay(1);
     temp=P3&0xf0;

   while(temp!=0xf0)
{
    switch(temp)
    {
       case 0xe0:ch='4';
       break;
       case 0xd0:ch='5';
       break;
       case 0xb0:ch='6';
       break;
       default:ch=p;
           break;
         }

   while(temp!=0xf0)
    {
      temp=P3;
      temp=temp&0xf0;
    }
}


   P3=0xfb;
   delay(1);
   temp=P3&0xf0;
   while(temp!=0xf0)
{
   switch(temp)

   {
   case 0xe0:ch='1';
   break;
   case 0xd0:ch='2';
   break;
   case 0xb0:ch='3';
   break;
   default:ch=p;
   break;
   }
  while(temp!=0xf0)
   {
    temp=P3;
    temp=temp&0xf0;
   }
}


     P3=0xf7;
     delay(1);
     temp=P3&0xf0;
     while(temp!=0xf0)
{
     switch(temp)
     {
     case 0xe0: ch='A';
         break;
     case 0xd0:ch='0';
         break;
     case 0xb0:ch='B';
         break;
     default: ch=p;
         break;
     }
    while(temp!=0xf0)
   {
   temp=P3;
   temp=temp&0xf0;
   }
}

//led=0;
return ch;
//led=0;
}




void wcom(uchar com)  //LCD寫指令
   {
   busytest();
    en=0;
    rs=0;
        rw = 0;           //選擇寫入
        en=1;
    P0=com;
    //delay(1); //延時程序
    en=0;
    delay(1); //延時程序
   // en=0;
    }

   uchar busytest(void)// 讀忙        1為忙  0為不忙
{
   // bit result;// 位定義,一字節
//        en = 1;       
        rs = 0;       
        rw = 1;       
        en = 1;
        en = 0;       
        while(P0 & 0x80)
        {
                en = 0;
        en = 1;
        }
    delay(1);
//        result=BF; //確定是否等于忙碌狀態
//        en=0;
//        return result;
  }



void wdat(uchar dat)  //LCD中寫入數據

     {
        busytest();//判斷是否讀忙
          en=0;
      rs=1;
          rw=0;
          en=1;
      P0=dat;
     // delay(1);  
      en=0;
      delay(4);
     // en=0;
     }



void init()          //LCD1602初始化
   {
   //en=0;
   //led=0;
    wcom(0x38);
   wcom(0x00);
   wcom(0x0e);
   wcom(0x14);
                          
   /*wcom(0x38);
   wcom(0x06);
           wcom(0x01);
   wcom(0x80); */
   //led=0;
   }



void error()          //    提示錯誤
{
     char m2;
     wcom(0xc6);
  for(m2=0;m2<5;m2++)
  {
   wdat(table0[m2]);

  }
}



void open()         //提示輸入正確   
{
      char m2;
      wcom(0xc6);
     for(m2=0;m2<4;m2++)
      {
      wdat(table1[m2]);
      }
}




  void pass()                         //提示輸入密碼
   {
     //char m5=1;
     char m2;
     wcom(0x80);           //有問題
        // led=0;
     for(m2=0;m2<13;m2++)
     {
     wdat(table2[m2]);           //有問題
                //led=0;
     }

   }
  change(int m)
  {
    delay(500);
    wcom(m);
    wdat('*');
  }


    void main()                                  //主函數
{

   rw=0;
   ledg=1;
   ledr=1;
  // relay=0;
   buzz=1;

   init();

   delay(5);
   wcom(0x89);  
   pass();
   wcom(0x89);

         //led=0;          
   //led=1;
   while(keyscan()==p)     //輸入第一個鍵值   
   {

   delay(3);
  // P2 =
    keyscan();

   }
         //led=0;
   wdat(keyscan());
   n0=keyscan();
   change(0x89);
   delay(10);                                          
   ch=p;
         //led=0;

   while(keyscan()==p)                 //輸入第二個鍵值
   {
   delay(3);
   keyscan();
   }

  wdat(keyscan());
  n1=keyscan();
  change(0x8a);
  ch=p;                                                               

                                                                             
  while(keyscan()==p)                 //輸入第三個鍵值
  {
  delay(3);
  keyscan();
  }

  wdat(keyscan());
  n2=keyscan();
  change(0x8b);
  ch=p;


  while(keyscan()==p)                 //輸入第四個鍵值
  {
  delay(3);
  keyscan();
  }
  wdat(keyscan());
  n3=keyscan();
  change(0x8c);
                                                                          
/*
   ch=p;
   while(keyscan()==p)                 //輸入第五個鍵值
   {
   delay(3);
   keyscan();
   }


  wdat(keyscan());
  n4=keyscan();
  change(0x8d);
  ch=p;                                                   

   while(keyscan()==p)                  //輸入第六個鍵值
   {
   delay(3);
   keyscan();
   }
   wdat(keyscan());
   n5=keyscan();                                                  
   change(0x8e);     

*/                 // led=0;
        //        while(1);
  while(1)

  {
if(n0=='2'&&n1=='0'&&n2=='1'&&n3=='8') //設定密碼值 2 0 1 8          并判斷輸入的是否是設定的密碼值
{
   int m3=1;
   open();
    ledg=0;
   //relay=1;
   delay(3000);
   //relay=0;
         ledg=1;
   while(m3)
{
   int m4,m5;
   //ledg=0;

   for(m4=200;m4>0;m4--)
   {
     keyscan();
   if(keyscan()=='A')
     {
      m4=0;
      m3=0;
     }
   }

  //ledg=1;

  if(m3!=0)
  {

   for(m5=200;m5>0;m5--)
    {
    keyscan();
    if(keyscan()=='A')
      {
        m3=0;
      }
    }
  }

}

}
else
  {
    //ledr=0;
    error();
   // buzz=0;
    delay(2000);
         wcom(0x01);
         a++;
       
  }
         //ledr=0 ;
        // delay(2000);
         if(a==3)
         {        
          ledr=0;
          }
          else
          {
           break;
          }
        //init();                

  break;
         //init();
  }
}

評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:1 發表于 2018-10-22 19:55 | 只看該作者
補全原理圖或者詳細說明一下電路連接即可獲得100+黑幣
回復

使用道具 舉報

板凳
ID:413688 發表于 2018-10-22 20:35 | 只看該作者
路過幫頂!
回復

使用道具 舉報

地板
ID:412827 發表于 2018-11-12 20:53 | 只看該作者
密碼鎖 課程設計.rar (928.2 KB, 下載次數: 47)


回復

使用道具 舉報

5#
ID:649102 發表于 2020-6-19 13:21 來自手機 | 只看該作者
初始密碼是多少
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久看| 国产精品福利网站 | 91精品国产91久久综合桃花 | 妖精视频一区二区三区 | 九九色综合| 欧美乱大交xxxxx另类电影 | 亚洲视频免费在线观看 | 国产精品久久久久久久久久久久久久 | 成人亚洲精品 | 在线观看视频你懂得 | 99在线播放 | caoporn地址| 精品国产乱码久久久久久88av | 日韩av三区 | 亚洲黄色成人网 | 亚洲精品视频一区 | 一区二区在线不卡 | 拍真实国产伦偷精品 | 97精品国产 | 国产黄色大片网站 | 精品国产欧美一区二区 | 久久午夜精品 | 午夜国产精品视频 | 精品无码久久久久久国产 | 欧美精品一区二区三区在线 | 日韩欧美大片 | 日韩在线一区二区三区 | 欧美精品一区在线 | 一区亚洲| 国产线视频精品免费观看视频 | 一级片视频免费观看 | 欧美极品在线观看 | 欧美精品久久 | 激情五月婷婷 | 日韩精品激情 | 欧美一区二区三区在线观看视频 | 亚洲精品永久免费 | 久久精品色欧美aⅴ一区二区 | 亚洲最大的成人网 | 久久久久国产精品一区 | 久久精品一区 |