社区
单片机/工控
帖子详情
单片机C编程 按键一下暂停再按一下继续,不用中断
deitydeSHIN
2012-07-01 01:21:18
主要的问题,应该是 抖动,
在 按键 按一下的时候,比如说P1_2==0.
但是 再 按一下 继续的时候,可能因为 按下去的时间过长,又进入到这个 函数里了。就死循环了。
if(P1_2==0)
{
while(1)
{
if(P1_2) ;//继续
}
}
怎么 解决 死循环问题?
...全文
4077
12
打赏
收藏
单片机C编程 按键一下暂停再按一下继续,不用中断
主要的问题,应该是 抖动, 在 按键 按一下的时候,比如说P1_2==0. 但是 再 按一下 继续的时候,可能因为 按下去的时间过长,又进入到这个 函数里了。就死循环了。 if(P1_2==0) { while(1) { if(P1_2) ;//继续 } } 怎么 解决 死循环问题?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wangxiaofengq5
2012-08-12
打赏
举报
回复
这就是一个死循环
aydf1
2012-08-12
打赏
举报
回复
如果P1_2==0 是按下的话,在死循环里如果P1_2 没有变化,仍然是0(按下),则再次循环,直到为1(抬起),抬起后执行if语句里的代码,这里面当然应该有一个跳出循环的语句。
xgbing
2012-08-12
打赏
举报
回复
如果用户按下键不放会有问题,最好改为用户按下键再弹起为一次输入
int isPressed()
{
int i=0, j=0;
while(1)
{
if(i <= 50)
i++; //计数
if(P1_2==1)
{
for(j = 0; j < 50 && P1_2==1; j++);
if(j >= 50)
break;
}
}
if(i > 50)
return(1);
else
return(0);
}
xgbing
2012-08-12
打赏
举报
回复
int isPressed()
{
int i=0;
while(P1_2==0)
{
i++; //计数
if(i > 50)
return(1); //计数超过50就认为键按下了;不超过,就认为是抖动
}
return(0);
}
void main()
{
int press = 0;
while(1)
{
if(isPressed())
{
press++;
if(press == 1) //第一次按下是暂停
{
//调用暂停函数
}
else if(press == 2) //第二次按下是继续
{
//调用继续函数
press = 0; //重新置为初始值
}
}
}
}
tangjs208
2012-08-12
打赏
举报
回复
可以考虑加个超时处理
Seong2020
2012-08-01
打赏
举报
回复
这根本就是一个死循环程序,一旦有按键按下,不管按下去的时间长或短,程序都会进入while死循环,永远跳不出来的。
help_wei
2012-07-30
打赏
举报
回复
可以试试这样,严格来说去抖是一定要的,不管是什么场合:
char flag=0;
while(flag==0)
{
if(P1_2==0)flag=1;
else break;
}
while(flag==1)
{
if(P1_2==0)
{
flag=0;
break;//继续
}
}
lbing7
2012-07-05
打赏
举报
回复
while(!P1_2)
{
}
IO直接作为循环条件即可
空影
2012-07-05
打赏
举报
回复
[Quote=引用 2 楼 的回复:]
break能跳出while吗?
[/Quote]break可以跳出while ,for ,switch
galle
2012-07-05
打赏
举报
回复
增加一个按键的标志位就可以解决了!
没有按下为0,按下为1,
每次要判断按键的时候结合标志位进行。
xufeng0218
2012-07-03
打赏
举报
回复
break能跳出while吗?
jianxuanzi
2012-07-01
打赏
举报
回复
这个代码看起来不像是解决再按下一次按键的问题吧,应该是检查按下后抬起的问题的。
如果P1_2==0 是按下的话,在死循环里如果P1_2 没有变化,仍然是0(按下),则再次循环,直到为1(抬起),抬起后执行if语句里的代码,这里面当然应该有一个跳出循环的语句。
51
单片机
通过一个
按键
实现
暂停
与恢复
51
单片机
通过一个
按键
实现
暂停
与恢复
EXT_C.rar_51
单片机
_
单片机
C语言
编程
_
单片机
编程
C语言的51
单片机
系列
中断
编程
示例,对初次学习
单片机
编程
的朋友是一个很好的借鉴
单片机
c语言键盘
中断
扫描
单片机
c语言键盘
中断
扫描,自己看看对你学习键盘模块有没有帮助
STC15
单片机
按键
检测(外部
中断
).zip
单片机
初学者
基于
单片机
的秒表
暂停
,启动
基于
单片机
的秒表启动和
暂停
使用代码,是c语言代码。如果是想利用
单片机
实现秒表功能的同学要设计秒表的
暂停
与启动的可以参考下。
单片机/工控
27,511
社区成员
28,797
社区内容
发帖
与我相关
我的任务
单片机/工控
硬件/嵌入开发 单片机/工控
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章