波特律动
课程中心/51单片机教程/【11】矩阵键盘

【11】矩阵键盘



本课资源下载
共 1 个资源
P11矩阵键盘

本节课的标准源代码工程/可供参考

V1.0压缩包24 KB
下载

课程笔记


本节目标概括

创建main.c > 编写点灯代码 > 编译HEX文件 > 下载到学习板 > 运行按键逻辑

编译并下载程序到学习板,即可看到程序效果:

  • 按下按键,对应LED会亮起
  • 左上角按键编为1,向右下递增。LED会以二进制形式显示按键编号

例程讲解

矩阵按键的逻辑函数:

C语言
1unsigned char key = 0;
2
3// 矩阵键盘第一行到第四行分别是P2的第0到3位,第一列到第四列分别是P2的第4到7位
4// 实现按键扫描,函数返回按键值,按键值范围1~16,未按键返回0
5unsigned char keyscan(void)
6{
7 unsigned char key_value = 0;
8
9 // 扫描第一行
10 row1 = 0;
11 row2 = 1;
12 row3 = 1;
13 row4 = 1;
14 if (col1 == 0) {key_value = 1;}
15 else if (col2 == 0) {key_value = 2;}
16 else if (col3 == 0) {key_value = 3;}
17 else if (col4 == 0) {key_value = 4;}
18
19 // 扫描第二行
20 row1 = 1;
21 row2 = 0;
22 row3 = 1;
23 row4 = 1;
24 if (col1 == 0) {key_value = 5;}
25 else if (col2 == 0) {key_value = 6;}
26 else if (col3 == 0) {key_value = 7;}
27 else if (col4 == 0) {key_value = 8;}
28
29 // 扫描第三行
30 row1 = 1;
31 row2 = 1;
32 row3 = 0;
33 row4 = 1;
34 if (col1 == 0) {key_value = 9;}
35 else if (col2 == 0) {key_value = 10;}
36 else if (col3 == 0) {key_value = 11;}
37 else if (col4 == 0) {key_value = 12;}
38
39 // 扫描第四行
40 row1 = 1;
41 row2 = 1;
42 row3 = 1;
43 row4 = 0;
44 if (col1 == 0) {key_value = 13;}
45 else if (col2 == 0) {key_value = 14;}
46 else if (col3 == 0) {key_value = 15;}
47 else if (col4 == 0) {key_value = 16;}
48
49 return key_value;
50}


主函数:

C语言
1#include <STC89C5xRC.H>
2#include <key.h>
3#include <LCD1602.h>
4
5
6void main()
7{
8 matrixPort = 0xFF;
9
10 while (1)
11 {
12 delay(20);
13 key = keyscan();
14 if (key)
15 {
16 matrixPort = ~key; // 将按键值显示在P0口
17 }
18 else
19 {
20 matrixPort = 0xFF; // 无按键时,P0口熄灯
21 }
22 }
23}