51单片机之矩阵键盘的使用

目录

1:矩阵键盘的结构原理图

2:矩阵键盘的好处及其工作模式 

3:矩阵键盘扫描方式的答疑 

4:代码展示及其解释

5:利用矩阵键盘制作密码锁


首先据我个人理解,矩阵键盘其实和独立按键具有相似之处,独立按键把按键的公共端接在了GND上,另一端接在了IO口上,而矩阵键盘则是把一行的四个单独拿出去就是和独立按键差不多了

2:矩阵键盘的好处及其工作模式 

矩阵键盘的好处:在键盘中按键的数量比较多的时候,为了减少IO口的占用,通常采用按键排列,就像矩阵键盘这种形式,采用逐行扫描或者住逐列扫描就可以读取按键的状态

注意:在单片机中具有一个问题,就是按行扫描的话P15口会一会儿高电平一会儿低电平(P15口会连在五线四相步进电机上然后BZ连接在蜂鸣器上,因为我们这个蜂鸣器是无源蜂鸣器,所以在进行逐行扫描的时候,蜂鸣器会发出声音 )

3:矩阵键盘扫描方式的答疑 

所以一般采用逐列扫描,那么怎么进行逐列扫描呢

首先我们要选取其中的一列,假如把P13赋值为0就相当于选中了第一列,如果要按下S1,那么我们就要进行if(P17==0)的话就是选中了第一行第一列,也就是S1,以此类推,就可以对矩阵键盘进行逐列扫描。

扫描的大致思路就是上面的,那么我们就可以自己写代码了,以下我会将完整的代码写上,并按照自己的思路进行理解

4:代码展示及其解释

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,"Helloworld");
		while(1)
		{
			KeyNum=MatrixKey();
				if(KeyNum)
				{
				  LCD_ShowNum(2,1,KeyNum,2);
				}
		}
	
	}

在这里我们要用到单片机里面的那个显示屏,通过显示屏进行显示,LCD_Init()是对函数进行初始化,LCD_ShowString这个函数是用来在显示屏上进行显示 

Delay.c

void Delay(unsigned int xms)        
{
    unsigned char 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);

#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
  * @param  无
  * @retval 无
  */
void LCD_Delay()
{
	unsigned char i, j;

	i = 2;
	j = 239;
	do
	{
		while (--j);
	} while (--i)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值