【11】矩阵键盘
本课资源下载
共 1 个资源P11矩阵键盘
本节课的标准源代码工程/可供参考
课程笔记
本节目标概括
创建main.c > 编写点灯代码 > 编译HEX文件 > 下载到学习板 > 运行按键逻辑
编译并下载程序到学习板,即可看到程序效果:
- 按下按键,对应LED会亮起
- 左上角按键编为1,向右下递增。LED会以二进制形式显示按键编号
例程讲解
矩阵按键的逻辑函数:
C语言
1unsigned char key = 0;23// 矩阵键盘第一行到第四行分别是P2的第0到3位,第一列到第四列分别是P2的第4到7位4// 实现按键扫描,函数返回按键值,按键值范围1~16,未按键返回05unsigned char keyscan(void)6{7 unsigned char key_value = 0;89 // 扫描第一行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;}1819 // 扫描第二行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;}2829 // 扫描第三行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;}3839 // 扫描第四行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;}4849 return key_value;50}
主函数:
C语言
1#include <STC89C5xRC.H>2#include <key.h>3#include <LCD1602.h>456void main()7{8 matrixPort = 0xFF;910 while (1)11 {12 delay(20);13 key = keyscan();14 if (key)15 {16 matrixPort = ~key; // 将按键值显示在P0口17 }18 else19 {20 matrixPort = 0xFF; // 无按键时,P0口熄灯21 }22 }23}