函数功能:数码管(P2口)不断显示0~9,按K1(P3^2)暂停,K2(P3^3)继续。
问题有二:
(1)第一次按K1,暂停,K2开始。之后两个键均失效;
(2)按理说暂停-开始后数码管应该从暂停前的那个数继续显示,可实际上是从0重新开始计数。
请各位赐教,不胜感激。
代码和preteus图如下。
#include <reg52.h>
#define uchar unsigned char
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//数码管共阳编码
bit button=1;
bit jumpout=0;//低优先级中断跳出标志,用于暂停
void delay(int time)
{
uchar i,j;
for(i=0;i<time;i++)
for(j=0;j<i;j++);
}
void int1()interrupt 1
{
jumpout=1;//低优先级跳出
}
void int0()interrupt 0
{
while(jumpout==0)//在此循环
{
}
jumpout=0;//重新赋值,下次中断依然可以暂停循环
}
void init()
{
EA=1;
IT0=0;//低电平沿触发
EX0=1;
PX0=0;//低优先级
IT1=0;
EX1=1;
PX1=1;//高优先级
}
void main()
{
uchar i;
init();
while(1)
{
//if(button==1)
{
for(i=0;i<10;i++)
{
P2=table[i];
delay(250);
}
}
}
}
|