c51单片机,怎样实现当A按键按下时执行for循环,然后在按下B按键,停止for循环
时间:10-02
整理:3721RD
点击:
c51单片机,怎样实现当A按键按下时执行for循环,然后在按下B按键,跳出for循环执行其他程序。
程序如下:
start()
{
for(i=0; i<10000;i++)
{
P2^0 = 1;
delay(500);
P2^0 = 0;
delay(100);
}
}
switch (key)
{
case A: start(); break;
case B: P2^0=0;break;
}
程序如下:
start()
{
for(i=0; i<10000;i++)
{
P2^0 = 1;
delay(500);
P2^0 = 0;
delay(100);
}
}
switch (key)
{
case A: start(); break;
case B: P2^0=0;break;
}
因为你是在循环里,所以还是在循环里判断,而且switch语句最好不要直接判断按键,而是把按键的按下定义成两个数字,这样在跳出case A后会直接进入case B,否则可能会需要再按一次才能进入case B,不过一般情况下,按照7楼的做法已经能达到要求了。
很简单嘛~~~~你晓得 线程 吗?用 A线程来结束 B线程;用 B线程来结束 A线程 不就可以啦!
按键连接在外中断。
51有线程?
采用外部中断吧 A B 设为外部中断。
除了中断还有其他方法了没?因为用的是矩阵键盘,使用外部中断的话,就需要将这两个按键独立出来
使用一个标志位吧,按键B按下后标志位置位。For循环中检测到标志位置位就执行一句break;就行了。
在for循环里加一判断语句,用return强行退出本子程序,不执行以下任何语句。
if(key==B)
{
return;
}
看看,有什么收获?
我觉得有问题因为你是在循环里,所以还是在循环里判断,而且switch语句最好不要直接判断按键,而是把按要直接判断按键,而是把按键的按下定义成两个数字,这样在跳出case A后会直接进入case B,否则可能会需要再按一次才能进入case B,不过一般情况下,按照7楼的做法已经能达到要求了。
