急!51单片机中,用一个按键控制数码管暂停,再次按下时继续计数。下面是我写的程序,谁能帮我看看错在哪
四位数码管,为什么程序导入PROTEUS之后,按下key2一次,暂停了,按时只显示最后一位数码管,但是一旦前三位不为零时就暂停不了了?还有,暂停后再次按下时却不再继续计数...
四位数码管,为什么程序导入PROTEUS之后,按下key2一次,暂停了,按时只显示最后一位数码管,但是一旦前三位不为零时就暂停不了了?还有,暂停后再次按下时却不再继续计数了,这个要怎么该啊?
跪求各位大神帮帮忙,在线等!!!!
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit LED = P1^0;
sbit key1=P3^4;
sbit key2=P3^7;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,};
uchar code table1[]={
0xbf,0x86,0xdb,0xcf,
0xe6,0xed,0xfd,0x87,
0xff,0xef,};
uint i,num=0,num1=0;
void delay(uint x)
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
//初始化函数
void init()
{
TMOD=0x01;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
EA=1;
ET0=1;
}
void keyscan()
{
if(key1==0)
{
delay(10);
if(key1==0)
{
num=num1=0;
while(!key1);
}
}
if(key2==0)
{
delay(10);
if(key2==0)
{
TR0=~TR0;
while(!key2);
}
}
}
void T0_time()interrupt 5
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
}
void main()
{
uchar shi,ge,bai,qian;
init();
while(1)
{
keyscan();
if (num==60)
num1++;
else num1=num1;
num=num%60;
num1=num1%60;
shi=num /10;
ge=num%10;
bai=num1%10;
qian=num1/10;
for(i=0;i<10;i++)
{
P1=0xbf;
P2=table[shi];
delay(10);
P1=0x7f;
P2=table[ge];
delay(10);
P1=0xdf;
P2=table1[bai];
delay(10);
P1=0xef;
P2=table[qian];
delay(10);
}
num++;
}
} 展开
跪求各位大神帮帮忙,在线等!!!!
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit LED = P1^0;
sbit key1=P3^4;
sbit key2=P3^7;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,};
uchar code table1[]={
0xbf,0x86,0xdb,0xcf,
0xe6,0xed,0xfd,0x87,
0xff,0xef,};
uint i,num=0,num1=0;
void delay(uint x)
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
//初始化函数
void init()
{
TMOD=0x01;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
EA=1;
ET0=1;
}
void keyscan()
{
if(key1==0)
{
delay(10);
if(key1==0)
{
num=num1=0;
while(!key1);
}
}
if(key2==0)
{
delay(10);
if(key2==0)
{
TR0=~TR0;
while(!key2);
}
}
}
void T0_time()interrupt 5
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
}
void main()
{
uchar shi,ge,bai,qian;
init();
while(1)
{
keyscan();
if (num==60)
num1++;
else num1=num1;
num=num%60;
num1=num1%60;
shi=num /10;
ge=num%10;
bai=num1%10;
qian=num1/10;
for(i=0;i<10;i++)
{
P1=0xbf;
P2=table[shi];
delay(10);
P1=0x7f;
P2=table[ge];
delay(10);
P1=0xdf;
P2=table1[bai];
delay(10);
P1=0xef;
P2=table[qian];
delay(10);
}
num++;
}
} 展开
展开全部
void T0_time()interrupt 5
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
}
这里错了,一是没编完吧,只是中断什么都没有处理呀,二是号错了,应该为1
另外,你的显示和键盘扫描都用延时,会有冲突,漏扫,漏显等会出现
void T0_time()interrupt 1
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
//应该还有处理程序吧
}
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
}
这里错了,一是没编完吧,只是中断什么都没有处理呀,二是号错了,应该为1
另外,你的显示和键盘扫描都用延时,会有冲突,漏扫,漏显等会出现
void T0_time()interrupt 1
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
//应该还有处理程序吧
}
更多追问追答
追问
void T0_time()interrupt 1
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
}
应该要写什么样的程序?能不能举个小例子?谢谢
追答
你用这个定时器来计数的吧,可是你没有计数处理呀,比如num++;是不是应该放到这里面,而不是主循环里。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询