历史上的今天
返回首页

历史上的今天

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

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

2019-08-24 来源:eefocus

主函数中扫描该函数即可,需要注意按键按下时程序会停留在该函数中,知道松手或时间到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();

}



推荐阅读

史海拾趣

DESIGNERSYSTEMS公司的发展小趣事

DESIGNERSYSTEMS公司的创始人在电子行业有着深厚的背景和独特的见解。他们发现市场上缺乏一种能够集成多种功能、高度定制化的电子设备设计解决方案。于是,他们创立了DESIGNERSYSTEMS,专注于提供从概念到原型再到量产的全方位设计服务。通过不断的技术创新和对市场需求的精准把握,DESIGNERSYSTEMS迅速在电子行业树立了自己的品牌形象,赢得了客户的信赖。

BOT公司的发展小趣事

广西来宾电厂是中国第一个国家正式批准的BOT试点项目。该项目由法国电力国际和通用电气阿尔斯通公司作为项目公司的主要股东,总投资为6.16亿美元。这个电厂的装机规模为72万千瓦,安装了两台36万千瓦的进口燃煤机组。在长达18年的特许经营期内,该项目为广西地区提供了稳定的电力供应,同时也为项目公司带来了可观的投资回报。随着时间的推移,该项目成为了BOT模式在中国成功应用的典范,为后来的类似项目提供了宝贵的经验。

Davicom公司的发展小趣事

为了进一步提升自身的技术实力和市场竞争力,Davicom积极寻求与业界巨头的合作。经过多轮谈判,Davicom最终与一家国际知名的IC设计大厂达成战略合作协议。双方共同研发出一系列高性能、低功耗的网络通讯IC产品,这些产品一经推出便受到市场的热烈欢迎。

Capar Components Corp公司的发展小趣事

在电子行业的初期,Capar Components Corp由几位热衷于电子技术的年轻人创立。他们凭借对技术的热情和对市场的敏锐洞察,决定投身于电子元器件的研发与生产。然而,创业的道路并非一帆风顺。资金短缺、技术瓶颈以及市场竞争激烈等问题接踵而至。但他们没有放弃,通过不断的技术创新和市场调研,成功研发出一款性能优异的电容器,迅速打开了市场,奠定了公司的基础。

Ecera Comtek Corp公司的发展小趣事

随着公司实力的不断增强,Ecera Comtek Corp公司开始寻求更广阔的发展空间。公司决定进军国际市场,拓展海外业务。然而,国际市场的竞争更加激烈,Ecera Comtek Corp公司面临着来自全球各地的强大竞争对手。为了应对这一挑战,Ecera Comtek Corp公司加强了与国际合作伙伴的联系,共同研发新产品,开拓新市场。同时,公司还加大了对海外市场的宣传力度,提高了品牌的知名度和美誉度。经过几年的努力,Ecera Comtek Corp公司的产品逐渐在国际市场上获得了认可,海外业务也取得了显著的进展。

EiKO Global LLC公司的发展小趣事

EiKO Global LLC,简称EiKO,成立于XXXX年,由一群热衷于照明科技的先驱者共同创立。公司初期专注于照明产品的研发与生产,致力于为全球用户提供高质量的照明解决方案。EiKO凭借对市场的敏锐洞察力和技术创新,迅速在北美市场崭露头角。

在创立初期,EiKO便确立了以“质量第一、客户至上”为经营理念的方针。通过引进先进的生产设备和技术,严格把控产品质量,EiKO的照明产品逐渐赢得了消费者的信赖。同时,EiKO还积极拓展市场,与多家知名企业和零售商建立了合作关系,产品销售网络遍布全球。

问答坊 | AI 解惑

算术运算指令

Arithmetic Operations ABS r3 = abs r1 ; a1 = abs a1, a0=abs a0 ; Add/Subtract r5 = r2 + r1(s) ; r0.l = r2.h + r4.l(ns) ; r1.l = r6-r7(rnd20) ; r1.l = r6-r7(rnd12) ; r0 += 40 ; MAX /MIN r5 = max (r2, r3) ; r5 = min ( ...…

查看全部问答>

海康和大华的录像机,哪个更实惠?

最近公司要挑选工程上用的录像机,请各位谈谈哪个更实惠? 性能上该如何确定,比如网络传输、后期维护等…

查看全部问答>

s3c2410 Bank3 虚拟地址

小弟最近在写一个串口驱动,用到一个寄存器,其物理地址为0x18000000,也就是bank3的基地址,据我所知,linux 2.6中要读些该寄存器不可直接使用这个物理地址,它的虚拟地址是多少呢?之前调用了ioremap(08000000,1),但是没有达到预期效果,不知 ...…

查看全部问答>

linux hid设备通信,如何实现阻塞接收?

用libusb库搞了一个通信程序,usb_interrupt_read进行接收,但是这个函数是非阻塞的,写死循环太占CPU。 我试了select,监视/dev/bus/usb下设备打开句柄,也试了监视设备的输入端点管道句柄,都不好用。有谁搞过这方面的东西,提提建议。貌似win版 ...…

查看全部问答>

优龙bootloader的一些奇怪得问题

mov        r5, #NFCONF                        ;DsNandFlash         ldr        r0, [r5, #4]     &nb ...…

查看全部问答>

编译错误 command line error D8004 '/I' requires an argument

各位达人, 编译时出现如上错误,究竟怎么回事? 谢谢解答!…

查看全部问答>

一本简单却很深刻的有关制作项目的书籍

     《大道至简》,看到题目就让人有种耳目一新的感觉。道理深刻却用简单的方法去实践,没有多余的赘诉,如同一朵曼妙的少女,给人一种清新、一种悦目、一种忍不住窥视的感觉。这是一位软件工程师实践者的思想陈述,希望各位 ...…

查看全部问答>

俺的TIMER捕获中断咋进不去(1114)

本人也是刚接触1114,编写了段程序可是进入不了中断,特请教各位同道中人。我是想用定时器捕获功能,如能赐教不胜感激。 调试中发现在捕获脚上输入脉冲信号,程序就进入DefualtVectorHandle();函数中。可是关闭了中断注册函数zyIsrSet(NVIC_TIMER32 ...…

查看全部问答>

急,FPGA编程求助

我想编一个数码管动态显示的程序,但是下到板子(epm240t100c5)里一直跑不起来,也不知道是什么问题,求高手指导,谢谢。     module dig_show(clk,rst,csm_1,csm_2,db);input clk;         ...…

查看全部问答>

【TI原创】矩阵键盘扫描新思路

用过单片机的人应该都熟悉矩阵键盘扫描程序。矩阵键盘一般是依次扫描输出管脚,需要N(N为输出管脚的数目)次扫描才能完成整个键盘的一次完整扫描。不过,你见过一次就可以扫描一个完整键盘的程序吗?呵呵,这个你应该见过的,这就是键盘扫描中很有 ...…

查看全部问答>