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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

關于Proteus8軟件的仿真

[復制鏈接]
跳轉到指定樓層
樓主

出現這種情況一般是什么問題,各位大神,程序如下:
#include <reg52.h>
#include <intrins.h>
#include"24C0x.h"
#include"LCD12864.h"
#define uchar unsigned char
#define uint unsigned int
#define buffer1ID  0x01
#define buffer2ID  0x02
#define queren  0x88
#define tuichu  0x18
#define shanchu 0x82
#define User 1
void fan();
sbit B0=B^0;
sbit B7=B^7;
sbit k2=P3^7;
sbit jidianqi=P3^6;
sbit BUZZ=P2^0;
bit succeed_mm=0;
bit count_down=0;
bit alarm=0;
uchar dz[4];
uchar time[4];
uchar mima[6];
uchar mima_kai[6];
uchar mimag[6];
uchar mimaID[6]={1,2,3,4,5,6};
uchar out_time=0;
uchar Address1=20,tempx=20;
uchar Address2=20;
uchar data K;
uchar data Key;
uint PageID;
uchar data querenma=11;
uchar sum[2];
int summaf,summas;
Uchar
xdata UserPassword[2][7]={0};//密碼0是管理員密碼,1是開鎖密碼
uchar xdata DSY_BUFFER[16] ={0};//緩存
void Red_Init(void);
unsigned char check(void);
unsigned char redchange(unsigned char rednum);
void delayms(unsigned int z)
{
        unsigned int x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}
uchar Chack(uchar User_Number)
{
        uchar flag, i,temp[6],Address;
        Address=User_Number*6;
        for(i=0;i<6;i++)
        {
                temp=x24c02_read(Address);
                delayms(10);
                Address++;
        }
        for(i=0;i<6;i++)
        {
                if(temp==UserPassword[User_Number])
                        flag=1;
                else
                {
                        flag=0;
                        break;
                }
        }
return flag;
}
void delay(uint tt)
{  uchar i;
   while(tt--)
{
   for(i=0;i<125;i++);
   }
}
{
        SCON= 0x50;//串口方式1//REN=1,允許接受
        PCON=0x00;//SMOD=0
        TMOD= 0x21;//定時器1定時方式2
        TH1= 0xFD;//11.0592MHz模塊默認波特率為9600bps
        TL1= 0xFD;
        TR1= 1;//啟動定時器
        TH0=0x4b;
        TL0=0xff;
        ET0=1;
        TR0=1;
        EA=1;
}
unsigned char Keycan(void)//按鍵掃描程序
{
  unsigned char rcode, ccode;
  P1 = 0xF0;//發送0行掃描碼,列線輸入
  if((P1&0xF0) != 0xF0)//若有鍵按下
  {
    delay(1);//延時去抖動
    if((P1&0xF0) != 0xF0)
    {  rcode = 0xFE;//逐行掃描初值
    while((rcode&0x10) != 0)
    {
     P1 = rcode;//輸出行掃描碼
     if((P1&0xF0) != 0xF0)//本行有鍵按下
     {
      ccode = (P1&0xF0)|0x0F;
           BUZZ=0;
           delayms(20);
           BUZZ=1;
       //do{;}
           while((P1&0xF0) != 0xF0); //等待鍵釋放
       return ((~rcode) + (~ccode)); //返回鍵編碼
      }
    else
    rcode = (rcode<<1)|0x01; //行掃描碼左移一位
    }
   }
  }
  return 0; //無鍵按下,返回值為零
}
void KeyDeal(unsigned char Key)
{  //unsigned char n;
   if(Key!=0)
{
        switch(Key)
        {
        case 0x11: K=1; break;
        case 0x21: K=2; break;
        case 0x41: K=3; break;
        case 0x81:  break;
        case 0x12: K=4; break;
        case 0x22: K=5; break;
        case 0x42: K=6; break;
        case 0x82: K=34;break;刪除
        case 0x14: K=7; break;
        case 0x24: K=8; break;
        case 0x44: K=9; break;
        case 0x84:  break;輸入開鎖密碼
        case 0x18: K=35; break;退出
        case 0x28: K=0; break;
        case 0x48:  K=11; break;
        case 0x88:  break;               
        default: break;
        }
  }
}
void SFG_GetEcho()//握手
{
uchar i;
SBUF=0xef;
while(TI==0);
TI=0;
SBUF=0X01;
while(TI==0);
TI=0;
SBUF=0XFF;
while(TI==0);
TI=0;
SBUF=0XFF;
while(TI==0);
TI=0;
SBUF=0XFF;
while(TI==0);
TI=0;
SBUF=0XFF;
while(TI==0);
TI=0;
SBUF=0X01;
while(TI==0);
TI=0;
SBUF=0X00;
while(TI==0);
TI=0;
SBUF=0X03;
while(TI==0);
TI=0;
SBUF=0X53;
while(TI==0);
TI=0;
SBUF=0X00;
while(TI==0);
TI=0;
summaf=0x57;
SBUF=summaf;
while(TI==0);
TI=0;
for(i=0;i<9;i++)
{
  while(RI==0);
  RI=0;}
  while(RI==0);
  RI=0;
  querenma=SBUF;
  while(RI==0);
  RI=0;
  sum[1]=SBUF;
  while(RI==0);
  RI=0;
  sum[0]=SBUF;
  summas=(sum[1]<<8)+sum[0];
}
void SFG_getimage()//錄入指紋圖像
{
   uchar i;
SBUF=0xef;
while(TI==0);
TI=0;
SBUF=0X01;
while(TI==0);
TI=0;
SBUF=0XFF;
while(TI==0);
TI=0;
SBUF=0XFF;
while(TI==0);
TI=0;
SBUF=0XFF;
while(TI==0);
TI=0;
SBUF=0XFF;
while(TI==0);
TI=0;
SBUF=0X01;
while(TI==0);
TI=0;
SBUF=0X00;
while(TI==0);
TI=0;
SBUF=0X03;
while(TI==0);
TI=0;
SBUF=0X01;
while(TI==0);
TI=0;
SBUF=0X00;
while(TI==0);
TI=0;
summaf=0x05;
SBUF=summaf;
while(TI==0);
TI=0;
for(i=0;i<9;i++)
{
  while(RI==0);
  RI=0;}
while(RI==0);
RI=0;
querenma=SBUF;
while(RI==0);
RI=0;
sum[1]=SBUF;
while(RI==0);
RI=0;
sum[0]=SBUF;
summas=(sum[1]<<8)+sum[0];
}
void SFG_genchar(uchar bufferID) //生成特征并存于charbufferl//調用后單片機波特率發生變化
{
   uchar i;
   SBUF=0xef;
   while(TI==0);
   TI=0;
   SBUF=0X01;
   while(TI==0);
   TI=0;
   SBUF=0XFF;
   while(TI==0);
   TI=0;
   SBUF=0XFF;
   while(TI==0);
   TI=0;
   SBUF=0XFF;
   while(TI==0);
   TI=0;
   SBUF=0XFF;
   while(TI==0);
   TI=0;
   SBUF=0X01;
   while(TI==0);
   TI=0;
   SBUF=0X00;
   while(TI==0);
   TI=0;
   SBUF=0X04;
   while(TI==0);
   TI=0;
   SBUF=0X02;
   while(TI==0);
   TI=0;
   SBUF=bufferID;
   while(TI==0);
   TI=0;
   summaf=0x07+bufferID;
   sum[0]=summaf;
   sum[1]=summaf>>8;
   SBUF=sum[1];
   while(TI==0)
   TI=0;
   SBUF=sum[0];
   while(TI==0)
   TI=0;
   for(i=0;i<9;i++)
   {
    while(RI==0);
    RI=0;}
   while(RI==0);
   RI=0;
   querenma=SBUF;
   while(RI==0);
   RI=0;
   sum[1]=SBUF;
   while(RI==0);
   RI=0;
   sum[0]=SBUF;
   summas=(sum[1]<<8)+sum[0];
}
void SFG_fastsearch(uchar bufferID)//搜索指紋返回指紋ID
{
   uchar i,ID1,ID2;
   SBUF=0xef;
   while(TI==0);
   TI=0;
   SBUF=0X01;
   while(TI==0);
   TI=0;
   SBUF=0XFF;
   while(TI==0);
   TI=0;
   SBUF=0XFF;
   while(TI==0);
   TI=0;
   SBUF=0XFF;
   while(TI==0);
   TI=0;
   SBUF=0XFF;
   while(TI==0);
   TI=0;
   SBUF=0X01;
   while(TI==0);
   TI=0;
   SBUF=0X00;
   while(TI==0);
   TI=0;
   SBUF=0X08;
   while(TI==0);
   TI=0;
   SBUF=0X1b;
   while(TI==0);
   TI=0;
   SBUF=bufferID;
   while(TI==0);
   TI=0;
   SBUF=0X00;
   while(TI==0);
   TI=0;
   SBUF=0;
   while(TI==0);
   TI=0;
   SBUF=0X00;
   while(TI==0);
   TI=0;
   SBUF=180;
   while(TI==0);
   TI=0;
   summaf=9+0x1b+bufferID+180;
   sum[0]=summaf;
   sum[1]=summaf>>8;
   SBUF=sum[1];
   while(TI==0);
   TI=0;
   SBUF=sum[0];
   while(TI==0);
   TI=0;
   for(i=0;i<9;i++)
   {
    while(RI==0);
    RI=0;}
   while(RI==0);
   RI=0;
   querenma=SBUF;
   while(RI==0);
   RI=0;
   ID1=SBUF;
   while(RI==0);
   RI=0;
   ID2=SBUF; //接收到的ID
   while(RI==0);
   RI=0;
   while(RI==0);
   RI=0;
   while(RI==0);
   RI=0;
   sum[1]=SBUF;
   while(RI==0);
   RI=0;
   sum[0]=SBUF;
   summas=(sum[1]<<8)+sum[0];
   //PageID=ID1;
   PageID=(ID1<<8)+ID2;
}
Void SFG_enroll()//自動注冊模板返回存儲ID=錄圖像+合并生成模板+儲存模板
{
   uchar i,ID1,ID2;
   SBUF=0xef;
   while(TI==0);
   TI=0;
   SBUF=0X01;
   while(TI==0);
   TI=0;
   SBUF=0XFF;
   while(TI==0);
   TI=0;
   SBUF=0XFF;
   while(TI==0);
   TI=0;
   SBUF=0XFF;
   while(TI==0);
   TI=0;
   SBUF=0XFF;
   while(TI==0);
   TI=0;
   SBUF=0X01;
   while(TI==0);
   TI=0;
   SBUF=0X00;
   while(TI==0);
   TI=0;
   SBUF=0X03;
   while(TI==0);
   TI=0;
   SBUF=0X10;
   while(TI==0);
   TI=0;
   SBUF=0X00;
   while(TI==0);
   TI=0;
   summaf=0x14;
   SBUF=summaf;   //校驗和
   while(TI==0);
   TI=0;
   for(i=0;i<9;i++)
   {
    while(RI==0);
    RI=0;}
   while(RI==0);
   RI=0;
   querenma=SBUF;
   while(RI==0);
   RI=0;
   ID1=SBUF;
   while(RI==0);
   RI=0;
   ID2=SBUF;
   while(RI==0);
   RI=0;
   sum[1]=SBUF;
   while(RI==0);
   RI=0;
   sum[0]=SBUF;
   summas=(sum[1]<<8)+sum[0];
   //PageID=ID1;
   PageID=(ID1<<8)+ID2;
}
void SFG_deletchar(uint pageID) //刪除指紋 校驗和在2字節的頁碼處應分高低字節相加
{
   uchar i,ID1,ID2;
   SBUF=0xef;
   while(TI==0);
   TI=0;
   SBUF=0X01;
   while(TI==0);
   TI=0;
   SBUF=0XFF;
   while(TI==0);
   TI=0;
   SBUF=0XFF;
   while(TI==0);
   TI=0;
   SBUF=0XFF;
   while(TI==0);
   TI=0;
   SBUF=0XFF;
   while(TI==0);
   TI=0;
   SBUF=0X01;
   while(TI==0);
   TI=0;
   SBUF=0X00;
   while(TI==0);
   TI=0;
   SBUF=0X07;
   while(TI==0);
   TI=0;
   SBUF=0X0c;
   while(TI==0);
   TI=0;
   ID1=pageID;ID2=pageID>>8;
   SBUF=ID2;
   while(TI==0);
   TI=0;
   SBUF=ID1;
   while(TI==0);
   TI=0;
   SBUF=0X00;
   while(TI==0);
   TI=0;
   SBUF=1;
   while(TI==0);
   TI=0;
   summaf=0x15+ID1+ID2;
   sum[0]=summaf;
   sum[1]=summaf>>8;
   SBUF=sum[1];
   while(TI==0);
   TI=0;
   SBUF=sum[0];
   while(TI==0);
   TI=0;
   for(i=0;i<9;i++)
   {
    while(RI==0);
    RI=0;}
   while(RI==0);
   RI=0;
   querenma=SBUF;
   while(RI==0);
   RI=0;
   sum[1]=SBUF;
   while(RI==0);
   RI=0;
   sum[0]=SBUF;
   summas=(sum[1]<<8)+sum[0];
}
void SFG_identify() //自動驗證指紋 錄圖像+生成特征+搜索
{
   uchar i,ID1,ID2;
   SBUF=0xef;
   while(TI==0);
   TI=0;
   SBUF=0X01;
   while(TI==0);
   TI=0;
   SBUF=0XFF;
   while(TI==0);
   TI=0;
   SBUF=0XFF;
   while(TI==0);
   TI=0;
   SBUF=0XFF;
   while(TI==0);
   TI=0;
   SBUF=0XFF;
   while(TI==0);
   TI=0;
   SBUF=0X01;
   while(TI==0);
   TI=0;
   SBUF=0X00;
   while(TI==0);
   TI=0;
   SBUF=0X03;
   while(TI==0);
   TI=0;
   SBUF=0X11;
   while(TI==0);
   TI=0;
   SBUF=0X00;
   while(TI==0);
   TI=0;
   summaf=0x15;
   SBUF=summaf;         //校驗和
   while(TI==0);
   TI=0;
   for(i=0;i<9;i++)
   {
    while(RI==0);
    RI=0;}
   while(RI==0);
   RI=0;
   querenma=SBUF;
   while(RI==0);
   RI=0;
   ID1=SBUF;
   while(RI==0);
   RI=0;
   ID2=SBUF;
   while(RI==0);
   RI=0;
   while(RI==0);
   RI=0; //得分
   while(RI==0);
   RI=0;
   sum[1]=SBUF;
   while(RI==0);
   RI=0;
   sum[0]=SBUF;
   summas=(sum[1]<<8)+sum[0];
   //PageID=ID1;
   PageID=(ID1<<8)+ID2;
}
void shuazhiwen()
{
    uchar IDs1,IDs2,IDs3;
        LcmClearTXT();
        PutStr(1,1,"請按手指開鎖");
        SFG_identify();
        count_down=1;
        while(querenma==2)
        {
                SFG_identify();
                if(out_time>=10)
                {
                        out_time=0;
                        count_down=0;
                        succeed_mm=0;
                        goto out_fingerprint;
                }
               
        }
        if(querenma==0)
   {
                   out_time=0;
                count_down=0;
                ERROR_TIME=0;
                BUZZ=1;
                alarm=0;
                LcmClearTXT();
                PutStr(1,2,"門已打開");
                IDs1=PageID/100;
                IDs2=PageID/10%10;
                IDs3=PageID%10;
                PutStr(2,1,"編號為:");
                WriteCommand(0x8D);//指定第三行顯示位置
                WriteData(0x30+IDs1);
                WriteData(0x30+IDs2);
                WriteData(0x30+IDs3);
                jidianqi=0;
                delay(5000);
                jidianqi=1;       
                succeed_mm=0;
        }
   else if(querenma==9)
        {
                LcmClearTXT();
                ERROR_TIME++;
                if(ERROR_TIME>=3)
                {
                alarm=1;
        }
        PutStr(1,1,"沒搜索到指紋");
        PutStr(2,1,"請重新按手指");
                out_time=0;
                count_down=0;
        }
           else
        {
                LcmClearTXT();
                PutStr(1,1,"接受包出錯");
                out_time=0;
                count_down=0;
        }
                delay(2000);
out_fingerprint:
        LcmClearTXT();
void addfinger()
{
        uchar IDa1,IDa2,IDa3;
        LcmClearTXT();
        PutStr(1,2,"請按手指");   
        SFG_getimage();
        while(querenma!=0)
        SFG_getimage();
        SFG_genchar(buffer1ID);
        UART_Init();
        SFG_fastsearch(buffer1ID);
        while(querenma==1)
        SFG_fastsearch(buffer1ID);
        if(querenma==0)
        {
        LcmClearTXT();
        PutStr(1,1,"指紋已存在");
        PutStr(3,0,"按任意鍵繼續");
        while(Keycan()==0);
        }
        else if(querenma==9)
        {
        LcmClearTXT();
        PutStr(1,1,"請再次按手指");
        SFG_enroll();
        while(querenma==2)
        SFG_enroll();
        LcmClearTXT();
        if(querenma==0)
        {
        IDa1=PageID/100;IDa2=PageID/10%10;IDa3=PageID%10;
        PutStr(1,1,"指紋采集成功");
        PutStr(2,1,"編號為:");
        WriteCommand(0x8D);
        WriteData(0x30+IDa1);WriteData(0x30+IDa2);WriteData(0x30+IDa3);
        }
        else if(querenma!=0)
        {
        PutStr(1,1,"指紋采集失敗");
        PutStr(2,1,"請重新操作");
        }
        PutStr(3,0,"按任意鍵繼續");
        while(Keycan()==0);
   }
        LcmClearTXT();
}
Void deletfinger()
{
        uchar i,j=0;
        LcmClearTXT();
        PutStr(1,0,"輸入刪去的指紋號");
        PutStr(3,0,"B退格  D確認");
        for(i=0;i<5;i++)dz=0;       
           Key=Keycan();
           while(Key!=queren)
           {
           Key=Keycan();
           KeyDeal(Key);
         if(K==35) goto out2;
         delay(30);   //按鍵有抖動
         if(Key==0)K=10;
         if((K>=0)&&(K<=9))
         {
         dz[j]=K;
        if(j<3)
        {
        WriteCommand(0x88+j);                //指定第三行顯示位置
        WriteData(0x30+dz[j]);       
        }
        ++j;
        if(j==4)
        j=3;
        } //顯示LCD12864并行顯示
        if(K==34)                //按了刪除鍵
        {
        if(j==0)
        {
        WriteCommand(0x88);//指定第三行顯示位置
        WriteData(0x20);
        }
        else
        {
        --j;
        WriteCommand(0x88+j);            //指定第三行顯示位置
        WriteData(0x20);
          }
         }
        }
        if(j>=2)
        PageID=dz[2]+dz[1]*10+dz[0]*100;
        if(j==1)
        PageID=dz[1]+dz[0]*10;
        if(j==0)
        PageID=dz[0];
        SFG_deletchar(PageID);
        if(querenma==0)
        {
        LcmClearTXT();
        PutStr(1,1,"刪去指紋號成功");
        }
        else
        {
        LcmClearTXT();
        PutStr(1,2,"刪去指紋號失敗");
        }
        PutStr(2,0,"按任意鍵繼續");
        while(Keycan()==0);
out2:
        LcmClearTXT();
        K=0;
}
void gaimima()
{
        uchar i,j=0,mima1[6],mima2[6];
        uchar k,temp;
resum_modification:
        LcmClearTXT();
        PutStr(1,1,"請輸入新密碼");
        PutStr(3,0,"B退格   D確認");
        for(i=0;i<6;i++)mima1=0;
         Key=Keycan();
    while(Key!=queren)
          {
          Key=Keycan();
          KeyDeal(Key);
        if(K==35) goto out3;
        delay(30);
        if(Key==0)K=10;
        if((K>=0)&&(K<=9))
        {
        mima1[j]=K;
        if(j<6)
        {
        WriteCommand(0x89+j);                //指定第三行顯示
        WriteData(0x0f);       
        }
        ++j;
        if(j==7)
        j=6;
        }//顯示LCD12864并行顯示
        if(K==34)                //按了刪除鍵
        {
        if(j==0)
        {
        WriteCommand(0x89);                //指定第三行顯示
        WriteData(0x20);
        }
        else
        {
        --j;
        WriteCommand(0x89+j);            //指定第三行顯示
        WriteData(0x20);
                }
        }
}
        LcmClearTXT();
        LcmClearTXT();
        j=0;
        PutStr(1,0,"請再次輸入新密碼");
        PutStr(3,0,"B退格  D確認");
        for(i=0;i<6;i++)mima2=0;
        Key=Keycan();
   while(Key!=queren)
        {
         Key=Keycan();
         KeyDeal(Key);
         delay(30);
         if(Key==0)K=10;
         if((K>=0)&&(K<=9))
         {
         mima2[j]=K;
        if(j<6)
        {
        WriteCommand(0x89+j);//指定第三行顯示
        WriteData(0x0f);       
        }
        ++j;
        if(j==7)
        j=6;
        }//顯示LCD12864并行顯示
        if(K==34)                //按了刪除鍵
        {
        if(j==0)
        {
        WriteCommand(0x89);//指定第三行顯示
        WriteData(0x20);
        }
        else
        {
        --j;
        WriteCommand(0x89+j);//指定第三行顯示
        WriteData(0x20);
        }
        }
        }
        LcmClearTXT();
        if((mima1[0]==mima2[0])&&(mima1[1]==mima2[1])&&(mima1[2]==mima2[2])&&(mima1[3]==mima2[3])&&(mima1[4]==mima2[4])&&(mima1[5]==mima2[5]))
        {
        for(i=0;i<6;i++)
        mimaID=mima1;
for(i=0;i<6;i++)//密碼限制在六位以內
                {
                UserPassword[0]=mima1;
                }
                temp=(Member-1)*6;       
                delayms(5);
                for(k=0;k<6;k++)
                {
                x24c02_write(temp,UserPassword[0][k]);
                delayms(10);
                temp++;
                }
                PutStr(0,1,"密碼修改成功");
                PutStr(3,0,"按任意鍵繼續");
                while(Keycan()==0);
        }
        else
        {
        j=0;
        PutStr(0,0,"密碼修改失敗");
        PutStr(1,0,"兩次輸入的密碼不");
        PutStr(2,0,"一致,請重新操作");      
        PutStr(3,0,"按任意鍵繼續");
        while(Keycan()==0);
        goto resum_modification;
        }
out3:
        LcmClearTXT();
        K=0;
}
void gaimima_kaisuo()
{
        uchar i,j=0,mima1[6],mima2[6];
        uchar k,temp;
resum_modification1:
        LcmClearTXT();
        PutStr(1,1,"請輸入新密碼");
        PutStr(3,0,"B退格  D確認");
        for(i=0;i<6;i++)mima1=0;
        Key=Keycan();
   while(Key!=queren)
        {
        Key=Keycan();
        KeyDeal(Key);
        if(K==35) goto out4;
        delay(30);       
        if(Key==0)K=10;
        if((K>=0)&&(K<=9))
        {
        mima1[j]=K;
        if(j<6)
        {
        WriteCommand(0x89+j);                //指定第三行顯示
        WriteData(0x0f);       
        }
        ++j;
        if(j==7)
        j=6;
        }//顯示LCD12864并行顯示
        if(K==34)//按了刪除鍵
        {
        if(j==0)
        {
        WriteCommand(0x89);                //指定第三行顯示
        WriteData(0x20);
        }
        else
        {
        --j;
        WriteCommand(0x89+j);            //指定第三行顯示
        WriteData(0x20);
                }
        }
}
LcmClearTXT();
        LcmClearTXT();
        j=0;
        PutStr(1,0,"請再次輸入新密碼");
        PutStr(3,0,"B退格  D確認");
        for(i=0;i<6;i++)mima2=0;
        Key=Keycan();
   while(Key!=queren)
        {
        Key=Keycan();
        KeyDeal(Key);
        delay(30);
        if(Key==0)K=10;
        if((K>=0)&&(K<=9))
        {
        mima2[j]=K;
        if(j<6)
        {
        WriteCommand(0x89+j);//指定第三行顯示
        WriteData(0x0f);       
        }
        ++j;
        if(j==7)
        j=6;
        } //顯示LCD并行顯示
        if(K==34)                //按了刪除鍵
        {
        if(j==0)
        {
        WriteCommand(0x89);//指定第三行顯示
        WriteData(0x20);
        }
        else
        {
        --j;
        WriteCommand(0x89+j);        //指定第三行顯示
        WriteData(0x20);
                }
        }
}
        LcmClearTXT();
        if((mima1[0]==mima2[0])&&(mima1[1]==mima2[1])&&(mima1[2]==mima2[2])&&(mima1[3]==mima2[3])&&(mima1[4]==mima2[4])&&(mima1[5]==mima2[5]))
        {
        for(i=0;i<6;i++)
        mimaID=mima1;
for(i=0;i<6;i++)/密碼限制在6位以內
        {
                UserPassword[1]=mima1;
        }
        temp=(Member-1)*6;       
        delayms(5);
        for(k=0;k<6;k++)
        {
        x24c02_write(temp,UserPassword[1][k]);
        delayms(10);
        temp++;
        }
        PutStr(0,1,"密碼修改成功");
        PutStr(3,0,"按任意鍵繼續");
        while(Keycan()==0);
        }
        else
        {
        j=0;
        PutStr(0,0,"密碼修改失敗");
        PutStr(1,0,"兩次輸入的密碼不");
        PutStr(2,0,"一致,請重新操作");
        PutStr(3,0,"按任意鍵繼續");
        while(Keycan()==0);
        goto resum_modification1;
        }
out4:
        LcmClearTXT();
        K=0;
}
void zhu()
{
LcmClearTXT();
PutStr(1,2,"門已打開");
jidianqi=0;
delay(5000);
jidianqi=1;
//PutStr(3,0,"按任意鍵繼續");
//while(Keycan()==0);
        K=35;
}
void xiugaimima()
{
        LcmClearTXT();
        while(Keycan()!=tuichu)
      {
        PutStr(0,0,"1:修改開鎖密碼");
        PutStr(1,0,"2:修改管理密碼");
        KeyDeal(Keycan());
        if(K==35) goto out5;
        switch(K)
        {
        case 1:        Member=2;gaimima_kaisuo();break;
        case 2:    Member=1;gaimima();break;
        default: break;
        }
   }
out5:
LcmClearTXT();
K=0;
}
void guanliyuan()
{ uchar i,j=0,x=1;
           uchar Right_flag;
resum_guanliyuan:
  LcmClearTXT();
        PutStr(1,0,"請輸入管理密碼");
        PutStr(3,0,"B退格  D確認");
        for(i=0;i<6;i++)mima=0;
        Key=Keycan();
   while(Key!=queren)
        {
        Key=Keycan();
        if(Key==tuichu) goto out1;
        KeyDeal(Key);
        delay(30);
        if(Key==0)K=10;
          if((K>=0)&&(K<=9))
         {
        mima[j]=K;
        if(j<6)
        {       
        WriteCommand(0x89+j);//指定第三行顯示
        WriteData(0x0f);       
        }
        ++j;
        if(j==7)
        j=6;
        } //顯示LCD12864并行顯示
        if(K==34)//按了刪除鍵
        {
        if(j==0)
        {
        WriteCommand(0x89);//指定第三行顯示
        WriteData(0x20);
        }
        else
        {
        --j;
        WriteCommand(0x89+j);        //指定第三行顯示
        WriteData(0x20);
                }
        }
}
LcmClearTXT();
for(i=0;i<6;i++)
   {
    UserPassword[0]=mima;
   }
        if(j==6){Right_flag=Chack(0); }
         if (Right_flag==1)
         {
        Right_flag=0;
        ERROR_TIME=0;
        alarm=0;
        BUZZ=1;
   while(Keycan()!=tuichu)
   {
        PutStr(0,0,"1:增加指紋");
        PutStr(1,0,"2:刪除指紋");
        PutStr(2,0,"3:修改密碼");
        PutStr(3,0,"4:手動開鎖");
        KeyDeal(Keycan());
        if(K==35) goto out1;
        switch(K)
        {
        case 1: addfinger();K=6;break;
        case 2:deletfinger();break;
        case 3:        xiugaimima();break;
        case 4:zhu();break;
        default: break;
        }
   }
   }
   else
   {
j=0;
        ERROR_TIME++;
        if(ERROR_TIME>=3)
        {
        alarm=1;
        }
        PutStr(1,2,密碼錯誤");
        PutStr(2,0,"請重新操作");
        PutStr(3,0,"按任意鍵繼續");
        while(Keycan()==0);
        goto resum_guanliyuan;
    }
  Key=0;
out1:
  LcmClearTXT();
}
void kaisuomm()
{ uchar i,j=0,x=1;
           uchar Right_flag;
resume:        PutStr(1,0,"請輸入開鎖面膜");
        PutStr(3,0,"B退格  D確認");
           for(i=0;i<6;i++)mima_kai=0;
           Key=Keycan();
  while(Key!=queren)
        {
        Key=Keycan();
        if(Key==tuichu) goto out;
        KeyDeal(Key);
        delay(30);
        if(Key==0)K=10;
        if((K>=0)&&(K<=9))
        {
        mima_kai[j]=K;
        if(j<6)
        {
        WriteCommand(0x89+j);//指定第三行顯示
        WriteData(0x0f);       
        }
        ++j;
        if(j==7)
        j=6;
        } //顯示LCD12864并行顯示
        if(K==34)//按了刪除鍵
        {
        if(j==0)
        {
        WriteCommand(0x89);//指定第三行顯示
         WriteData(0x20);
        }
        else
        {
        --j;
        WriteCommand(0x89+j);//指定第三行顯示
        WriteData(0x20);
        }
        }
        }
for(i=0;i<6;i++)
   {
UserPassword[1]=mima_kai;
   }
        if(j==6){Right_flag=Chack(1); }
        if (Right_flag==1)
        {
        Right_flag=0;
        succeed_mm=1;
        ERROR_TIME=0;
        BUZZ=1;
        alarm=0;
//while(Keycan()!=tuichu)
{
        PutStr(1,0,"請刷手指開鎖");
        PutStr(3,0);
   }
  }
else
  {
        j=0;
        ERROR_TIME++;
        if(ERROR_TIME>=3)
        {
        alarm=1;
        }
//PutStr(1,0);
PutStr(1,0,"密碼錯誤");
PutStr(2,0,"請重新輸入");
PutStr(3,0,"按任意鍵繼續");
while(Keycan()==0);
LcmClearTXT();
goto resume;
    }
  Key=0;
out:
  LcmClearTXT();
}
void fan()
{
        if(succeed_mm==0)
        {
        PutStr(0,2,"歡迎使用");
        PutStr(1,1,"指紋識別系統");
        PutStr(2,0,"            ");
        PutStr(3,0,"A管理 C開鎖");
        }
  Key=Keycan();
  if(Key==0x84)
  {
          LcmClearTXT();
          kaisuomm();
        LcmClearTXT();
//        K=0;
  }
if(/*k2==1&&*/succeed_mm==1)//指紋刷機
  {
          LcmClearTXT();
        shuazhiwen();
        LcmClearTXT();
  }
  if(Key==0x81)//管理員操作
  {
        LcmClearTXT();
        guanliyuan();
    LcmClearTXT();
  }
}       
void main()
{        
//PSB=0;
        UART_Init();//串口初始化
          x24c02_init();//24C02初始化
        LcmInit();//LCD12864初始化
LcmClearTXT();//LCD12864清屏
        while(1)
                {
                        fan();
                        delay(100);
                }
}
void T0_time() interrupt 1
{
        uchar jishi;
        TH0=0x4b;
        TL0=0xff;
        jishi++;
        if(jishi%2==0&&alarm==1)
        {
                BUZZ=!BUZZ;
        }
        if(jishi>=20)
        {
                jishi=0;
                if(count_down==1)
                out_time++;
        }
}



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

使用道具 舉報

沙發
ID:102963 發表于 2025-3-1 08:51 | 只看該作者
這個沒碰到過。不過WP引腳一般是接地,只用SCL和SDA這倆腳傳輸數據。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人亚洲一区 | 久久激情视频 | 欧美日韩专区 | 久久久久99 | 久久高潮| 97av视频在线 | 亚洲欧美久久 | 免费福利视频一区二区三区 | 国产精品色婷婷久久58 | 国产一区影院 | 欧美日韩久久 | 一级毛片免费 | 鸳鸯谱在线观看高清 | 亚洲激精日韩激精欧美精品 | 久久久www| 亚洲视频一区二区三区四区 | 色婷婷综合网站 | 干干干操操操 | 日韩在线观看一区二区三区 | 免费亚洲成人 | 欧美网站一区二区 | 一区二区三区观看视频 | 国产精品一区二区久久精品爱微奶 | 国产女人与拘做受免费视频 | 精品免费视频 | 91极品视频 | 国产精品久久久久久久久久久免费看 | 在线观看亚洲 | 999精品视频 | 国产亚洲一区二区三区在线观看 | 中文在线一区二区 | 性色网站 | 一区二区三区国产精品 | 国产精品日韩欧美一区二区三区 | 日本一区视频在线观看 | 婷婷综合激情 | 日韩免费中文字幕 | 欧美日韩亚洲在线 | 欧美精品一区二区三区四区 在线 | 精品视频一区二区三区在线观看 | 欧美日韩在线免费观看 |