历史上的今天

今天是:2024年09月05日(星期四)

正在发生

2019年09月05日 | STM32按键总结(低电平有效及上升沿有效))

发布者:自在自由 来源: eefocus关键字:STM32  按键总结  低电平有效  上升沿有效 手机看文章 扫描二维码
随时随地手机看文章

电平有效的按键


#define KEY1  GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_10)//读取按键0


#define KEY2  GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13)//读取按键1


#define KEY3  GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_2)//读取按键2


#define KEY4   GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_11)//读取按键3(WK_UP)


#define KEY5   GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_1)//读取按键3(WK_UP)


void KEY_Init(void) //IO初始化


{


     GPIO_InitTypeDef GPIO_InitStructure;


         /*开启按键端口(PC)的时钟*/


         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);


         GPIO_InitStructure.GPIO_Pin= GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_13;//KEY0-KEY2;


//      GPIO_InitStructure.GPIO_Speed= GPIO_Speed_10MHz;


         GPIO_InitStructure.GPIO_Mode= GPIO_Mode_IPU;


         GPIO_Init(GPIOC,&GPIO_InitStructure);


}


void KEY_Scan(u8 mode)


{       


         staticu8 key_up=1;//按键按松开标志


         if(mode)


                   key_up=1;  //支持连按           


         if((KEY1==0||KEY2==0||KEY3==0||KEY4==0||KEY5==0))


         {


                   delay_ms(40);//去抖动


                   key_up=0;


                   if(KEY1==0)


                            KEY1_flag=1;


                   if(KEY2==0)


                            KEY2_flag=1;


                   if(KEY3==0)


                KEY3_flag=1;


                   if(KEY4==0)


                      KEY4_flag=1;


                   if(KEY5==0)


                            KEY5_flag=1;


         }


         if((KEY1==1||KEY2==1||KEY3==1||KEY4==1||KEY5==1))


         {


                   delay_ms(10);//去抖动


                   key_up=0;


                   if(KEY1==1)


                            KEY1_flag=0;


                   if(KEY2==1)


                            KEY2_flag=0;


                   if(KEY3==1)


                      KEY3_flag=0;


                   if(KEY4==1)


                KEY4_flag=0;


                   if(KEY5==1)


                            KEY5_flag=0;


         }


}


按键,弹起有效


KEY_Scan函数修改为


void KEY_Scan(u8 mode)


{       

         staticu8 key_up=1;//按键按松开标志


         if(mode)


                   key_up=1;  //支持连按           


         if((KEY1==0||KEY2==0||KEY3==0||KEY4==0||KEY5==0))


         {


                   delay_ms(10);//去抖动


                   key_up=0;


                   if(KEY1==0)


                   {


                            KEY1_flag=1;


                            if(0== KEY1_press_flag)


                            {


                                     KEY1_Event_exec_flag= 0;


                                     KEY1_press_flag= 1;


                            }


                   } 


                   if(KEY2==0)


                   {


                            KEY2_flag=1;


                            if(0== KEY2_press_flag)


                            {


                                     KEY2_Event_exec_flag= 0;


                                     KEY2_press_flag= 1;


                            }


                   }



                   if(KEY3==0)


                   {


                            KEY3_flag=1;


                            if(0== KEY3_press_flag)


                            {


                                     KEY3_Event_exec_flag= 0;


                                     KEY3_press_flag= 1;


                            }


                   }

    


                   if(KEY4==0)


                   {


                            if(0== KEY4_flag)


                            {


                                     KEY4_flag=1;


                            }


                            if(0== KEY4_press_flag)


                            {


                                     KEY4_Event_exec_flag= 0;


                                     KEY4_press_flag= 1;


                            }


                   }



                   if(KEY5==0)


                            KEY5_flag=1;


         }


         if((KEY1==1||KEY2==1||KEY3==1||KEY4==1||KEY5==1))


         {


                   delay_ms(10);//去抖动


                   key_up=0;


                  


                   if(KEY1==1)


                   {


                            KEY1_flag=0;


                           


                            if(KEY1_press_flag == 1)


                            {


                                     KEY1_press_flag= 0;


                                    


                                     if(0== KEY1_Event_exec_flag)

[1] [2]
关键字:STM32  按键总结  低电平有效  上升沿有效 引用地址:STM32按键总结(低电平有效及上升沿有效))

上一篇:判断STM32 GPIO输入口的输入状态(高电平或低电平)
下一篇:STM32中关于高电平有效,低电平有效的一点理解

推荐阅读

我们经常从美国科技电影中看到飞行汽车,那它到底是什么东东?是指它可以在空中飞行或在陆地上行驶,可以从一辆普通汽车变身为一架飞机?等于是汽车与飞机合二为一,怎么样,你们想不想上天?  据外媒报道,优步科技在日本东京召开事业说明会,该公司正在测试一款“uberAIR”空中出租车,这是以实用化为目标的飞行汽车,并且这辆飞行汽车测试飞行候选将...
问题:单片机的外围电路设计及程序编写大多是以低电平有效来驱动电路的? 回答:这是因为单片机的低电平时的灌电流一般比高电平时的拉电流要大。如一般的51 系列单片机的I/O 口可以输出4mA 的拉电流或20mA 的灌电流;而其他也有一些芯片,如PIC单片机有一些非常实用的通用特性:I/O口灌电流/拉电流都很大——25MA/25MA。总结:用低电平做驱动,灌电流...
近日,国内领先的EDA解决方案公司国微思尔芯(上海)信息科技有限公司(“国微思尔芯”)宣布完成新一轮数亿元人民币融资。万业企业作为重要LP的上海半导体装备材料基金成功入股国微思尔芯,进而战略布局EDA产业相关赛道,投资领域涵盖芯片设计验证的完整流程。国微思尔芯本轮融资由大基金下设的产业融资机构芯鑫融资租赁、资产管理机构中青芯鑫组建的实体...
快充从字面的意思上来看,指的电池在馈电的状态下面,能够快速地达到补电的效果,快充应用最多的就是手机,快充技术的诞生在一定的程度上面缓解了电量不够的焦虑感带来的体验不佳,随着电动汽车的诞生,续航的焦虑问题再度被提起,补能焦虑也成了很多新能源汽车车主的痛,为了解决这一情况,一些车企把手机上面的快充搬到汽车上,更有甚者宣称充电5分钟续...

史海拾趣

问答坊 | AI 解惑

简单易作的自动充电器

本充电器电路简单,元件易取,它对各节镍镉电池分别充电,充足电即自停。电路见附图所示,充电前,先调节R4,使三端可调稳压器LM317的输出电压为预定值Vo,当充电电池的电压Ve上升到Vo-0.65V时,晶体管截止,充电终止,同时相应的充电指示灯LED熄灭.其 ...…

查看全部问答∨

AVR单片机I/O口使用思路

1.当特殊功能部件(如定时器、外部中断)使用I/O引脚时,引脚的操作(方向、上拉电阻、输入输出值)是由该部件与I/O口寄存器(SFIOR中的PUD位、PORTX、DDRX、PINX)共同管理的。在产品开发中不仅要读该部件的使用说明,也要读I/O口的alternate s说 ...…

查看全部问答∨

ADS中使用C++和uCOSII混合编程

ADS中使用C++和uCOSII混合编程有没有做过,请教一下....…

查看全部问答∨

显示驱动加载问题

大家好! 最近我在搞显示驱动,现在遇到一问题,在此向大家请教一下: 问题是这样的:我用的是ce5.0,自己用bsp包里给的显示驱动编译成了dll,现在可以被系统加载,但是之后在debug窗口就会出现 如下信息,然后加载就停止了:   59890 PID:63e9 ...…

查看全部问答∨

问一个muxSend的问题

1 首先问下,在VXWORKS6.4中是不是不在支持etherOutput这个函数了,在etherLib中就没找到这个函数的定义 2 我要做一个截获以太帧并发送以太帧的程序,现在用muxBind,然后在接收处理函数中能解析出源MAC地址和目的MAC地址,现在我想再发送一个以太 ...…

查看全部问答∨

网卡芯片的MAC地址到底时不是用户可改的?

在做网卡芯片的应用时有个问题搞不明白,我一直以来都认为网卡芯片(如RTL8019AS)的MAC地址是芯片出厂时就写在芯片内且不可改的,但最近看资料发现好像并不是这样,而是由用芯片的人写进芯片附加的EEPROM中的,芯片初始化时又从EEPROM中读入芯片内 ...…

查看全部问答∨

我用VB.NET开发PDA上的程序,碰到关于加密的一个问题!!急!~~~~~~~~~~

就是我在WINCE内写了一段客户端程序实现与服务器的通讯,但是需要对传输的数据进行加密,我在VB.NET里面试过了调用System.Security.Cryptography这个DLL可以实现加密和解密的功能,但是在WINCE里面没有这个DLL啊,这个功能做不了,怎么办啊??还有没有 ...…

查看全部问答∨

如何使得LED灯闪烁呢

                                 我使用的IC是ST7FLITE05Y0M6的,我的样品中在PA3口那里外接了一个LED灯,LED灯以1.7s的周期闪烁,高电平时间为70ms ...…

查看全部问答∨

竟然有CC430做的频谱分析仪

完全没有想到CC430还有这样的”神器“! 硬件外观 上位机的分析软件 实现的框图,还挺简单的。 …

查看全部问答∨

C语言多层循环怎样转换为verilog语言使FPGA最省时间

遇到一个需要将一段C代码转换为verilog语言,同时需要FPGA处理最省时间,请问各位高手怎样处理比较好呢,小弟是新手请多多指教,谢谢。 for(int i =0;i<100;i++) {     int num = m;//m是一个变量,取值不确定。     for ...…

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

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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