我写了一段三位数码管的60秒倒计时程序,有点问题,谁帮忙看看
#include<regx52.h>#defineNUMP0unsignedcharcodeNUM_DIG[10]={0xc0,0xf9,0xa4,0xb0,0x99,0...
#include<regx52.h>
#define NUM P0
unsigned char code NUM_DIG[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char DisplayData[3];
unsigned char ge,shi,judge,temp;
void csh()
{ TMOD=0x01;
TH0=0x3c;
TL0=0xb0;
EA=1;
EX0=1;
IT0=1;
ET0=1;
PX0=1;
PT0=0;
TR0=0;
temp=60;
}
void int1() interrupt 1 //溢出中断0
{ TH0=0x3c;
TL0=0xb0;
judge++;
}
void int0() interrupt 0 //外部中断0
{
TR0=~TR0;
}
void Dig(unsigned char S,unsigned char G)
{
unsigned char i;
unsigned int j;
for(i=0;i<3;i++)
{
switch(i) //位选,选择点亮的数码管,
{
case(0):
DisplayData[0]=NUM_DIG[0];break; //显示0
case(1):
DisplayData[1]=NUM_DIG[S];break;//显示第1位
case(2):
DisplayData[2]=NUM_DIG[G];break;//显示第2位
}
NUM=DisplayData[i];//发送段码
j=6; //扫描间隔时间设定
while(j--);
NUM=0x00;
}
}
void main()
{
csh();
while(1);
{shi=temp/10;
ge=temp%10;
Dig(shi,ge);
if(judge==20)
{judge=0;
temp--;
if(temp==-1)
temp=60;
}
}
} 展开
#define NUM P0
unsigned char code NUM_DIG[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char DisplayData[3];
unsigned char ge,shi,judge,temp;
void csh()
{ TMOD=0x01;
TH0=0x3c;
TL0=0xb0;
EA=1;
EX0=1;
IT0=1;
ET0=1;
PX0=1;
PT0=0;
TR0=0;
temp=60;
}
void int1() interrupt 1 //溢出中断0
{ TH0=0x3c;
TL0=0xb0;
judge++;
}
void int0() interrupt 0 //外部中断0
{
TR0=~TR0;
}
void Dig(unsigned char S,unsigned char G)
{
unsigned char i;
unsigned int j;
for(i=0;i<3;i++)
{
switch(i) //位选,选择点亮的数码管,
{
case(0):
DisplayData[0]=NUM_DIG[0];break; //显示0
case(1):
DisplayData[1]=NUM_DIG[S];break;//显示第1位
case(2):
DisplayData[2]=NUM_DIG[G];break;//显示第2位
}
NUM=DisplayData[i];//发送段码
j=6; //扫描间隔时间设定
while(j--);
NUM=0x00;
}
}
void main()
{
csh();
while(1);
{shi=temp/10;
ge=temp%10;
Dig(shi,ge);
if(judge==20)
{judge=0;
temp--;
if(temp==-1)
temp=60;
}
}
} 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询