STM32F4实现矩阵键盘

发布者:会哭的蓝精灵最新更新时间:2019-04-08 来源: eefocus关键字:STM32F4  矩阵键盘 手机看文章 扫描二维码
随时随地手机看文章

程序中所使用的矩阵键盘所接的引脚为PC4-PC5、PF11-PF15和PG0,接线方法为常规矩阵键盘的接法,PC4、PC5、PF11、PF12为行线PF13、PF14、PF15、PG0为列线。


矩阵键盘IO口


u8 check_Key(void)

{

        GPIO_InitTypeDef GPIO_InitStructure;

        u8 cord_h=0XFF,cord_l=0XFF;  //h为行线 l为列线

        u8 Val = 0xFF;


        /* 行线 推挽输出 */

        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;

        GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;

        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4|GPIO_Pin_5;

        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz;

        GPIO_Init(GPIOC,&GPIO_InitStructure);


        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11|GPIO_Pin_12;

        GPIO_Init(GPIOF,&GPIO_InitStructure);


        /* 列线 上拉输入 */

        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN;

        GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;

        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;

        GPIO_Init(GPIOG,&GPIO_InitStructure);


        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;

        GPIO_Init(GPIOF,&GPIO_InitStructure);


        /* 行线输出全部设置为0 */

        GPIO_WriteBit(GPIOC, GPIO_Pin_4|GPIO_Pin_5, Bit_RESET);

        GPIO_WriteBit(GPIOF, GPIO_Pin_11|GPIO_Pin_12, Bit_RESET);

        delay_us(1);


        /* 读入列线值 读入的值分别存入低四位 高四位全部为0 */

        cord_l&=(u8)((GPIO_ReadInputDataBit(GPIOF, GPIO_Pin_13)<<0)|

                     (GPIO_ReadInputDataBit(GPIOF, GPIO_Pin_14)<<1)|

                     (GPIO_ReadInputDataBit(GPIOF, GPIO_Pin_15)<<2)|

                     (GPIO_ReadInputDataBit(GPIOG, GPIO_Pin_0)<<3));

        if(cord_l!=0X0F)

        {

            delay_ms(10);       //消抖 延时后再读一次

            cord_l&=(u8)((GPIO_ReadInputDataBit(GPIOF, GPIO_Pin_13)<<0)|

                         (GPIO_ReadInputDataBit(GPIOF, GPIO_Pin_14)<<1)|

                         (GPIO_ReadInputDataBit(GPIOF, GPIO_Pin_15)<<2)|

                         (GPIO_ReadInputDataBit(GPIOG, GPIO_Pin_0)<<3));

            if(cord_l!=0X0F)

            {

                    /* 交换输入信号读取行线值 */


                    /* 列线 推挽输出 */

                    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;

                    GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;


                    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;

                    GPIO_Init(GPIOG,&GPIO_InitStructure);


                    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;

                    GPIO_Init(GPIOF,&GPIO_InitStructure);


                        /* 行线 上拉输入 */                   

                    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN;

                    GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;


                    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4|GPIO_Pin_5;

                    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz;

                    GPIO_Init(GPIOC,&GPIO_InitStructure);


                    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11|GPIO_Pin_12;

                    GPIO_Init(GPIOF,&GPIO_InitStructure);


                    /* 列线输出全部设置为0 */

                    GPIO_WriteBit(GPIOG, GPIO_Pin_0, Bit_RESET);

                    GPIO_WriteBit(GPIOF, GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15, Bit_RESET);

                    delay_ms(2);

                    /* 读入行线值 */

                    cord_h&=(u8)((GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_4)<<3)| 

                                 (GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_5)<<2)|

                                 (GPIO_ReadInputDataBit(GPIOF, GPIO_Pin_11)<<1)|

                                 (GPIO_ReadInputDataBit(GPIOF, GPIO_Pin_12)<<0));


                    Val=~(cord_h<<4|cord_l); //取反 便于分析Val对应的按键

                    return Val;

            }


        }

        return ~Val;

}


关键字:STM32F4  矩阵键盘 引用地址:STM32F4实现矩阵键盘

上一篇:STM32 printf 重定向问题
下一篇:STM32串口发送十六进制的数组

推荐阅读最新更新时间:2024-03-16 16:26

e络盟使STM32F4 Discovery MCU开发套件实现无线网络连接
e络盟近日宣布提供用于意法半导体(ST)STM32F4 Discovery微控制器开发套件的Discover Wi-Fi开发板,以实现无线连接。Discover Wi-Fi开发板采用Murata SN8200无线网络控制器模块,可提供板载Wi-Fi功能及网络软件栈,是各种高性能、低功耗无线解决方案的完美选择。 Discover Wi-Fi开发板插入意法半导体的STM32F4 Discovery套件后,借助UART和SPI命令接口以及工作频段在2.4 GHz的 IEEE802.11b/g/n标准可提供一系列的广泛功能。Discover Wi-Fi开发板还配备源代码、文档及软件演示,有利于快速启动无线网络项目。 亚太区用户现可
[单片机]
STC89C52单片机 矩阵键盘
矩阵键盘识别方法 矩阵键盘一共有4行和4列一共16个按键组成。 确定矩阵键盘上哪一个按键被按下可以采用列扫描和行扫描。列扫描时先把接在列上面的所有IO口拉高,接在行上的所有IO置低。当其中有一列内任何一个按键按下那么整条列线都会被拉低。 当进行列扫描的时候: P30/TXD:IO口为 0 P31/RXD:IO口为 0 P32/INT0:IO口为 0 P33/INT1:IO口为 0 P34/LCDEN:IO口为 1 P35/RS:IO口为 1 P36/WE:IO口为 1 P37/RD:IO口为 1 当进行行扫描的时候 P30/TXD:IO口为 1 P31/RXD:IO口为 1 P32/INT0:IO口为 1 P33
[单片机]
STC89C52单片机 <font color='red'>矩阵键盘</font>
STM32F429和F103端口重映射
它自己默认每个管脚有自己的复用功能,但是这个管脚你用了,但你想要用它的其他功能,你就可以将这个功能重映射到其他管脚。使用复用功能是要保持一个功能使能,其他功能非使能状态 重映射指的是内部功能转移到别的引脚上去,芯片内部已经固定了只能映射到固定的地方。若使用TIM3重映射到其他引脚上,则先要配置TIM3重映射到该引脚,然后在按该引脚的复用功能配置 F103重映射实例: 1.打开重映射时钟和USART重映射后的I/O口引脚时钟, RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE); //使能对应IO口的时钟,因为是复用功能所以
[单片机]
<font color='red'>STM32F4</font>29和F103端口重映射
STM32F4跑马灯实验
硬件连接:LED分别接在PF9和PF10脚,且低电平点亮led; 用到的库函数: 头文件 源文件对应的都有头文件,需添加到工程; 源文件(lib目录) misc.c(一般我们都不会删掉这个头文件) stm32f4xx_rcc.c(所有的工程都会用到,涉及到时钟的使能) stm32f4xx_gpio.c stm32f4xx_usart.c(正点原子程序需要) led跑马灯函数实现流程 使能IO口的时钟。(调用RCC_AB1PeriphClockCmd(); 不同的外设调用的时钟使能函数可能不一样;) 初始化IO口的模式; 操作IO口; main.c文件 /**************** 实现功能:实现LED
[单片机]
STM32F4之FPU性能的充分发挥-设置要点
这个我知道,这是ST的库的问题,在systeminit的函数里,加上以下这一句就行了,就是打开fpu的意思,没有这一句,选了keil的选项也没用的,另外你试试keil的软仿貌似也是不行的,从0x00000无法跳转,总之太新了,bug太多。 void SystemInit(void) { #if (__FPU_PRESENT == 1) && (__FPU_USED == 1) SCB- CPACR |= ((3UL 10*2)|(3UL 11*2)); /* set CP10 and CP11 Full Access */ #endif STM32F4之FPU性能的充分发挥-设置要点 浮点运算一直是定点C
[单片机]
<font color='red'>STM32F4</font>之FPU性能的充分发挥-设置要点
STM32F407系统时钟解析
STM32F4时钟系统初始化是在system_stm32f4xx.c中的SystemInit()函数中完成的。对于系统时钟关键寄存器设置主要是在SystemInit函数中调用SetSysClock()函数来设置的。我们可以先看看SystemInit()函数体: //@brief Setup the microcontroller system // Initialize the Embedded Flash Interface, the PLL and update the // SystemFrequency variable. //@param None //@retval None void System
[单片机]
<font color='red'>STM32F4</font>07系统时钟解析
第46章 STM32F429的DMA2D应用之刷色块,位图和Alpha混合
46.1 初学者重要提示 学习本章节前,务必优先学习第45章,需要对DMA2D的基础知识有个认识。 DMA2D里面有一个重要的概念就是行偏移,这知识点务必要认识到位,详见本章2.2小节。 DMA2D可以直接绘制ARGB8888,RGB565颜色格式位图,并且可以方便的做各种透明效果和图像混合显示。 LCD的加速全靠DMA2D,所有务必要熟练掌握其用法。 46.2 DMA2D驱动设计 46.2.1 DMA2D驱动设计思路 DMA2D的驱动设计比较省事: 用户仅需调用函数__HAL_RCC_DMA2D_CLK_ENABLE使能DMA2D即可使用。 默认DMA2D的API都是采用阻塞式,这种方式在使用RTOS的时候比较方
[单片机]
第46章 <font color='red'>STM32F4</font>29的DMA2D应用之刷色块,位图和Alpha混合
查表法矩阵键盘
//p1口外接3*4矩阵键盘,其中p1^0不用置1,常用读出键值方法有 //“查表法”和“反转法”。查表法程序最为简短,但是稍多占用 //一点存储空间;反转法的程序执行速度最快,只是要求接口是 //双向的。 #include reg52.h #include intrins.h #define uint unsigned int #define uchar unsigned char uchar code table ={ ~0x3F,~0x06,~0x5B,~0x4F,~0x66, ~0x6D,~0x7D,~0x07,~0x7F,~0x6F, ~0x77,~0x7C,~0x39,~0x5E,~0x79,~0x71};//共阳极L
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多精选电路图
换一换 更多 相关热搜器件
更多每日新闻
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved