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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

密碼鎖

[復制鏈接]
跳轉到指定樓層
樓主
ID:291220 發表于 2018-4-24 22:12 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int

uchar old1,old2,old3,old4,old5,old6; //原始密碼000000
uchar new1,new2,new3,new4,new5,new6;  //每次MCU采集到的密碼輸入
uchar a=16,b=16,c=16,d=16,e=16,f=16; //送入數碼管顯示的變量
uchar wei,key, chongxin,shurugeshu=0, genggaiwanbi=0;
uint num, temp, zhengque, eee, hhh=1;


bit allow,genggai,ok,wanbi,retry,close;         //各個狀態位

sbit lcden = P3^4;
sbit lcdrs = P3^5;                                  //高 寫數據 ;低 寫指令
sbit lcdwr = P3^6;                                  // 0 write  1 read
sbit rest = P3^7;
sbit dula = P2^6;
sbit wela = P2^7;

sbit beep = P2^3;

uchar code tableA[] = {"歡迎回家!!! "};
uchar code tableB[] = {"請輸入密碼:   "};
uchar code tableC[] = {"***********    "};
uchar code tableD[] = {"更改密碼:     "};
uchar code tableK[] = {"               "};
uchar code tableN[] = {"               "};
uchar code table_zhengque[] = {"密碼正確!     "};
uchar code table_genggaiwanbi[] = {"更改完畢!     "};
uchar code table_huifu[] = {"已恢復默認!    "};


void delay( uint z )
{
        uint x,y;

        for(x=z; x>0; x--)
                for(y=110; y>0; y--);
}

void write_com( uchar com )                   //指令
{
        delay( 5 );
        lcdrs = 0;
        P0 = com;
        delay( 5 );
        lcden = 1;
        delay( 5 );
        lcden = 0;
}

void write_data( uchar date )                //數據
{
        delay( 5 );
        lcdrs = 1;
        P0 = date;
        delay( 5 );
        lcden = 1;
        delay( 5 );
        lcden = 0;
}

void init()
{
        rest = 1;
        rest = 0;
        rest = 1;
        delay( 5 );
        dula = 1;
        P0 = 0x00;
        dula = 0;
        wela = 1;
        P0 = 0x00;
        wela = 0;
        lcden = 0;
        lcdwr = 0;
        write_com( 0x30 );                //顯示設置指令
        write_com( 0x0c );                //光標設置(開)
        write_com( 0x01 );                //清屏
        write_com( 0x06 );
        write_com( 0x80 );                //數據指針初始化
}

void lcd_display(uchar line, uchar * string, uchar j)
{
        uchar addr,i;
        if( line==1 )
                addr = 0x80;
        else if( line==2 )
                addr = 0x90;
        else if( line==3 )
                addr = 0x88;
        else if( line==4 )
                addr = 0x98;
        write_com( addr );

        if( j==0 )
        {
                for(i=0; i<16; i++)
                {
                        write_data( * string++ );
                }
        }
        else
        {
                for(i=0; i<j; i++)
                {
                        write_data( * string++ );
                }
        }

}

void keyscan()
{
        {       
                P1=0xfe;
                temp=P1;
                temp=temp&0xf0;
                if(temp!=0xf0)                                  //NO1
                {
                  delay(10);
                  if(temp!=0xf0)
                  {       
                    temp=P1;
                    switch(temp)
                    {
                      case 0xee:
                           key=0;
                                   wei++;
                           break;
               
                      case 0xde:
                           key=1;
                                   wei++;
                           break;
               
                      case 0xbe:
                           key=2;
                                   wei++;
                           break;
               
                      case 0x7e:
                           key=3;
                                   wei++;
                           break;
                     }
                     while(temp!=0xf0)
                    {
                       temp=P1;
                       temp=temp&0xf0;
                       beep=0;
                     }
                     beep=1;
                  }
                }
                P1=0xfd;
                temp=P1;
                temp=temp&0xf0;
                if(temp!=0xf0)                                        //NO2
                {
                  delay(10);
                  if(temp!=0xf0)
                  {
                    temp=P1;
                    switch(temp)
                    {
                      case 0xed:
                           key=4;
                                   wei++;
                           break;
               
                      case 0xdd:
                           key=5;
                                   wei++;
                           break;
               
                      case 0xbd:
                           key=6;
                                   wei++;
                           break;
               
                      case 0x7d:
                           key=7;
                                   wei++;
                           break;
                     }
                     while(temp!=0xf0)
                     {
                       temp=P1;
                       temp=temp&0xf0;
                       beep=0;
                     }
                     beep=1;
                  }
                  }
                P1=0xfb;
                temp=P1;
                temp=temp&0xf0;
                if(temp!=0xf0)                                          //NO3
                {
                  delay(10);
                  if(temp!=0xf0)
                  {
                    temp=P1;
                    switch(temp)
                    {
                      case 0xeb:
                           key=8;
                                   wei++;
                           break;
               
                      case 0xdb:
                           key=9;
                                   wei++;
                           break;
                                  
                      case 0xbb:
                           genggai=1;
                                   wei=0;
                           break;
               
                      case 0x7b:
                                     if(allow)
                           ok=1;
                           break;
                     }
                    while(temp!=0xf0)
                     {
                       temp=P1;
                       temp=temp&0xf0;
                       beep=0;
                     }
                     beep=1;
                  }
                  }
                  P1=0xf7;
                temp=P1;
                temp=temp&0xf0;                                          //NO4
                if(temp!=0xf0)
                {
                  delay(10);
                  if(temp!=0xf0)
                  {
                    temp=P1;
                    switch(temp)
                    {
                      case 0xe7:
                                     retry=1;
                           break;
               
                      case 0xd7:
                                     close=1;
                           break;
                      case 0xb7:
                                     chongxin=1;
                           break;
                     }
                    while(temp!=0xf0)
                     {
                       temp=P1;
                       temp=temp&0xf0;
                       beep=0;
                     }
                     beep=1;
                  }
      }
}
}

void shumima()                //對按鍵采集來的數據進行分配
{
        if(!wanbi)
        {
/*                if( retry==1 )
                        {
                                shurugeshu = 0;
                        }                  */
                switch(wei)
                {
                        case 1:new1=key;
                                    if(!allow)        a=17;
                                   else a=key;
                                   shurugeshu = 1;        break;
                        case 2:new2=key;
                                        if(a==17) b=17;
                                        else b=key;
                                        shurugeshu = 2;        break;
                        case 3:new3=key;
                                        if(a==17) c=17;
                                        else c=key;
                                        shurugeshu = 3;        break;
                        case 4:new4=key;
                                        if(a==17) d=17;
                                        else d=key;
                                        shurugeshu = 4;        break;
                        case 5:new5=key;
                                        if(a==17) e=17;
                                        else e=key;
                                        shurugeshu = 5;        break;
                        case 6:new6=key;
                                        if(a==17) f=17;
                                        else f=key;
                                        wanbi=1;       
                                        shurugeshu = 6;
                                        genggaiwanbi = 1; break;
                }
               
                if( genggai==0 )
                {
                        if( shurugeshu!=0 )
                        {
                                if( shurugeshu > 6 )
                                {
                                        shurugeshu = 1;
                                }          
                                lcd_display(3, tableC, shurugeshu);
                        }
                }
                if( genggai==2 )
                {
//                        shurugeshu = 1;
                        if( shurugeshu!=0 )
                        {
//                                shurugeshu = 1;
                                if( shurugeshu > 6 )
                                {
                                        shurugeshu = 1;
                                }          
                                lcd_display(3, tableC, shurugeshu);
                        }
                }
        }
}

void yanzheng()          //驗證密碼是否正確
{
        if(wanbi)         //只有當六位密碼均輸入完畢后方進行驗證
        {
        if((new1==old1)&(new2==old2)&(new3==old3)&(new4==old4)&(new5==old5)&(new6==old6))
                allow=1;zhengque=1;        //當輸入的密碼正確,會得到allowe置一
        }
}

void main()
{
        again :
        hhh=1;
        init();
        lcd_display(1, tableA, 0);
        lcd_display(2, tableB, shurugeshu);
//        lcd_display(3, tableC, 6);
        while(1)
        {
                keyscan();
                shumima();
                yanzheng();
                if(allow)         //驗證完后,若allow為1,則開鎖
                {
                        beep = 0;
//                        lcd_display(3, tableD, 0);
//                        if( (zhengque==1) & (eee = 0) )
//                        {
/*                                zhengque = 0;
                                eee = 1;

                                write_com( 0x01 );
                                lcd_display(1, tableA, 0);         */
                                if( (genggai!=2) & (hhh!=0) )
                                lcd_display(2, table_zhengque, 0);
//                        }          

                        P1=0x00;
                        if(!genggai)
                                wanbi=0;
                }
                if(genggai==1)          //當S33更改密碼鍵被按下,genggai會被置一
                {
                        genggai = 2;
//                        genggaiwanbi = 0;
                        if(allow)         //若已經把鎖打開,才有更改密碼的權限
                        {
                                if( (wanbi==1) & (genggaiwanbi==1) )
                                {
                                       
                                }
                                else
                                {
                                        write_com( 0x01 );
                                        lcd_display(1, tableD, 0);          //顯示“更改密碼”
                                        shurugeshu = 0;
                                }

                                while(!wanbi)        //當新的六位密碼沒有設定完,則一直在這里循環
                                {
                                         keyscan();
                                        shumima();
                                        if(retry|close)         //而當探測到重試鍵S41或者關閉密碼鎖鍵S42被按下時,則跳出
                                        {
                                                wanbi=1;genggaiwanbi=1;
                                                break;
                                        }
//                                        display(a,b,c,d,e,f);
                                       
                                }
                        }
                }
                if(ok)          //更改密碼時,當所有六位新密碼均被按下時,可以按下此鍵,結束密碼更改
                {                  //其他時間按下此鍵無效
                        ok=0; wei=0;
                        genggai=0;hhh=0;
                        old1=new1;old2=new2;old3=new3;         //此時,舊的密碼將被代替
                        old4=new4;old5=new5;old6=new6;
                        a=16;b=16;c=16;d=16;e=16;f=16;
                       
                        write_com( 0x01 );
                        lcd_display(2, table_genggaiwanbi, 0);                   //顯示更改完畢
                }
                if(retry)        //當重試按鍵S41被按下,retry會被置位
                {
                retry=0; wei=0;wanbi=0;shurugeshu=0;
                a=16;b=16;c=16;d=16;e=16;f=16;
                new1=0;new2=0;new3=0;new4=0;new5=0;new6=0;
               
                lcd_display(3, tableK, 0);               
                }
                if(close)          //當關閉密碼鎖按鍵s42被按下,close會被置位
                {
                        key42:
                        close=0;genggai=0;//所有變量均被清零。
                        wei=0;        wanbi=0;
                        allow=0;
                        P1=0xff;
                        a=16;b=16;c=16;d=16;e=16;f=16;
                        new1=0;new2=0;new3=0;new4=0;new5=0;new6=0;
                       
                        shurugeshu = 0;
                        write_com( 0x01 );
                        goto key43;

//                        llcd_display(2, table_huifu, 0);
                }
                if(chongxin)
                {
                        wei=0;key=0; chongxin=0;shurugeshu=0, genggaiwanbi=0;
                        num=0; temp=0; zhengque=0; eee=0; hhh=0;
                        goto key42;
                        key43:
                        goto again;
                }          
//                display(a,b,c,d,e,f);         //實時顯示
        }
}

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99久久99 | 男女视频在线观看 | 伊人网国产| 一级毛片免费完整视频 | 一区二区在线 | 热久久国产 | 影音先锋中文字幕在线观看 | 麻豆久久| 日韩欧美一级精品久久 | 亚洲v区| 黄网站涩免费蜜桃网站 | 欧美视频免费在线观看 | 成人福利在线视频 | 久久久久久久久久久久亚洲 | 国产成人午夜高潮毛片 | 日本不卡一区二区三区 | 天天草天天干天天 | 国产小视频在线看 | 国产精品一区二区久久 | 久久久999成人 | 亚洲成人午夜电影 | 有码在线 | 日韩欧美一区在线 | 国产伦精品一区二区三区在线 | 久草在线免费资源 | 久久久蜜桃 | 久久精品国产久精国产 | 亚洲天堂二区 | 黄色国产在线视频 | 日韩成人免费av | 欧美日韩一 | 婷婷色在线播放 | 成人在线免费 | 色欧美日韩 | 91香蕉嫩草 | 成人免费日韩 | 久久久精品日本 | 奇米超碰在线 | 日韩精品一区二区三区中文在线 | 涩涩视频网 | 欧美一级淫片免费视频黄 |