怎么在中断中实现一个按键第一次按键之后,立刻切换到一个循环状态.doc

上传人:scccc 文档编号:11845545 上传时间:2021-09-25 格式:DOC 页数:1 大小:26.50KB
返回 下载 相关 举报
怎么在中断中实现一个按键第一次按键之后,立刻切换到一个循环状态.doc_第1页
第1页 / 共1页
亲,该文档总共1页,全部预览完了,如果喜欢就下载吧!
资源描述

《怎么在中断中实现一个按键第一次按键之后,立刻切换到一个循环状态.doc》由会员分享,可在线阅读,更多相关《怎么在中断中实现一个按键第一次按键之后,立刻切换到一个循环状态.doc(1页珍藏版)》请在三一文库上搜索。

1、循环状态,然问题的提出:怎么在中断中实现一个按键第一次按键之后,立刻切换到一个 后同一个按键第二次按下时结束循环,回到中断入口? 疑难点:1.中断是实时扫描的,但是中断中改变的状态量在主函数中却不能实时读取,这样 不能达到立刻切换的目的。2.如果把 循环 子函数放在中断中, 那么仅仅用一个状态变量的话, 是不可能时刻改 变它的值的,因为在 C 中状态变量相当于一个存储器。例子说明解答方法:例子:想中断按键按下时, 循环 执行 Led 子函数,再次按下时,停止循环,回到 主函数继续执行。很多人是这样写的: void int0(void)interrupt 0 if (k1=0) delay_ms

2、(10); if(k1=0) m=!m; while(!k1); while(m) Led(); 这样写为什么不行呢?因为 m 状态量改变一次之后,若m=1 ,则进入 while ()循环,此后即使中断改变了 m的值,但是 while(m) Led(); 直在进行 while (1)循环,所以 m即使 再怎么改变,按键都不能复位到初始化状态。下面提出这样一串代码:void int0(void)interrupt 0 if (k1=0) delay_ms(10);if(k1=0) m=!m; while(!k1); while(k1&m) Led(); 这样因为 K1 按键弹出后立刻变为 1,而 k1 它属于口线,并不是变量,所以实时改变,一旦 按键再次按下时,K1变0,即可从while ()中挑出,则程序会再次去读出m,此时将m值激活,则可达到再次按键初始化问题,并且反应比起在主函数中扫描要灵敏N 倍。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1