历史上的今天
返回首页

历史上的今天

今天是:2025年04月08日(星期二)

正在发生

2019年04月08日 | 关于STM32F103型号的矩阵按键的程序书写

2019-04-08 来源:eefocus

最近参加电子大赛要写一个矩阵按键,刚开始写了好长时间换了好几个矩阵按键都不好使,但是 我感觉我的程序和原理都没有错,调试了好久也没有发现问题在哪?我按照我自己的思路把程序重写了一遍bug消失了,程序很好的运行。程序贴出来,纪念一下。


#include "keypad.h"

#include "stm32f10x.h"

#include "delay.h"

/*************************************************************************/

/*************************************************************************/

/*************************************************************************/

 

/*本文件是矩阵按键功能文件,使用方法是:直接调KEYPAD_Scan函数得到一个返回值*/

 

/*************************************************************************/

/*************************************************************************/

/*************************************************************************/

 

//函数名:KEYPad_Init1

//参数:无

//功能:行检测初始化

//返回值;无

void KEYPad_Init1(void)

{

GPIO_InitTypeDef GPIO_InitStructure;


RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE);//开启时钟,使能GPIOB时钟


GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉输入 B0-B3

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOF, &GPIO_InitStructure);


GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //下拉输入 B4-B7

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOF, &GPIO_InitStructure);

}

 

//函数名:KEYPad_Init2

//参数:无

//功能:列检测初始化

//返回值:无

void KEYPad_Init2(void)

{

GPIO_InitTypeDef GPIO_InitStructure;


RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE);//开启时钟,使能GPIOB时钟


GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //下拉输入 B0-B3

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOF, &GPIO_InitStructure);


GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉输入 B4-B7

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOF, &GPIO_InitStructure);

}

 

//函数名:扫描函数

//入口参数:无

//返回值:键值

//功能:矩阵按键扫描,返回一个键值

u16 KEYPAD_Scan()

{

static u16 keyvalue = 0;

u32 readvalue = 0;

KEYPad_Init1();

readvalue = GPIO_ReadInputData(GPIOF);

readvalue &= 0x00ff;

//return readvalue;

if(readvalue != 0x000f)

{

delay_ms(8);//消抖10ms

if(readvalue != 0x000f)

{

readvalue = GPIO_ReadInputData(GPIOF);//再次读取状态

readvalue &= 0x00ff;

//return readvalue;

switch(readvalue)

{

case (0x001f):keyvalue = 0;break;

case (0x002f):keyvalue = 1;break;

case (0x004f):keyvalue = 2;break;

case (0x008f):keyvalue = 3;break;

}

//return readvalue;

KEYPad_Init2();

delay_ms(5);

readvalue = GPIO_ReadInputData(GPIOF);//再次读取状态

readvalue |= 0x00f0;

readvalue &= 0x00ff;

//return readvalue;

switch(readvalue)

{

case (0x00f1):keyvalue += 0;break;

case (0x00f2):keyvalue += 4;break;

case (0x00f4):keyvalue += 8;break;

case (0x00f8):keyvalue += 12;break;

}


while(readvalue != 0x00f0)//检测按键松开

{

readvalue = GPIO_ReadInputData(GPIOF);//再次读取状态

readvalue |= 0x00f0;

readvalue &= 0x00ff;

}

//return readvalue;

}

}

return keyvalue;

}

 


推荐阅读

史海拾趣

电连(ECT)公司的发展小趣事

为了进一步扩大市场份额,ECT积极推进国际化战略。截止2022年初,公司在全球共设立23个分支机构,覆盖了中国台湾、中国香港、韩国、日本、泰国、越南、美国等国家和地区。通过国际化战略的实施,ECT不仅成功将产品推向全球市场,也提升了公司的国际影响力和竞争力。

FutureWafer公司的发展小趣事

为了进一步扩大市场份额,ECT积极推进国际化战略。截止2022年初,公司在全球共设立23个分支机构,覆盖了中国台湾、中国香港、韩国、日本、泰国、越南、美国等国家和地区。通过国际化战略的实施,ECT不仅成功将产品推向全球市场,也提升了公司的国际影响力和竞争力。

中科芯(CKS)公司的发展小趣事

中科芯自成立以来,一直致力于集成电路技术的研发与创新。在早期的发展阶段,公司成功研制了我国首块超大规模集成电路,这一里程碑式的突破标志着中国集成电路技术达到了国际先进水平。这一成果不仅填补了国内在该领域的空白,也为中科芯赢得了广泛的国际声誉,为后续的技术突破奠定了坚实基础。

Aplus Integrated Circuits公司的发展小趣事

随着公司产品的不断优化和升级,Aplus Integrated Circuits开始寻求与国际市场的接轨。公司积极参与国际电子行业的交流与合作,与多家国际知名企业建立了稳定的合作关系。通过引进国外先进的技术和管理经验,公司的产品逐渐走向国际化,市场竞争力得到了进一步提升。

Conexcon Group公司的发展小趣事

在电子行业的发展过程中,环保问题日益受到关注。Conexcon Group积极响应国家环保政策,将绿色环保理念贯穿于产品研发、生产和销售的全过程。公司采用了环保材料和工艺,减少了对环境的污染和破坏。同时,公司还加强了废旧电子产品的回收和处理工作,推动了电子行业的可持续发展。这些举措不仅赢得了消费者的认可和支持,也为公司树立了良好的社会形象。

Bestar Electric公司的发展小趣事

为了进一步提升竞争力,Bestar Electric开始整合产业链资源。公司通过与供应商建立长期合作关系,确保原材料的稳定供应;同时,公司还涉足电子产品的组装和制造领域,实现了产业链的垂直整合。此外,公司还积极探索多元化发展路径,涉足相关领域,如智能家居、物联网等,以拓展新的增长点。

问答坊 | AI 解惑

晒板子28335

28335电力电子与电力传动专用控制板 …

查看全部问答>

机电领域中伺服电机的选择原则

提出的选择原则是将电机特性与负载特性分离开 ,并用图解的形式表示 ,这种表示方法使得驱动 装置的可行性检查和不同系统间的比较更方便 ,另外 ,还提供了传动比的一个可能范围.…

查看全部问答>

获取芯币的另一个小诀窍

快速获得芯币的另一种方法,就是与博客紧密结合。规则如下,请大家详细阅读啊! 1、注册博客 + 20 芯币 2、在论坛签名中注明自己博客地址  +5 芯币    3、博客个人信息注册完全,其中上传电子相片  +5芯币 4、 ...…

查看全部问答>

一本dsp2812的好书

最近刚刚从图书馆借到一本新书《dsp控制技术实践》。中国电力出版社出版,2009.5出版的。专门讨论dsp2812的片子的使用,比ti的中文手册薄多了,看起来挺舒服的。推荐给大家。…

查看全部问答>

LED行业竞争白热化,各大厂商拿什么取胜呢?打扰了。

LED行业竞争白热化,各大厂商拿什么取胜呢?打扰了。…

查看全部问答>

请问这几句汇编具体的意思是什么?

GBLS        MainEntry MainEntry        SETS        \"Main\"         IMPORT        $MainEntry MainEntry不是已经在第一行就已经定 ...…

查看全部问答>

MC2833/MC3363如何编程

这是朋友的一个毕业设计题目。别的部分没什么特别。但是,这个课题使用了MC2822/MC3363这一对摩托罗拉的音频收发芯片来实现无线收发。我的毕业设计用的是nRF24L01,所以我很习惯性用这个去套它的思路。可是我在网上查了查,似乎没有找到关于它的编程 ...…

查看全部问答>

关于QEI的问题

最近正在学习luminary,用的是周立功的easyArm8962的板子,在qei的实验例程中有这么两句话:SysCtlPeripheralEnable(SYSCTL_PERIPH_QEI);GPIODirModeSet(GPIO_PORTC_BASE, GPIO_PIN_4 | GPIO_PIN_6,   GPIO_DIR_MODE_HW);GPIODirModeSet( ...…

查看全部问答>

Smart Debug网络与串口调试工具(原创)

最新版本号: 1.0.1.111031        更新日期: 2011.10.26 下载地址1 http://stu.cidp.edu.cn/SmartDebug.rar 下载地址1 下载地址2 http://www.vdisk.cn/down/index/8990713A3710 下 ...…

查看全部问答>

希望大家帮帮忙

不好意思 有件事情麻烦大家 老师布置了一项作业之前设计原理图时没看要求 搞错了 现在时间有点急希望大家有能人帮我设计一个原理图 要求如下: 九、彩灯控制器一 要求:1.有八只LED,L0……L72.显示顺序如下表3.显示间隔为0.25S,0.5S,1S,2S ...…

查看全部问答>