阿里云网站备案要多久,美丽深圳公众号二维码原图,常见的网站推广途径,app定制开发报价1.功能说明 本设计主要是利用STM32驱动矩阵薄膜键盘#xff0c;当按下按键后OLED显示屏上会对应显示当前的按键键值#xff0c;可以将此设计扩展做成电子秤、超市收银机、计算器等需要多个按键操作的单片机应用。 2.硬件接线
模块管脚STM32单片机管脚矩阵键盘行1PA0矩阵键盘…1.功能说明 本设计主要是利用STM32驱动矩阵薄膜键盘当按下按键后OLED显示屏上会对应显示当前的按键键值可以将此设计扩展做成电子秤、超市收银机、计算器等需要多个按键操作的单片机应用。 2.硬件接线
模块管脚STM32单片机管脚矩阵键盘行1PA0矩阵键盘行2PA1矩阵键盘行3PA2矩阵键盘行4PA3矩阵键盘列1PA4矩阵键盘列2PA5矩阵键盘列3PA6矩阵键盘列4PA70.96寸OLED显示屏SCLPB60.96寸OLED显示屏SSDAPB7
3.软件代码 // 定义字符型的4x4矩阵薄膜键盘映射表
char key_map[4][4] {{1, 2, 3, A},{4, 5, 6, B},{7, 8, 9, C},{*, 0, #, D}
};// IO端口结构体定义用于描述GPIO端口和针脚
struct IO_PORT
{ GPIO_TypeDef *GPIO_x; // GPIO端口地址 unsigned short GPIO_pin; // GPIO端口的针脚
};// 定义行输出的GPIO端口和针脚数组
static struct IO_PORT KEY_OUT[4] {{BUTTON_ROW1_GPIO_PORT, BUTTON_ROW1_GPIO_PIN},{BUTTON_ROW2_GPIO_PORT, BUTTON_ROW2_GPIO_PIN},{BUTTON_ROW3_GPIO_PORT, BUTTON_ROW3_GPIO_PIN}, {BUTTON_ROW4_GPIO_PORT, BUTTON_ROW4_GPIO_PIN}
};// 定义列输入的GPIO端口和针脚数组
static struct IO_PORT KEY_IN[4] {{BUTTON_COL1_GPIO_PORT, BUTTON_COL1_GPIO_PIN}, {BUTTON_COL2_GPIO_PORT, BUTTON_COL2_GPIO_PIN},{BUTTON_COL3_GPIO_PORT, BUTTON_COL3_GPIO_PIN}, {BUTTON_COL4_GPIO_PORT, BUTTON_COL4_GPIO_PIN}
};// 定义键盘扫描状态数组
unsigned char key[4][4];// 初始化4x4键盘的函数
void Button4_4_Init(void)
{GPIO_InitTypeDef GPIO_InitStructure;unsigned char i;RCC_APB2PeriphClockCmd(BUTTON_GPIO_CLK, ENABLE); // 使能GPIO时钟// 初始化行输出端口for(i0;i4;i){GPIO_InitStructure.GPIO_Pin KEY_OUT[i].GPIO_pin;GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP; // 设置为推挽输出GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;GPIO_Init(KEY_OUT[i].GPIO_x, GPIO_InitStructure);}// 初始化列输入端口for(i0;i4;i){GPIO_InitStructure.GPIO_Pin KEY_IN[i].GPIO_pin;GPIO_InitStructure.GPIO_Mode GPIO_Mode_IPU; // 设置为输入上拉GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;GPIO_Init(KEY_IN[i].GPIO_x, GPIO_InitStructure);}// 设置行输出高电平准备扫描for(i 0; i 4; i){GPIO_SetBits(KEY_OUT[i].GPIO_x, KEY_OUT[i].GPIO_pin);}
}// 扫描4x4键盘的函数
char Button4_4_Scan(void)
{unsigned char i, j;for(i 0; i 4; i){delay_ms(5); // 延时以稳定信号GPIO_ResetBits(KEY_OUT[i].GPIO_x, KEY_OUT[i].GPIO_pin); // 将当前行置低检测按键for(j 0; j 4; j){delay_ms(5); // 再次延时if(GPIO_ReadInputDataBit(KEY_IN[j].GPIO_x, KEY_IN[j].GPIO_pin) 0) // 读取列状态如果为低则按键被按下{key[i][j] 1; // 记录按键状态GPIO_SetBits(KEY_OUT[i].GPIO_x, KEY_OUT[i].GPIO_pin); // 恢复当前行高电平return key_map[i][j]; // 返回按键对应的字符}else{key[i][j] 0;}}GPIO_SetBits(KEY_OUT[i].GPIO_x, KEY_OUT[i].GPIO_pin); // 恢复当前行高电平}return 0; // 如果没有按键被按下返回0或可以选择返回一个特定的字符表示无输入
}4.获取源码方式
https://download.csdn.net/download/weixin_41011452/90338338