基于C51單片機(jī)的電子表內(nèi)附程序源碼_第1頁
基于C51單片機(jī)的電子表內(nèi)附程序源碼_第2頁
基于C51單片機(jī)的電子表內(nèi)附程序源碼_第3頁
基于C51單片機(jī)的電子表內(nèi)附程序源碼_第4頁
基于C51單片機(jī)的電子表內(nèi)附程序源碼_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、-PAGE . z.成績電子科學(xué)與技術(shù)系科研訓(xùn)練中文題目:基于C51單片機(jī)為主控芯片的電子時鐘英文題目: Based on C51 single chip microputer as main control chip of electronic watch姓 名: 王*學(xué) 號:*專業(yè)名稱:電子科學(xué)與技術(shù) 指導(dǎo)教師:*國旭基于C51單片機(jī)為主控芯片的電子表作者 *理工大學(xué)電子科學(xué)與技術(shù)系內(nèi)容摘要本文論述了用C51單片機(jī)制作電子表的方法和過程,電路圖以及程序源代碼。包括時間基準(zhǔn)的選取和實(shí)現(xiàn);1602液晶顯示屏的驅(qū)動和編程;獨(dú)立鍵盤的使用和編程;單片機(jī)內(nèi)部時間中斷的原理及編程。關(guān)鍵詞 C51單片機(jī)

2、;時間基準(zhǔn);1602液晶顯示屏;編程Based on C51 single chip microputer as main control chip of electronic watchAbstractThis paper discusses the using C51 production method and process of digital watches, circuit diagram and the program source code. Including the selection of time benchmark and implementation; 1602 L

3、CD driver and programming; The use of independent keyboard and programming; The principle and programming of single chip microputer internal time interrupt.Keywords C51 production;Time benchmark;1602 LCD;programming目錄 TOC o 1-3 h z u HYPERLINK l _Toc4213627771 引言 PAGEREF _Toc421362777 h 1HYPERLINK l

4、 _Toc4213627782 相關(guān)文獻(xiàn)綜述 PAGEREF _Toc421362778 h 1HYPERLINK l _Toc4213627793 元件簡述及應(yīng)用 PAGEREF _Toc421362779 h 1HYPERLINK l _Toc4213627803.1 STC89C51RC單片機(jī)簡介及其應(yīng)用 PAGEREF _Toc421362780 h 2HYPERLINK l _Toc4213627813.1.1 STC89C51RC單片機(jī)簡介 PAGEREF _Toc421362781 h 2HYPERLINK l _Toc4213627823.1.2 STC89C51RC單片機(jī)應(yīng)用

5、 PAGEREF _Toc421362782 h 2HYPERLINK l _Toc4213627833.2 1602液晶屏簡介及其應(yīng)用 PAGEREF _Toc421362783 h 3HYPERLINK l _Toc4213627843.2.1 1602液晶屏簡介 PAGEREF _Toc421362784 h 3HYPERLINK l _Toc4213627853.2.2 1602液晶屏應(yīng)用 PAGEREF _Toc421362785 h 4HYPERLINK l _Toc4213627864硬件電路構(gòu)建 PAGEREF _Toc421362786 h 5HYPERLINK l _Toc

6、4213627874.1中控局部以及時間基準(zhǔn)局部 PAGEREF _Toc421362787 h 6HYPERLINK l _Toc4213627884.2按鍵交互局部 PAGEREF _Toc421362788 h 7HYPERLINK l _Toc4213627894.3液晶顯示局部 PAGEREF _Toc421362789 h 8HYPERLINK l _Toc4213627905 軟件程序編程 PAGEREF _Toc421362790 h 9HYPERLINK l _Toc4213627915.1計(jì)算類函數(shù)代碼 PAGEREF _Toc421362791 h 9HYPERLINK

7、l _Toc421362792閏年計(jì)算函數(shù) PAGEREF _Toc421362792 h 9HYPERLINK l _Toc421362793日期清零函數(shù) PAGEREF _Toc421362793 h 9HYPERLINK l _Toc421362794星期計(jì)算函數(shù) PAGEREF _Toc421362794 h 10HYPERLINK l _Toc4213627955.2獨(dú)立按鍵函數(shù) PAGEREF _Toc421362795 h 11HYPERLINK l _Toc4213627965.2.1 S1數(shù)位選擇按鍵 PAGEREF _Toc421362796 h 11HYPERLINK l

8、 _Toc4213627975.2.2 S2數(shù)值加一按鍵 PAGEREF _Toc421362797 h 12HYPERLINK l _Toc4213627985.2.3 S3數(shù)值減一按鍵 PAGEREF _Toc421362798 h 14HYPERLINK l _Toc4213627995.3計(jì)時器函數(shù) PAGEREF _Toc421362799 h 15HYPERLINK l _Toc421362800計(jì)時器初始化函數(shù) PAGEREF _Toc421362800 h 15HYPERLINK l _Toc421362801計(jì)時器中斷函數(shù) PAGEREF _Toc421362801 h 16

9、HYPERLINK l _Toc4213628025.4全部源代碼 PAGEREF _Toc421362802 h 18HYPERLINK l _Toc4213628036結(jié)論 PAGEREF _Toc421362803 h 29-. z.1 引言單片機(jī)是一種集成電路芯片,是采用超大規(guī)模集成電路技術(shù),把具有數(shù)據(jù)處理能力的中央處理器CPU、隨機(jī)存儲器RAM、多種I/O口和中斷系統(tǒng)、定時器/計(jì)數(shù)器等功能集成到一塊硅片上,構(gòu)成的一塊小而完整的計(jì)算機(jī)系統(tǒng)。本設(shè)計(jì)為采用89C51RC芯片作為主控芯片的電子表,電子表可以顯示時間、日期和星期,可以手動調(diào)整時間和日期,星期將通過內(nèi)部計(jì)算自動給定,擁有計(jì)算閏年

10、功能,并且可以通過年份和月份自動計(jì)算當(dāng)月最后一天日期。2 相關(guān)文獻(xiàn)綜述隨著科技的不斷開展,單片機(jī)的種類也變得多種多樣,五花八門,以滿足不同情況的需要。應(yīng)用單片機(jī)的產(chǎn)品已經(jīng)融入到各行各業(yè),以單片機(jī)為主控芯片的電子時鐘也應(yīng)運(yùn)而生。在單片機(jī)應(yīng)用以前,電子時鐘主要使用震蕩電路以及數(shù)字電路構(gòu)成,然而振蕩電路的頻率不穩(wěn)定,極易受到干擾,而且大量的數(shù)字器件具有較高的延遲,這些都會影響電子時鐘的精度,并且利用數(shù)字元件搭建極其麻煩,無形中增大了電子時鐘的體積。然而單片機(jī)是一種以C語言為根底語言的可編程MCU,配合較少的元件就可以做出功能強(qiáng)大的產(chǎn)品,提高精度的同時也極大的縮小了體積,而且復(fù)雜功能的計(jì)時器也成為了可

11、能。3 元件簡述及應(yīng)用本時鐘采用STC89C51RC作主控芯片芯片。單片機(jī)具有體積小、功耗低、控制功能強(qiáng)、擴(kuò)展靈活、微型化和使用方便等優(yōu)點(diǎn),廣泛應(yīng)用于儀器儀表中,結(jié)合不同類型的傳感器,可實(shí)現(xiàn)諸如電壓、電流、功率、頻率、濕度、溫度、流量、速度、厚度、角度、長度、硬度、元素、壓力等物理量的測量。采用單片機(jī)控制使得儀器儀表數(shù)字化、智能化、微型化,且功能比起采用電子或數(shù)字電路更加強(qiáng)大。采用1602液晶屏作為顯示元件。1602液晶也叫1602字符型液晶,它是一種專門用來顯示字母、數(shù)字、符號等的點(diǎn)陣型液晶模塊。它由假設(shè)干個5*7或者5*11等點(diǎn)陣字符位組成,每個點(diǎn)陣字符位都可以顯示一個字符,每位之間有一個

12、點(diǎn)距的間隔,每行之間也有間隔,起到了字符間距和行間距的作用,正因?yàn)槿绱怂运荒芎芎玫仫@示圖形用自定義CGRAM,顯示效果也不好。1602LCD是指顯示的內(nèi)容為16*2,即可以顯示兩行,每行16個字符液晶模塊顯示字符和數(shù)字。3.1 STC89C51RC單片機(jī)簡介及其應(yīng)用本設(shè)計(jì)采取STC89C51RC為主控芯片,以提供時間基準(zhǔn)和時間日期計(jì)算。3.1.1 STC89C51RC單片機(jī)簡介STC89C52RC是采用8051核的ISPIn System Programming在系統(tǒng)可編程芯片,最高工作時鐘頻率為80MHz,片內(nèi)含8K Bytes的可反復(fù)擦寫1000次的Flash只讀程序存儲器,器件兼容標(biāo)

13、準(zhǔn)MCS-51指令系統(tǒng)及80C51引腳構(gòu)造,芯片內(nèi)集成了通用8位中央處理器和ISP Flash存儲單元,具有在系統(tǒng)可編程ISP特性,配合PC端的控制程序即可將用戶的程序代碼下載進(jìn)單片機(jī)內(nèi)部,省去了購置通用編程器,而且速度更快。STC89C52RC系列單片機(jī)是單時鐘/機(jī)器周期(1T)的兼容8051 內(nèi)核單片機(jī),是高速/ 低功耗的新一代8051 單片機(jī),全新的流水線/精簡指令集構(gòu)造,內(nèi)部集成MA*810 專用復(fù)位電路。3.1.2 STC89C51RC單片機(jī)應(yīng)用內(nèi)置4組8位I/O口,其中P0口為雙向I/O口,P1,P2,P3為準(zhǔn)雙向I/O口。內(nèi)置2個16位定時器/計(jì)數(shù)器。內(nèi)置外部中斷2 路,下降沿中

14、斷或低電平觸發(fā)中斷,Power Down 模式可由外部中斷低電平觸發(fā)中斷方式喚醒。內(nèi)置通用異步串行口。工作電壓為5V。工作溫度為070。圖3.1.2.1 STC89C51RC引腳圖引腳說明:I/O口:P0、P1、P2、P3四組I/O口,P0口為三態(tài)雙向I/O口,沒有內(nèi)置的上拉電阻,需要外接上拉電阻;P1、P2、P3為準(zhǔn)雙向I/O口;所有I/O口均可獨(dú)立編程使用。VCC、GND:單片機(jī)電源引腳,常電壓為+5V;*TAL1、*TAL2:外接時鐘引腳,*TAL1為輸入端,*TAL2為輸出端。RST:單片機(jī)的復(fù)位引腳,連續(xù)兩個機(jī)器周期以上的高電平為有效。R*D、T*D:串行輸入輸出口。INT0、INT

15、1:外部中斷0,外部中斷1。T0、T1:定時器計(jì)數(shù)器0外部輸入端、定時器計(jì)數(shù)器0外部輸入端。PSEN:程序儲存器允許輸出控制端。ALE/PROG:外部儲存器鎖存端。EA/VPP:外部儲存器控制端。3.2 1602液晶屏簡介及其應(yīng)用本設(shè)計(jì)采取1602液晶屏最為顯示元件。 1602液晶屏簡介液晶顯示器的主要原理是以電流刺激液晶分子產(chǎn)生點(diǎn)、線、面并配合背部燈管構(gòu)成畫面。各種型號的液晶通常是按照顯示字符的行數(shù)或液晶點(diǎn)陣的行列數(shù)來命名的。1602液晶屏每行顯示16個字符,一共可以顯示兩行。 1602液晶屏應(yīng)用000102030405060708090A0B0C0D0E0F4041424344454647

16、48494A4B4C4D4E4F1602液晶屏內(nèi)部RAM映射表數(shù)據(jù)指針設(shè)置指令碼:80H+地址碼。初始化設(shè)置指令碼:00111000設(shè)置16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)接口。00001DCBD=1開顯示,D=0關(guān)顯示C=1顯示光標(biāo),C=0不顯示光標(biāo)B=1光標(biāo)閃爍,B=0光標(biāo)不閃爍000001NSN=1寫一個字符后地址加一N=0寫一個字符后地址減一S=1寫字符整屏顯示左移或右移S=0寫字符整屏不移動00010000光標(biāo)左移00010100光標(biāo)右移00011000整屏左移,光標(biāo)跟隨移動00011100整平右移,光標(biāo)跟隨移動顯示開關(guān)及光標(biāo)設(shè)置指令表引腳說明:圖3.2.2.1 1602液晶屏引腳圖1

17、、VSS:電源地2、VDD:電源正極3、VO:液晶顯示比照度調(diào)節(jié)端4、RS:數(shù)據(jù)命令選擇端5、RW:讀寫選擇端6、EN:使能信號端714、D0D7:數(shù)據(jù)口15、BLA:背光電源正極16、BLK:背光電源負(fù)極4硬件電路構(gòu)建電子時鐘分4個模塊構(gòu)成,分別為:中控局部,時間基準(zhǔn),按鍵交互,液晶顯示。其中時間基準(zhǔn)局部已集成在中控模塊中。圖3.3.0.1 電子時鐘構(gòu)造圖4.1中控局部以及時間基準(zhǔn)局部中控局部以及時間基準(zhǔn)采用如下電路圖設(shè)計(jì):圖3.3.1.1 中控局部及時間基準(zhǔn)原理圖此中控電路叫做C51單片機(jī)的最小系統(tǒng),作用是為單片機(jī)提供適合的外部工作條件。U1為STM89C51RC,即為電子表的主控芯片。左

18、上角接在RST引腳的電路為復(fù)位按鍵電路,由一個按鍵、一個0.1F電容和一個10電阻組成。電容作用是消除按鍵抖動。按下按鍵即可為單片機(jī)提供連續(xù)兩個機(jī)器周期的高電平,以供單片機(jī)復(fù)位。左下角接在*TAL兩個引腳的是晶振電路,由一個晶振、兩個起振電容構(gòu)成。以晶振的固定頻率震蕩以輸出固定頻率的脈沖信號,為單片機(jī)提供機(jī)器周期,同時提供時間基準(zhǔn)。左上角為P0 I/O口的上拉電阻。使其能穩(wěn)定輸出上下電平。4.2按鍵交互局部按鍵交互局部采用如下電路圖:圖3.3.2.1 按鍵交互原理圖按鍵交互局部由四個獨(dú)立按鍵構(gòu)成,四個獨(dú)立按鍵一端接地,另一端口單片機(jī)上的四個I/O口,當(dāng)單片機(jī)檢測到其中的I/O口為低電平時,將會

19、觸發(fā)按鍵功能。按鍵功能簡述:S1:選擇時間日期將要調(diào)節(jié)的數(shù)位S2:當(dāng)前數(shù)位數(shù)值加一S3:當(dāng)前數(shù)位數(shù)值減一S4:無功能,備用按鍵4.3液晶顯示局部液晶顯示局部采用如下電路圖:圖3.3.3.1 液晶顯示局部原理圖液晶顯示局部為1602液晶屏提供根本的工作環(huán)境,并且負(fù)責(zé)液晶屏與單片機(jī)的數(shù)據(jù)交互,D0D7八個數(shù)據(jù)端單片機(jī)上的一組I/O口,E、RS連接單片機(jī)P3.4、P3.5口。供單片機(jī)操作液晶顯示屏 5軟件程序編程STC89C51RC芯片是基于C語言可編程芯片,只有硬件電路還無法正常工作因此還需要編程,并且將程序燒錄至單片機(jī)中,才能使其正常工作。由于代碼過于繁雜,將選取重要代碼加以論述,本章最后將給出

20、全部源代碼。5.1計(jì)算類函數(shù)代碼本電子時鐘可以按照年份和月份計(jì)算當(dāng)月共有多少天,并且星期將由電子時鐘自動給定,無需手動調(diào)節(jié)。計(jì)算函數(shù)主要包括:閏年計(jì)算函數(shù)、日期清零函數(shù)用來計(jì)算日期最后一天,超出后日期置一,重新疊加。、星期計(jì)算函數(shù)。5.1.1閏年計(jì)算函數(shù)源代碼如下/*/* */* */* 閏年計(jì)算函數(shù) */* */* 是閏年返回值為1 */*/int isleapyear(int year) year=year+2000;return (year%4=0&year%100)|year%400=0;當(dāng)年份可以被4整除并且不可以被100整除或者可以被400整除的年份是閏年。是閏年則函數(shù)返回值為1,

21、反之則返回0.當(dāng)其他函數(shù)引用該函數(shù)時,則可以方便的判斷該年是否是閏年。5.1.2日期清零函數(shù)源代碼如下/*/* */* */* 日期清零計(jì)算函數(shù) */* */* 日期需要清零時返回值為1 */*/int delete_riqi(int ri)if(ri28&yue=2&!isleapyear(nian)return 1;if(ri29&yue=2)return 1;if(ri30&(yue=4|yue=6|yue=9|yue=11)return 1;if(ri31)return 1;return 0;通過多個if語句進(jìn)展判斷,判斷當(dāng)前日期是否已經(jīng)超過當(dāng)月的最后一天,如果是,則返回1,否則返回0

22、.當(dāng)其他函數(shù)引用該函數(shù)時,可以判斷日期是否需要重新計(jì)數(shù)5.1.3星期計(jì)算函數(shù)源代碼如下/*/* */* */* 星期計(jì)算函數(shù) */* */* 星期日返回值為0 */*/int week(int nian,int yue,int ri) int iWeek,y,c,m,d; c=nian/100;y=nian%100;m=yue;d=ri; iWeek = y + y / 4 + c / 4 - 2 * c + 26 * ( m + 1 ) / 10 + d - 1; /蔡勒公式 iWeek = iWeek = 0 ( iWeek % 7 ) : ( iWeek % 7 + 7 ); /iWee

23、k為負(fù)時取模return iWeek; 函數(shù)采用泰勒公布,將年月日輸入函數(shù),函數(shù)會通過年月日計(jì)算出但天是星期幾,方便進(jìn)展星期顯示。5.2獨(dú)立按鍵函數(shù)按鍵交互是由獨(dú)立按鍵構(gòu)成的,此函數(shù)是獨(dú)立按鍵的驅(qū)動函數(shù)。共有三個獨(dú)立按鍵,分別為:S1,數(shù)位選擇按鍵;S2,數(shù)值加一按鍵;S3,數(shù)值減一按鍵。 S1數(shù)位選擇按鍵源代碼如下if(s1=0)delay(5);if(s1=0)/調(diào)整選擇s1num+;while(!s1);if(s1num=1)/調(diào)整秒鐘TR0=0;write_(0*80+0*40+10);write_(0*0f);/光標(biāo)閃爍if(s1num=2) /調(diào)整分鐘write_(0*80+0*4

24、0+7);if(s1num=3) /調(diào)整小時write_(0*80+0*40+4);if(s1num=4) /調(diào)整日期write_(0*80+9); if(s1num=5) /調(diào)整月份write_(0*80+6);if(s1num=6) /調(diào)整年份write_(0*80+3);if(s1num=7)/復(fù)原s1num=0;write_(0*0c);TR0=1;采用消抖延時來消除按鍵抖動,slnum用來記錄數(shù)位,每按下按鍵一次,slnum自加一,方便數(shù)值調(diào)整獲取數(shù)位,當(dāng)按下7次按鍵時,恢復(fù)正常顯示。 S2數(shù)值加一按鍵源代碼如下if(s2=0)/加數(shù)delay(5);if(s2=0)while(!s

25、2);if(s1num=1)/調(diào)整秒鐘miao+;if(miao=60)miao=0;write_sfm(10,miao);write_(0*80+0*40+10);if(s1num=2)/調(diào)整分鐘fen+;if(fen=60)fen=0;write_sfm(7,fen);write_(0*80+0*40+7);if(s1num=3)/調(diào)整小時shi+;if(shi=24)shi=0;write_sfm(4,shi);write_(0*80+0*40+4);if(s1num=4)/調(diào)整日期ri+;if(delete_riqi(ri)ri=1;write_nyr(9,ri);write_*q(w

26、eek(nian,yue,ri);write_(0*80+9);if(s1num=5)/調(diào)整月份yue+;if(yue=13)yue=1;write_nyr(6,yue);write_*q(week(nian,yue,ri);write_(0*80+6);if(s1num=6)/調(diào)整年份nian+;if(nian=100)nian=0;write_nyr(3,nian);write_*q(week(nian,yue,ri);write_(0*80+3);獲取slnum數(shù)值來獲取數(shù)位,對當(dāng)前數(shù)位的數(shù)值進(jìn)展加一處理,并對液晶屏進(jìn)展顯示處理。引用日期清零函數(shù)和星期計(jì)算函數(shù),日期計(jì)滿將自動置一,自動獲

27、取星期。方使用者操作。S3數(shù)值減一按鍵源代碼如下if(s3=0)/減數(shù)delay(5);if(s3=0)while(!s3);if(s1num=1)/調(diào)整秒鐘miao-;if(miao=-1)miao=59;write_sfm(10,miao);write_(0*80+0*40+10);if(s1num=2)/調(diào)整分鐘fen-;if(fen=-1)fen=59;write_sfm(7,fen);write_(0*80+0*40+7);if(s1num=3)/調(diào)整小時shi-;if(shi=-1)shi=23;write_sfm(4,shi);write_(0*80+0*40+4);if(s1n

28、um=4)/調(diào)整日期ri-;if(ri=0)ri=28;write_nyr(9,ri);write_*q(week(nian,yue,ri);write_(0*80+9);if(s1num=5)/調(diào)整月份yue-;if(yue=0)yue=12;write_nyr(6,yue);write_*q(week(nian,yue,ri);write_(0*80+6);if(s1num=6)/調(diào)整年份nian-;if(nian=-1)nian=99;write_nyr(3,nian);write_*q(week(nian,yue,ri);write_(0*80+3);同加一按鍵功能相似,將加數(shù)變成減數(shù)

29、操作,并對液晶屏進(jìn)展顯示處理。5.3計(jì)時器函數(shù)計(jì)時器函數(shù)為電子時鐘的核心函數(shù),用來計(jì)時以及對液晶屏進(jìn)展操作。計(jì)時器初始化函數(shù)初始化函數(shù)源代碼如下/*/* */* */* 初始化函數(shù) */* */* */*/void init()uchar num;lcden=0;write_(0*38);write_(0*0c);write_(0*06);write_(0*01);write_(0*80);nian=15;yue=5;ri=28;shi=0;fen=0;miao=0;for(num=0;num15;num+)write_date(tablenum);delay(5);write_(0*80+0

30、*40);for(num=0;num12;num+)write_date(table1num);delay(5);TMOD=0*01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;初始化函數(shù)翻開計(jì)時器開關(guān),設(shè)置計(jì)時器工作模式,并且給定計(jì)時器初值。為計(jì)時器工作做前期準(zhǔn)備。當(dāng)計(jì)時器數(shù)值計(jì)滿時,將進(jìn)入計(jì)時器中斷函數(shù)。計(jì)時器中斷函數(shù)計(jì)時器中斷函數(shù)源代碼如下/*/* */* */* 計(jì)時中斷函數(shù) */* */* */*/void timer0() interrupt 1TH0=(65536-50000)/256;TL0=(655

31、36-50000)%256;count+;if(count=18)count=0;miao+;if(miao=60)miao=0;fen+;if(fen=60)fen=0;shi+;if(shi=24)shi=0;ri+;if(delete_riqi(ri)ri=1;yue+;if(yue=13)yue=1;nian+;if(nian=100)nian=0;write_nyr(3,nian);write_nyr(6,yue);write_nyr(9,ri);write_*q(week(nian,yue,ri);write_sfm(4,shi);write_sfm(7,fen);write_sf

32、m(10,miao);進(jìn)入計(jì)時器中斷后需要重新為計(jì)時器填裝初值,已進(jìn)展下次計(jì)時,每1/18秒將進(jìn)入計(jì)時器中斷一次,因此當(dāng)進(jìn)入計(jì)時器中斷18次,則秒鐘加一,當(dāng)秒鐘為60時,秒鐘清零分鐘加一,以此類推。5.4全部源代碼/*/* 科研訓(xùn)練 */* 基于C51單片機(jī)的電子時鐘 */* 電科13-2 */* 王海旭 */* 1307010217 */*/#include#define uchar unsigned char #define uint unsigned intsbit rs=P35;sbit lcden=P34;sbit s1=P30;sbit s2=P31;sbit s3=P32;uch

33、ar count,s1num;char miao,shi,fen,nian,yue,ri;uchar table_w3=SUN,MON,TUE,WED,THU,FRI,SAT;/星期數(shù)組uchar code table= 2015-05-28 THU;/初始顯示uchar code table1= 00:00:00;/*/* */* */* 延時函數(shù) */* */* */*/void delay(uint z)uint *,y;for(*=z;*0;*-)for(y=110;y0;y-);/*/* */* */* 閏年計(jì)算函數(shù) */* */* 是閏年返回值為1 */*/int isleapye

34、ar(int year) year=year+2000;return (year%4=0&year%100)|year%400=0;/*/* */* */* 星期計(jì)算函數(shù) */* */* 星期日返回值為0 */*/int week(int nian,int yue,int ri) int iWeek,y,c,m,d; c=nian/100;y=nian%100;m=yue;d=ri; iWeek = y + y / 4 + c / 4 - 2 * c + 26 * ( m + 1 ) / 10 + d - 1; /蔡勒公式 iWeek = iWeek = 0 ( iWeek % 7 ) : (

35、 iWeek % 7 + 7 ); /iWeek為負(fù)時取模return iWeek; /*/* */* */* 日期清零計(jì)算函數(shù) */* */* 日期需要清零時返回值為1 */*/int delete_riqi(int ri)if(ri28&yue=2&!isleapyear(nian)return 1;if(ri29&yue=2)return 1;if(ri30&(yue=4|yue=6|yue=9|yue=11)return 1;if(ri31)return 1;return 0;/*/* */* */* 1602液晶屏命令寫入函數(shù) */* */* */*/void write_(ucha

36、r )rs=0;lcden=0;P0=;delay(5);lcden=1;delay(5);lcden=0;/*/* */* */* 1602液晶屏數(shù)據(jù)寫入函數(shù) */* */* */*/void write_date(uchar date)rs=1;lcden=0;P0=date;delay(5);lcden=1;delay(5);lcden=0;/*/* */* */* 初始化函數(shù) */* */* */*/void init()uchar num;lcden=0;write_(0*38);write_(0*0c);write_(0*06);write_(0*01);write_(0*80);

37、nian=15;yue=5;ri=28;shi=0;fen=0;miao=0;for(num=0;num15;num+)write_date(tablenum);delay(5);write_(0*80+0*40);for(num=0;num12;num+)write_date(table1num);delay(5);TMOD=0*01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;/*/* */* */* 時間寫入函數(shù) */* */* */*/void write_sfm(uchar add,uchar date)u

38、char shi,ge;shi=date/10;ge=date%10;write_(0*80+0*40+add);write_date(0*30+shi);write_date(0*30+ge);/*/* */* */* 日期寫入函數(shù) */* */* */*/void write_nyr(uchar add,uchar date)uchar shi,ge;shi=date/10;ge=date%10;write_(0*80+add);write_date(0*30+shi);write_date(0*30+ge);/*/* */* */* 星期寫入函數(shù) */* */* */*/void wri

39、te_*q(uchar week)write_(0*80+12);write_date(table_wweek0);write_date(table_wweek1);write_date(table_wweek2);/*/* */* */* 鍵盤調(diào)表函數(shù) */* */* */*/void keyscan()if(s1=0)delay(5);if(s1=0)/調(diào)整選擇s1num+;while(!s1);if(s1num=1)/調(diào)整秒鐘TR0=0;write_(0*80+0*40+10);write_(0*0f);/光標(biāo)閃爍if(s1num=2) /調(diào)整分鐘write_(0*80+0*40+7);

40、if(s1num=3) /調(diào)整小時write_(0*80+0*40+4);if(s1num=4) /調(diào)整日期write_(0*80+9); if(s1num=5) /調(diào)整月份write_(0*80+6);if(s1num=6) /調(diào)整年份write_(0*80+3);if(s1num=7)/復(fù)原s1num=0;write_(0*0c);TR0=1;if(s1num!=0)/調(diào)整數(shù)值if(s2=0)/加數(shù)delay(5);if(s2=0)while(!s2);if(s1num=1)/調(diào)整秒鐘miao+;if(miao=60)miao=0;write_sfm(10,miao);write_(0*80+0*40+10);if(s1num=2)/調(diào)整分鐘fen+;if(fen=60)fen=0;write_sfm(7,fen);write_(0*80+0*40+7);if(s1num=3)/調(diào)整小時shi+;if(shi=24)shi=0;write_sfm(4,shi);write_(0*80+0*40+4);if(s1num=4)/調(diào)整日期ri+;if(delete_riqi(ri)ri=1;write_nyr(9,ri);write_*q(week(nian,yue,ri);write_(0*80+9);if(

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論