找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 376|回复: 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 单片机教程网

快速回复 返回顶部 返回列表