Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 29 additions & 29 deletions Project/key.c
Original file line number Diff line number Diff line change
@@ -1,33 +1,33 @@
#include "key.h"

#define KEY_PLUS 11
#define KEY_MINUS 12
#define KEY_cheng 13
#define KEY_chu 14
#define KEY_equal 30
#define KEY_negate 40
#define KEY_point

/* 行引脚和列引脚数组 */
int h_arr[4] = {KEY_H1_PIN, KEY_H2_PIN, KEY_H3_PIN, KEY_H4_PIN};
int v_arr[4] = {KEY_V1_PIN, KEY_V2_PIN, KEY_V3_PIN, KEY_V4_PIN};

/* 获取矩阵键盘键值
* 返回值: 0~9 = 数字键, 11~14/30/40 = 功能键, 20 = 无按键按下
*/
int getKeyValue(void)
{
int h_arr[4] = {KEY_H1_PIN, KEY_H2_PIN, KEY_H3_PIN, KEY_H4_PIN};
int v_arr[4] = {KEY_V1_PIN, KEY_V2_PIN, KEY_V3_PIN, KEY_V4_PIN};
int i, j = 0;
int key_value = 20;
int key_value = KEY_NONE; /* 默认值 20 表示无按键按下 */

/* 逐行扫描 */
for (i = 0; i < 4; i++)
{
delay_cycles(1000);

/* 设置当前行为高电平,其余行为低电平 */
DL_GPIO_setPins(KEY_PORT, h_arr[i]);
DL_GPIO_clearPins(KEY_PORT, h_arr[(i + 1) % 4]);
DL_GPIO_clearPins(KEY_PORT, h_arr[(i + 2) % 4]);
DL_GPIO_clearPins(KEY_PORT, h_arr[(i + 3) % 4]);

delay_cycles(100000);

/* 读取列状态 */
for (j = 0; j < 4; j++)
{
if (DL_GPIO_readPins(KEY_PORT, v_arr[j]) != 0)
Expand All @@ -39,26 +39,26 @@ int getKeyValue(void)

delay_cycles(1000);
}


if(key_value == 1){key_value = 1;}
else if(key_value == 5){key_value = 2;}
else if(key_value == 9){key_value = 3;}
else if(key_value == 2){key_value = 4;}
else if(key_value == 6){key_value = 5;}
else if(key_value == 10){key_value = 6;}
else if(key_value == 3){key_value = 7;}
else if(key_value == 7){key_value = 8;}
else if(key_value == 11){key_value = 9;}
else if(key_value == 8){key_value = 0;}

else if(key_value == 13){key_value = KEY_PLUS;}
else if(key_value == 14){key_value = KEY_MINUS;}
else if(key_value == 15){key_value = KEY_cheng;}
else if(key_value == 16){key_value = KEY_chu;}
else if(key_value == 12){key_value = KEY_equal;}
else if(key_value == 4){key_value = KEY_negate;}
/* 键值映射:将矩阵位置转换为实际键值 */
if(key_value == 1) {key_value = 1;} /* 数字 1 */
else if(key_value == 5) {key_value = 2;} /* 数字 2 */
else if(key_value == 9) {key_value = 3;} /* 数字 3 */
else if(key_value == 2) {key_value = 4;} /* 数字 4 */
else if(key_value == 6) {key_value = 5;} /* 数字 5 */
else if(key_value == 10) {key_value = 6;} /* 数字 6 */
else if(key_value == 3) {key_value = 7;} /* 数字 7 */
else if(key_value == 7) {key_value = 8;} /* 数字 8 */
else if(key_value == 11) {key_value = 9;} /* 数字 9 */
else if(key_value == 8) {key_value = 0;} /* 数字 0 */

else if(key_value == 13) {key_value = KEY_PLUS;} /* 加号 */
else if(key_value == 14) {key_value = KEY_MINUS;} /* 减号 */
else if(key_value == 15) {key_value = KEY_CHENG;} /* 乘号 */
else if(key_value == 16) {key_value = KEY_CHU;} /* 除号 */
else if(key_value == 12) {key_value = KEY_EQUAL;} /* 等号 */
else if(key_value == 4) {key_value = KEY_NEGATE;} /* 取反 */


return key_value; // û�а��£�����0
}
return key_value; // 无按键按下返回 20
}
29 changes: 24 additions & 5 deletions Project/key.h
Original file line number Diff line number Diff line change
@@ -1,23 +1,42 @@
/**
* @file key.h
* @details ��������key.c���⿪�ŵĺ���
* @details 矩阵键盘驱动头文件,声明 key.c 中开放的函数
* @author zjs
*/
#ifndef _KEY_H_
#define _KEY_H_
/*
===========================
ͷ�ļ�����
头文件包含
===========================
*/
#include "ti_msp_dl_config.h"
/*
===========================
��������
函数声明
===========================
*/

/* ��ȡ������̼�ֵ */
/* 矩阵键盘统一键值定义 */
#define KEY_DIGIT_0 0
#define KEY_DIGIT_1 1
#define KEY_DIGIT_2 2
#define KEY_DIGIT_3 3
#define KEY_DIGIT_4 4
#define KEY_DIGIT_5 5
#define KEY_DIGIT_6 6
#define KEY_DIGIT_7 7
#define KEY_DIGIT_8 8
#define KEY_DIGIT_9 9
#define KEY_PLUS 11
#define KEY_MINUS 12
#define KEY_CHENG 13
#define KEY_CHU 14
#define KEY_NONE 20
#define KEY_EQUAL 30
#define KEY_NEGATE 40

/* 获取矩阵键盘键值 */
int getKeyValue(void);

#endif
#endif
Loading