本帖最后由 51黑科技 于 2016-2-3 23:13 编辑
旋转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; } }
|