51单片机矩阵键盘
goto用于编辑完PassKey后跳出if返回到开头
#include <REGX52.H>
#include "Delay.h"
#include "LCD1602.h"
#include "MatrixKey.h" //按键检测
//#define Passkey 1234
unsigned char KeyNum;
unsigned int Count=0,PassWord,PassKey;
void main()
{
LCD_Init(); //1602初始化
PassKey=1234;
LCD_ShowString(1,1,"PassWord: ");
LCD_ShowNum(2,1,PassWord,4);
while(1)
{
loop:
KeyNum=MatrixKey();
if(KeyNum) //检测按键按下
{
if(KeyNum<=10) //输入范围S1——S10
{
if(Count<4) //限定输入4位数 9999<65536<99999
{
PassWord*=10; //左移一位
PassWord+=KeyNum%10; //累加,其中S10=0
Count++;
}
LCD_ShowNum(2,1,PassWord,4); //更新显示
}
if(KeyNum==11) //如果S11按下,确认位
{
if(PassWord==PassKey) //如果正确
{
LCD_ShowString(1,13,"GOOD");
PassWord=0;
Count=0; //密码和计次清零
LCD_ShowNum(2,1,PassWord,4); //更新显示
}
else //如果密码错误
{
LCD_ShowString(1,13,"ERR ");
PassWord=0;
Count=0;
LCD_ShowNum(2,1,PassWord,4); //更新显示
}
}
if(KeyNum==12) //删除刚输入的一位,取消位
{
PassWord/=10;
Count--;
LCD_ShowNum(2,1,PassWord,4); //更新显示
}
/*更改密码*/
if(KeyNum==13)
{
//while(1)
//{
PassKey=0;
Count=0;
LCD_ShowString(1,1,"PassKey: ");
if(KeyNum<=10)
{
if(Count<4)
{
PassKey*=10;
PassKey+=KeyNum%10;
Count++;
LCD_ShowNum(2,1,PassKey,4);
}
}
if(KeyNum==12)
{
PassKey/=10;
Count--;
LCD_ShowNum(2,1,PassKey,4);
}
//}
}
if(KeyNum==14)
{
Count=0;
PassWord=0;
LCD_ShowString(1,1,"PassWord: ");
LCD_ShowNum(2,1,PassWord,4);
goto loop;
}
}
}
}