完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
1. 前言
目的是给入门学裸机编程的提供一个思路,不涉及操作系统任务阻塞之类的。在我们平常使用按键的编程过程中,一般说来,某一个按键实现的是单一的功能,比如简单的点亮一盏LED灯,按一次亮起,再按一次就是熄灭这种。但是如果我们的按键很少,此时要是用一个按键能够实现多种功能那么就可以节约我们的硬件资源。 2. 代码 话不多说,以下是实现的代码: #define Long_Press 1 #define Short_Press 2 uint8_t Key_Scan(void) { uint8_t long_press_flag; //长按标志位 uint8_t short_press_flag; //点按标志位 if(key==0) { delay_ms(10); if(key==0) { short_press_flag=1; delay_ms(250); //点按的时间不能多于250ms if(key==0) { long_press_flag=1; }while(!key); if(long_press_flag==1) //先判断是否长按,因为长按中包括了点按 { return Long_Press; } if(short_press_flag==1) //后判断是否点按 { return Short_Press; } } } return 0; } 3. 说明 通过返回值得到按键是点按还是长按,若是长按,返回Long_Press;点按则返回Short_Press,这两个是宏定义;若是没有检测到按键按下,就返回0。但是本代码在使用过程中要注意的是点按的周期不能小于250ms,否则也会被当成是长按,适用于一些实时性要求没有太高的场合。当然,延时的250ms可以改变,依据个人习惯更改长按的等待时间即可。 |
|
|
|
只有小组成员才能发言,加入小组>>
3278 浏览 9 评论
2955 浏览 16 评论
3455 浏览 1 评论
8987 浏览 16 评论
4050 浏览 18 评论
1102浏览 3评论
570浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
568浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2301浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1857浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 07:11 , Processed in 1.169845 second(s), Total 81, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号