ARM开发(3)基于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代码(实现蜂鸣器间隔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

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值