日韩欧美自拍在线观看-欧美精品在线看片一区二区-高清性视频一区二区播放-欧美日韩女优制服另类-国产精品久久久久久av蜜臀-成人在线黄色av网站-肥臀熟妇一区二区三区-亚洲视频在线播放老色-在线成人激情自拍视频

單片機應(yīng)用實例:LED顯示電腦電子鐘

出處:feng_zc 發(fā)布于:2011-07-15 10:10:12

  本例介紹一種用LED制作的電腦電子鐘(電腦萬年歷)。其制作完成裝潢后的照片如下圖:

  上圖中,年、月、日及時間選用的是1.2寸共陽數(shù)碼管,星期選用的是2.3寸數(shù)碼管,溫度選用的是0.5寸數(shù)碼管,也可根據(jù)個人的愛好選用不同規(guī)格的數(shù)碼管。原理圖如下圖所示:

  上圖中,CPU選用的是AT89C2051,時鐘芯片選用的是Dallas公司的DS1302,溫度傳感器選用的是Dallas公司的數(shù)字溫度傳感器DS1820,顯示驅(qū)動芯片選用的是德州儀器公司的TPIC6B595,也可選用與其兼容的芯片NC595或國產(chǎn)的AMT9595。整個電子鐘用兩個鍵來調(diào)節(jié)時間和日期。一個是位選鍵,一個是數(shù)字調(diào)節(jié)鍵。按一下位選鍵,頭兩位數(shù)字開始閃動,進入設(shè)定調(diào)節(jié)狀態(tài),此時按數(shù)字調(diào)節(jié)鍵,當前閃動位的數(shù)字就可改變。全部參數(shù)調(diào)節(jié)完后,五秒鐘內(nèi)沒有任何鍵按下,則數(shù)字停止閃動,退出設(shè)定調(diào)節(jié)狀態(tài)。

  源程序清單如下(無溫度顯示程序):

  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);/*字節(jié)寫過程*/

  declare (com,dat) byte;

  call clear;

  rst=1;

  call send1302(com);

  call send1302(dat);

  call clear;

  end wbyt1;

  wbyt8:procedure;/*時鐘多字節(jié)突發(fā)模式寫過程*/

  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;/*時鐘多字節(jié)突發(fā)模式讀過程*/

  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);

  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電阻串聯(lián)充電*/

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

  call wbyt8;

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

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

  end beginset;

  key:procedure;

  declare (i,time1,k1,tem) byte;

  call time(100);

  k1=7;time1=30;

  if mk=0 then

  do;

  do while time1>0;

  week:       if k1=0 then

  do;

  do i=0 to 5;

  /*    call hz(a(0));  */

  end;

  do i=0 to 3;

  /*    call hz0;  */

  end;

  end;

  tem=a(k1);

  if k1=7 then tem=a(8);

  a(k1)=0aah;

  if k1=7 then a(8)=0aah;

  call display;

  call time(254);

  call time (254);

  a(k1)=tem;

  if k1=7 then a(8)=tem;

  call display;

  call time(254);

  call time(254);

  call time(254);

  time1=time1-1;

  if mk=0 then

  do;call time(100); /*MOD KEY PROCESS*/

  TIME1=30;

  IF MK=0 THEN

  DO;

  k1=k1-1;

  DO WHILE K1=0FFH;

  K1=7;

  END;

  END;

  end;

  IF SK=0 THEN

  DO;CALL TIME(100);  /*SET KEY PROCESS*/

  TIME1=30;

  IF SK=0 THEN

  DO;

  tem=tem+1;

  tem=dec(tem);

  DO CASE K1;

  DO WHILE tem=7;/*week*/

  tem=0;

  END;

  DO WHILE tem=60H;/*scond*/

  tem=0;

  END;

  DO WHILE tem=60H;/*minute*/

  tem=0;

  END;

  DO WHILE tem=24H;/*hour*/

  tem=0;

  END;

  DO WHILE tem=32H;/*date*/

  tem=1;

  END;

  DO WHILE tem=13H;/*month*/

  tem=1;

  END;

  DO while tem=100h;   /*  YEAR */

  tem=00;

  END;

  DO WHILE TEM>=21H;

  tem=19H;

  END;

  END;

  A(K1)=tem;

  if k1=7 then a(8)=tem;

  END;

  END;

  END;

  END;

  end key;

  main$program:

  mk=1;sk=1;temp1=0;num=0;p32=1;

  if sk=0 then call beginset;

  clk=0;da=0;ale=1;

  loop:

  do while mk=1 ;

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

  command=0bfh;

  call rbyt8;

  call display;

  do while mk=0;

  call key;

  call wbyt1(8eh,0);

  command=0beh;

  call wbyt8;

  call wbyt1(0C0H,A(8));

  call wbyt1(8eh,80h);

  end;

  end;

  goto loop;

  end start;

關(guān)鍵詞:單片機應(yīng)用實例:LED顯示電腦電子鐘LED

版權(quán)與免責聲明

凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場網(wǎng),轉(zhuǎn)載請必須注明維庫電子市場網(wǎng),http://www.hbjingang.com,違反者本網(wǎng)將追究相關(guān)法律責任。

本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點或證實其內(nèi)容的真實性,不承擔此類作品侵權(quán)行為的直接責任及連帶責任。其他媒體、網(wǎng)站或個人從本網(wǎng)轉(zhuǎn)載時,必須保留本網(wǎng)注明的作品出處,并自負版權(quán)等法律責任。

如涉及作品內(nèi)容、版權(quán)等問題,請在作品發(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。

LED恒流驅(qū)動IC—SM2082的應(yīng)用!
廣告
OEM清單文件: OEM清單文件
*公司名:
*聯(lián)系人:
*手機號碼:
QQ:
有效期:

掃碼下載APP,
一鍵連接廣大的電子世界。

在線人工客服

買家服務(wù):
賣家服務(wù):
技術(shù)客服:

0571-85317607

網(wǎng)站技術(shù)支持

13606545031

客服在線時間周一至周五
9:00-17:30

關(guān)注官方微信號,
第一時間獲取資訊。

建議反饋

聯(lián)系人:

聯(lián)系方式:

按住滑塊,拖拽到最右邊
>>
感謝您向阿庫提出的寶貴意見,您的參與是維庫提升服務(wù)的動力!意見一經(jīng)采納,將有感恩紅包奉上哦!