历史上的今天
今天是:2025年08月19日(星期二)
2019年08月19日 | ARM开发(3)基于STM32的矩阵键盘控制蜂鸣器
2019-08-19 来源:eefocus
一 矩阵键盘控制蜂鸣器原理:
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注意事项:蜂鸣器的文件在上次实验中,本次就不在赘述了。
史海拾趣
|
我怎么下载不了 在PC本机上测试,可以下载。 但用开发板下载不了,在PC上用抓包软件能看到开发板发来的请求,但tftpd32.exe没反应… 查看全部问答> |
|
我现在遇到两首mp3,在pc上看到属性为mp3, 立体声,16bit,44.1k 我在系统中加了mp3 cedec,MPEG-1 Layer 1 and 2 Audio Codec,但就是播放不了。 从驱动的private_WaveOpen中发现lpFormat->wFormatTag=80,正常应该是1即WAVE_FORMAT_PCM,只支持PC ...… 查看全部问答> |
|
9月7日-9日在成都举办的电子展中有近十场关于电磁兼容和电路保护的专家讲座(邀请了德国的电磁兼容专家做专题讲座和交流),我们公司是参展单位,有几张赠票,现免费送给有需要的工程师朋友们,这里跟帖的8楼、18楼将获得赠票(8月底前,请留联系方 ...… 查看全部问答> |
|
柔性灯带在经过重重检测和把关之后,还是会有不亮的现象。究其原因,有如下几种: 1、LED柔性灯带的包装保护不完善,造成运输过程中灯珠受到撞击而损坏。 2、LED柔性灯带的焊接点有虚焊现象,运输过程中的震动造成焊点脱落而导致灯带不亮 ...… 查看全部问答> |
|
MSP430F149+1602数码显示和实时时钟 MSP430F149,IAR,ADC采样之后对太阳点光源进行跟踪 MSP430F149 AD7705程序 MSP430 BH1750测量光强(已测试) Launch Pad NOKIA5110 Clock 使用MSP430单片机控制超声波测距并使用5110显示 基于MSP430的MP3 源 ...… 查看全部问答> |
|
本帖最后由 hjl240 于 2014-7-4 10:36 编辑 自己做了一个msp430g2553板子,上面有电容触摸按键,还有液晶,型号为oled12864,1.3寸的,调试程序的时候发现: 单独调试触摸按键的时候,触摸按键很正常,一触摸就有反应,不触摸就没有 ...… 查看全部问答> |
|
试试能考到你吗——关于“斩波运算放大器”,下面那条表述是正确滴 欢迎大家踊跃讨论! 可以看看文章斩波型运放及其噪声 https://bbs.eeworld.com.cn/thread-455265-1-1.html … 查看全部问答> |
|
[LPC54102]也用万利的板子玩双核-Blinky LED 本帖最后由 wgsxsm 于 2015-4-21 22:40 编辑 经常逛论坛,有天无意间浏览到此贴:https://bbs.eeworld.com.cn/thread-459450-1-1.html 双核LPC54102的板子还有剩余,刚好最近新配了电脑,业余时间还是有的,果断申请了。 &nb ...… 查看全部问答> |




