电子密码锁的程序,主函数中for循环不太明白什么意思,还有就是硬件中输入密码正确也是显示错误不知道问题在哪 读密码 INPUT_PW_Tab[j这个也不明白,有明白的小伙伴交流一下啊

#include "reg52.h"               //此文件中定义了单片机的一些特殊功能寄存器
#include "lcd.h"
#include "key.h"
#include "i2c.h"
#define u16 unsigned int       //对数据类型进行声明定义
#define u8 unsigned char
    
sbit AS=P2^2;               //继电器

u8 pw_num=0,Error_Num,PassWord_Length=6;  //Error_Num错误次数?PassWord_Length规定密码长度  pw_num实际输入密码长度
u8 PASSWORD[]={1,1,1,1,1,1,0,0,0,0};
u8 INPUT_PW_Tab[10]; 
u8 key_num,Step,Step5,Load_first_flag=0;  

bit result_flag,Input_suc_flag;  //Input_suc_flag密码输入完成标志 result_flag密码比对标志
bit List1=0;

void Step_0();   //6种不同功能函数
void Step_1();
void Step_2();
void Step_3();
void Step_4();  
void Step_5();
         void Step5_0();
       void Step5_1();
       void Step5_2();
       void Step5_3();
       void Step5_4();
       void Step5_5();
void Step_6();

void CipherComparison();  //密码比对函数
void input_password(bit m);  //密码输入函数
void Read_Password();  //密码读取函数?
/*******************************************************************************/

/*******************************************************************************
* 函 数 名       : main
* 函数功能         : 主函数
* 输    入       : 无
* 输    出         : 无
*******************************************************************************/
void main()
{    
   // u8 data1,a;
    LcdWriteCom(0x01);  //清屏
    for(data1=0;data1     {
        a=At24c02Read(data1)+0x30;             //存储软件读AT24c02的一个地址的一个数据,LCD简介最后字符代码与字符图形对应关系中,高位为0011那一列显示的是0~9数字
         LcdWriteData(a);             //向LCD写入一个字节数据
      delay(1000);    
  }    
    delay(1000);
    LcdInit();      //初始化LCD屏
    delay(1000);
    Step=0;   //初值
    Step5=0;     
    Error_Num=0x00;  //错误次数初值为0
  Read_Password();
    while(1)
                {    
                                key_num=KeyDown();                   //读取输入值

                                        switch(Step)
                                        {
                                                case 0:
                                                 {Step_0();break;}
                                                case 1:
                                                 {Step_1();break;}
                                                case 2:
                                                 {Step_2();break;}
                                                case 3:
                                                 {Step_3();break;}    
                                                case 4:
                                                 {Step_4();break;}    
                                                case 5:
                                                 {Step_5();break;}    
                                                case 6:
                                                 {Step_6();break;}    
                                                  
                                        }

                 }                
}

 

 

void Read_Password()
{
    unsigned char j;

    Load_first_flag=At24c02Read(0x00); //读取0x00地址的数据
    if(Load_first_flag==0)                  //初次运行(存储数据是从0地址开始按顺序存的)
    {
    
        Load_first_flag=1;
        At24c02Write(0,0x01);    //先地址后数据,在最开始地址处写上1,
        delay(100);
        At24c02Write(1,0x06);           //写默认密码长度6至EEPROM
        delay(100);
        for(j=0;j         {
            At24c02Write(j+2,1);              //写默认密码111111至EEPROM +2是因为第一位写上了第几次运行第二位写上了密码长度
            PASSWORD[j]=INPUT_PW_Tab[j];     //读密码  INPUT_PW_Tab[j]
            delay(100);
        }
    }
    
    Load_first_flag=At24c02Read(0x00);
    PassWord_Length=At24c02Read(0x01); //读取密码长度
    for(j=0;j     {
        PASSWORD[j]=At24c02Read(j+2); //加2同上述写默认密码一样,将实际输入的密码存入24c02内
    }
    
}

你可能感兴趣的:(电子密码锁的程序,主函数中for循环不太明白什么意思,还有就是硬件中输入密码正确也是显示错误不知道问题在哪 读密码 INPUT_PW_Tab[j这个也不明白,有明白的小伙伴交流一下啊)