学习日志-C51-矩阵键盘与LCD1602

学习日志-C51-矩阵键盘与LCD1602简易密码锁
矩阵键盘:
在这里插入图片描述
采用逐行或者逐列扫描,即可读取任意一个按键状态。
采用逐列扫描:
P13、P12、P11、P10四列中选取一个赋值为0,其余为1,在读取行P17、P16、P15、P14的电平状态,按下即低电平。
采用逐行扫描:
P17、P16、P15、P14四行中选取一个赋值为0,其余为1,在读取列P13、P12、P11、P10
的电平状态,按下即低电平。
LCD1602函数及作用:
在这里插入图片描述
可利用上述函数实现相关显示。
以下为部分代码
矩阵键盘(逐列扫描):

#include <REGX52.H>
#include "delay.h"
unsigned char matrixkey()
{
	unsigned char keynumber=0;
	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;

}
	

矩阵键盘(逐行扫描):

#include <REGX52.H>
#include "delay.h"
unsigned char matrixkey()
{
	unsigned char keynumber=0;
	P1=0xff;
	P1_7=0;
	if(P1_3==0){Delay(20);while(P1_3==0);Delay(20);keynumber=1;}
	if(P1_2==0){Delay(20);while(P1_2==0);Delay(20);keynumber=2;}
	if(P1_1==0){Delay(20);while(P1_1==0);Delay(20);keynumber=3;}
	if(P1_0==0){Delay(20);while(P1_0==0);Delay(20);keynumber=4;}
	P1=0xff;
	P1_6=0;
	if(P1_3==0){Delay(20);while(P1_3==0);Delay(20);keynumber=5;}
	if(P1_2==0){Delay(20);while(P1_2==0);Delay(20);keynumber=6;}
	if(P1_1==0){Delay(20);while(P1_1==0);Delay(20);keynumber=7;}
	if(P1_0==0){Delay(20);while(P1_0==0);Delay(20);keynumber=8;}
	P1=0xff;
	P1_5=0;
	if(P1_3==0){Delay(20);while(P1_3==0);Delay(20);keynumber=9;}
	if(P1_2==0){Delay(20);while(P1_2==0);Delay(20);keynumber=10;}
	if(P1_1==0){Delay(20);while(P1_1==0);Delay(20);keynumber=11;}
	if(P1_0==0){Delay(20);while(P1_0==0);Delay(20);keynumber=12;}
	P1=0xff;
	P1_4=0;
	if(P1_3==0){Delay(20);while(P1_3==0);Delay(20);keynumber=13;}
	if(P1_2==0){Delay(20);while(P1_2==0);Delay(20);keynumber=14;}
	if(P1_1==0){Delay(20);while(P1_1==0);Delay(20);keynumber=15;}
	if(P1_0==0){Delay(20);while(P1_0==0);Delay(20);keynumber=16;}
	return keynumber;

}

主函数:

#include <REGX52.H>
#include "delay.h"
#include "LCD1602.h"
#include "matrixkey.h"

unsigned char keynum;
unsigned int password,count;
void main()
{
	LCD_Init();
	LCD_ShowString(1,1,"PASSWORD");
	while(1)
	{
		keynum=matrixkey();
		if(keynum)//非0即真
		{
			if(keynum<=10)//设置前10位为密码位
			{
				if(count<4)//设置按键次数为4,超过4不予读取
				{
					password*=10;//possword=possword*10,使得密码可以左移一位
					password+=keynum%10;//password=password+keynum%10,1~9对10取余还为本身,10对10取余即为0
					count++;//次数加1
				}
		LCD_ShowNum(2,1,password,4);
			}
		if(keynum==11)//设置按键11为确认键
		{
			if(password==1720)//设置正确密码,注意若首位为0,比如0720,则此处设为password==720即可
			{
				LCD_ShowString(1,12,"OK   ");
				password=0;//密码清零
				count=0;//计次清零
				LCD_ShowNum(2,1,password,4);//显示归0,password=0000
			}
			else
			{
			  LCD_ShowString(1,12,"NO   ");
				password=0;
				count=0;
				LCD_ShowNum(2,1,password,4);
			}
		
		}
		if(keynum==12)//设置按键12为取消键
		{
		    LCD_ShowString(1,12,"again");
				password=0;
				count=0;
				LCD_ShowNum(2,1,password,4);
		
		}
		
		}
	
	}

}

LCD1602代码等可在我的资源处自行下载,或者UP主江协科技处下载。

  • 14
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值