急求89c51单片机的数字时钟图 和程序 要求:开机显示十二点,p0.0,p0.1,p0.2,分别为秒,分,时的调整按

2024-12-17 04:42:40
推荐回答(3个)
回答1:

数字时钟
这段程序是在PRTUES上完全好使
你可以根据 程序自己在PROTUES上画图

#include
#define uint unsigned int
char code tab[]=;
char code table[]=;
sbit duan=P2^5;
sbit wei=P2^6;
sbit button1=P1^0;
sbit button2=P1^1;
sbit button3=P1^2;
sbit button4=P1^3;
sbit button5=P1^4;
sbit button6=P1^5;
sbit button7=P1^6;
sbit button8=P1^7;
void delay(uint z);
void start();
void display();
static char a,b,c,d,k,e,f,g,h;
static char num1,num2,num3,num4;
void main()
{ start();
while(1)

if(button2==0)
if(button3==0)
if(button4==0)
{ delay(10);
if(button4==0)
}}
while(button4==0)
}
if(button5==0)
{ delay(10);
if(button5==0)
}
while(button5==0)
}
if(button6==0)
{ delay(10);
if(button6==0)
}
while(button6==0)
}
if(button7==0)
{delay(10);
if(button7==0)
{num3--;
if(num3<0)
}
while(button7==0)
}
if(button8==0)
{delay(10);
if(button8==0)

while(button8==0)
}
display();
} }

void start()
{ EA=1;
TMOD=0x01;ET0=1;
TH0=(65536-4000)/256;
TL0=(65536-4000)%256;}

void delay(uint z )
{ uint x,y;
for(x=z;x>0;x--)
for(y=120;y>0;y--);}

void timer1() interrupt 1
{ TH0=(65536-4000)/256;
TL0=(65536-4000)%256;
k++;
if(k==2) //总忘k把清零
{k=0;num1++;
if(num1==100)
{num1=0;num2++;
if(num2==60){num2=0;num3++;
if(num3==60){num3=0;num4++;
if(num4==24)}
}} }}

void display()
{a=num1/10;b=num1%10;c=num2/10;d=num2%10;
e=num3/10;f=num3%10;g=num4/10;h=num4%10;
wei=1;P0=0x80;wei=0;
duan=1;P0=tab[b];duan=0;delay(1);
P0=0x00;
wei=1;P0=0x40;wei=0;
duan=1;P0=tab[a];duan=0;delay(1);
P0=0x00;
wei=1;P0=0x20;wei=0;
duan=1;P0=tab[d];duan=0;
duan=1;P0=table[d];duan=0;delay(1);
P0=0x00;
wei=1;P0=0x10;wei=0;
duan=1;P0=tab[c];duan=0;delay(1);
P0=0x00;

wei=1;P0=0x08;wei=0;
duan=1;P0=table[f];duan=0;delay(1);
duan=1;P0=tab[f];duan=0;delay(1);
P0=0x00;
wei=1;P0=0x04;wei=0;
duan=1;P0=tab[e];duan=0;delay(1);
P0=0x00;
wei=1;P0=0x02;wei=0;
duan=1;P0=tab[h];duan=0;
duan=1;P0=table[h];duan=0;delay(1);
P0=0x00;
wei=1;P0=0x01;wei=0;
duan=1;P0=tab[g];duan=0;delay(1);
P0=0x00;

}

回答2:

#include
#define uc unsigned char
#define ui unsigned int
uc code a[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uc code wei[]={0x01,0x02,0x04,0x08,0x10,0x20};
uc m0,m1,f0,f1,s0,s1;
uc t,k,q;
sbit k1=P0^0;
sbit k2=P0^1;
sbit k3=P0^2;
void tiao();

void delay(uc z)
{
uc i,j;
for(i=0;i for(j=0;j<200;j++);
}
void delay1(uc z)
{
uc i,j,k;
for(i=0;i for(j=0;j<200;j++)
for(k=0;k<200;k++);
}

void init()
{
s1=1;s0=2;f1=0;f0=0;m1=0;m0=0;
P1=0xff;P2=0x00;
TMOD=0X01;

TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;ET0=1;TR0=1; q=0;
}

void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
k++;
if(k==20)
{
t++;k=0;
}
}
void display(uc m0,uc m1,uc f0,uc f1,uc s0,uc s1)
{
P1=0xff;
P2=wei[0];
P1=a[m0];
delay(2);

P1=0xff;
P2=wei[1];
P1=a[m1];
delay(2);

P1=0xff;
P2=wei[2];
P1=a[f0];
delay(2);

P1=0xff;
P2=wei[3];
P1=a[f1];
delay(2);

P1=0xff;
P2=wei[4];
P1=a[s0];
delay(2);

P1=0xff;
P2=wei[5];
P1=a[s1];
delay(2);
}

void main()
{
init();
while(1)
{
tiao();
m0=t;
if(t==10)
{
t=0;
m0=0;
m1++;
};
if(m1==6)
{
f0++;
m1=0;

};
if(f0==10)
{
f1++;
f0=0;
};
if(f1==6)
{
s0++;
f1=0;
};
if(s0==10)
{
s1++;
f0=0;
};

if(s1==2)
{
if(s0==4)
{
s1=0;
s0=0;
}
}

display(s1,s0,f1,f0,m1,m0);

if(k1==0)
{
delay(2);

m0++;
delay1(2);
};

if(k2==0)
{
delay(2);

f0++;
delay1(2);
};
if(k3==0)
{
delay(2);

s0++;
delay1(2);
};
}
}

void tiao()
{
int i=0;
if(k1==0)
{
delay(1);

}
}

自己写的 不明白再联系 用的P1口数组输出 P2位选 共阳极的

回答3:

是用数码管显示还是液晶显示器?硬件连接关系是怎样的?