历史上的今天

今天是:2024年08月24日(星期六)

2019年08月24日 | stm32中按键长短按实现方法

发布者:素心悠远 来源: eefocus关键字:stm32  按键  长短按  实现方法 手机看文章 扫描二维码
随时随地手机看文章

主函数中扫描该函数即可,需要注意按键按下时程序会停留在该函数中,知道松手或时间到0.8s,大于0.8秒为长按,小于为短按,可以自己根据需要修改,初始化函数因板子而异,这里就不列出来了


u8 KEY_N; //在头文件中声明一下外部变量,用于主函数中判断哪个按键按下

u8 KEY_Scan(void) //返回值temp代表按键按下的时间(=temp*10 MS)

{

static u8 flag=1;

u8 temp=0;

if(flag==1)

{

  if(KEY1_IN==0) //下面四个按键相似操作

{

flag=0;

while(KEY1_IN==0&&temp<85)

{

temp++;

Delay_Ms(10);

}

KEY_N=1;

return temp;

}

if(KEY2_IN==0) 

{

flag=0;

while(KEY1_IN==0&&temp<85)

{

temp++;

Delay_Ms(10);

}

KEY_N=2;

return temp;

}

if(KEY3_IN==0) 

{

flag=0;

while(KEY1_IN==0&&temp<85)

{

temp++;

Delay_Ms(10);

}

KEY_N=3;

return temp;

}

if(KEY4_IN==0) 

{

flag=0;

while(KEY1_IN==0&&temp<85)

{

temp++;

Delay_Ms(10);

}

KEY_N=4;

return temp;

}

}

if(KEY1_IN==1&&KEY2_IN==1&&KEY3_IN==1&&KEY4_IN==1)

{

flag=1;

KEY_N=0;

}

return 0;

}

 还有就是怎么利用上面这个扫描函数实现按键长按时某个量连续增减,下面以时钟的小时位长按连加为例:


从上面扫描函数代码中可以看到当按键按下时间到0.85s程序就会返回了,也就是主程序会往下执行了,但是KEY_N还不为0,直到按键松开后才会变为0,所以在主函数中就可以通过判断这个变量来判断按键是否松开,未松开则每隔50ms自增一次,延时不能太短,不然眼睛看不出来。


while(KEY_N)

{

    Time_Hour++;

    if(Time_Hour==24) Time_Hour=0;

        

    sprintf((char*)LCD_String,"    %d:%d:%d   ",Time_Hour,Time_Min,Time_Sec);

    

    LCD_DisplayStringLine(Line3 ,LCD_String);

    Delay_Ms(50);

    KEY_Scan();

}



关键字:stm32  按键  长短按  实现方法 引用地址:stm32中按键长短按实现方法

上一篇:stm32中非阻塞式多按键状态检测函数
下一篇:STM32按键长短按:超强移植性,回调函数按键处理机制

推荐阅读

1959年,恩格尔伯格和德沃尔发明了世界上第一台工业机器人Unimate,采用执行机构的它庞大而又笨重,只能完成最简单的搬运动作。由于研发成本高昂,只有像通用汽车这样的行业巨头才能负担得起。然而,就是这样一个看似普通的自动化设备,却在后来长达半个多世纪的时间中,以自己的力量推动着整个世界的制造业向前跃进。今天,当传统工业机器人继续在各行...
我看了很多网上的解释,都是先官方的说明I2C协议,再潦草的给出不完整的程序,导致你们又看不懂I2C原理又调试不出程序,所以我这篇文章先专门针对程序,先使你们的程序调试成功,再利用仿真或其他方式回去理解I2C的原理!我自己就是这么来的,所以把这种方法推荐给你们!潦草的说明一下先,不懂不要紧!!! I2C 有四条连接线,SCL、SDA、VCC、GND。 I...
近年来,在国内动力电池需求高速增长以及三元电池兴起的背景下,国内三元电池材料厂商迎来了行业的“春天”。从事锂电池三元材料及其前驱体的天力锂能自2015年在新三板挂牌上市以来取得不错的业绩,截至2019年中旬已连续三年入选创新层。2020年7月初,天力锂能宣布在全国中小企业股份转让系统申请停牌,转战创业板。据招股书披露,天力锂能的三元材料主要...
1.工作模式2的使用这里我们顺便讲解一下定时器0的工作模式2,也就是使用“小试管”的方式,TMOD的初始化就为“TMOD=0x02;”。我们知道工作模式2的最长溢出时间仅为256*(12/11059200)=0.000277秒=277微秒。我们想实现间隔51ms的流水灯实验该怎么做,首先我们定义一个变量cnt用来记录每次的溢出次数,然后我们的定时时间为51微秒(因为最大定时只有278微秒)...

史海拾趣

问答坊 | AI 解惑

外壳带电问题

一次在维修机器的时候,我同时碰到了机顶盒的外壳和维修台的接地端,给电了一下.测量测外壳时居然发现外壳带电,电压有50V,后来查了下资料,说外壳带电属正常现象,具体跟电路板与外壳之间的电抗Z1和外壳与地之间的电抗Z2有关,可简单理解为Z1与Z2串联,外 ...…

查看全部问答∨

二极管应该归到有源器件呢,还是无源器件呢?

二极管应该归到有源器件呢,还是无源器件呢?-%-282556-%-…

查看全部问答∨

AVR中CPI指令是如何影响进位标志位C的?

程序如下BRLO(line 36)指令是根据进位标志C跳转的,它前面的CPI指令是如何影响到进位标志位C和零标志位Z来影响程序 流程的?r1初始值为0 avr034C:        ldi        YL, 0x5F      &nb ...…

查看全部问答∨

驱动中如何区分U盘和移动硬盘

做了一个usb过滤驱动挂在磁盘驱动器类下,想问一下 应该怎样区分是移动硬盘还是U盘?…

查看全部问答∨

请问 是否有 WinCE环境下的 MPEG4编码开源代码?

哪位大侠能提供一下, 另外xvid开源码需要安装direct9.0 SDK 不知是否能用于WINce环境开发!谢谢…

查看全部问答∨

优化高亮度LED的使用寿命 ESD保护考虑事项

随着亮度和能效的提升,延长使用寿命已经为促进基于高亮度发光二极管(HB-LED)的固态照明设计快速发展的主要因素之一。然而,并非所有HB-LED在这些方面都旗鼓相当,制造商应用静电放电(ESD)保护的方式可能是影响HB-LED现场使用寿命的一个至关键 ...…

查看全部问答∨

香水城,再请教你2个问题,cosmicc的环境st72324

问题1:I2Cms 是定义的全局变量,I2Cms 在1毫秒定时器里累加,现在的问题    I2Cms = 0;    while(I2Cms<=10)    {    }这个while根 ...…

查看全部问答∨

【TI技术文章】:TI KeyStone架构支持L2及传输处理

无线技术的持续演进发展、全球无线用户的激增,以及市场对更强大数据承载能力的需求,全面催生了各种新标准的不断涌现,如宽带码分多址- 高速分组接入 (WCDMA-HSPA)、WCDMA-HSPA+ 以及长期演进技术 (LTE) 等。基于无线服务网络的数据使用呈指数级 ...…

查看全部问答∨

Altera的芯片管脚被焊断了,导致芯片的AS模式不能正常下载,怎么办?

Altera的EP3C40的芯片负责下载模式选择的管脚被焊断了,导致芯片的AS模式不能正常下载,怎么办???? 因为本块板还要使用Niosii实现以太网口的收发,怎么办?????急求~~~~~…

查看全部问答∨

LM3S811的PWM

其PWM有个故障输入脚,到底是从哪个脚输入的…

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

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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