请问51单片机如何用一个独立按键控制程序的暂停和继续

我有一个程序,功能是让四位一体动态数码管最低位依次显示0~9,然后13579,02468,高三位不变,蜂鸣一声,led亮,然后循环
然后有独立按键是焊在P1^1上的,所以只能用这个按键,按下,程序暂停,再按下,程序继续,请问怎么办呢?这是我那段程序

#include "reg52.h"

typedef unsigned int u16;
typedef unsigned char u8;

sbit LSA=P3^0;
sbit LSB=P3^1;
sbit LSC=P3^2;
sbit LSD=P3^3;

sbit beep=P1^6;
sbit led1=P1^2;
sbit led2=P1^3;
sbit led3=P1^4;
sbit led4=P1^5;

u8 code smgduan[21]={0xa0,0xbb,0x62,0x2a,0x39,0x2c,0x24,0xba,
0x20,0x28,0xbb,0x2a,0x2c,0xba,0x28,0xa0,0x62,0x39,0x24,0x20};

void delay(u16 i)
{
while(i--);
}

void DigDisplay(u8 j)
{
u8 i;
for(i=0;i<4;i++)
{
switch(i)
{

case(0):
LSA=1;LSB=1;LSC=1; LSD=0;break;
case(1):
LSA=1;LSB=1;LSC=0; LSD=1;break;
case(2):
LSA=1;LSB=0;LSC=1; LSD=1;break;
case(3):
LSA=0;LSB=1;LSC=1; LSD=1;break;
}
switch(i)
{
case(0):
P2=smgduan[j];break;
case(1):
P2=smgduan[0];break;
case(2):
P2=smgduan[0];break;
case(3):
P2=smgduan[0];break;
}
delay(100);
P2=0xff;
}
}

void main()
{
u8 j;
u16 t;
while(1)
{
for(j=0;j<20;j++)
{
for(t=0;t<200;t++)
{
DigDisplay(j);
}
}
led1=0;
led2=0;
led3=0;
led4=0;
beep=0;
delay(50000);
beep=1;
led1=1;
led2=1;
led3=1;
led4=1;
}

1.你的程序并不能实现显0~9,1357,0246,亮灯和响铃是可以。
2.用P1.1按键是可以实现暂停和继续的,并不需要中断。不是什么事都需要中断,好像离开中断就什么也不能做了?
3.你想暂停,是随时暂停,还是什么时候暂停?追问

你好,我这个板子接线比较怪,那段smgduan是可以正常显示数字的,然后我DigDisplay这个函数是让动态数码管闪一次,主函数里的for循环是让它一直闪,闪一定次数,显得像一直亮着在,然后过一段时间就是下一个数了
我想实现的是,比如现在数字显示从0显示到5了,按下连接P1^1的按键后,停在显示这个数,再按下按键P1^1或者P1^2后,继续显示下一个数,也就是6,然后继续,就是这个意思

追答

才仔细看smgduan表,还真挺怪,这数码管连接没有规律。利用重复的段码实现显示的做法到是有点新意,也算一怪吧。

改好的程序在电脑上,但电脑不能发程序了。给我发私信,用私信给你发程序。

追问

好的,已私信,谢谢你哦,麻烦了。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-05-07
通过外部中断控制追问

但是外部中断0触发条件不是P3^2低电平吗,我的按键是接P1^1上的
请问能具体点吗?

相似回答