找回密码
 注册
关于网站域名变更的通知
查看: 2065|回复: 10
打印 上一主题 下一主题

c51单片机,怎样实现当A按键按下时执行for循环,然后在按下B按键,停止for循环?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-5-30 09:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
c51单片机,怎样实现当A按键按下时执行for循环,然后在按下B按键,跳出for循环执行其他程序。
* i( p, R9 o+ u( C; \
; a& `# {" [/ ^$ Y1 \4 u2 B7 I7 j3 H

& k5 z" e( a- l. V$ z5 X程序如下:" J' Z+ d6 r6 W5 Y5 V4 J9 B/ j% t
start()
7 F' Q4 o. }5 d{1 B& B! E) ^5 C' {
     for(i=0; i<10000;i++)
+ Y% D: F- r% Y5 K& }7 n, h% Y* d; t6 Z     {  w2 y+ [3 [# _. c
            P2^0 = 1;
1 k; L3 @3 \2 Y5 ^( B6 k% Y) a            delay(500);* I' A6 V9 S8 \2 z5 |# v
            P2^0 = 0;5 f7 o! w2 ^1 k) @. Q
            delay(100);
  l5 C3 |* |, `' I3 y3 _% C4 d     }
! C1 N2 [) F) _5 c5 u  j}" g; t$ \& T# F% b# w

7 J% N1 h" O( b: P% _, K5 ?" |8 Tswitch (key)) V8 ]7 B" T/ M! |: V9 J/ n  C
{8 c' {1 |, n7 l5 `* b3 a1 u# y
       case  A:   start();  break;
4 {9 h% s- P% Q: R       case  B:   P2^0=0;break;
1 Y# S9 a4 G) d+ v}  s  ~* C" A; f; Y9 {$ X

该用户从未签到

2#
发表于 2019-5-30 09:54 | 只看该作者
按键连接在外中断

该用户从未签到

3#
发表于 2019-5-30 10:15 | 只看该作者
采用外部中断吧  A B 设为外部中断。

点评

除了中断还有其他方法了没?因为用的是矩阵键盘,使用外部中断的话,就需要将这两个按键独立出来  详情 回复 发表于 2019-5-30 10:24

该用户从未签到

4#
 楼主| 发表于 2019-5-30 10:24 | 只看该作者
kinidrily 发表于 2019-5-30 10:158 ]: I/ W' ?; E& L+ N
采用外部中断吧  A B 设为外部中断。
! q! C8 ?9 H  |7 y% o! [
除了中断还有其他方法了没?因为用的是矩阵键盘,使用外部中断的话,就需要将这两个按键独立出来) H2 C( g; L/ G7 L

该用户从未签到

5#
发表于 2019-5-30 10:33 | 只看该作者
因为你是在循环里,所以还是在循环里判断,而且switch语句最好不要直接判断按键,而是把按键的按下定义成两个数字,这样在跳出case A后会直接进入case B,否则可能会需要再按一次才能进入case B,不过一般情况下,按照7楼的做法已经能达到要求了。

该用户从未签到

6#
发表于 2019-5-30 10:45 | 只看该作者
使用一个标志位吧,按键B按下后标志位置位。For循环中检测到标志位置位就执行一句break;就行了。

该用户从未签到

7#
发表于 2019-5-30 10:59 | 只看该作者
我觉得有问题因为你是在循环里,所以还是在循环里判断,而且switch语句最好不要直接判断按键,而是把按要直接判断按键,而是把按键的按下定义成两个数字,这样在跳出case A后会直接进入case B,否则可能会需要再按一次才能进入case B。

该用户从未签到

8#
发表于 2019-5-30 13:44 | 只看该作者
定义标志位,简单有效

该用户从未签到

9#
发表于 2019-8-5 21:24 | 只看该作者
你這種寫法是軟體工程師的想法. 如果是純軟體, 寫法沒問題. 但是FW不是這樣.
2 Q+ H" R/ P1 N: h; w例如你的delay(),在FW中, delay 通常都是用中斷. 當程式跑到 delay 時,是進入中斷, 這時中斷跟KEY 的timing 需要處理.7 |' ?5 z" O: b  [
  }- U& l/ s3 X
另外, KEY 的選擇怎麼可以用switch? KEY 按下去是0或是1? 要用程式去判斷.還有當KEY按下去時, 人感覺是按一下.其實就電子訊號,可能是幾百次,幾千次. 因此還有debounce 的問題.
, R! [, f. Y! A+ g) z% I% r6 h+ r6 i
7 g( v( `3 a, _& r, c$ Z  ?7 x* n
! t' k: ]% r/ F5 T9 K
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-23 12:48 , Processed in 0.125000 second(s), 24 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表