//main的完整过程:

int main(void){

 

LED_GPIO_CONFIG(); //定义LED灯;

KEY_GPIO_CONFIG(); //定义按键;

 

//循环判断按键的过程:

while(1){

if((KEY_SCANF(GPIOC,GPIO_Pin_5)==0)){ //确定按键完全按下

if(GPIO_ReadOutputDataBit(GPIOD,GPIO_Pin_2)==0) //当灯都亮起时,GPIO_ReadOutputDataBit(GPIOD,GPIO_Pin_2)读到输出数据;

      GPIO_SetBits(GPIOD,GPIO_Pin_2); //置位,灯灭;

else

GPIO_ResetBits(GPIOD,GPIO_Pin_2); //复位,灯亮

}

}

}

//关于KEY的操作;

 //实现操作:(初始时灯亮)按一下按键后灯灭,再按一下灯亮;

 

 先按之前的代码点亮一个LED灯;

 GPIO_InitTypeDef GPIO_D;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);

 

GPIO_D.GPIO_Pin=GPIO_Pin_2;

GPIO_D.GPIO_Mode=GPIO_Mode_Out_PP;

GPIO_D.GPIO_Speed=3;

GPIO_Init(GPIOD,&GPIO_D);

 

//然后定义按键;

void KEY_GPIO_CONFIG(void)

{

GPIO_InitTypeDef GPIO_C;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);

    GPIO_C.GPIO_Pin=GPIO_Pin_5;

GPIO_C.GPIO_Mode=GPIO_Mode_IPU;

GPIO_C.GPIO_Speed=1;

GPIO_Init(GPIOC,&GPIO_C);

}

//定义按键和定义LED灯的过程差不多,主要区别在于Mode的配置上;

/*

4种输入模式 :

GPIO_Mode_IPD(下拉输入模式):在默认情况下(GPIO引脚无输入的情况下),读取得GPIO的引脚数据为1;

GPIO_Mode_IPU(上拉输入模式):在默认情况下(GPIO引脚无输入的情况下),读取得GPIO的引脚数据为0;

GPIO_Mode_IN_FLOATING(浮空输入模式):在芯片内部既没有上拉也没有下拉,经由触发器输入。由于其阻抗较大,所以一般把这种模式用于标准的通信协议如I2C,USART的接收端。

GPIO_Mode_AIN(模拟输入模式):关闭施密特触发器,不接入上、下拉电阻,经由另一线路把电压信号传送到片上外设模块。如传送到ADC模块,由ADC模块采集电压信号。所以使用ADC外设的时候,必须设置为模拟输入模式。

4种输出模式:

GPIO_Mode_Out_PP(普通推挽输出):一般用于输出电平为0和3.3V的场合。

GPIO_Mode_Out_OD(普通开漏输出):一般应用在电平不匹配的场合,如需要输出5V的高电平,就需要在外部接一个上拉电阻,电源为5V,把GPIO设置为开漏模式,当输出高阻态时,由上拉电阻和电源向外输出5V的电平。

GPIO_Mode_AF_PP(复用推挽输出):

GPIO_Mode_AF_OD(复用开漏输出):

*/

//根据原理图:当KEY没有按下时为高电平,按下时为低电平,根据上述模式的介绍,可以选择上拉输入模式(GPIO_Mode_IPU)

 

//定义一个扫描KEY输入的函数:

u8 KEY_SCANF(GPIO_TypeDef* a,u16 PIN)

{

if(GPIO_ReadInputDataBit(a,PIN)==0){

Delay(10000); //按键消抖

if(GPIO_ReadInputDataBit(a,PIN)==0){

while(GPIO_ReadInputDataBit(a,PIN)==0);//

return 0;

}

else{

return 1;

}

}

else

return 1;

}

//逐句分析:

if(GPIO_ReadInputDataBit(a,PIN)==0):

//新的库函数:GPIO_ReadInputDataBit(a,PIN),读取输入的数据,可用输入电平高低判断。

//根据调用函数:KEY_SCANF(GPIOC,GPIO_Pin_5) 可知,判断的是KEY是否有输入;

//当没有按下KEY时,应输入模式确定为上拉输入模式,所以默认为高电平。然后,若有按下KEY,则输入变为低电平。

//第二个

if(GPIO_ReadInputDataBit(a,PIN)==0) //是确认确实有按键按下,而不是按下一半返回。

while(GPIO_ReadInputDataBit(a,PIN)==0);//不停的检测按键的电平,直至按键被释放,被释放后,按键的电平又恢复到默认的高电平。

//实际上这一整个过程都是按键扫描、消抖。


关键字:STM32  GPIO  按键  流水灯 引用地址:STM32学习---GPIO和按键(流水灯学习)

上一篇:stm32GUI滑杆图形操作界面
下一篇:STM32CubeMx-ADC

推荐阅读

以中兴禁令为启,此次中美贸易战,实质是美国打着贸易的旗号试图对“中国制造2025”为代表的高科技领域进行打压与遏制。代表之一的半导体,其历史最早追溯到19世纪30年代,经过长达一个世纪的研究,直到1947年美国贝尔实验室发明了更具实用价值的晶体管,人类才开启电子时代并向信息时代前进。可以说现代的大多数文明,例如家电、PC(个人电脑)、智能手机等...
整车企业与头部动力电池企业正展开更紧密的合作。随着"后补贴时代"即将到来,动力电池行业的洗牌也将加速。 近日,据外媒报道,奥迪正在与比亚迪展开电池供应磋商,且目前围绕双方的合作谈判已经进入“关键性阶段”,并将比亚迪纳入奥迪的电池供应商之列。 据上述报道,比亚迪是国内头部动力电池企业之一,奥迪此次与比亚迪进行谈判,更加侧重于电池供应...
#include"reg52.h"//单片机头文件#define uchar unsigned char//宏定义,用uchar表示unsigned char,叫无符号字符型数据类型,取值范围为:0到255。#define uint unsigned int//宏定义,用uint表示unsigned int,叫无符号整数型数据类型,取值范围为:0到65535。sbit qitingjian=P1^0;//位定义启停键sbit zhengzhuan=P1^1;//位定义正转键sbit fan...
智东西(公众号:zhidxcom)作者 | 健恩编辑 | 云鹏智东西9月11日报道,昨天,世界机器人大会再次在北京亦庄拉开帷幕,智东西记者一大早便跨越整个北京城来到这里打探这场大会的最新消息。世界机器人大会自2015年开始举办,迄今为止已成功举办过5次。它不仅是国内一年一度规模最大的机器人产业顶级展会,也是国内机器人产业风向的集中展示。智东西了解...

史海拾趣

问答坊 | AI 解惑

电气控制与PLC 演示文稿课件

http://www.opc-china.com/Soft/UploadSoft/200603/《电气控制与PLC》演示文稿课件%20.rar…

查看全部问答∨

PIC使用需注意!!!

877A的RA口是具有模拟输入功能的I/O口,使用RA口做基本的输入输出可能会出现一个莫名其妙的问题…

查看全部问答∨

稳压电源使用手册

稳压电源使用手册…

查看全部问答∨

PCB电路版图设计的常见问题

么是零件封装,它和零件有什么区别?   (1)零件封装是指实际零件焊接到电路板时所指示的外观和焊点位置。   (2)零件封装只是零件的外观和焊点位置,纯粹的零件封装仅仅是空间的概念,因此不同的零件可以共用同一个零件封装;另一方面,同种零 ...…

查看全部问答∨

求无线游戏手柄的内部构造

哪位大侠可以告诉我无线游戏手柄的内部构造,即由那些部分、元器件组成的。谢谢了!…

查看全部问答∨

横竖屏自动切换问题

想做个有电话借打时,屏幕自动转换为竖屏,借打完成后,自动转换为原来的屏幕方式,各位提供个方法…

查看全部问答∨

OK6410无法挂载nfs文件系统 急~

1,使用开发套件中的交叉网线直连开发板和电脑。vmware版本7.1.0 build-261024。ubuntu 9.102,烧写    u-boot.bin    zImage_WXCAT43    OK6410_touch_v1.0.cramfs3,ip设置:ubuntu主机设置为192.1 ...…

查看全部问答∨

stm8s207的ADC有没有扫描模式??

                                 stm8s207的ADC有没有扫描模式??…

查看全部问答∨

有哪位哥哥知道DEC2812板为何选用既有电源监视又具有看门狗作用的TPS3823-33?

看了TPS3823-33.PDF资料,TPS3823-33除开电源监控作用外,还具有看门狗作用,喂狗由WDI输入。疑问:F2812内部不是集成了看门狗吗,为何外面还要这么一块芯片,会不会增加了电路的复杂程度,选用一个仅有电源监控的芯片不就可以了吗? …

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved