历史上的今天
返回首页

历史上的今天

今天是:2024年12月29日(星期日)

2018年12月29日 | stm32学习笔记(二)按键实验

2018-12-29 来源:eefocus



#include "key.h"

#include "delay.h"

//////////////////////////////////////////////////////////////////////////////////  

//本程序只供学习使用,未经作者许可,不得用于其它任何用途

//ALIENTEK Mini STM32开发板

//按键输入 驱动代码    

//正点原子@ALIENTEK

//技术论坛:www.openedv.com

//修改日期:2014/3/06

//版本:V1.0

//版权所有,盗版必究。

//Copyright(C) 广州市星翼电子科技有限公司 2009-2019

//All rights reserved    

//////////////////////////////////////////////////////////////////////////////////  

      

//按键初始化函数 

//PA15和PC5 设置成输入

void KEY_Init(void)

{


GPIO_InitTypeDef GPIO_InitStructure;

 

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,ENABLE);//使能PORTA,PORTC时钟

 

GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//关闭jtag,使能SWD,可以用SWD模式调试


GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_15;//PA15

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成上拉输入

  GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA15


GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_5;//PC5

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成上拉输入

  GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化GPIOC5

 

GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_0;//PA0

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //PA0设置成输入,默认下拉   

GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.0


//按键处理函数

//返回按键值

//mode:0,不支持连续按;1,支持连续按;

//返回值:

//0,没有任何按键按下

//KEY0_PRES,KEY0按下

//KEY1_PRES,KEY1按下

//WKUP_PRES,WK_UP按下 

//注意此函数有响应优先级,KEY0>KEY1>WK_UP!!

u8 KEY_Scan(u8 mode)

{  

static u8 key_up=1;//按键按松开标志

if(mode)key_up=1;  //支持连按   

if(key_up&&(KEY0==0||KEY1==0||WK_UP==1))

{

delay_ms(10);//去抖动 

key_up=0;

if(KEY0==0)return KEY0_PRES;

else if(KEY1==0)return KEY1_PRES;

else if(WK_UP==1)return WKUP_PRES; 

}else if(KEY0==1&&KEY1==1&&WK_UP==0)key_up=1;      

return 0;// 无按键按下

}

 

KEY0 对应PC5  KEY1 对应PA15   都设置为默认上拉

PA0设置为默认下拉


GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)读的是GPIOx_IDR,读的是当IO口设置为输入状态时候的IO口值 

               GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)读的是GPIOx_ODR,读的是当IO口设置为输出状态时候的IO口值 


GPIO_ReadInputDataBit函数,引脚设置为默认上拉,无按键返回值为1,有按键返回值为零


引脚设置为默认下拉,无按键返回值0,有按键返回值为1。




#include "led.h"

#include "delay.h"

#include "sys.h"

#include "key.h"

//ALIENTEK Mini STM32开发板范例代码2

//按键输入实验    

//技术支持:www.openedv.com

//广州市星翼电子科技有限公司

 int main(void)

 {

u8 t=0;   

delay_init();     //延时函数初始化   

LED_Init();   //初始化与LED连接的硬件接口

KEY_Init();          //初始化与按键连接的硬件接口

LED0=0; //点亮LED

while(1)

{

t=KEY_Scan(0); //得到键值

switch(t)

{  

case KEY0_PRES:

LED0=!LED0;

break;

case KEY1_PRES:

LED1=!LED1;

break;

case WKUP_PRES:

LED0=!LED0;

LED1=!LED1;

break;

default:

delay_ms(10);

}  

}


推荐阅读

史海拾趣

DFI公司的发展小趣事

随着市场竞争的加剧,DFI意识到单一产品的竞争力有限。因此,公司开始寻求垂直整合的机会,与罗升等公司合作,共同开发智能制造的全面性解决方案。这一举措不仅使DFI能够提供更完整的产品线,还增强了其在行业中的竞争力。通过与合作伙伴的紧密合作,DFI成功推出了一系列具有竞争力的智能制造解决方案,赢得了市场的广泛认可。

Electro Adapter Inc公司的发展小趣事

Electro Adapter Inc公司(以下简称EA公司)的成立源于创始人对电子行业未来发展的深刻洞察。在创立初期,EA公司主要生产一些基本的电源适配器,面临着激烈的市场竞争和资金短缺的双重压力。然而,创始人凭借其深厚的技术背景和敏锐的市场洞察力,不断研发新产品,提升产品质量,逐渐在市场上站稳了脚跟。特别是在一次技术革新中,EA公司率先推出了一款高效能、低成本的适配器,赢得了客户的青睐,也为公司的发展奠定了坚实的基础。

爱特姆(ATOM)公司的发展小趣事

爱特姆科技自在美国德克萨斯州休斯顿市成立以来,便致力于电子行业的创新与发展。1998年,公司成功创立了“ATOM”品牌,标志着其正式踏入了品牌化发展的道路。起初,爱特姆以台湾、深圳、昆山为主要研发生产基地,凭借对技术的不断追求和对市场的敏锐洞察,逐渐在连接器领域取得了突破。

科山芯创(COSINE)公司的发展小趣事

随着产品的不断推出和市场的认可,科山芯创开始积极拓展市场。他们与国内外多家知名企业建立了合作关系,产品广泛应用于通讯网络、物联网、工业自动控制等多个领域。同时,科山芯创还积极参加各种行业展会和交流活动,与业界同行进行深入交流,共同推动电子行业的发展。

C&K公司的发展小趣事

为了进一步加强在全球市场的地位,C&K在2011年进行了一次重要的收购。这次收购不仅扩大了公司的业务范围,还提升了其设计和制造能力。通过这次收购,C&K得以在全球范围内提供更广泛的产品和服务,进一步巩固了其在电子行业中的领先地位。

Adaptive Networks Inc公司的发展小趣事

通过不断的努力和创新,C&K在90年代中期已经成为世界领先的开关制造商之一,也是业内最受信赖的品牌之一。这一成就的取得离不开公司对产品质量的严格把控和对技术创新的持续追求。同时,C&K还积极与全球各地的客户合作,根据他们的需求量身定制开关产品,赢得了广泛的赞誉。

问答坊 | AI 解惑

汶川地震灾害启示录1---应急通信装备至关重要

地震发生后,震区内音信全无。庞大的社会应急联动系统没有了信息来源,这是致命的断链。    怎么把里面的信息传出来呢?通信。但是有线通信,包括光缆链路在内全部断掉。手机等无线通信也瘫痪了。     地震后常规电源基本被破 ...…

查看全部问答>

如何编辑自己的帖子

如何编辑自己的帖子 1)找到自己已发表的帖子,在帖子右下角有“编辑”字样,如图所示: 2)点击“编辑”,即进入帖子编辑界面,可对自己发表的帖子进行补充修改,如图所示 …

查看全部问答>

当今网络视频监控市场下IP产品推广活动

受目前网络环境和产品现有技术水平的限制,IP监控产品的应用受到网络带宽和数字编码/压缩技术这一对互为因果关系的因素制约;同时,相对模拟产品它具有组网方便,远程连接费用较低的特点。因此,IP监控产品的主要目标市场应是一高一低两大类。    ...…

查看全部问答>

wince启动到桌面后 USB 不产生中断,过2分钟后才有中断

各位大哥:     我的 WINCE6 在关闭电源一两个小时后,再上电启动到桌面,这时候 USB 鼠标是不能使用的     监测系统中断时发现没产生中断,当让系统在桌面过2分钟后,USB鼠标可以使用了,而且也产     生了中断 ...…

查看全部问答>

熟悉Linux,C/C++,嵌入式开发,有两年的工作经验,请问在北京能拿多少?

熟悉Linux,C/C++,嵌入式开发,有两年的工作经验,请问在北京能拿多少?…

查看全部问答>

IEEE802.11B协议标准

想花3个月时间仔细研究IEEE802.11B协议. 顺便在自己的Windows CE上写个IEEE802.11b驱动. 可是不知道哪里有非常完整的协议规格标准书? 如果有中文就就更好了.…

查看全部问答>

STM32核心板供电问题

兄弟我做了一个STM32F10XVB的核心小板,包含CPU、晶体、电容、复位,100个管脚用了4个2X13的接插件引出,有个疑问: 将5个VDD接到一块,使用一个脚引出供电?还是使用5个脚供电?5个脚存在回路问题吧?另外VSS呢,地的接法应该怎样? 我初步想 ...…

查看全部问答>

设定中断向量的问题

我用的是2407,由于现在是学习调试阶段,load programm比较频繁,所以我把板子设定为微处理器模式,程序放在外存中,而不进行烧flash。   我定义的cmd文件如下: MEMORY:   VECS:origin=0x8000,length=0x40   &nbs ...…

查看全部问答>

求帮助啊?

win7装了ISE13.1和modelsim6.5,怎么就不能用呢?求高手帮助…

查看全部问答>

msp430 JTAG 仿真器

我在網上找了個msp430 JTAG 仿真器的圖紙,按照圖紙的電路,焊接了個板子(IC:74HC244N)。   但是在用IRA的時候出現連接錯誤。大家看看這個圖錯誤還在怎麼了。   我前後焊了3個板子,都是這樣。  …

查看全部问答>