关于待机唤醒实验中WK_UP按下3s 是如何实现计时的问题

2019-07-21 05:09发布

在看待机唤醒的例程的时候,
u8 Check_WKUP(void)
{
u8 t=0; //记录按下的时间
LED0=0; //亮灯DS0
while(1)
{
  if(WKUP_KD)
  {
   t++;   //已经按下了
   delay_ms(30);
   if(t>=100)  //按下超过3秒钟
   {
    LED0=0;   //点亮DS0
    return 1;  //按下3s以上了
   }
  }else
  {
   LED0=1;
   return 0; //按下不足3秒
  }
}
}
所标注部分是怎么用t实现计时3s的啊?不是延迟了30ms吗,怎么变成3s的?
是要计算这个循环的执行时间吗?如果是的话又是怎么计算循环执行时间的呢?
因为是初学者,有很多简单问题还不太明白,在网上找了找也没有找到,希望大家不要嫌弃
感谢各位的解答!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
MrXiong
1楼-- · 2019-07-21 11:07
其实这个挺好理解的,你想一下,当你按下按键时,程序就会跑到判断区域,t就会递增,首先查看原理图你会知道WKUP_KD这个按键是带了上拉,也就是按键后呈高电平,只要你按键后,就会进入if(WKUP_KD)的判断,然后你一直按着,那么t就一直递增,但你按的时间长的时候t的值势必会一直递增,那么值就自然会变大,30ms再加上100次循环,那么自然也就是3s了!
毕竟爱mitty
2楼-- · 2019-07-21 16:30
MrXiong 发表于 2017-6-28 21:43
其实这个挺好理解的,你想一下,当你按下按键时,程序就会跑到判断区域,t就会递增,首先查看原理图你会知 ...

哦哦~所以当我一直按着,我也不知道执行了几次循环,但我知道3s后会进入待机状态,所以就一直按着就好了?
MrXiong
3楼-- · 2019-07-21 17:30
毕竟爱mitty 发表于 2017-6-28 22:06
哦哦~所以当我一直按着,我也不知道执行了几次循环,但我知道3s后会进入待机状态,所以就一直按着就好了 ...

其实是你按着按键,当t=100时,函数已经就返回1了,也就是return 1。换句话说,你按3s跟10s,效果是一样的,具体的其他变化也要看主函数是怎么写的了
毕竟爱mitty
4楼-- · 2019-07-21 22:51
 精彩回答 2  元偷偷看……
毕竟爱mitty
5楼-- · 2019-07-22 02:34
MrXiong 发表于 2017-6-28 22:31
其实是你按着按键,当t=100时,函数已经就返回1了,也就是return 1。换句话说,你按3s跟10s,效果是一样 ...

我又来求助了
我自己写的代码有点问题,但是编译通过而且下到板子上了
现在板子待机了。。。但是我的程序里唤醒有问题,现在没办法唤醒了。。
所以正确的程序也没办法下进去了。。
该怎么办啊?有什么强制唤醒的方法吗?
MrXiong
6楼-- · 2019-07-22 07:27
毕竟爱mitty 发表于 2017-6-28 23:32
我又来求助了
我自己写的代码有点问题,但是编译通过而且下到板子上了
现在板子待机了。。。但是我 ...

现在是怎么个现象

一周热门 更多>