51单片机入门_江协科技_15~16_OB记录的笔记-16. 矩阵键盘密码锁

时间:2024-04-08 14:47:07
  • 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. 小结:

  • 程序设计要有结构化的思维;

  • 主要难点在于逻辑表达;

  • 边设计边测试比较好;