音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

用LED制作的萬年歷

出處:4432 發(fā)布于:2011-09-03 11:42:38 | 5513 次閱讀

  首先我們進(jìn)行材料的準(zhǔn)備:數(shù)碼管
  上圖中,年、月、日及時(shí)間選用的是1.2寸共陽數(shù)碼管,星期選用的是2.3寸數(shù)碼管,溫度選用的是0.5寸數(shù)碼管,也可根據(jù)個(gè)人的愛好選用不同規(guī)格的數(shù)碼管。原理圖如下圖所示:電路原理圖
  上圖中,CPU選用的是AT89C2051,時(shí)鐘芯片選用的是Dallas公司的DS1302, 溫度傳感器選用的是Dallas公司的數(shù)字溫度傳感器DS1820,顯示驅(qū)動(dòng)芯片選用的是德州儀器公司的TPIC6B595,也可選用與其兼容的芯片NC595或 國產(chǎn)的AMT9595。簡單的原理解析:整個(gè)電子鐘用兩個(gè)鍵來調(diào)節(jié)時(shí)間和日期。一個(gè)是位選鍵,一個(gè)是數(shù)字調(diào)節(jié)鍵。按一下位選鍵,頭兩位數(shù)字開始閃動(dòng),進(jìn)入設(shè) 定調(diào)節(jié)狀態(tài),此時(shí)按數(shù)字調(diào)節(jié)鍵,當(dāng)前閃動(dòng)位的數(shù)字就可改變。全部參數(shù)調(diào)節(jié)完后,五秒鐘內(nèi)沒有任何鍵按下,則數(shù)字停止閃動(dòng),退出設(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;/*時(shí)鐘多字節(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;/*時(shí)鐘多字節(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);/*兩個(gè)二極管與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
  整個(gè)設(shè)計(jì)完美完成!



  
6次

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

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

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

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

廣告
OEM清單文件: OEM清單文件
*公司名:
*聯(lián)系人:
*手機(jī)號(hào)碼:
QQ:
有效期:

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

在線人工客服

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

0571-85317607

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

13606545031

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

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

建議反饋

聯(lián)系人:

聯(lián)系方式:

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