【51单片机】矩阵键盘

简介: 【51单片机】矩阵键盘

矩阵按键模块

d2eea649996c1a021e50ea16915c0b4f_3484c770c5f54792a88e2556252bc66f.png

 

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

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

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

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

示例代码如下:

1. /**
2.   * @brief  矩阵键盘读取按键键码
3.   * @param  无
4.   * @retval KeyNumber 按下按键的键码值
5.      如果按键按下不放,程序会停留在此函数,松手的一瞬间,返回按键键码,没有按键按下时,   返回0
6.   */
7. //采用逐列扫描,不与蜂鸣器冲突
8. unsigned char Matrixkey()
9. {
10.   unsigned char Keynumber=0;
11. 
12. 
13.   P1=0xFF;//P1按键全给高电平
14.   P1_3=0;//再给P1_3一个低电平,扫描第一列
15.   if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);Keynumber=1;}
16.   if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);Keynumber=5;}
17.   if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);Keynumber=9;}
18.   if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);Keynumber=13;}
19. 
20.   P1=0xFF;//P1按键全给高电平
21.   P1_2=0;//再给P1_2一个低电平,扫描第二列
22.   if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);Keynumber=2;}
23.   if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);Keynumber=6;}
24.   if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);Keynumber=10;}
25.   if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);Keynumber=14;}
26. 
27.   P1=0xFF;//P1按键全给高电平
28.   P1_1=0;//扫描第三列
29.   if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);Keynumber=3;}
30.   if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);Keynumber=7;}
31.   if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);Keynumber=11;}
32.   if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);Keynumber=15;}
33. 
34.   P1=0xFF;//P1按键全给高电平
35.   P1_0=0;//扫描第四列
36.   if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);Keynumber=4;}
37.   if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);Keynumber=8;}
38.   if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);Keynumber=12;}
39.   if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);Keynumber=16;}
40. 
41.   return Keynumber;
42. }

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

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

1. #include <REGX52.H>
2. #include "Delay.h"
3. #include "LCD1602.h"
4. #include "Matrixkey.h"
5. 
6. unsigned char KeyNum;//矩阵键盘返回值接口
7. 
8. void main()
9. {
10.   LCD_Init();
11.   LCD_ShowString(1,1,"MatrixKey:");
12.   while(1)
13.   {
14.     KeyNum = MatrixKey();
15.     if(KeyNum)
16.     {
17.       LCD_ShowNum(2,1,KeyNum,2);    //在LCD1602上显示按键键码数值
18.     }
19. 
20.   }
21. 
22. }

延时函数封装起来了

函数如下:

1. #include "Delay.h"
2. //延时1ms函数
3. 
4. void Delay(int xms) {  //@11.0592MHz
5.  unsigned char i, j;
6.  while (xms--) {
7.    i = 2;
8.    j = 199;
9.    do {
10.       while (--j);
11.     } while (--i);
12.   }
13. }

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



相关文章
|
1天前
|
传感器
51单片机矩阵键盘超详解!(内含LCD1602代码)
51单片机矩阵键盘超详解!(内含LCD1602代码)
12 0
【51单片机】初学者必学的一个矩阵键盘基本项目——(读矩阵键盘的数字显示在LCD屏上)(7)
【51单片机】初学者必学的一个矩阵键盘基本项目——(读矩阵键盘的数字显示在LCD屏上)(7)
|
1天前
|
数据安全/隐私保护
【51单片机】初学者必学的一个矩阵键盘基本项目——(矩阵键盘密码锁)(8)
【51单片机】初学者必学的一个矩阵键盘基本项目——(矩阵键盘密码锁)(8)
|
1天前
|
数据安全/隐私保护
C51单片机实现矩阵键盘密码锁
C51单片机实现矩阵键盘密码锁
48 0
|
10月前
|
C语言
C语言课设项目-51单片机-独立按键与矩阵按键
C语言课设项目-51单片机-独立按键与矩阵按键
142 0
|
10月前
【单片机】数码管矩阵显示
【单片机】数码管矩阵显示
61 0
【STC15单片机】简单的矩阵键盘代码
【STC15单片机】简单的矩阵键盘代码
189 0
|
存储
【51单片机】用定时器扫描矩阵键盘
【51单片机】用定时器扫描矩阵键盘
220 0
|
1天前
|
编译器 C语言 开发者
单片机原理与应用:探索微型计算机世界
单片机原理与应用:探索微型计算机世界
20 1
|
1天前
|
数据采集 数据处理 C语言
单片机:探索其原理、应用与编程实践
单片机:探索其原理、应用与编程实践
21 1