历史上的今天
今天是:2025年03月28日(星期五)
2019年03月28日 | STM32按键程序
2019-03-28 来源:eefocus
u8 KEY_Scan(u8 mode)
{
static u8 key_up=1;//按键按松开标志
if(mode)key_up=1; //支持连按
if(key_up&&(KEY0==0||KEY1==0||KEY2==0||KEY3==1))
{
delay_ms(10);//去抖动
key_up=0;
if(KEY0==0)return 1;
else if(KEY1==0)return 2;
else if(KEY2==0)return 3;
else if(KEY3==1)return 4;
}else if(KEY0==1&&KEY1==1&&KEY2==1&&KEY3==0)key_up=1;
return 0;// 无按键按下
}123456789101112131415static是静态变量只会执行一次
if(key_up&&(KEY00||KEY10||KEY20||KEY31))这句意思是如果keyup为1,同时key0123中有一个按键被按下,那么if为真,执行取值操作,作为返回值付给主函数的t,
else if(KEY01&&KEY11&&KEY21&&KEY30)key_up=1;这个意思是如果上面的if为假,那么如果key0123没有一个被按下,那么keyup置1,
我们来分析如果不支持连按的情况,mode为0,
一开始你没按按键那么if(key_up&&(KEY00||KEY10||KEY20||KEY31))为假不执行后面的语句执行elseif应为keyup没变过,所以没什么用。
假设你按的是key0,那么KEY00||KEY10||KEY20||KEY31为真,执行后面的语句,把keyup置0后,取出按键值,作为函数返回值送会给t,
如果你继续按着当下次按键扫描时到来时,static u8 key_up=1,这个只执行一次,同时mode又为0,那么keyup还是0,
然后执行到if(key_up&&(KEY00||KEY10||KEY20||KEY31))这句,由于keyup是0所以不会执行if语句,执行elseif,但是你此时有有一个按键是被按下的,所以elseif里的keyup=1也不会被执行,因为elseif也是假的。然后返回值还是0,这就达到了不支持连按的目的
如果你按过之后送手了那么再看,if(key_up&&(KEY00||KEY10||KEY20||KEY31))这条语句为假应为keyup为0执行elseif,此时由于你没有按按钮,所以会执行keyup=1这条语句,当下次扫描按钮来临时又恢复到了最初的情况。
同理可以分析出mode为1时的支持连按的情况
下一篇:STM32的按键部分
史海拾趣
|
随着SoC设计元件的出现,如MIPS32 1004K一致处理系统(CPS),单操作系统条件下的片上对称多处理(SMP)已经成为了一种真正的设计选择,而系统架构师也需要了解其优点和局限性。 任务越多,越需要并行 复杂的模块化多任务处理嵌入式软件系统经常 ...… 查看全部问答> |
|
针对行业里存在的安防\"水货\"、安防\"山寨货\"我们进行了调查,发现安防市场产品如其他电子产品市场一样,鱼龙混杂,难分真假。今天就让我们学习如何辨别三星SCC-B5331P半球摄像机的真假吧。 从外包装上看,真品包装精致、条码清晰,并且与机 ...… 查看全部问答> |
|
工作职责: 负责公司新产品开发与试制工作。单片机及嵌入式产品的开发设计工作。 应聘人员要求: 1)电子、自动化、计算机等相关专业,本科或以上学历。 2)2年以上相关工作经验,具有医疗设备、生命科学仪器研发经验者优先; 3)具备独 ...… 查看全部问答> |
|
辰汉的IMX27核心板,硬件由27+HYB18M320G+K9F2G08R0A组成,内核、bootloader以及rootfs都有,现在网络挂载不了文件系统(硬件问题),想通过其他方式,串口等,JTAG口也可以用。你能做的或做过的请尽快联系我。当然,如果能解决硬件问题那就更好了 ...… 查看全部问答> |
|
【板子已送出】活跃板块--赠送ARM S3S2410核心板一块 板子为我学习时候在淘宝上以300元买的核心板,别看只是一个核心板,我的嵌入式LINUX开发之旅就是从他开始的,现在用不到了,特将此送给需要的坛友们!~ 要求:1,邮费自理 2,写明用途 3,写出开发心得 截至日期为12月15日,需要 ...… 查看全部问答> |
|
【低功耗】VHDL+Verilog良好的代码编写风格(二十五条) 良好代码编写风格可以满足信、达、雅的要求。在满足功能和性能目标的前提下,增强代码的可读性、可移植性,首要的工作是在项目开发之前为整个设计团队建立一个命名约定和缩略语清单,以文档的形式记录下来,并要求每位设计人员在代码编写过程中都要 ...… 查看全部问答> |
|
(1) 先谈Y电容放置 1、Y电容通用脚距是10mm,留出焊盘,中间的空隙是8mm,中间最好不要走线。 2、中间不走线,放置的地方当然是板的上下,左为强电,右为弱电,强电端的GND最好为功率地,弱电端的GND最好是靠近变压器的GND引脚。 3、对于有输 ...… 查看全部问答> |




