|
两个地方有点问题,一是,主程序中有1s的延时,这时是没法收按键的;二是,测距时下边这句,如果没有高电平,岂不是一直等待了?while(!GPIO_ReadInputDataBit(ECHO_PORT,ECHO_PIN)); //等待高电平 。我觉得第一个问题,你可以取消延时1s,利用反复查按键代替这个延时,第二个问题是否定义一个最大等待时间,超时就退出?还有,如果用中断进按键那就都不用管了。 |
|
while(!GPIO_ReadInputDataBit(ECHO_PORT,ECHO_PIN)); //等待高电平 TIM_Cmd(TIM2, ENABLE); //开启时钟 while(GPIO_ReadInputDataBit(ECHO_PORT,ECHO_PIN)); //等待低电平 TIM_Cmd(TIM2, DISABLE); |
robinsonlin 发表于 2021-3-4 17:02 正在跑测距程序的时候按键CPU是不知道的,CPU一直在等待超声波返回信号,这时候就算你用变量保存按键次数也得不出按键次数 |
| 按键响应正常做,按键值用变量保存, 等到循环周期结束再更新Dis_up 不就完了。 |
| 按键写成独立扫描吧,一个循环几个ms就跑完了。怎么可能按不到。 |
|
没看你代码,不知道具体怎样,我说一下我的一点想法和建议 将测距内容使用一个函数封装,利用定时器设定一个时间段产生一个标志位,在main函数的while(1)中检测到该标志位再调用测距函数,同时清除标志位,把测距的CPU占用率降下来 , 缺点:测距实时性有降低 优点:CPU有更多的时间扫描按键 或者将按键接到外部中断脚 缺点:测距时候按下按键会影响测距精度 优点:按键灵敏度达到最高 |