我用c51 驱动LCD1602写了一个键盘矩阵密码锁,但是在程序中遇到了一点问题,如下代码中Compare函数是用来比较矩阵输入的密码是否与原先设定的密码是否一致(这里设定的密码是666666),如果一致就在LCD1602第二行最后输出PASS,反之则输出FAIL,但是当我吧程序烧录到c51单片机测试的时候发现以下代码中TEMP的值无论输入的密码是否正确他的值始终是1,经过反复测试发现用户通过矩阵键盘输入的值是正常的,反复检查逻辑也没发现问题所在,望有相关小伙伴解答疑惑,在此献上真挚的感谢!
#include <REGX52.H>
#include "LCD1602.H"
#include "DELAY.H"
#include "MATRIX.H"
unsigned int PASS[6] = {6,6,6,6,6,6};
unsigned int KEY_PASS[6] = {0};
unsigned int KeyNumber = 0;
unsigned int a = 0;
unsigned int j = 0;
unsigned int k = 0;
int TEMP;
int Compare()
{
int i = 0;
// int count = 0;
for(i;i++;i<6)
{
if(KEY_PASS[i] != PASS[i])
return 0;
}
return 1;
}
void BACK_ZERO()
{
int i = 0;
for(i;i++;i<6)
KEY_PASS[i] = 0;
}
void ARR_DEBUG()
{
int i = 0;
for(i; i < 6; i++)
LCD_ShowNum(2,i+7,KEY_PASS[i],1);
}
void main()
{
LCD_Init();
LCD_ShowString(1,1,"Input PassWord:");
LCD_ShowNum(2,1,000000,6);
while(1)
{
++a;
KeyNumber = 0;
//KeyNumber = MatrixKey();
while((KeyNumber = MatrixKey()) == 0 ||
KeyNumber == 11 || KeyNumber == 12 ||
KeyNumber == 13 || KeyNumber == 14 ||
KeyNumber == 15 || KeyNumber == 16);
if(a < 6)
{
if(KeyNumber)
{
if(KeyNumber == 10)
{
KeyNumber = 0;
KEY_PASS[k] = KeyNumber;
LCD_ShowNum(2,a,KeyNumber,1);
k++;
}
else if(KeyNumber < 10)
{
KEY_PASS[k] = KeyNumber;
LCD_ShowNum(2,a,KeyNumber,1);
k++;
}
}
}
else if(a == 6)
{
if(KeyNumber)
{
if(KeyNumber == 10)
{
KeyNumber = 0;
KEY_PASS[k] = KeyNumber;
LCD_ShowNum(2,a,KeyNumber,1);
k = 0;
}
else if(KeyNumber < 10)
{
KEY_PASS[k] = KeyNumber;
LCD_ShowNum(2,a,KeyNumber,1);
k = 0;
}
}
a = 0;
**TEMP = Compare();
if(TEMP)
{
LCD_ShowString(2,13,"PASS");
//LCD_ShowNum(2,12,Compare(),1);
//ARR_DEBUG();
//while(1);
}
else
{
LCD_ShowString(2,13,"FAIL");
//LCD_ShowNum(2,12,Compare(),1);
//ARR_DEBUG();
//while(1);
}**
for(j;j<50;j++)
Delay20ms();
LCD_ShowNum(2,1,000000,6);
LCD_ShowString(2,13," ");
j = 0;
BACK_ZERO();
}
}
}