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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6183|回復: 0
收起左側

為什么這個密碼鎖程序修改完密碼后再開鎖還是原來的密碼

[復制鏈接]
ID:81073 發表于 2015-5-26 19:28 | 顯示全部樓層 |閱讀模式
2黑幣
#include<reg51.h>
#include<string.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define     LCDIO      P0
#define delay4us() _nop_();_nop_();_nop_();_nop_();
uchar buffer[6]={0};
sbit sda=P3^7;
sbit scl=P3^6;
sbit beep=P2^7;
sbit jdq=P2^6;
bit flag=0,aa;                                //用戶蹲淵義定時溢出標志位
uchar  DSY_BUFFER[16]="                ";
uchar  DSY_BUFFER1[16]="                ";
uchar  Userpassword[6]={0};
sbit rs=P2^0;  
sbit rd=P2^1;
sbit lcden=P2^2;

uchar code table2[]="123456";
uchar code table[]="Your Password...";
void delayms(uint z)
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}
void delay()                        //短延時,兩個機器周期,做總線的延時用
{;;}
void write_com(uchar com)
{
        rs=0;
        rd=0;
        lcden=0;
        P0=com;
        delayms(5);
        lcden=1;
        delayms(5);
        lcden=0;       
}

void write_date(uchar date)
{
        rs=1;
        rd=0;
        lcden=0;
        P0=date;
        delayms(5);
        lcden=1;
        delayms(5);
        lcden=0;       
}
void Display_String(uchar *p,uchar com)
{  uchar i;
   write_com(com);
   for(i=0;i<16;i++)
   {
   write_date(p[i]);
        }
}
void init_lcd()
{
        lcden=0;
        write_com(0x38);
        write_com(0x0c);
        write_com(0x06);
        write_com(0x01);
        write_com(0x80);
    Display_String(table,0x80);
        Display_String("It is Locked!         ",0xc0);
}

void start()
{
        sda=1;
        scl=1;
        delay4us();
        sda=0;
        delay4us();
        scl=0;
}
void stop()
{
        sda=0;
        scl=1;
        delay4us();
        sda=1;
        delay4us();
        scl=0;
}
void init()                                                        //初始化
{
sda=1;
delay();
scl=1;
delay();
}


void ack()
{
        sda=0;
        scl=1;
        delay4us();
        scl=0;
        sda=1;
}
void noack()
{
        sda=1;
        scl=1;
        delay4us();
        scl=0;
        sda=0;
}
uchar recbyte()
{
        uchar i,rd;
        rd=0x00;
        sda=1;
        for(i=0;i<8;i++)
        {
                scl=1;
                rd<<=1;
                rd|=sda;
                delay4us();
                scl=0;
                delay4us();
        }
        scl=0;
        delay4us();
        return rd;
}
uchar sendbyte(uchar wd)
{
        uchar i;
        bit ack0;
        for(i=0;i<8;i++)
        {
                sda=(bit)(wd&0x80);
                _nop_();
                _nop_();
                scl=1;
                delay4us();
                scl=0;
                wd<<=1;
        }
        delay4us();
        sda=1;
        scl=1;
        delay4us();
        ack0=!sda;
        scl=0;
        delay4us();
        return ack0;
}
uchar Recstring(uchar slave,uchar subaddr,uchar *buffer,uchar n)
{
uchar i;
start();
if(!sendbyte(slave)) return 0;
if(!sendbyte(subaddr)) return 0;
start();
if(!sendbyte(slave+1)) return 0;
for(i=0;i<n-1;i++)
  {
          buffer[i]=recbyte();
        ack();
  }
buffer[n-1]=recbyte();
noack();
stop();
return 1;
}

uchar Sendstring(uchar slave,uchar subaddr,uchar *buffer,uchar n)
{
        uchar i;
        start();
        if(!sendbyte(slave)) return 0;
        if(!sendbyte(subaddr)) return 0;
        for(i=0;i<n;i++)
        {
                if(!sendbyte(buffer[i])) return 0;
        }
        stop();
        return 1;
}

void clear_password()
{        uchar i;
        for(i=0;i<6;i++)
        {
         Userpassword[i]=' ';
        }
        for(i=0;i<16;i++)
        {
           DSY_BUFFER[i]=' ';         
         }
}
uchar Keys_Scan()
{       
        uchar temp,keynum;
        P1=0x0F;
        delayms(5);
        temp=P1^0x0F;
        switch(temp)
        {
                case 1:keynum=0;break;
                case 2:keynum=1;break;
                case 4:keynum=2;break;
                case 8:keynum=3;break;
                break;
        }
        P1=0xF0;
        delayms(5);
        temp=P1>>4^0x0F;
        switch(temp)
        {
                case 1:keynum+=0;break;
                case 2:keynum+=4;break;
                case 4:keynum+=8;break;
                case 8:keynum+=12;break;
                break;
        }
        delayms(600);
   return keynum;
}
void main()
{   uchar temp,i=0,j=0,k=0,n;
        uchar IS_valid_user;
        beep=1;
        init();                  
    init_lcd();
        delayms(5);
        aa=Recstring(0xa0,1,&buffer,6);   //先從EEPROM中接收數據,存入buffer緩存中,
        delayms(5);
        if(buffer[0]==NULL)                                 //如果數組的首個元素為空,則表示EEPROM中未有數據
        {        
                aa=Sendstring(0xa0,1,&table2,6);          //執行發送語句,將默認密碼存入EEPROM中
                delayms(5);
                aa=Recstring(0xa0,1,&buffer,6);          //重新接收數據,存入buffer緩存中,
                delayms(10);
        }        /*首次執行密碼鎖程序會執行本段程序,以后則直接執行 aa=Recstring(0xa0,1,buffer,6);*/
         P1=0x0f;          
    while(1)
                {
                 
                  if(P1!=0x0f)
                        {       
                            temp=Keys_Scan();
                            switch(temp)
                 {
                       case 0:  case 1: case 2: case 3: case 4:
                       case 5:  case 6: case 7: case 8: case 9:

                       if (i<=5)             //密碼限制在6位以內
                       {
                        Userpassword[i]=temp;
                        DSY_BUFFER[i]='*';
                        Display_String(DSY_BUFFER,0xc0);          
                                                i++;
                         }                                                               
                        break;

                        case 10: //按A鍵開鎖
                                                for(k=0;k<6;k++)
                                                {
                                                  if(buffer[k]==Userpassword[k])
                                                  flag=1;
                                                  else
                                                  flag=0;
                                                }
                        if (flag==1)
                        { flag=0;
                                                  i=0;
                          jdq=0;  //點亮LED
                           clear_password();
                           Display_String("OPEN    OK!      ",0xc0);
                           IS_valid_user = 1;
                                                   j=0;
                                                  
                        }
                       else
                        {
                                                 j++;
                         jdq=1;   //關閉LED
                         clear_password();
                         Display_String("ERROR!Have try   ",0xc0);
                                                 write_com(0xcf);
                                                 write_date(0x30+j);
                         IS_valid_user=0;
                         }
                        i=0;
                        break;

                      case 11: //按B鍵上鎖
                      jdq=1;   
                      clear_password();
                      Display_String(table,0x80);
                      Display_String("Lock OK!         ",0xc0);
                      i=0;                        
                      IS_valid_user=0;               
                      break;

                      case 12: //按C鍵設置新密碼
                       //如果是合法用戶則提示輸入新密碼               
                      if ( !IS_valid_user)
                                          {
                                           i=0;
                                           Display_String("No rights !      ",0xc0);
                                           delayms(1000);
                                           Display_String("Your Password...",0x80);
                                           Display_String("Lock OK!         ",0xc0);
                                           }
                       else
                        {
                          i=0;
                          Display_String("New Password:   ",0x80);
                          Display_String("                ",0xc0);
                         }

                       break;                        

                      case 13: //按D鍵保存新密碼
                      if ( !IS_valid_user)
                                          {         i=0;
                                             Display_String("No rights !       ",0xc0);
                                                    delayms(1000);
                                                 Display_String("Your Password...",0x80);
                                                 Display_String("Lock OK!         ",0xc0);
                                           }
                       else
                      {i = 0;       
                                           init();
                                           delayms(5);
                                           for(k=0;k<6;k++)
                                           {
                                                   Userpassword[k]=Userpassword[k]+48;
                                           }
                       aa=Sendstring(0xa0,1,Userpassword,6);
                                          delayms(5);
                       aa=Recstring(0xa0,1,buffer,6);  
                                           delayms(5);
                       clear_password();                        
                       Display_String(table,0x00);
                       Display_String("Password Saved!   ",0xc0);
                                           delayms(1000);

                                           Display_String("Do lock agian ?   ",0xc0);
                      }               
                      break;                        

                      case 14: //按E鍵消除所有輸入
                      i=0;
                      clear_password();
                      Display_String("                ",0xc0);            
                                          break;

                                          case 15:         //清除一位
                                           if(i!=0)i--;
                                           for(n=0;n<i;n++)
                                           {
                                                   DSY_BUFFER1[n]='*';       
                                           }
                                           Display_String(DSY_BUFFER1,0xc0);          
                                          
                                          }
                                          P1=0x0f;
                        }
                        if(j==3)
                        {        Display_String("THIEF!!!THIEF!!!",0xc0);
                                j=0;
                                beep=1;
                        }
                }
}

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲一区二区在线 | 国产亚洲精品综合一区 | 婷婷久久精品一区二区 | 天堂网av在线 | 欧美videosex性极品hd | av在线免费观看网址 | 在线观看视频中文字幕 | 99久久婷婷国产综合精品电影 | 日韩中文一区二区三区 | 亚洲精品无| 91麻豆精品国产91久久久更新资源速度超快 | 亚洲电影专区 | 中文字幕亚洲免费 | 成年网站在线观看 | 色婷婷av一区二区三区软件 | 亚洲欧美日本国产 | 精品一区二区三区四区外站 | 99精品久久 | 亚洲精品在线视频 | 久久久久久久电影 | 国产在线播放一区二区三区 | 亚洲瑟瑟| 欧美在线视频一区二区 | 国产色 | 日本久久久久久 | 91精品久久久久久久久 | 午夜羞羞 | 亚洲一区中文字幕 | 永久精品| 99久久日韩精品免费热麻豆美女 | 久久狼人天堂 | 99资源| 九九在线视频 | 国内精品久久久久 | 久久久久亚洲 | 久久午夜精品 | 日韩中文字幕视频 | 欧美xxxⅹ性欧美大片 | 色爱综合网 | 日韩综合在线 | 一区二区三区在线 |