- 16.1. 直接拷贝上一节的工程目录,更改目录名称成为新的工程“ 6-2 矩阵键盘密码锁”
#include <REGX52.h>
#include "LCD1602.h"
#include "delay_xms.h"
#include "MatrixKey.h"
unsigned char KeyNum,countnum; //定义KeyNum接一下MatrixKey返回值
unsigned int psw;
void main()
{
LCD_Init(); //LCD1602初始化
LCD_ShowString(1,1,"Password:");
while(1)
{
KeyNum=MatrixKey();//KeyNum接返回的MatrixKey返回值
if(KeyNum) //如果KeyNum不为0,即为真1,如果不加此if判断
//则按键按下的时候瞬间跳一个S*的值然后归0000
//进入到下一个循环中!!
{
if(KeyNum<=10) //如果S1~S10按键按下,输入密码
{
if(countnum<4)
{
psw*=10; //密码左移一位
psw+=KeyNum%10; //获取一位密码,让S10按下的时候为0;
countnum++;
}
LCD_ShowNum(2,1,psw,4);
}
if(KeyNum==11) //S11定义为确认键
{
if(psw==2345) //如果密码等于正确密码2345
{
LCD_ShowString(1,14,"OK "); //显示OK
psw=0; //密码清零
countnum=0; //计次清零
LCD_ShowNum(2,1,psw,4); //清零后继续显示
}
else //如果不等于正确密码
{
LCD_ShowString(1,14,"ERR"); //显示ERR错误
psw=0; //密码清零
countnum=0; //计次清零
LCD_ShowNum(2,1,psw,4); //清零后继续显示
}
}
if(KeyNum==12) //S12 定义为取消键,直接密码和计次清零,重新输入
{
psw=0; //密码清零
countnum=0; //计次清零
LCD_ShowNum(2,1,psw,4); //清零后继续显示
}
}
}
}
-
16.2. Proteus测试没问题;
-
16.3. 小结:
-
程序设计要有结构化的思维;
-
主要难点在于逻辑表达;
-
边设计边测试比较好;