OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2746|回复: 0

STM32 4*4矩阵按键程序

[复制链接]

0

主题

0

帖子

0

精华

新手入门

积分
2
金钱
2
注册时间
2021-1-22
在线时间
6 小时
发表于 2017-1-7 09:47:21 | 显示全部楼层 |阅读模式
#ifndef _KEYBOARD_H
#define _KEYBOARD_H         
#include "sys.h"
void KeyBoard_Init(void);//IO初始化
u8 Read_KeyValue(void);          //矩阵按键扫描函数               
#endif

#include "stm32f10x.h"
#include "keyboard.h"
#include "delay.h"
                                                                    
//按键初始化函数
/*----------------------------------矩阵键盘初始化-------------------------------
*功能 :  初始化STM32单片机 GPIO    /PE0~PE7
*参数传递
*输入: 无
*返回值:无
*/
void KeyBoard_Init(void) //IO初始化
{
        GPIO_InitTypeDef GPIO_InitStructure;

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);                              //使能PORTC时钟
        GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;       
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                                      //定义PE0~PE3 为推挽输出
        GPIO_Init(GPIOE, &GPIO_InitStructure);//初始化GPIOE   0,1,2,3

        GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;           
        GPIO_Init(GPIOE, &GPIO_InitStructure);//初始化GPIOE.0
       
        GPIO_SetBits(GPIOE,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3);
        GPIO_ResetBits(GPIOE,GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);
}

u8 Read_KeyValue(void)
{         
        u8 KeyValue = 0;
        if((GPIO_ReadInputData(GPIOE)&0x0f)!=0x0f)
        {
            delay_ms(10);
            if((GPIO_ReadInputData(GPIOE)&0x0f)!=0x0f)
        {
            GPIO_SetBits(GPIOE,GPIO_Pin_0);
        GPIO_ResetBits(GPIOE,GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3);
            switch(GPIO_ReadInputData(GPIOE)&0x0f)
        {
                       
                    case 0x11:KeyValue = 1; break;
                    case 0x21:KeyValue = 5; break;
                    case 0x41:KeyValue = 9; break;
                    case 0x81:KeyValue = 13; break;       
               
                }
            
                GPIO_SetBits(GPIOE,GPIO_Pin_1);
        GPIO_ResetBits(GPIOE,GPIO_Pin_0|GPIO_Pin_2|GPIO_Pin_3);
            switch(GPIO_ReadInputData(GPIOE)&0x0f)
        {
                       
                    case 0x12:KeyValue = 2; break;
                        case 0x22:KeyValue = 6; break;
                    case 0x42:KeyValue = 10; break;
                    case 0x82:KeyValue = 14; break;       
               
                }
            
            GPIO_SetBits(GPIOE,GPIO_Pin_2);
        GPIO_ResetBits(GPIOE,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_3);
            switch(GPIO_ReadInputData(GPIOE)&0x0f)
        {
                       
                    case 0x14:KeyValue = 3; break;
                    case 0x24:KeyValue = 7; break;
                    case 0x44:KeyValue = 11; break;
                    case 0x84:KeyValue = 15; break;       
               
                }
            
                GPIO_SetBits(GPIOE,GPIO_Pin_3);
        GPIO_ResetBits(GPIOE,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2);
            switch(GPIO_ReadInputData(GPIOE)&0x0f)
        {
                       
                    case 0x18:KeyValue = 4; break;
                        case 0x28:KeyValue = 8; break;
                    case 0x48:KeyValue = 12; break;
                    case 0x88:KeyValue = 16; break;       
               
                }
               
                GPIO_SetBits(GPIOE,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3);
        GPIO_ResetBits(GPIOE,GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);
            
                while((GPIO_ReadInputData(GPIOE)&0x0f)!=0x0f);
                return KeyValue;
        }
       
       
    }
            return -1;
               
        }

本人将一个4*4小键盘接到STM32F工控板的PE0~PE7,按下按键时,用串口调试助手监视了一下,没有任何反应,不知道哪里出了问题,希望各位大侠能给与帮助


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-29 10:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表