51单片机多功能LED点阵显示数字时钟

1. 在16X16LED点阵可以显示文字和图形;
2. 可以水平滚动显示hh:mm:nn;
3. 可以通过Key1和Key2调整时间
4.
5.

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

#include<reg51.h>
#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;

}
温馨提示:答案为网友推荐,仅供参考
相似回答