1423|3

1532

帖子

1

TA的资源

五彩晶圆(初级)

楼主
 

【HC32F4A0开发板测评】+矩阵按键及其测试 [复制链接]

 
本帖最后由 jinglixixi 于 2023-3-1 00:44 编辑

在HC32F4A0开发板上配有3*3的矩阵按键,其电路如图1所示。

为掌握其用法,特为它配置了OLED屏来直接显示其触动的按键,其输出效果如图2所示。

图1 原理图

 

图2 检测效果

实现该效果的主程序为:

int32_t main(void)
{
    LL_PERIPH_WE(LL_PERIPH_EFM | LL_PERIPH_FCG | LL_PERIPH_GPIO | LL_PERIPH_PWC_CLK_RMU | LL_PERIPH_SRAM);
    BSP_CLK_Init();
    BSP_IO_Init();
    BSP_LED_Init();
    KEYSCAN_ROW0_Init();
    KEYSCAN_ROW1_Init();
    KEYSCAN_ROW2_Init();
    KEYSCAN_COL_Init();
    EXTINT_ClearExtIntStatus(KEYSCAN_ROW0_EXTINT);
    EXTINT_ClearExtIntStatus(KEYSCAN_ROW1_EXTINT);
    EXTINT_ClearExtIntStatus(KEYSCAN_ROW2_EXTINT);
    KEYSCAN_Cmd(ENABLE);
	LED_Init();
	OLED_Init();
    OLED_Clear();
	OLED_ShowString(20,0,"HC32F4A0",16);
	OLED_ShowString(20,4,"KEY",16);  
    LL_PERIPH_WP(LL_PERIPH_EFM | LL_PERIPH_FCG | LL_PERIPH_GPIO | LL_PERIPH_PWC_CLK_RMU | LL_PERIPH_SRAM);
    for (;;) {
        ;
    }
}

   

由于该矩阵按键是采用扫描的方式进行处理,故它是按行来判别的,并指示出是哪一列的按键被按下。

为此,3个按行进行判别的函数为:

static void KEYSCAN_ROW0_IrqCallback(void)
{
    if (SET == EXTINT_GetExtIntStatus(KEYSCAN_ROW0_EXTINT)) {
        BSP_LED_Toggle(LED_BLUE);
        DDL_Printf("Key row 0, col %ld is pressed.\r\n", KEYSCAN_GetKeyoutIdx());
        OLED_ShowNum(44,4,1+KEYSCAN_GetKeyoutIdx(),3,16);
        while (PIN_RESET == GPIO_ReadInputPins(KEYIN0_PORT, KEYIN0_PIN));
        EXTINT_ClearExtIntStatus(KEYSCAN_ROW0_EXTINT);
    }
}
static void KEYSCAN_ROW1_IrqCallback(void)
{
    if (SET == EXTINT_GetExtIntStatus(KEYSCAN_ROW1_EXTINT)) {
        BSP_LED_Toggle(LED_YELLOW);
        DDL_Printf("Key row 1, col %ld is pressed.\r\n", KEYSCAN_GetKeyoutIdx());
        OLED_ShowNum(44,4,4+KEYSCAN_GetKeyoutIdx(),3,16);
        while (PIN_RESET == GPIO_ReadInputPins(KEYIN1_PORT, KEYIN1_PIN));
        EXTINT_ClearExtIntStatus(KEYSCAN_ROW1_EXTINT);
    }
}

static void KEYSCAN_ROW2_IrqCallback(void)
{
    if (SET == EXTINT_GetExtIntStatus(KEYSCAN_ROW2_EXTINT)) {
        BSP_LED_Toggle(LED_RED);
        DDL_Printf("Key row 2, col %ld is pressed.\r\n", KEYSCAN_GetKeyoutIdx());
        OLED_ShowNum(44,4,7+KEYSCAN_GetKeyoutIdx(),3,16);
        while (PIN_RESET == GPIO_ReadInputPins(KEYIN2_PORT, KEYIN2_PIN));
        EXTINT_ClearExtIntStatus(KEYSCAN_ROW2_EXTINT);
    }
}

 

此外,还以3个LED灯来指示所触动的是哪一行,即蓝色LED标识第1行,黄色LED标识第2行,红色LED标识第3行。并以LED灯的亮灭来指示触发是奇数次还是偶数次,奇数次是亮,偶数次是灭。

图3 初始状态

 

图4 首次按下K1键

 

图5 再次按下K1键

 

图6 按下K5键

 

图7按下K9键

当依次按下3行按键时,由于每行均是首次被触动,故蓝黄红3个LED灯均被点亮,见图8所示。

此外,值得学习的是蓝黄红这3个LED灯是由一个I2C接口的芯片TCA9539控制的。

 

图8依次按下3行键

 

 

   

 

最新回复

楼主的图片大小一致 word转过来的?   详情 回复 发表于 2023-3-1 09:57
点赞 关注
 
 

回复
举报

7044

帖子

11

TA的资源

版主

沙发
 

按键学习,基础知识,感谢分享!

 
 
 

回复

6107

帖子

4

TA的资源

版主

板凳
 

楼主的图片大小一致 word转过来的?

点评

嗨,是截的图然后贴上去的。  详情 回复 发表于 2023-3-1 23:25
 
 
 

回复

1532

帖子

1

TA的资源

五彩晶圆(初级)

4
 
damiaa 发表于 2023-3-1 09:57 楼主的图片大小一致 word转过来的?

嗨,是截的图然后贴上去的。

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表