#include
#include
int shi1,shi2,fen1,fen2,miao1,miao2,d,n;
unsigned char code display[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
sbit L1=P3^2; //调分
sbit L2=P3^3; //调时
a=b=c=0;
g=3; //延时值
void delay(int z) //延时程序
{
int x, y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void xianshi() //显示程序
{
shi1=a/10;
shi2=a%10;
fen1=b/10;
fen2=b%10;
miao1=c/10;
miao2=c%10;
P2=0x00; //位选
P0=display[miao2]; //显示
delay(g); //延时
P2=0x04;
P0=display[miao1];
delay(g);
P2=0x08;
P0=0x40;
delay(g);
P2=0x0c;
P0=display[fen2];
delay(g);
P2=0x10;
P0=display[fen1];
delay(g);
P2=0x14;
P0=0x40;
delay(g);
P2=0x18;
P0=display[shi2];
delay(g);
P2=0x1c;
P0=display[shi1];
delay(g);
}
void cal() //时钟自加程序
{
if(d==20)
{
c++;
d=0;
if(c>=60) //秒钟数值
{
b++;
c=0;
if(b>=60) //分钟数值
{
a++;
b=0;
if(a>=24) //时钟数值
{
a=0;
}
}
}
}
xianshi();
}
void tiaojie() //时间数值按键调节程序
{
if(L1==0)
{
delay(10);
if(L1==0)
{
a++;
if(a>=23)
{
a=0;
}
}
}
if(L2==0)
{
delay(10);
if(L2==0)
{
b++;
if(b>=59)
{
b=0;
}
}
}
}
void main() //主程序
{
P0=0xff;
TMOD=0x01;
TH0=0x3c;
TL0=0xb0;
ET0=1;
TR0=1;
EA=1;
while(1)
{
tiaojie();
cal();
}
}
void int0() interrupt 1
{
TH0=0x3c;
TL0=0xb0;
++d;
}
大家的回答不到位啊
#include
#include
#define g 3 //延时值
int shi1,shi2,fen1,fen2,miao1,miao2,d,n;
unsigned char code display[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
sbit L1=P3^2; //调分
sbit L2=P3^3; //调时
unsigned char cnt50ms=0,cnt1s=0;
int a=0,b=0,c=0;
void delay(int z) //延时程序
{
int x, y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void xianshi() //显示程序
{
shi1=a/10;
shi2=a%10;
fen1=b/10;
fen2=b%10;
miao1=c/10;
miao2=c%10;
P2=0x00; //位选
P0=display[miao2]; //显示
delay(g); //延时
P2=0x04;
P0=display[miao1];
delay(g);
P2=0x08;
P0=0x40;
delay(g);
P2=0x0c;
P0=display[fen2];
delay(g);
P2=0x10;
P0=display[fen1];
delay(g);
P2=0x14;
P0=0x40;
delay(g);
P2=0x18;
P0=display[shi2];
delay(g);
P2=0x1c;
P0=display[shi1];
delay(g);
}
void cal() //时钟自加程序
{
if(d==20)
{
c++;
d=0;
if(c>=60) //秒钟数值
{
b++;
c=0;
if(b>=60) //分钟数值
{
a++;
b=0;
if(a>=24) //时钟数值
{
a=0;
}
}
}
}
xianshi();
}
void tiaojie() //时间数值按键调节程序
{
if(L1==0)
{
delay(10);
if(L1==0)
{
if(++a>23)
{
a=0;
}
while(L1==0);
delay(10);
}
}
if(L2==0)
{
delay(10);
if(L2==0)
{
if(++b>59)
{
b=0;
}
while(L2==0);
delay(10);
}
}
}
void main() //主程序
{
P0=0xff;
TMOD=0x02; //定时器2
TH0=0x06; //定时250us
TL0=0x06;
ET0=1;
TR0=1;
EA=1;
while(1)
{
PCON=0x1;
}
}
void timer0(void) interrupt 1 //定时器0的中断号是1
{ //定时器1的中断号是3
if(++cnt50ms>=200)//50ms定时到
{
cnt50ms=0;
d++;
cal(); //时钟自加程序
}
tiaojie();
}
哈哈,这个错误挺低级的,嘿嘿!不是笑话你哦,初学者一般都会犯这样的错误。不严谨啊,慢慢来,不要紧的。问题越多,学的也越多。加油!
您的中断服务程序忘记重新初始化T0了,相当于初始化到0, 当然会变慢。
改为这样既可
void int0() interrupt 1
{
TH0=0x3c;
TL0=0xb0;
++d;
tiaojie();
}
电路图可以给我吗。。。