历史上的今天
今天是: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();
}
史海拾趣
|
小弟最近在写一个串口驱动,用到一个寄存器,其物理地址为0x18000000,也就是bank3的基地址,据我所知,linux 2.6中要读些该寄存器不可直接使用这个物理地址,它的虚拟地址是多少呢?之前调用了ioremap(08000000,1),但是没有达到预期效果,不知 ...… 查看全部问答> |
|
用libusb库搞了一个通信程序,usb_interrupt_read进行接收,但是这个函数是非阻塞的,写死循环太占CPU。 我试了select,监视/dev/bus/usb下设备打开句柄,也试了监视设备的输入端点管道句柄,都不好用。有谁搞过这方面的东西,提提建议。貌似win版 ...… 查看全部问答> |
|
《大道至简》,看到题目就让人有种耳目一新的感觉。道理深刻却用简单的方法去实践,没有多余的赘诉,如同一朵曼妙的少女,给人一种清新、一种悦目、一种忍不住窥视的感觉。这是一位软件工程师实践者的思想陈述,希望各位 ...… 查看全部问答> |
|
本人也是刚接触1114,编写了段程序可是进入不了中断,特请教各位同道中人。我是想用定时器捕获功能,如能赐教不胜感激。 调试中发现在捕获脚上输入脉冲信号,程序就进入DefualtVectorHandle();函数中。可是关闭了中断注册函数zyIsrSet(NVIC_TIMER32 ...… 查看全部问答> |
|
我想编一个数码管动态显示的程序,但是下到板子(epm240t100c5)里一直跑不起来,也不知道是什么问题,求高手指导,谢谢。 module dig_show(clk,rst,csm_1,csm_2,db);input clk; ...… 查看全部问答> |
|
用过单片机的人应该都熟悉矩阵键盘扫描程序。矩阵键盘一般是依次扫描输出管脚,需要N(N为输出管脚的数目)次扫描才能完成整个键盘的一次完整扫描。不过,你见过一次就可以扫描一个完整键盘的程序吗?呵呵,这个你应该见过的,这就是键盘扫描中很有 ...… 查看全部问答> |




