社区
单片机/工控
帖子详情
单片机C编程 按键一下暂停再按一下继续,不用中断
deitydeSHIN
2012-07-01 01:21:18
主要的问题,应该是 抖动,
在 按键 按一下的时候,比如说P1_2==0.
但是 再 按一下 继续的时候,可能因为 按下去的时间过长,又进入到这个 函数里了。就死循环了。
if(P1_2==0)
{
while(1)
{
if(P1_2) ;//继续
}
}
怎么 解决 死循环问题?
...全文
4152
12
打赏
收藏
单片机C编程 按键一下暂停再按一下继续,不用中断
主要的问题,应该是 抖动, 在 按键 按一下的时候,比如说P1_2==0. 但是 再 按一下 继续的时候,可能因为 按下去的时间过长,又进入到这个 函数里了。就死循环了。 if(P1_2==0) { while(1) { if(P1_2) ;//继续 } } 怎么 解决 死循环问题?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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语言
编程
_
单片机
编程
本文将基于"EXT_C.rar_51
单片机
_
单片机
C语言
编程
_
单片机
编程
"这个资源,深入探讨51
单片机
的C语言
编程
及其
中断
系统。 51
单片机
是Intel公司8051系列的一种,它内置了CPU、存储器、定时器/计数器、并行I/O口等多种...
单片机
c语言键盘
中断
扫描
中断
是
单片机
处理外部事件的一种机制,当外部设备(如键盘)发生特定事件(如
按键
按下)时,会发送一个
中断
请求给CPU,CPU响应后
暂停
当前任务,转而执行
中断
服务程序,处理这个事件。
中断
技术能提高系统实时性,因为...
STC15
单片机
按键
检测(外部
中断
).zip
"软件开发 -
按键
检测(外部
中断
)"这部分内容可能详细讲解了如何用
编程
语言(如C或汇编)实现上述的
按键
检测和
中断
服务程序。初学者可以通过阅读和理解这些代码来深入学习
单片机
的
中断
系统和I/O操作。 总的来说,STC...
基于
单片机
的秒表
暂停
,启动
总的来说,"基于
单片机
的秒表
暂停
,启动"项目涵盖了
单片机
原理、定时器应用、
中断
处理、C语言
编程
、显示技术以及
按键
控制等多个方面的知识。通过实践这个项目,可以加深对
单片机
系统设计的理解,提升动手能力。
单片机/工控
27,519
社区成员
28,798
社区内容
发帖
与我相关
我的任务
单片机/工控
硬件/嵌入开发 单片机/工控
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章