矩阵键盘及密码锁(基于51单片机)

师从江科大

矩阵键盘介绍

在键盘中按键数量较多时,为减少I/O口的占用,通常将按键排列成矩阵形式。采用逐行或逐列的“扫描”,就可以读出任何位置按键的状态。

 矩阵键盘扫描方法

在电子电路设计中,尤其是在键盘或矩阵按键的处理上,行扫描和列扫描是两种常见的检测按键状态的方法,尤其是对于多按键系统(如矩阵键盘)。

  1. 按行扫描(Row Scanning): 在矩阵键盘中,按键被排列成行和列的形式。按行扫描是指将键盘的行线设置为输入,而列线设置为输出,并逐行地给每一行线赋予高电平(使能),同时检测所有列线的电平状态。如果某一列线检测到低电平,则表示该列与当前激活行相交的按键被按下。然后继续切换下一行线为高电平,重复检测过程,直到所有行都检查完毕。

  2. 按列扫描(Column Scanning): 与此相反,在按列扫描方式下,列线设置为输入,行线设置为输出。此时,逐列地给每一列线赋予低电平(拉低),同时读取所有行线的电平状态。若某一行为低电平,则表示该行与当前激活列相交的按键被按下。同样地,持续对剩余列进行同样的操作,直至完成所有列的扫描。

准双向口

准双向口(Quasi-bidirectional Port)是指在数字电路和微控制器中,具有输入和输出功能,但其输入和输出操作不能同时进行的I/O端口。这类端口通常设计为能够通过软件配置实现数据输入或数据输出。

矩阵键盘代码

main.c

#include <REGX52.H>
#include "Delay.h"
#include "LCD1602.h"
#include "MatrixKey.h"

unsigned char KeyNum;

void main()
{
		LCD_Init();
		LCD_ShowString(1,1,"MatrixKey:");
		while(1)
		{
			KeyNum=MatrixKey();
			if(KeyNum)
			{
					LCD_ShowNum(2,1,KeyNum,2);
			}
		}
}

Delay.c


void Delay(unsigned int xms)	//@12.000MHz
{
	unsigned char data i, j;
	while(xms--)
	{
			i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
	}
	
}

Delay.h

#ifndef __DELAY_H__
#define __DELAY_H__

void Delay(unsigned int xms);	//@12.000MHz;

#endif

LCD1602.c

#include <REGX52.H>

//引脚配置:
sbit LCD_RS=P2^6;
sbit LCD_RW=P2^5;
sbit LCD_EN=P2^7;
#define LCD_DataPort P0

//函数定义:
/**
  * @brief  LCD1602延时函数,12MHz调用可延时1ms
  * &
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乘~风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值