您当前的位置:五五电子网电子知识单元电路时钟-定时电路LED显示电脑电子钟电路及控制程序 正文
LED显示电脑电子钟电路及控制程序

LED显示电脑电子钟电路及控制程序

点击数:7451 次   录入时间:03-04 11:59:53   整理:http://www.55dianzi.com   时钟-定时电路

     本例介绍一种用LED制作的电脑电子钟(电脑万年历)。其制作完成装潢后的照片如下图:

上图中,年、月、日及时间选用的是1.2寸共阳数码管,星期选用的是2.3寸数码管,温度选用的是0.5寸数码管,也可根据个人的爱好选用不同规格的数码管。原理图如下图所示:
LED显示电脑电子钟 www.55dianzi.com

  上图中,CPU选用的是AT89C2051,时钟芯片选用的是Dallas公司的DS1302, 温度传感器选用的是Dallas公司的数字温度传感器DS1820,显示驱动芯片选用的是德州仪器公司的TPIC6B595,也可选用与其兼容的芯片NC595或 国产的AMT9595。整个电子钟用两个键来调节时间和日期。一个是位选键,一个是数字调节键。按一下位选键,头两位数字开始闪动,进入设 定调节状态,此时按数字调节键,当前闪动位的数字就可改变。

  全部参 数调节完后,五秒钟内没有任何键按下,则数字停止闪动,退出设定调节状态。源程序清单如下(无温度显示程序):

  start:do;

   $include(reg51.dcl)

   declare (sclk,io,rst) bit at (0b3h) register; /* p33,p34,p35 */

   declare (command,data,n,temp1,num) byte;

   declare a(9) byte;

   declare ab(6) byte;

   declare aco(11) byte constant (0fdh,60h,0dah,0f2h,66h,0b6h,0beh,

   0e0h,0feh,0f6h,00h);

   declare week(11) byte constant (0edh,028h,0dch,7ch,39h,75h,0f5h,

   2ch,0fdh,7dh,00h);

   declare da literally'p15',clk literally'p16',ale literally'p17',

   mk literally'p11',sk literally'p12';

   clear:procedure;

   sclk=0;io=0;rst=0;

   end clear;

   send1302:procedure(comm);

   declare (i,comm) byte;

   do i=0 to 7;

   comm=scr(comm,1);

   io=cy;

   call time(1);

   sclk=0;

   call time(1);

   sclk=1;

   end;

   end send1302;

   wbyt1:procedure(com,dat);/*字节写过程*/



www.55dianzi.com

  declare (com,dat) byte;

  call clear;

  rst=1;

  call send1302(com);

  call send1302(dat);

  call clear;

  end wbyt1;

  wbyt8:procedure;/*时钟多字节突发模式写过程*/

  declare j byte;

  call clear;

  a(7)=A(6);a(6)=a(0);

  rst=1;

  call send1302(command);

  do j=1 to 8;

  call send1302(a(j));

  end;

  call clear;

  end wbyt8;

  RBYT1:PROCEDURE;

  DECLARE I BYTE;

  CALL CLEAR;

  RST=1;

  call send1302(0c1h);

  IO=1;

  DO I=0 TO 7;

  SCLK=1;

  SCLK=0;

  CY=IO;

  N=SCR(N,1);

  END;

  A(8)=N;

  CALL CLEAR;

  END RBYT1;

  send595:procedure;

  declare k byte;

  do k=0 to 7;

  data=scr(data,1);

  da=cy;

  clk=1;

  clk=0;

  end;

  end send595;

  send595_1:procedure;

  declare k byte;

  do k=0 to 7;

  data=scr(data,1);

  da1=cy;

  clk1=1;

  clk1=0;

  end;

  end send595_1;

  rb1:procedure(abc,j);

  DECLARE (I,j,abc) BYTE;

  CALL CLEAR;

  RST=1;

  call send1302(abc);

  IO=1;

  DO I=0 TO 7;

  SCLK=1;

  SCLK=0;

  CY=IO;

  N=SCR(N,1);

  END;

  ab(j)=N;

  ab(j)=dec(ab(j));

  CALL CLEAR;

  end rb1;

  rbyt6:procedure;

  call rb1(0f1h,0);

  call rb1(0f3h,1);

  call rb1(0f5h,2);

  call rb1(0f7h,3);

  call rb1(0f9h,4);

  call rb1(0fbh,5);

  call rb1(0fdh,6);

  end rbyt6;

  wbyt6:procedure;

  call wbyt1(8eh,0); /* write enable */

  call wbyt1(0f0h,ab(0));

  call wbyt1(0f2h,ab(1));

  call wbyt1(0f4h,ab(2));

  call wbyt1(0f6h,ab(3));

  call wbyt1(0f8h,ab(4));

  call wbyt1(0fah,ab(5));

  call wbyt1(0fch,ab(6));

  call wbyt1(8eh,80h); /* write dISAble */

  end wbyt6;

  rbyt8:procedure;/*时钟多字节突发模式读过程*/

  declare (i,j) byte;

  call clear;

  rst=1;

  call send1302(command);

  io=1;

  do j=1 to 8;

  do i=0 to 7;

  sclk=1;

  call time(1);

  sclk=0;

  cy=io;

  n=scr(n,1);



www.55dianzi.com

  end;

  a(j)=n;

  end;

  call clear;

  a(0)=a(6);a(6)=A(7);

  a(0)=a(0) and 0fh;

  if a(0)>6 then a(0)=0;

  CALL RBYT1;

  if (a(1)=0 and a(2)=0 and a(3)=0) then

  do;

  do num=0 to 35;

  call time(250);

  end;

  temp1=1;

  end;

  if temp1=1 then

  do;

  temp1=0;

  ab(4)=ab(4)+1;

  if ab(4)>99h then

  do;

  ab(4)=0;

  ab(5)=ab(5)+1;

  if ab(5)>99h then ab(5)=0;

  end;

  call wbyt6;

  end;

  end rbyt8;

  display:procedure; /*jieya,yima,fasong*/

  declare (i,n,m) byte;

  n=a(0) and 0fh; /* send week */

  data=week(n);

  call send595;

  n=a(4); /* send date */

  n=n and 0fh;

  data=aco(n);

  call send595;

  n=a(4);

  n=shr(n,4);

  data=aco(n);

  call send595;

  do i=1 to 3; /* send second,minute,hour */

  n=a(i);

  n=n and 0fh;

  data=aco(n);

  call send595;

  n=a(i);

  n=shr(n,4);

  data=aco(n);

  call send595;

  end;

  do i=5 to 6; /* send month,year */

  n=a(i);

  n=n and 0fh;

  data=aco(n);

  call send595;

  n=a(i);

  n=shr(n,4);

  data=aco(n);

  call send595;

  end;

  n=a(8); /* send 19 or 20 */

  n=n and 0fh;

  data=aco(n);

  call send595;

  n=a(8);

  n=shr(n,4);

  data=aco(n);

  call send595;

  do m=0 to 5;

  n=ab(m);

  n=n and 0fh;

  data=aco(n);

  call send595_1;

  n=ab(m);

  n=shr(n,4);

  data=aco(n);

  call send595_1;

  end;

  ale=0;

  ale=1;

  end display;

  beginset:procedure;

  a(0)=06h;a(1)=58h;a(2)=59h;a(3)=23h;

  a(4)=30h;a(5)=06h;a(6)=97h;a(7)=00;

  a(8)=19h; /* set date/time (1997,7,1,8:00:00,week 3) */

  call wbyt1(8eh,0); /* write enable*/

  call wbyt1(80h,00h);/* start coLOCk */

  call wbyt1(0beh,0abh);/*两个二极管与8K电阻串联充电*/

  command=0beh; /* write colock/date */

  call wbyt8;

  call wbyt1(0c0h,a(8));

  call wbyt1(8eh,80h); /* set write protect bit */

[1] [2]  下一页


本文关键字:电脑  电子钟  时钟-定时电路单元电路 - 时钟-定时电路