旋转LED时钟简介
主要材料:
电动机,发光二极管,锁存器(74HC573),单片机(89s51),红外发射管,红外接收管,电池。
时钟显示原理:
电动机带动焊有一排LED的电路板旋转,单片机通过红外管测得电路板转一圈的时间,然后将时间分割,在每个分割点让不同的发光二极管显示,利用人眼视觉暂留,看上去就像一个时钟。
另外有旋转LED显示数字的程序:http://www.51hei.com/bbs/dpj-43385-1.html效果图:
源程序:
#include<reg51.h>
sbit a1=P2^0;
sbit a2=P2^1;
sbit a3=P2^2;
int shi,fen,miao,i=0,ii=0;
unsigned int a=0,th,tl,q=0,aa=0,aaa=0;
void main(void)
{
int x,y;
TMOD=0x11;
EA=1;
EX0=1;
ET0=1;
ET1=1;
IT0=1;
shi=7,fen=20,miao=0;
while(1)
{
for(x=300;x>=0;x--)
for(y=150;y>=0;y--)
{
P1=0xff;
P2=0xff;
P2=0x00;
P1=0xff;
a3=1;
P1=0xfc;
P1=0xff;
a3=0;
}
miao++;
if(miao==61)
{
miao=1;
fen++;
}
if(fen==60)
{
fen=0;
shi++;
}
}
}
void i0() interrupt 0
{
int k;
unsigned int b,q;
TR0=1;
q=(TH0*0x100+TL0)/62;
a=q/0x100;
b=q-(q/0x100)*0x100;
th=0xff-a;
tl=0xff-b;
/* a=TH0;
b=TL0;
th=0x100-((a*256+b)/49)/256;
tl=0x100-((a*256+b)/49)%256; */
TH1=th;
TL1=tl;
TR1=1;
TH0=0x00;
TL0=0x00;
i=0;
P1=0xff;
P2=0xff;
P2=0x00;
k=3;
P1=0xff;
a1=1;
P1=0x0f;
while(k--);
P1=0xff;
a1=0;
}
void i1(void) interrupt 1
{
TH0=0x00;
TL0=0x00;
}
void i3(void) interrupt 3
{
int k=3,q1,q2,q3;
long chen;
TH1=th;
TL1=tl;
i++;
P1=0xff;
P2=0xff;
P2=0x00;
if(i%15==0)
{
P1=0xff;
a1=1;
P1=0x0f;
while(k--);
P1=0xff;
a1=0;
}
else if(i%5==0)
{
P1=0xff;
a1=1;
P1=0x1f;
while(k--);
P1=0xff;
a1=0;
}
else
{
P1=0xff;
a1=1;
P1=0x7f;
while(k--);
P1=0xff;
a1=0;
}
k=3;
if(i==miao)
{
k=3;
P1=0xff;
a1=1;
P1=0xf8;
while(k--);
P1=0xff;
a1=0;
k=3;
P1=0xff;
a2=1;
P1=0x00;
while(k--);
P1=0xff;
a2=0;
k=3;
P1=0xff;
a3=1;
P1=0x00;
while(k--);
P1=0xff;
a3=0;
}
else if(i==fen)
{
k=3;
P1=0xff;
a2=1;
P1=0xc0;
while(k--);
P1=0xff;
a2=0;
k=3;
P1=0xff;
a3=1;
P1=0x00;
while(k--);
P1=0xff;
a3=0;
}
else if(i==(shi*5)+2 )
{
k=3;
P1=0xff;
a3=1;
P1=0x00;
while(k--);
P1=0xff;
a3=0;
}
else if(i==(shi*5)+1||i==(shi*5)+3)
{
k=1;
P1=0xff;
a3=1;
P1=0xbf;
while(k--);
P1=0xff;
a3=0;
}
}
欢迎光临 (http://www.51hei.com/bbs/) | Powered by Discuz! X3.1 |