旋轉LED時鐘簡介
主要材料:
電動機,發光二極管,鎖存器(74HC573),單片機(89s51),紅外發射管,紅外接收管,電池。
時鐘顯示原理:
電動機帶動焊有一排LED的電路板旋轉,單片機通過紅外管測得電路板轉一圈的時間,然后將時間分割,在每個分割點讓不同的發光二極管顯示,利用人眼視覺暫留,看上去就像一個時鐘。
另外有旋轉LED顯示數字的程序:http://www.zg4o1577.cn/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.zg4o1577.cn/bbs/) | Powered by Discuz! X3.1 |