历史上的今天
返回首页

历史上的今天

今天是:2025年08月16日(星期六)

正在发生

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

2019-08-16 来源: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;

}


推荐阅读

史海拾趣

Continental公司的发展小趣事

随着汽车电子化的趋势日益明显,大陆集团也开始将业务拓展到汽车电子领域。在新的架构体系中,车身电子部门被纳入“车联网和信息”这个大的业务板块中。大陆集团致力于实现车身电子的更好互联、更好呈现信息和更好的集成。通过互联技术,数据能够在汽车与外界之间进行传递,并将这些信息通过人机交互界面呈现给驾驶者和乘客。同时,大陆集团还致力于确保数据从车辆到云端的顺畅传输和处理。这些举措使得大陆集团在汽车电子领域取得了显著的进展。

G24 Innovations公司的发展小趣事

为了进一步拓展国际市场,远阳公司开始实施国际化布局战略。公司通过设立海外研发中心、生产基地等方式,加强与全球市场的联系和互动。同时,远阳还积极寻求并购整合机会,通过收购同行业优质企业,实现优势互补和资源共享。这些举措不仅增强了远阳的国际竞争力,也为企业的可持续发展注入了新的动力。

Alliance Memory公司的发展小趣事

随着产品质量的不断提升,远阳开始将目光投向更广阔的市场。公司制定了详细的市场拓展计划,并加大了品牌营销力度。2010年前后,远阳成功进军国际市场,与多家国际知名企业建立了长期合作关系。同时,公司也注重在国内市场的布局,通过参加各类行业展会、举办技术研讨会等方式,不断提升品牌知名度和影响力。这一时期,远阳的产品线不断丰富,涵盖了HDMI、光纤线、DP线等多个系列,成为了数据工程电缆领域的佼佼者。

DESOUTTER公司的发展小趣事

2001年,Desoutter公司与CP(Chicago Pneumatic)和GR(Grorges Renault)合并,成立了CPDI公司。这次合并使Desoutter公司获得了更强大的技术实力和市场资源,进一步巩固了其在气动工具领域的领先地位。合并后,CPDI公司继续致力于气动工具的研发和生产,并推出了一系列创新产品,以满足市场的不断变化和升级需求。

A1 PROS公司的发展小趣事

在2000年,A1 PROS在韩国正式成立,初创期的它,主要专注于黑白CCD芯片的研发与生产。当时,随着数字技术的兴起,电子摄像头逐渐普及,市场对高质量的图像传感器需求日益增长。A1 PROS凭借其核心团队在半导体技术方面的深厚积累,成功研发出多款性能优越的黑白CCD芯片,并很快在市场上占据了一席之地。

为了拓展业务,A1 PROS积极寻求合作伙伴。2003年,它与台湾的昱生电子有限公司建立了合作关系,后者成为A1 PROS在台湾地区的主要经销商。这一合作不仅帮助A1 PROS打开了台湾市场,也为后续进军更广阔的亚洲市场奠定了基础。

智浦欣(Chipstar)公司的发展小趣事

随着公司规模的不断扩大和业务的快速发展,智浦欣公司意识到,必须加强内部管理和人才培养才能确保公司的持续健康发展。于是,公司引进了一套先进的管理体系和人才培养计划。在管理体系方面,公司建立了完善的组织架构和业务流程,提高了工作效率和协同能力;在人才培养方面,公司注重员工的个人发展和职业规划,提供了多样化的培训和学习机会,激发了员工的工作热情和创新能力。

问答坊 | AI 解惑

求助:TMS320F206的FLASH烧录环境问题

程序是以前走的小朋友编写的,TMS320F206的FLASH烧录只能在win98下 运行控制台命令行程序,即用的是DOS的批处理文件。 现在系统至少都是2000的,TMS320F206的FLASH烧录软件有新的吗??? 谢谢... 虽然TMS320F206早已不用,但现在的产品还要继 ...…

查看全部问答>

有关PCI-E总线

论坛上怎么没有关于PCI-E总线设计文章啊…

查看全部问答>

Altera在线视频(swf)教程下载地址:

Chinese Version: The Quartus II Software Design Series: Foundation (Online) (OCDSW1110)   8 Hours Online Course   https://mysupport.altera.com/etraining/webex/Foundation_CN/CH_Foundation.zip Chinese Version ...…

查看全部问答>

TMS320VC5410 芯片电源及其复位电路设计

TMS320VC5410 芯片电源及其复位电路设计…

查看全部问答>

PB编译时报Bad directory prefix错误?

PB5.0中写一个应用程序,我将若干文件放在当前目录的下级子目录\\util\\*.c 中,结果报Bad directory prefix错误。 查看了sources文件,FILE_VIEW_INCLUDES_FOLDER已经包含了util目录。请问在PB5.0中哪里需要指定下一级目录?…

查看全部问答>

求教:如何用cpld器件完成除法?

cpld器件输入两路正弦波(sin,cos),如何实现除法功能,求出tg信号? 请帮助! E-mail lnb—zj@126.com…

查看全部问答>

跪求高人解释,我用evc编写的程序,希望他开机启动

我用evc 中的evb编译了一个程序,project1.vb 通过同步软件 microsoft activesync 传到我的pda上面  我希望他开机启动 程序在pda program files里面    我的pda系统是 ppc2002 希望高手告诉我   如果解决 evc有没 ...…

查看全部问答>

MOSFET选型

    应用:DCDC用的MOSFET  频率:200KHZ     要求:            简单地说就是找IRF3205的替代MOSFET 有大牛推荐么…

查看全部问答>

【TI易电源】游戏心得!

这个游戏我觉得比较简单,因为都是电源里面的五大元器件:电阻,电容,电感,开关(MOS 管),二极管。 先把最关键的找到了这个也就不难了! 如果粗心一点的话,那么这个游戏就玩不到满分了:有极性电容和无极性电容的区别! TI的易电源,重点抓 ...…

查看全部问答>

龙芯首款商用微处理器Godson发布

本帖最后由 jameswangsynnex 于 2015-3-3 20:04 编辑 中国处理器芯片设计业者龙芯(Loongson Technology)开始提供其首款商用微处理器的样品,并计划在今年秋天投入量产,供应给最多十家的当地服务器制造商;如果龙芯成功写下该里程碑,将意味着中国 ...…

查看全部问答>