C51矩阵键盘+LPC1602显示
P1_(0,1,2,3,4,5,6,7)引脚控制16个按键
通过扫描法实现按键使用
代码如下
P1=0XFF;
P1_3=0;
if(P1_7==0){delay(20);while(P1_7==0);delay(20);keynumber=1;}
if(P1_6==0){delay(20);while(P1_6==0);delay(20);keynumber=5;}
if(P1_5==0){delay(20);while(P1_5==0);delay(20);keynumber=9;}
if(P1_4==0){delay(20);while(P1_4==0);delay(20);keynumber=13;}
P1=0XFF;
P1_2=0;
if(P1_7==0){delay(20);while(P1_7==0);delay(20);keynumber=2;}
if(P1_6==0){delay(20);while(P1_6==0);delay(20);keynumber=6;}
if(P1_5==0){delay(20);while(P1_5==0);delay(20);keynumber=10;}
if(P1_4==0){delay(20);while(P1_4==0);delay(20);keynumber=14;}
P1=0XFF;
P1_1=0;
if(P1_7==0){delay(20);while(P1_7==0);delay(20);keynumber=3;}
if(P1_6==0){delay(20);while(P1_6==0);delay(20);keynumber=7;}
if(P1_5==0){delay(20);while(P1_5==0);delay(20);keynumber=11;}
if(P1_4==0){delay(20);while(P1_4==0);delay(20);keynumber=15;}
P1=0XFF;
P1_0=0;
if(P1_7==0){delay(20);while(P1_7==0);delay(20);keynumber=4;}
if(P1_6==0){delay(20);while(P1_6==0);delay(20);keynumber=8;}
if(P1_5==0){delay(20);while(P1_5==0);delay(20);keynumber=12;}
if(P1_4==0){delay(20);while(P1_4==0);delay(20);keynumber=16;}
return keynumber;
如何实现LPC1602显示相应按键数字
通过将按键对应数字赋值给形参变量,作为返回值给到主函数(主函数已经添加lpc1602.c和lpc1602.h文件),将返回值通过调用LCD_shownum( , , , ,)函数显示相应按键数字
关键处
if(返回值非零)
{实现显示操作}
如何做一个4位密码锁
1.通过移位来实现
//password*=10;
password+=number%10;//
2.实现4位输入,之后输入无效
int count=0;
if(count<4){进行移位代码}
count++;
3.控制只有按键1到10才显示对应数字(10显示0)
if(返回值<=10)
{…}
4.实现按键11判断密码对错
if(number==11)
{
if(password==1314)
{
LCD_ShowString(2,1,"you are right!");
}
else
{
LCD_ShowString(2,1,"you are false!");
}
}
5.实现按键12复位(4位全部清零)
if(number==12)
{
LCD_Init();
password=0;
count=0;
LCD_ShowString(2,1,"ONCE AGAIN!");
LCD_ShowString(1,1,"shownum:");
}
遗留问题(未解决)
当设定密码为0开头(0111…)
无法实现输入相应密码依旧错误,问题可能出现在if(返回值非零){…}返回值非零才进行接下来的代码操作,第一为零时,语句就没有进行操作使得密码错误。