栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【51单片机】矩阵键盘

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【51单片机】矩阵键盘

矩阵按键模块

 

 //学习B站江科大自化协51单片机入门教程

视频讲解矩阵键盘按列扫描,不与蜂鸣器冲突

扫描第一列时候给P1口高电平(0xFF),然后给第一列低电平(P1_3=0;)

这时判断是第一列哪个按键按下即可

示例代码如下:

//采用逐列扫描,不与蜂鸣器冲突
unsigned char Matrixkey()
{
	unsigned char Keynumber=0;

	
	P1=0xFF;//P1按键全给高电平
	P1_3=0;//再给P1_3一个低电平,扫描第一列
	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按键全给高电平
	P1_2=0;//再给P1_2一个低电平,扫描第二列
	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按键全给高电平
	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按键全给高电平
	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;
}

然后在main.c主函数定义一个全局变量,放在while(1)里调用即可

unsigned char KeyNum;//矩阵键盘返回值接口

#include 
#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);    //在LCD1602上显示按键键码数值
		}
		
	}
	
}

延时函数封装起来了
函数如下:

#include "Delay.h"
//延时1ms函数

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

函数比较少,可以不模块化,也可以把矩阵按键函数和延时函数都放在main.c里

//有问题可以评论或私信

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1037363.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号