當(dāng)前位置:首頁 > 電源 > 數(shù)字電源
[導(dǎo)讀]本例介紹一種用LED制作的電腦電子鐘(電腦萬年歷)。其制作完成裝潢后的照片如下圖: 上圖中,年、月、日及時間選用的是1.2寸共陽數(shù)碼管,星期選用的是2.3寸數(shù)碼管,溫度選用

本例介紹一種用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ù)字開始閃動,進(jìn)入設(shè)定調(diào)節(jié)狀態(tài),此時按數(shù)字調(diào)節(jié)鍵,當(dāng)前閃動位的數(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);[!--empirenews.page--]

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)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉