電子設(shè)計競賽《實用多功能萬年歷》_第1頁
電子設(shè)計競賽《實用多功能萬年歷》_第2頁
電子設(shè)計競賽《實用多功能萬年歷》_第3頁
電子設(shè)計競賽《實用多功能萬年歷》_第4頁
電子設(shè)計競賽《實用多功能萬年歷》_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第二屆電子設(shè)計競賽

設(shè)計題目《多功能電子萬年歷》

作品編號:

目錄

摘要.............................................2

第一部分:緒論...................................4

第二部分:設(shè)計方案原理與理論分析計算..............5

第三部分:硬件設(shè)計..................................8

第四部分:軟件設(shè)計..................................11

第五部分:系統(tǒng)的設(shè)計與分析.........................14

第六部分:結(jié)論......................................15

第七部分:【附錄一】作品外圖........................17

【附錄二】程序源代碼....................18

多功能電子萬年歷

摘要

“一寸光陰一寸金,寸金難買寸光陰”!時間對于我們每一個

人都是非常寶貴的,所以鐘表作為人們掌握時間的工具就顯

得十分重要!

鐘表的出現(xiàn)已經(jīng)有幾百年歷史,尤其是擺鐘和后來的懷表,

2

可以稱作鐘表中的經(jīng)典,不僅大方實用,而且制作精美。但

近幾十年,由于微電子的迅猛發(fā)展,這樣的鐘表已經(jīng)銷聲匿

跡,取而代之的則是電子時鐘。隨著社會的發(fā)展,人們的消

費水平不斷的提高,對生活的要求也越來越高,而電子時鐘

不僅精確度更高、外觀小巧、功能更加強大更加完善,制作

成本也是非常低。

由于單片機體積小、價格低、可靠性高、適用面廣、有其本

身的指令系統(tǒng)等諸多優(yōu)勢,在各個領(lǐng)域得到廣泛應(yīng)用,所

以用單片機控制的電子時鐘完全具備時鐘的各種功能,硬件

組成非常精簡,只需要進行軟件的編寫,就能夠?qū)崿F(xiàn)我們需

要的功能。

本設(shè)計利用STC89c52RC計數(shù)器產(chǎn)生時間,并進行處理,輔

以必要的外圍電路,用C語言編寫程序,并進行模塊化設(shè)計

而成的的電子萬年歷。它能顯示陽歷年,月,日,星期,小

時,分,秒;具有定時報警功能,能夠進行整點和半點語音

報時;能用按鍵調(diào)整時間。

關(guān)鍵詞:萬年歷,LCD顯示,STC89C52RC,定時報警

Abstract

“Aninchoftimeaninchofgold,gold-inchDifficulttobuy

time"!Timeforeveryoneofusisveryvaluable,sopeople

havetimetowatchasitisaveryimportanttool!

Theemergenceofwatcheshavebeenafewhundredyearsof

history,especiallythependulumclockandwatchlater,can

3

becalledclassicwatches,generousnotonlypractical,but

beautifullyproduced.However,inrecentdecades,duetothe

rapid,developmentofmicroelectronics,suchwatcheshave

disappeared,replacedbytheelectronicclock.Withthe

developmentofsociety,people1sconsumptionlevelofthe

increaseinthedemandsoflifehavebecomemoresophisticated,

andtheelectronicclockisnotonlyahigheraccuracy,the

appearanceofcompact,morepowerfulevenmoreperfect,the

productioncostisverylow.

Single-chipmicrocomputerasaresultofsmallsize,lowcost,

highreliabilityforawiderange,hasitsowncommandsystem

andmanyotheradvantages,arewidelyusedinvariousfields,

soMCUclockelectronicclockwithavarietyofcompletely

features,hardwarecomponentsareverylean,onlytheneed

forsoftwaredevelopment,willbeabletoachievethe

functionalityweneed.

STC89C52RCcountertheuseofthisdesignhaveatimeanddeal

withthenecessaryperipheralcircuits,usingCprogramming

language,andfromthemodulardesignoftheelectronic

calendar.Itshowsthatthesolarcalendaryear,month,day,

weeks,hours,minutesandseconds;withregularpolice

functions,tocarryoutthewholetimeandasinglevoice;

keyscanbeusedtoadjustthetime.

Keywords:calendar,LCDdisplay,STC89C52RCZregularalarm

第一部分緒論

第二部分設(shè)計方案原理與理論分析計算

1.方案論證及比較

1.1.方案論證

根據(jù)題目要求,我們對系統(tǒng)方案進行多方面的分析和比較,一般來講可以采用以

下幾種方案進行系統(tǒng)設(shè)計:

1.1.1.方案一

設(shè)計系統(tǒng)由主控模塊、時鐘模塊、顯示模塊、鍵盤接口模

4

塊共4個模塊組成。主控模塊用STC89c52RC做處理器,時鐘

模塊采用DS1302獲取時間,顯示模塊用12864LCD液晶顯

示,鍵盤接口模塊用直接編碼輸入。

1.1.2方案二

本設(shè)計利用STC89C52RC計數(shù)器定時產(chǎn)生時間,并進行處理,然后

把時鐘信息傳輸?shù)?602LCD液晶屏進行顯示;鍵盤接口模塊采用

直接編碼輸入;當系統(tǒng)時間與預(yù)設(shè)的報警時間相同時,蜂鳴器

發(fā)出響聲進行報警提示。

1.1.3方案三:

采用89c51芯片作為硬件核心,采用FlashROM,內(nèi)部具有

4KBROM存儲空間,能于3V的超低壓工作,而且與MCS-51

系列單片機完全兼容,但是運用于電路設(shè)計中時由于不具備

ISP在線編程技術(shù),當在對電路進行調(diào)試時、由于程序的錯誤

修改或?qū)Τ绦虻男略龉δ苄枰獰氤绦驎r,對芯片的多次拔

插會對芯片造成一定的損壞。

1.2方案比較與選擇

比較以上方案,很明顯:

方案一:用時鐘芯片DS1302獲取的時間較為精確,而且支

持斷電計時;采用12864LCD顯示模塊,顯示量大,但價格

較「司;

方案二:用STC89c52RC的計數(shù)器定時產(chǎn)生時間,充分利用單片機

5

的資源,且其自動重裝初值定時方式能達到ms級誤差,能滿足需求,

不必用DS1302。1602LCD顯示量少,但成本低,設(shè)計簡單。

基于以上兩種方案的比較,我們選擇方案二。

2實現(xiàn)原理

單片機STC89C52RC的定時/計數(shù)器每1s產(chǎn)生一次中斷,每產(chǎn)生一

次中斷,秒計數(shù)單元加一,當秒計數(shù)單元大于或等于60時,秒計

數(shù)單元清零,分計數(shù)單元加一,當分計數(shù)單元大于或等于60時,

分計數(shù)單元清零,時計數(shù)單元加一,當時計數(shù)單元大于或等于24

時,時計數(shù)單元清零,如此循環(huán)來產(chǎn)生時間。

3.理論分析計算

3.1星期計算方法

星期天數(shù)可由年月日來計算,計算公式為

Weekday=(日+2*月+3*(月+1)/5+年+年/4-年/100+年/400)%7

4.功能與指標

4.1功能

4.1.1LCD顯示

顯示陽歷年、月、日、星期、小時、分、秒、報警次序、

6

定時報警時間;

4.1.2定時報警

當時間到達所設(shè)置的報警設(shè)定值時,蜂鳴器發(fā)出響聲,按

SOUNDER(STOP)鍵終止響聲

4.1.3調(diào)時

按模式鍵MODE進入調(diào)時功能,按PLUS鍵是加1,按DEC

是減1。

4.2指標

工作電壓:5V

工作頻率:12MHz

液晶顯示:160*2像素LCD顯示

第三部分硬件設(shè)計

1.1.硬件系統(tǒng)分析

1.1.系統(tǒng)原理框圖

系統(tǒng)原理框圖如圖3所示:

系統(tǒng)原理框圖3

1.2:單片機主控電路如下圖所示

8

2.模塊功能與實現(xiàn)

設(shè)計系統(tǒng)以STC89c52RC為核心,外接晶振電路、顯示模

塊、定時報警模塊、鍵盤接口模塊組成。

2.1STC89C52RC

STC89c52RC是深圳宏晶公司的產(chǎn)品,它是一個低功耗,高性能CMOS8

位單片機,片內(nèi)含8KBytesISP的可反復擦寫100000次的Flash只讀程序存儲器,

器件采用SST公司的高密度、非易失性存儲技術(shù),兼容標準MCS-51指令系統(tǒng)及

80C51引腳結(jié)構(gòu),芯片內(nèi)集成了通用8位中央處理器和ISPFlash存儲單元,其具

有如下特點:40個引腳,8KBytesFlash片內(nèi)程序存儲器,256bytes的隨機存

取數(shù)據(jù)存儲器,32個外部雙向輸入/輸出口,5個中斷優(yōu)先級2層中斷嵌套中斷,2

個16位可編程定時計數(shù)器,2個全雙工串行通信口,看門狗電路,片內(nèi)時鐘振蕩器。

單片機引腳如下圖所示:

9

4

X10

T2/P1.0Cfo39□Vcc

T2EX/P1.1Cc33PO.0/ADO

OC8

Pl.2C37□PO.1/AD1

Pl.3C36□PO.2/AD2

uc

Pl.4C35□PO.3/AD3

M0SI/P1.5匚3□PO.4/AD4

*f4

XIS0/P1.6C—33□PO.5/AD5

0

SCK/P1.7C32□PO.6/AD6

RSTC31□PO.7/AD7

xi0

BXD/P3.0C30□EAZVPP

*11

TXD/P3.1C29□ALE/PROG

x12

IHT0/P3.2C328□PESN

x1

INT1/P3.3C427□P2.7/A15

A1

T0/P3.4C526□P2.6/A14

X1

T1/P3-5C625□P2.5/A13

X1

面/P3.6C1724□P2.4/Al2

RD/P3.7C*8233P2.3/AU

A1

XTAL2C1322□P2.2ZA10

XTAL1CA021□P2.1/A3

to

PDIPGNBC□P2.0/A8

STC89C52RC引腳圖

2.2.LCD顯示

該模塊采用的1602LCD是一種具有并行、串行多種接口方式的字

符點陣液晶顯示器,液晶模塊內(nèi)部的字符發(fā)生存儲器(CGROM)

已經(jīng)存儲了160個不同的點陣字符圖形,能夠同時顯示16x02

即32個字符。(16列2行),它通過D0?D7的8位數(shù)據(jù)端傳

輸數(shù)據(jù)和指令。

2.3.定時報警

定時報警用蜂鳴器播放曲譜,曲譜包括廣7七個音符,通過

程序來控制音符的播放效果

2.4.鍵盤接口

鍵盤接口電路由四個按鍵組成,分別是模式鍵MODE,加一

鍵PLUS,減一鍵DEC,停止鍵STOP,用查詢法完成讀鍵功能

IO

第四部分軟件設(shè)計

1.軟件系統(tǒng)分析

STC89c52RC單片機及其開發(fā)應(yīng)用系統(tǒng)具有語言簡潔、可移植性好、表達

能力強、實現(xiàn)方式靈活等特點,可以進行結(jié)構(gòu)化設(shè)計,也可以直接控制計算機硬

件,所生成的代碼質(zhì)量高,使用方便.該系統(tǒng)采用模塊化設(shè)計。由主程序、定時

程序、定時報警程序、顯示程序、調(diào)時程序等構(gòu)成。

2.軟件流程

3.定時程序

使用定時/計數(shù)器TO,設(shè)置TO工作方式為方式1,16位工作模式,

設(shè)定TO低8位數(shù)值TLO=11H,高8位數(shù)值THO=OEEH,這樣TO的溢

11

出時間為5ms,另外還需使用軟件計數(shù)方式,軟件計數(shù)器初值為

200,定時器每溢出一次,軟件計數(shù)器減一,當軟件計數(shù)器減到0

時,即可獲得1s的定時時間。

4.液晶顯示程序

先初始化LCD1602,當CPU檢測到LCD1602處于空閑狀態(tài)時,調(diào)用

寫指令子程序完成相應(yīng)的功能,調(diào)用寫數(shù)據(jù)子程序把數(shù)據(jù)傳輸?shù)?/p>

LCD1602進行顯示。

5.定時報警流程

5.調(diào)時程序

開始

12

13

第五部分系統(tǒng)的測試及分析

1.系統(tǒng)測試方案

采用先分別調(diào)試各單元模塊,調(diào)通后再進行整個系統(tǒng)調(diào)試的方法,以提高調(diào)

試效率。

1.1LCD測試

編寫一段程序讓LCD顯示一串數(shù)字

1.2定時報警測試

編程設(shè)定在系統(tǒng)啟動一段時間后蜂鳴器發(fā)出響聲

1.3定時中斷測試

用定時器TO,編程設(shè)定TO的初值,讓TO每一秒中斷一次,在LCD上

顯示相應(yīng)數(shù)字

1.4整個系統(tǒng)測試

拿一個能記錄分、秒、毫秒的秒表,分別記錄系統(tǒng)時間走過10分鐘、

20分鐘、30分鐘所用的時間,以此來測量系統(tǒng)的精度

2.測試設(shè)備

數(shù)字萬用表,秒表,個人電腦(內(nèi)含protues/keilc51仿真軟件),整個測試均在

室內(nèi)完成

3.測試數(shù)據(jù)

10分00秒06毫秒

系統(tǒng)時間走過1。分鐘所用的時間

14

20分01秒02毫秒

系統(tǒng)時間走過20分鐘所用的時間

30分01秒08毫秒

系統(tǒng)時間走過30分鐘所用的時間

4.測試結(jié)果分析

由上述數(shù)據(jù)記錄表分析可知,測量誤差均在0.1%以內(nèi),精確度較高,可以滿足基

本的需要

第六部分結(jié)論

1.最終實現(xiàn)功能

1.1LCD顯示陽歷年、月、日、星期、小時、分、秒;

L2定時報警

L3按鍵調(diào)時

2.特色

時間精度較高,定時報警和液晶顯示相結(jié)合,更直觀,更人

性化成本低,體積小,使用方便

3.未來的改進方向

該設(shè)計已有的功能和特色上,仍需進一步改善,使其更人性化,功能更完

善。

3.1提高系統(tǒng)時間的精度

3.2增加陰歷年顯示和半點/整點語音報時/溫度顯示等功能

4.總結(jié)

本設(shè)計以STC89c52RC為核心,利用軟件編程,通過按鍵控制和液晶顯示,

輔以語音警示,實現(xiàn)顯示萬年歷的功能。利用單片機設(shè)計的電子萬年歷系統(tǒng),易

于設(shè)計和安裝維護,可靠性好,功能擴展便捷,價格實惠,系統(tǒng)精確度高,穩(wěn)定

性好,應(yīng)用前景非常廣闊。

這次競賽鍛煉了我們的動手能力,激發(fā)了我們的創(chuàng)新思維,培養(yǎng)了我們勇于

面對困難克服困難的堅強意志和不懈的精神,使我們又一次體味到團隊的力量和

15

合作的重要性;更重要的是使我們深深的體會到理論結(jié)合實際的重要性,體會到

知識的海洋是無窮無盡,激發(fā)我們?nèi)プ非?。總之,我們喜歡“電子設(shè)計”競賽,

感謝組委會給了我們鍛煉的機會。

【參考文獻】

[1]潘永雄.《新編單片機原理與應(yīng)用》.西安:西安電子

科技大學出版社,2008.1

[2]樓苗然.《單片機設(shè)計實例》.北京:北京航空航天大

學出版社,2006.4

【3】劉文濤.《單片機應(yīng)用開發(fā)實例》.北京:清華大學出

版社,2005.5

[4]尹勇.《單片機程序設(shè)計教程》.北京:北京航空航天

大學出版社,2004.3

[5]徐愛均,彭愛華.《單片機高級語言C51windows環(huán)

境編程與應(yīng)用》.北京:電子工業(yè)出版社,2001.7

[6]馮育長,《單片機系統(tǒng)設(shè)計與實例分析》.西安:西安

電子科技大學出版社,2007.5

【7】李群芳,肖看.《單片機原理、接口及應(yīng)用》--嵌入

式系統(tǒng)設(shè)計基礎(chǔ).北京:清華大學出版社,2007.12

16

【附錄一】作品外形圖

17

【附錄二】源程序代碼

/*用定時器0,1602液晶,設(shè)計一個數(shù)字時鐘,可以由三個

按鈕控制調(diào)節(jié)時間*/

多功能萬年歷*/

#include<reg52.h>

#includenlcdl602.hM

#defineucharunsignedchar

#defineuintunsignedint

#defineTIMERO_COUNTOxEEll

sbitmode=P3A0;

sbitplus=P3A3;

sbitdec=P3A6;

sbitnao=P2A3;

sbitstop=P3A4;

ucharcount,s1num,timer0_tick,count=0;

chardingshi[32];

chardingfen[32];

uchark;

uchar1;

ucharmodenum;

chardingtime;

18

voiddelaytime(uintx)

(

uinta,b;

fbr(a=x;a>0;a—)

fbr(b=1000;b>0;b-);

typedefstruct{

charhour;

charminute;

charsecond;

}time;

typedefstruct{

uintyear;

ucharmonth;

charday;

}date;

timenow={0,0,0};

datetoday={2009,1,8};

charcodedayofmonth[]={31,28,31,30,31,30,31,31,30,31,30,31};

charcodeweekday[7][4]={”MON”JTUE”JWED”JTHU”JFRTJSAT'JSUN"};

ucharmonthday(ucharyear,ucharmonth)

(

if(month=2&&year%4==0)〃潤年的2月有29天

retum(29);

else

retum(dayofinonth[month-1]);〃非閏年時的該月份天數(shù)

voiddisplay_week()//由年月日計算星期

(

chardays;

days=(today.day+2*today.month+3*(today.month+l)/5+today.year+today.year/4-toda

y.year/1OO+today.year/400)%7;

display_string(&weekday[days][0]);

}

staticvoidtimerOinitialize(void)//timerOinitialize

(

EA=0;〃設(shè)置不接受所有中斷

19

timerO_tick=O;

TRO=O;〃關(guān)閉Timer。

TMOD=0X01;//設(shè)置TimerO為模式1,16位工作模式

TLO=(TIMERO_COUNT&OXOOFF);//設(shè)置TimerO低八位數(shù)值

THO=(TIMERO_COUNT?8);〃設(shè)置TimerO高八位數(shù)值

PT1=1;~〃設(shè)置TimerO的優(yōu)先級為最高

ETO=1;〃設(shè)置接受TimerO的中斷

TRO=1;〃啟動TimerO

EA=1;〃設(shè)置系統(tǒng)接受中斷

voidwrite_dingtime(ucharadd,ucharnumber)

(

gotoxy(2,add);

displaydata(number);

}

voidwrite_time(ucharadd,ucharnumber)

(

gotoxy(2,add);

displaydata(number);

}

voidwrite_riqi(ucharadd,ucharnumber)

(

gotoxy(l,add);

display_data(number);

)

voidkeyscan()

(

if(mode==0)

(

delay⑸;

if(mode==0)

{mode_num-H-;

while(!mode);

TR0=0;

write_com(0x0f);

}

if(mode_num==1)gotoxy(l,4);

i出mode_num==2)gotoxy(l,7);

if(mode_num==3)gotoxy(l,10);

if(mode_num==4)gotoxy(2,2);

if(mode_num==5)gotoxy(2,5);

20

if(mode_num==6)gotoxy(2,8);

if(mode_num==7)gotoxy(2,ll);

if(mode_num==8)gotoxy(2,l4);

imode_num==9)gotoxy(2,l6);

if(mode_num==10)

(

mode_num=0;

write_com(OxOc);

TRO=1;

)

)

if(mode_num!=0)

(

if(plus=0)

(

delay⑸;

i<plus=0)

{

while(!plus);

if(mode_num=1)

(

today.year++;

write_riqi(l,today,year/100);

write_riqi(3,today.year%100);

gotoxy(l,12);

display_week();

gotoxy(l,4);

)

if(mode_num=2)

(

today,month++;

ifttoday.month==l3)today.month=l;

write_riqi(6,today,month);

gotoxy(l,12);

display_week();

gotoxy(l,7);

)

if(mode_num=3)

(

today.day++;

if(today.day>monthday(today.year,today.month))

today.day=l;

write_riqi(9,today.day);

gotoxy(l,12);

21

display_week();

gotoxy(l,10);

}

if(mode_num==4)

(

now.hour++;

if(now.hour=24)now.hour=0;

write_time(1,now.hour);

gotoxy(2,2);

)

if(mode_num==5)

(

now.minute++;

if(now.minute=60)now.minute=0;

write_time(4,now.minute);

gotoxy(2,5);

f

if(mode_num==6)

(

now.second++;

if(now.second=60)now.second=0;

write_time(7,now.second);

gotoxy(2,8);

)

if(mode_num==7)

(

dingtime-H-;

if(dingtime==33)dingtime=l;

write_dingtime(lO,dingtime);

write_dingtime(13,dingshi[dingtiine-1]);

write_dingtime(l5,dingfen[dingtime-1]);

gotoxy(2,ll);

)

if(mode_num==8)

(

dingshi[dingtime-l]++;

if(dingshi[dingtime-1]=24)dingshi[dingtime-l]=0;

write_dingtime(13,dingshi[dingtime-1]);

gotoxy(2,14);

)

i出mode_num==9)

(

dingfen[dingtime-1]++;

if(dingfen[dingtime-1]==60)dingfen[dingtime-1]=0;

22

write_dingtime(l5,dingfen[dingtime-1]);

gotoxy(2,16);

if(dec==O)

delay(5);

if(dec==O)

(

while(!dec);

if(mode_num=1)

{

today.year—;

write_riqi(l,today,year/100);

write_riqi(3,today,year%100);

gotoxy(l,12);

display_week();

gotoxy(l,4);

)

if(mode_num=2)

(

today,month—;

ifttoday.month==0)today.month=12;

writeriqi(6,today,month);

gotoxy(l,12);

display_week();

gotoxy(l,7);

}

if(mode_num=3)

(

today,day—;

ifttoday.day==0)

today.day=monthday(today.year,today.month);

write_riqi(9,today.day);

gotoxy(l,12);

display_week();

gotoxy(l,10);

)

if(mode_num==4)

(

now.hour-;

if(now.hour<0)now.hour=23;

write_time(1?now.hour);

23

gotoxy(2,2);

if(mode_num==5)

(

now.minute-;

if(now.minute<0)now.minute=59;

write_time(4,now.minute);

gotoxy(2,5);

)

if(mode_num==6)

(

now.second-;

if(now.second<0)now.second=59;

write_time(7,now.second);

gotoxy(2,8);

)

if(mode_num==7)

(

dingtime-;

if(dingtime<0)dingtime=32;

write_dingtime(lO,dingtime);

write_dingtime(13,dingshi[dingtime-1]);

write_dingtime(l5,dingfen[dingtime-1]);

gotoxy(2,ll);

)

if(mode_num==8)

(

dingshi[dingtime-1]—;

if(dingshi[dingtime-1]<0)dingshi[dingtime-1]=23;

write_dingtime(13,dingshi[dingtime-1]);

gotoxy(2,14);

)

if(mode_num==9)

(

dingfen[dingtime-1]—;

if(dingfen[dingtime-1]<0)dingfen[dingtime-1]=59;

write_dingtime(15,dingfen[dingtime-1]);

gotoxy(2,16);

24

voidtimerO(void)interrupt1

TR0=0;

TLO=(TIMERO_COUNT&0X00FF);〃設(shè)置TimerO低八位數(shù)值

THO=(TIMERO_COUNT?8);〃設(shè)置TimerO高八位數(shù)值

TRO=1;

count-H-;

if(count=200)

(

count=0;

now.second-H-;

iftnow.second==60)

{

now.second=0;

now.minute++;

if(now.minute=60)

(

now.minute=0;

now.hour++;

if(now.hour=24)

(

now.hour=0;

today.day++;

if(today.day>monthday(today,year,today.month))

(

today.day=l;

today.month++;

if(today.month=13)

(

today,month=l;

today.year++;

)

writeriqi(6,today,month);

)

write_riqi(9,today.day);

gotoxy(l,12);

display_week();

)

write_time(1,now.hour);

)

write_time(4,now.minute);

25

write_time(7,now.second);

if(dingshi[dingtime-1]!=0&&dingfen[dingtime-1]!=0)

(

if(now.hour=dingshi[dingtime-1]&&now.minute==dingfen[dingtime-1])

{

if(stop=0)

|

delay(5);

if(stop==0)

(

nao=0;

while(!stop);

dingtime-H-;

iftdingtime==33)

dingtime=l;

write_dingtime(10,dingtime);

write_dingtime(13,dingshi[dingtime-1]);

write_dingtime(l5,dingfen[dingtime-1]);

voidmain()

{

dingtime=l;

nao=0;

init_lcd();

timerO_initialize();

gotoxy(lj);

display_string(n2009/01/08");

display_week();

gotoxy(2,l);

display_string(n00:00:00n);

gotoxy(2,10);

display_string(n010000");

while(l)

26

keyscan();

if(mode_num==0)

{

if(dingshi[dingtime-1]!=0&&dingfen[dingtime-1]!=O)

(

if(now.hour=dingshi[dingtime-1]&&now.minute=dingfen[dingtime-1])

{

fbr(l=20;l>0;l-)

{

fdr(k=5OOOO;k>O;k-)

{

if(stop==0)gotoloop;

nao=~nao;

delay(20);

}

delaytime(50);

)

nao=0;

delaytime(500);

fdr(l=10;l>0;l-)

(

fdr(k=5OOOO;k>O;k-)

(

if(stop==0)gotoloop;

nao=-nao;

delay(20);

)

delaytime(50);

)

dingtime-H-;

if(dingtime==33)

dingtime=l;

write_dingtime(lO,dingtime);

write_dingtime(13,dingshi[dingtime-1]);

write_dingtime(l5,dingfen[dingtime-1]);

loop:delay(5);

27

“LCD1602.h”

#defineucharunsignedchar

#defineuintunsignedint

sbitrs=P2A0;

sbitlcden=P2A2;

#defineledmode0x38

#definedisplaycursorOxOf

#defineundisplay_cursor0x0c

charcodeint_to_char[]=n0123456789H;

voiddelay(uintx)

uinta,b;

for(a=x;a>0;a-)

fbr(b=10;b>0;b—);

voidwrite_com(ucharcom)〃寫命令

PO=com;

rs=O;

lcden=O;

delay(lO);

lcden=l;

delay(lO);

lcden=O;

voidwrite_date(uchardate)〃寫數(shù)據(jù)

{

PO=date;

rs=l;

lcden=0;

delay(lO);

lcden=l;

delay(lO);

lcden=0;

voidinit_lcd(void)〃初始化led1602

(

delay(15);

write_com(ledmode);

28

delay(20);

write_com(undisplay_cursor);

delay(20);

write_com(0x06);//letcursormove

delay(20);

write_com(0x01);//clearled

delay(20);

)

voiddisplay_string(char*p)〃寫字符串

while(*p)

write_date(*p);

delay(20);

p++;

)

voidgotoxy(ucharx,uchary)

if(x==l)

write_com(0x80+y-1);

e

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論