精华内容
下载资源
问答
  • 基于stm32的矩阵键盘

    2013-08-14 14:37:39
    stm32上实现16x16矩阵键盘扫描检测
  • 一个基于stm32f103zet6的矩阵键盘程序,stm32接上矩阵键盘即可使用。
  • 这是一个非阻塞式矩阵键盘驱动程序,支持单按、长按、组合键。稳定可靠用过就知道。 使用说明都在注释里。
  • 基于STM32的矩阵键盘控制蜂鸣器 一 矩阵键盘控制蜂鸣器原理: 1.1 本实验实现8*7矩阵键盘上按键控制蜂鸣器响。1.2 实验思路:根据电路图原理,找出矩阵键盘行列所对应的引脚,赋予对应的按键值,然后控制蜂鸣器响...
    基于STM32的矩阵键盘控制蜂鸣器
    

    一 矩阵键盘控制蜂鸣器原理:
    1.1 本实验实现8*7矩阵键盘上按键控制蜂鸣器响。

    1.2 实验思路:根据电路图原理,找出矩阵键盘行列所对应的引脚,赋予对应的按键值,然后控制蜂鸣器响。

    1.3 开发环境 : MDK5 库函数版本开发 JLINK仿真
    二 实验步骤:
    2.1 key.h代码:
    #ifndef __KEY_H
    #define __KEY_H
    #include”sys.h”
    #define ROWPINS GPIO_Pin_6|GPIO_Pin_5|GPIO_Pin_4|GPIO_Pin_3|GPIO_Pin_2\
    |GPIO_Pin_1|GPIO_Pin_0//矩阵键盘行引脚

          #define COLPINS GPIO_Pin_14|GPIO_Pin_13|GPIO_Pin_12|GPIO_Pin_11\
          |GPIO_Pin_10|GPIO_Pin_9|GPIO_Pin_8|GPIO_Pin_7//矩阵键盘列引脚
          void KEY_Init(void);//矩阵键盘初始化
          u8 KEY_Scan(void); //按键扫描程序
          #endif
    

    2.2 key.c代码(IO配置和按键扫描):

        #include "key.h"
        u16 rowPin[7] = {GPIO_Pin_6,GPIO_Pin_5,GPIO_Pin_4,GPIO_Pin_3,GPIO_Pin_2,GPIO_Pin_1,GPIO_Pin_0};//行
        u16 colPin[8] = {GPIO_Pin_14,GPIO_Pin_13,GPIO_Pin_12,GPIO_Pin_11,GPIO_Pin_10,GPIO_Pin_9,GPIO_Pin_8,GPIO_Pin_7};//列 
    
         void KEY_Init(void)
        {
    
         GPIO_InitTypeDef GPIO_InitStructure;
         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);//使能PE端口时钟
         GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP; //推挽输出
    
         GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//IO口速度为50MHz
    
         GPIO_InitStructure.GPIO_Pin  = COLPINS;//行端口配置
    
         GPIO_InitStructure.GPIO_Pin  =ROWPINS;//列端口配置
    
         GPIO_Init(GPIOE, &GPIO_InitStructure);//根据参数初始化GPIOE
    
    
        }     
            u8 KEY_Scan(void)//按键扫描按键按下的是哪一个键(本实验默认矩阵按键是1到56)
            {    
            u8 i ,j ,k;
    
    
                for(i=0;i<=6;i++)
                {  
                  GPIO_SetBits(GPIOE,rowPin[i]);
                    for(k=0;k<=6;k++)
                    {
                        if(k!=i)
                        {
                             GPIO_ResetBits(GPIOE,rowPin[k]);
                        }
                    }
                   for(j=0;j<=7;j++)
                   {
    
    
                    if(GPIO_ReadInputDataBit(GPIOE,colPin[j]) !=0)
                    {
    
                         return 8*i +j;
    
                    }
    
                   } 
    
                }
                return 0;
             }
    

    2.2 main.c代码(实现矩阵键盘控制蜂鸣器):

                    #include "delay.h"
                    #include "key.h"
                    #include "sys.h"
                    #include "beep.h"
                    int main(void)
                    {
                        u8 i;
                        u8 key=0;
                        delay_init();//延时
    
                        KEY_Init();  //键盘初始化        
                        BEEP_Init(); //蜂鸣器初始化
                        while(1)
                        {
    
                          key=KEY_Scan();//得到按键值
                            if(key==50)如果按键值是50,则蜂鸣器响
                            {
                                BEEP =!BEEP ;
                                delay_ms(1000);
    
                            }
                        }
    
    
                   } 
    

    三 接线测试:

    3.1 与板子接线测试效果良好,找到按键值为50的按下去,蜂鸣器响。

    3.2注意事项:蜂鸣器的文件在上次实验中,本次就不在赘述了。

    展开全文
  • 自己写的STM32的矩阵键盘驱动,用的中断方式 包含.c和.h文件的全部内容
  • 基于STM32的矩阵键盘按键触发外部中断引起蜂鸣器鸣叫 一 矩阵键盘按键触发外部中断引起蜂鸣器鸣叫原理:1.1 本实验实现矩阵键盘某一列按键触发外部中断实现蜂鸣器鸣叫。1.2 实验思路:根据电路图原理,外部中断产生...
                  基于STM32的矩阵键盘按键触发外部中断引起蜂鸣器鸣叫
    

    一 矩阵键盘按键触发外部中断引起蜂鸣器鸣叫原理:

    1.1 本实验实现矩阵键盘某一列按键触发外部中断实现蜂鸣器鸣叫。
    
    1.2 实验思路:根据电路图原理,外部中断产生原理。
    
    1.3 开发环境 : MDK5 库函数版本开发 JLINK仿真 
    

    二 实验步骤:
    2.1 led.h代码:

     #ifndef  __EXTI_H
     #define __EXTI_H    
     #include "sys.h"
     void EXTIX_Init(void);//外部中断初始化
     #endif
    

    2.2 led.c代码(IO配置):

     #include "exti.h"
     #include "key.h"
     #include "delay.h"
     #include "usart.h"
     #include  "beep.h"
    void EXTIX_Init(void)
    {
    
        EXTI_InitTypeDef EXTI_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
        KEY_Init(); //按键端口初始化
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);  //开启AFIO时钟
        GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource11);//中断线映射
        EXTI_InitStructure.EXTI_Line=EXTI_Line11;    
        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; 
        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿触发
        EXTI_InitStructure.EXTI_LineCmd = ENABLE;
        EXTI_Init(&EXTI_InitStructure);  //初始化中断线参数
    
        NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;    //使能按键外部中断通道         
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00; //抢占优先级0 
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;   //字优先级0              
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;     //使能外部中断通道                   
        NVIC_Init(&NVIC_InitStructure);     //初始化NCIC   
    
    } 
    void EXTI15_10_IRQHandler(void)  //外部中断服务程序
    {   
    
        delay_ms(10); 
        if(EXTI_GetITStatus(EXTI_Line11) != RESET)        
        {                
            BEEP=!BEEP; 
        }
        EXTI_ClearITPendingBit(EXTI_Line11); //  消除line10上的中断标志位
    }
    

    2.2 main.c代码(实现7*8矩阵键盘第5列按键触发):

    #include "exti.h"
    #include "led.h"
    #include "key.h"
    #include "delay.h"
    #include "usart.h"
    #include "beep.h"
     int main(void)
     {      
    
        delay_init();                 
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);  
        uart_init(115200);       
        BEEP_Init();             
        KEY_Init();  
        EXTIX_Init();                    
        while(1)
        {       
            printf("OK\r\n");   
            delay_ms(1000);   
        }
     }
    

    三 接线测试:

    3.1 与板子接线测试效果良好,键盘上第5列按键触发中断产生导致蜂鸣器鸣叫。
    
    展开全文
  • 本程序实现4*5键盘的扫描 从左到右,从上到下,键值 依次为1-20 中断扫描模式 ,要在NVIC在中打开对应中断 /*可以自己定义其它扫描方式
  • 1.2 实验思路:根据电路图原理,找出矩阵键盘行列所对应引脚,赋予对应按键值,然后控制蜂鸣器响。 1.3 开发环境 : MDK5 库函数版本开发 JLINK仿真 二 实验步骤: 2.1key.h代码: #ifndef __KEY_H #...

     一 矩阵键盘控制蜂鸣器原理:
     1.1 本实验实现8*7矩阵键盘上按键控制蜂鸣器响。

     1.2 实验思路:根据电路图原理,找出矩阵键盘行列所对应的引脚,赋予对应的按键值,然后控制蜂鸣器响。

     1.3 开发环境 : MDK5 库函数版本开发 JLINK仿真
    二 实验步骤:
     2.1  key.h代码:
              #ifndef __KEY_H
              #define __KEY_H     
              #include"sys.h"
              #define ROWPINS GPIO_Pin_6|GPIO_Pin_5|GPIO_Pin_4|GPIO_Pin_3|GPIO_Pin_2\
              |GPIO_Pin_1|GPIO_Pin_0//矩阵键盘行引脚
        
              #define COLPINS GPIO_Pin_14|GPIO_Pin_13|GPIO_Pin_12|GPIO_Pin_11\
              |GPIO_Pin_10|GPIO_Pin_9|GPIO_Pin_8|GPIO_Pin_7//矩阵键盘列引脚
              void KEY_Init(void);//矩阵键盘初始化
              u8 KEY_Scan(void); //按键扫描程序
              #endif

    2.2   key.c代码(IO配置和按键扫描):
                 
            #include "key.h"
            u16 rowPin[7] = {GPIO_Pin_6,GPIO_Pin_5,GPIO_Pin_4,GPIO_Pin_3,GPIO_Pin_2,GPIO_Pin_1,GPIO_Pin_0};//行
            u16 colPin[8] = {GPIO_Pin_14,GPIO_Pin_13,GPIO_Pin_12,GPIO_Pin_11,GPIO_Pin_10,GPIO_Pin_9,GPIO_Pin_8,GPIO_Pin_7};//列 
                         
             void KEY_Init(void)
            {
             
             GPIO_InitTypeDef GPIO_InitStructure;
             RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);//使能PE端口时钟
             GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP; //推挽输出
                
             GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//IO口速度为50MHz
                
             GPIO_InitStructure.GPIO_Pin  = COLPINS;//行端口配置
                
             GPIO_InitStructure.GPIO_Pin  =ROWPINS;//列端口配置
             
             GPIO_Init(GPIOE, &GPIO_InitStructure);//根据参数初始化GPIOE
             
                 
            }       
                u8 KEY_Scan(void)//按键扫描按键按下的是哪一个键(本实验默认矩阵按键是1到56)
                {     
                u8 i ,j ,k;
            
             
                    for(i=0;i<=6;i++)
                    {  
                      GPIO_SetBits(GPIOE,rowPin[i]);
                        for(k=0;k<=6;k++)
                        {
                            if(k!=i)
                            {
                                 GPIO_ResetBits(GPIOE,rowPin[k]);
                            }
                        }
                       for(j=0;j<=7;j++)
                       {
                         
        
                        if(GPIO_ReadInputDataBit(GPIOE,colPin[j]) !=0)
                        {
                            
                             return 8*i +j;
                            
                        }
                        
                       } 
                     
                    }
                    return 0;
                 }
                  
                    
                    
    2.2  main.c代码(实现蜂鸣器间隔1S鸣叫效果):
                      
                        #include "delay.h"
                        #include "key.h"
                        #include "sys.h"
                        #include "beep.h"
                        int main(void)
                        {
                            u8 i;
                            u8 key=0;
                            delay_init();//延时
                             
                            KEY_Init();  //键盘初始化        
                            BEEP_Init(); //蜂鸣器初始化
                            while(1)
                            {
                                
                              key=KEY_Scan();//得到按键值
                                if(key==50)如果按键值是50,则蜂鸣器响
                                {
                                    BEEP =!BEEP ;
                                    delay_ms(1000);
                                
                                }
                            }
                            
                                
                       } 

    三 接线测试:
     
    3.1 与板子接线测试效果良好,找到按键值为50的按下去,蜂鸣器响。

    3.2注意事项:蜂鸣器的文件在上次实验中,本次就不在赘述了。
             

    转载于:https://www.cnblogs.com/wzp2017/p/7236759.html

    展开全文
  • 矩阵键盘按键控制TM1629ALED显示原理: 1.1 本实验实现矩阵键盘按键控制TM1629ALED显示 1.2 实验思路:共阴极数码管,掌握数码管段选位选原理 熟悉TM1629A芯片手册 1.3 开发环境 : MDK5 库函数版本开发 JLINK仿真...

    一 矩阵键盘按键控制TM1629ALED显示原理:

        1.1 本实验实现矩阵键盘按键控制TM1629ALED显示
    
        1.2 实验思路:共阴极数码管,掌握数码管段选位选原理  熟悉TM1629A芯片手册
    
        1.3 开发环境 : MDK5 库函数版本开发 JLINK仿真 
    

    二 实验步骤:
    2.1 keyled.h代码:

        #ifndef __KEYLED_H
        #define __KEYLED_H
        #include "sys.h"     
        #define SEG_NUM 16 //段选,2个8段
        #define GRID_NUM 8 //位选
        #define     WRITE_DATA_MODE_AUTO        0x40 // 地址自动加1方式写led显存
        #define     SET_START_ADDRESS       0xc0 // 设置起始地址
        #define     SET_DISP_OFF_COMMAND        0x87 // 关闭显示命令
        #define     DATA_COUNT          2*GRID_NUM  //数据传输个数
        extern  void    Initial_LED(void);  // 初始化
        extern void   DisplayOn(u8  bOn);   //led显示是否打开
        extern void  Display(u8  DspData[]); // led显示数字
        #endif
    

    2.2 keyled.c代码(IO配置):

       #include "stm32f10x.h"
       #include "keyled.h"
       #include "key.h"
       #include "sys.h" 
       #include "delay.h" 
     //配置时钟和IO口
       #define SetClk    GPIO_SetBits(GPIOD,GPIO_Pin_3) //PD3
       #define ClrClk    GPIO_ResetBits(GPIOD,GPIO_Pin_3) //PD3 
       #define SetDIO  GPIO_SetBits(GPIOD,GPIO_Pin_2) //PD2
       #define ClrDIO  GPIO_ResetBits(GPIOD,GPIO_Pin_2) //PD2
       #define TM1638_PINS  0x001f  
     //片选第一二排数码管
       #define ResA    GPIO_ResetBits(GPIOD, GPIO_Pin_1);//PD1
       #define SetA    GPIO_SetBits(GPIOD, GPIO_Pin_1);//PD1  
     /*将一字节数据写到TM1629A中*/
       void WriteData(u8 data )
        {  
            u8 i;
            ResA ;
           for(i=0;i<8;i++)
          {
            delay_ms(20);
            ClrClk;拉低时钟
            delay_ms(20);
           if(data & 0x01)
            SetDIO;    //打开数据线
           else
            ClrDIO;   //关闭数据线
           delay_ms(20);
            SetClk;  //拉高时钟
           data>>=1;  //数据右移一位
          } 
            delay_ms(20);
        }  
    /*将所要传输的数据显示在led上*/
     void  Display(u8  DspData[])
        {
            u8    i;
             ResA  ;
            SetDIO; //打开数据线
            ClrClk; //拉低时钟
            WriteData(WRITE_DATA_MODE_AUTO); // 采用地址自动加1方式传输数据   
             SetA ;   
             delay_ms(20);
             ResA  ;   
            WriteData(SET_START_ADDRESS);   //  传输起始地址
                /* 传输数据*/
            for(i = 0; i < DATA_COUNT; i++) 
            {
    
             WriteData(DspData[i]);
            }
    
             SetA ;   
             delay_ms(20);
        }
           /*显示器辉度和开关设置*/
            void    DisplayOn(u8  bOn)
            {
                if(bOn)
                    WriteData(0x88+6);
                else
                    WriteData(SET_DISP_OFF_COMMAND);
                 SetA ; 
            }   
    
          /*IO口配置*/
        void    Initial_LED(void)
            {       
                GPIO_InitTypeDef GPIO_InitStructure; 
                RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);
                GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    
                GPIO_InitStructure.GPIO_Pin =  TM1638_PINS; 
                GPIO_Init(GPIOD , &GPIO_InitStructure);
    
                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
                GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; 
                GPIO_Init(GPIOD, &GPIO_InitStructure);
                GPIO_SetBits(GPIOD, TM1638_PINS);
                 SetA ; 
                DisplayOn(0);
            }
    

    2.2 main.c代码(实现按键值LED显示效果):

            #include "delay.h"
            #include "key.h"
            #include "sys.h"
            #include "beep.h"
            #include "keyled.h" 
             int main(void)
             {    
             u8 i,flag;
    
                  u8 key=0;
    u8   seg88Code[16]={0x3f, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F, 0x77, 0X7C, 0x39, 0x5E, 0x79, 0x71};
    
                delay_init(); //  延时               
                KEY_Init();   // 按键初始化     
                BEEP_Init();  //  蜂鸣器初始化      
               Initial_LED(); //  数码管初始化
         /*实现按键值在1到15范围内led显示0到15,具体显示功能可以改,基本思路就是这样*/
                while(1)
                {
                    flag=0;
                key=KEY_Scan();
            for(i=1;i<16;i++)
                    {
    
                if(key==i)
                {
    
                    if(key==i)
                    {flag =1;
                     break;
                    }   
                } 
                  }                     
            if(flag==1)
                {   
                    DisplayOn(1);
                    Display(seg88Code);
                     delay_ms(2); 
                }
            else{
                      DisplayOn(0); 
                } 
                 delay_ms(2); 
            }
        }
    

    三 接线测试:

     3.1 与板子接线测试效果良好,按键值在1到16范围内,LED 0到15按顺序显示。
    
    展开全文
  • STM32-MatrixKey 基于STM32F4的矩阵键盘程序, 带按键抖动检测, 带按键松手检测.
  • stm32F1矩阵键盘程序

    2018-12-25 11:20:17
    这是一个基于STM32F1的矩阵键盘程序,使用的HAL库,已测试成功,移植方便
  • STM32矩阵键盘实现

    2015-06-25 00:23:07
    基于STM32的矩阵键盘实现,可用于开发板外置键盘的使用
  • 基于stm32f103的矩阵键盘

    万次阅读 2014-12-03 13:47:27
    我现在的任务是做一个8*8的矩阵键盘,制PCB版之前,我用电路板搭了一个3*3的矩阵键盘来模拟一下,设置PA0、PA1、PA2为PP输出,设置P3、P4、P5下拉输入。大多数的芯片内部上拉或下拉电阻都是弱上拉或弱下拉,stm32...
  • 智能计算器是嵌入式开发入门项目,本章使用STM 32芯片作为CPU,并将矩阵键盘和独立键盘作为输入外设,LCD1602作为显示屏,实现可输入可视化智能计算器。 1 基本原理 该项目中会用到设备有STM 32芯片、4X4矩阵...
  • 基于stm32的8*8矩阵键盘程序,内含自写4*4矩阵键盘说明
  • STM32矩阵键盘

    2018-04-02 23:44:48
    基于STM32的精简版矩阵键盘,通俗易懂,实用性非常好!
  • 在各种应用和比赛中我们都会用到矩阵键盘,所以矩阵键盘必不可少。我已经帮大家封装好了,大家只需要移植就行。管脚直接可修改。 这是他头文件: #ifndef __keyboad_h__ #define __keyboad_h__ #include "stm32f10...
  • 该程序已经过测验通过,使用扫描法完成了矩阵键盘的设计,每一句基本都有注释,工程文件齐全,测试方便,使用是神州I号 STM32F103RBT6
  • 基于STM32F103的矩阵键盘代码,引脚可根据您的需求和爱好随意定义,无论连不连续都可以!引脚信息已经在key4_4.c中宏定义好了,只需要在宏定义中修改你定义的引脚时钟、引脚号和引脚对应的端口即可!非常方便。可...
  • 基于STM32l152做4*8矩阵键盘,采用定时器消抖,扫描效率高
  • 经本人刻苦钻研,将51单片机上用的矩阵键盘扫描程序移植到了stm32上,同时也做了很大的改进,最大的改进莫过于消抖这块了。以前的消抖总是采用delay延时约10到20ms的时间,但这样会导致MCU在延时里空跑而造成主程序...
  • 基于STM32的按键扫描测试程序(学习记录): 目录: 源码; 4x4按键原理; Tips: 粘贴代码时,粘贴在源文件存放的位置中(如:HARDWARE中的.c和.h文件),用C++编译器打开,而不是kei;最后keil会正常显示中文...
  • 最近做了个小项目,需要读取按键输入,由于条件限制只能用不带电源4x4矩阵键盘。于是根据在淘宝上买键盘电路,设计了键盘按钮读入代码。 键盘电路如下: 思路介绍: 当某个按钮按下时,MCU首先是让...
  • 矩阵键盘STM32程序

    2018-07-06 15:54:39
    基于STM32F103单片机的矩阵键盘源代码 是电设竞赛的时候用到的
  • 矩阵键盘有两种操作方式……扫描法和反转法……我使用是第一种方法 这里我改应该是原子例程【……?】4个引脚接行线(配置为通用推挽输出),4个引脚接列线(配置为下拉输入,均是低电平),然后开始扫描...
  • 基于STM32 4x4键盘扫描 小白接触ARM快两周了,开发板上4个按键已经不能满足学习需要。开发板上按键都是一个按键对应一个IO口,大量浪费IO口资源,那需要很多很多按键怎么办呢,难道没有什么方法解决吗??有,当然...
  • 本人今天又换种思路写了个关于stm32的4X4矩阵键盘定时器扫描消抖法的算法程序,同样是采用的效率较高的翻转法,已通过测试,希望大家喜欢!大概思路为:将端口的第N次扫描值和第(N-1)次的扫描值进行比较,若相等则...

空空如也

空空如也

1 2 3 4 5
收藏数 81
精华内容 32
关键字:

基于stm32的矩阵键盘