一 矩阵键盘控制蜂鸣器原理:

 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注意事项:蜂鸣器的文件在上次实验中,本次就不在赘述了。

ARM开发(3)基于STM32的矩阵键盘控制蜂鸣器的更多相关文章

  1. 基于VHDL利用PS2键盘控制的电子密码锁设计

    基于VHDL利用PS2键盘控制的密码锁设计 附件:下载地址 中文摘要 摘 要:现代社会,人们的安全意识正在不断提升.按键密码锁由于其具有方便性.低成本等特征,还是大有用武之地的.但是通常的按键密码锁开 ...

  2. Win10 IoT C#开发 6 - 4x4矩阵键盘扫描

    Windows 10 IoT Core 是微软针对物联网市场的一个重要产品,与以往的Windows版本不同,是为物联网设备专门设计的,硬件也不仅仅限于x86架构,同时可以在ARM架构上运行. 上一章我 ...

  3. 4x4矩阵键盘扫描

    4x4矩阵键盘扫描 Windows 10 IoT Core 是微软针对物联网市场的一个重要产品,与以往的Windows版本不同,是为物联网设备专门设计的,硬件也不仅仅限于x86架构,同时可以在ARM架 ...

  4. ARM开发(2)基于STM32的蜂鸣器

    基于STM32的蜂鸣器 一 蜂鸣器原理:  1.1 本实验实现1个蜂鸣器间隔1S鸣叫.  1.2 实验思路:根据电路图原理,给蜂鸣器相关引脚赋予高低电平,实现电路的导通,使蜂鸣器实现鸣叫或不鸣.  1 ...

  5. STM32 实现 4*4 矩阵键盘扫描(HAL库、标准库 都适用)

    本文实现的代码是基于STM32HAL库的基础上的,不过标准库也可以用,只是调用的库函数不同,逻辑跟配置是一样的,按我这里的逻辑来配置即可. 1.键盘原理图: 原理举例:先把 F0-F7 内部拉高,这样 ...

  6. 基于全志H3芯片的ARM开发环境搭建

    基于全志H3芯片的ARM开发环境搭建 最近买了个友善之臂的NanoPi M1板子,又在网上申请了个NanoPi NEO板子,这两个都是基于全志H3芯片的Crotex-A7四核ARM开发板,两个板子可以 ...

  7. 基于FPGA的4x4矩阵键盘驱动调试

    好久不见,因为博主最近两个月有点事情,加上接着考试,考完试也有点事情要处理,最近才稍微闲了一些,这才赶紧记录分享一篇博文.FPGA驱动4x4矩阵键盘.这个其实原理是十分简单,但是由于博主做的时候遇到了 ...

  8. 【STM32学习笔记】STM32f407 使用4*4矩阵键盘

    作者:李剀 出处:https://www.cnblogs.com/kevin-nancy/ 欢迎转载,但也请保留上面这段声明.谢谢! 写在前面: 这是本人第一次开始写博客,可能写的不是很好,也请大家谅 ...

  9. 嵌入式系统及应用课程设计——基于STM32的温湿度监测系统

    大三上学期期末总结,嗯,没错上学期,写在新学期开始,hhh. 上学期学了一门嵌入式系统及应用的课程,期末的课程设计题目是基于STM32的温湿度监测系统. 记得刚开始做课程设计的时候,听说先设计画出原理 ...

随机推荐

  1. dedecms后台添加新变量和删除变量的方法

    下面由做网站为大家来介绍dedecms后台添加新变量和删除变量的方法 添加新变量是做什么用的?答:可以在模板内调用的东东. 一.进入网站织梦(Dedecms)后台(以dede5.5为例),依次打开系统 ...

  2. PHP基础入门(三)---PHP函数基础

    PHP基础入门(三)---函数 今天来给大家分享一下PHP的函数基础.有了前两章的了解,想必大家对PHP有了一定的基础了解.想回顾前两章的朋友可以点击"PHP基础入门(一)"&qu ...

  3. php面向对象3

    类的定义 基本定义 class 类名{ 访问修饰符 成员属性; 访问修饰符 成员方法; } 说明: ①类一定要class关键词修饰 ②类名的规范说明,使用大驼峰法 ③php 中,类名不区分大小写.但是 ...

  4. 生成淘口令发现的一个趣事 c#

    1.今天,查看网站log,发现如下报错 详细错误:未将对象引用设置到对象的实例. 报错url:http://www.94dazhe.com/mobile/goods/show-546829202052 ...

  5. tostring方法

    //__tostring()方法//输出内容时不报错 用法实例:class Ren{ public $name; public function __tostring() { return " ...

  6. Rails核心组件

    Action Pack 包含Action Controller,Action View,Action Dispatch 封装了MVC的VC功能 Action Mailer 开发电子邮件服务的框架 Ac ...

  7. EF架构~Migration数据迁移的执行顺序

    回到目录 对于单个分支项目来说,只要你生成一个migration的版本,就会有一个时间戳文件的对应,而在update-database时,会从最小的时间开始,一直执行到当前版本的migration,而 ...

  8. 【LCA求最近公共祖先+vector构图】Distance Queries

    Distance Queries 时间限制: 1 Sec  内存限制: 128 MB 题目描述 约翰的奶牛们拒绝跑他的马拉松,因为她们悠闲的生活不能承受他选择的长长的赛道.因此他决心找一条更合理的赛道 ...

  9. win7双系统安装openSUSE13.2解决【引导加载器安装期间出错】问题

    原始日期:2015-08-17 14:16 昨晚不知道哪根筋不对,突然想装一个liunx系统,与win7形成双系统,最终选定openSUSE13.2,想想以前也安装过Ubuntu,应该差不多,所以直接 ...

  10. [Tool] Git 使用 与 Git Flow

    目录 简介 Git 命令 Git Flow 简介 Git是目前世界上最先进的分布式版本控制系统(没有之一). Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!一个月之内,Lin ...