單片機(jī)多功能數(shù)字鐘課設(shè)報(bào)告_第1頁(yè)
單片機(jī)多功能數(shù)字鐘課設(shè)報(bào)告_第2頁(yè)
單片機(jī)多功能數(shù)字鐘課設(shè)報(bào)告_第3頁(yè)
單片機(jī)多功能數(shù)字鐘課設(shè)報(bào)告_第4頁(yè)
單片機(jī)多功能數(shù)字鐘課設(shè)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩23頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、單片機(jī)課程設(shè)計(jì)一、 題目及要求 設(shè)計(jì)一個(gè)多功能數(shù)字鐘,使其具有以下功能:1、 由晶振電路產(chǎn)生標(biāo)準(zhǔn)秒信號(hào)。2、 能夠顯示時(shí)、分、秒:完成顯示由秒00一直加1至59,再恢復(fù)為00;分加1,由00至01,一直加1至59,再恢復(fù)00;時(shí)加1,由00至01,一直加1到23,再恢復(fù)00。3、 要有手動(dòng)快速校時(shí)、校分、秒。4、 自定義電路,設(shè)計(jì)、調(diào)試,并完成實(shí)驗(yàn)報(bào)告。二、 總體思路數(shù)字鐘實(shí)際上是一個(gè)對(duì)標(biāo)準(zhǔn)頻率(1HZ)進(jìn)行計(jì)數(shù)的計(jì)數(shù)電路。由于計(jì)數(shù)的起始時(shí)間不可能與標(biāo)準(zhǔn)時(shí)間一致,故需要在電路上加一個(gè)校時(shí)電路。對(duì)于一般的數(shù)字鐘多會(huì)有報(bào)時(shí)功能。針對(duì)以上敘述,可整體構(gòu)想:標(biāo)準(zhǔn)頻率可由振蕩電路產(chǎn)生,更精確時(shí),可由石英

2、晶體產(chǎn)生。計(jì)數(shù),可由2個(gè)60進(jìn)制計(jì)數(shù)器,分別作為秒、分計(jì)數(shù)單元,一個(gè)24進(jìn)制,作為時(shí)計(jì)數(shù)單元。計(jì)數(shù)單元同樣可采用中斷定時(shí)方式,這就需要由軟件來(lái)實(shí)現(xiàn)。對(duì)于校時(shí)部分,一般都是手動(dòng)進(jìn)行,通過(guò)按鍵來(lái)控制時(shí)、分、秒的快速校準(zhǔn)。報(bào)時(shí)電路,可每小時(shí)短報(bào)時(shí),也可設(shè)定每天的幾點(diǎn)準(zhǔn)時(shí)鬧鈴。至于,顯示時(shí)間的部分可由數(shù)碼管也可由液晶顯示來(lái)完成。針對(duì)以上設(shè)計(jì)思路,可有多種設(shè)計(jì)方案。對(duì)于具體的,參考方案論證。三、 方案論證方案一:純電路設(shè)計(jì)此方案電路總方框圖如下:方案二:采用AT89S52單片機(jī)設(shè)計(jì)主要以52芯片為核心,可內(nèi)部或外部產(chǎn)生信號(hào),采用中斷的方式定時(shí)。系統(tǒng)由AT89S52單片機(jī)、DS1302、LCD1602、按

3、鍵等部分構(gòu)成,能實(shí)現(xiàn)比較精確的走時(shí)、時(shí)間的調(diào)整等功能。秒信號(hào)是由單片機(jī)內(nèi)部的定時(shí)器產(chǎn)生,通過(guò)軟件計(jì)數(shù)和軟件的譯碼,以動(dòng)態(tài)掃描的方式將時(shí)間顯示在LCD上面。通過(guò)按鍵的檢測(cè)可以控制單片機(jī)相應(yīng)的動(dòng)作,來(lái)達(dá)到調(diào)時(shí)的目的。四、 具體實(shí)現(xiàn)電路如下:(一)、硬件設(shè)計(jì)1、電源電路:電源是單片機(jī)系統(tǒng)的重要組成部分,它不僅為系統(tǒng)提供多路電壓源,還直接影響到系統(tǒng)的技術(shù)指標(biāo)和抗干擾性能。AT89S52單片機(jī)和一般的數(shù)字芯片一樣,都是5V電壓供電,所以可以共用一個(gè)5V電源。另外,為了提高電源的穩(wěn)定性,在離電源的最近處做好退耦處理,可用一個(gè)電容,以濾去干擾,保證電源的穩(wěn)定。2、 LCD1602顯示電路:4、AT89S52

4、單片機(jī):其引腳如下:電源引腳:40(VCC)接+5V電源,20(GND)接地。晶振采用內(nèi)部方式。晶體振蕩器與AT89S52的接法為如圖所示,XTAL1和XTAL2腳接到12MHz的晶體振蕩器上,與兩個(gè)30pf的電容并聯(lián),并接低電平。 19(XTAL1),18(XTAL2) XTAL1是片內(nèi)振蕩器的反相放大器輸入端,XTAL2則是輸出端,使用外部振蕩器時(shí),外部振蕩信號(hào)應(yīng)直接加到XTAL1,而XTAL2懸空。內(nèi)部方式時(shí),時(shí)鐘發(fā)生器對(duì)振蕩脈沖二分頻,如晶振為12MHz,時(shí)鐘頻率就為6MHz。晶振的頻率可以在1MHz-24MHz內(nèi)選擇。電容取30PF左右。系統(tǒng)的時(shí)鐘電路設(shè)計(jì)是采用的內(nèi)部方式,即利用芯片

5、內(nèi)部的振蕩電路。AT89單片機(jī)內(nèi)部有一個(gè)用于構(gòu)成振蕩器的高增益反相放大器。引腳XTAL1和XTAL2分別是此放大器的輸入端和輸出端。這個(gè)放大器與作為反饋元件的片外晶體諧振器一起構(gòu)成一個(gè)自激振蕩器。外接晶體諧振器以及電容C1和C2構(gòu)成并聯(lián)諧振電路,接在放大器的反饋回路中。對(duì)外接電容的值雖然沒(méi)有嚴(yán)格的要求,但電容的大小會(huì)影響震蕩器頻率的高低、震蕩器的穩(wěn)定性、起振的快速性和溫度的穩(wěn)定性。因此,此系統(tǒng)電路的晶體振蕩器的值為12MHz,電容應(yīng)盡可能的選擇陶瓷電容,電容值約為30F。在焊接刷電路板時(shí),晶體振蕩器和電容應(yīng)盡可能安裝得與單片機(jī)芯片靠近,以減少寄生電容,更好地保證震蕩器穩(wěn)定和可靠地工作。輸入輸出

6、口的連接P0口:P0口為一個(gè)8位漏級(jí)開(kāi)路雙向I/O口,每腳可吸收8TTL門(mén)電流。當(dāng)P1口的管腳第一次寫(xiě)1時(shí),被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲(chǔ)器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時(shí),P0 口作為原碼輸入口,當(dāng)FIASH進(jìn)行校驗(yàn)時(shí),P0輸出原碼,此時(shí)P0外部必須被拉高。本次設(shè)計(jì)使用P0口的P0.0P0.2來(lái)分別控制調(diào)時(shí)中的時(shí)、分、秒。電路如下 P1口:P1口是一個(gè)內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門(mén)電流。P1口管腳寫(xiě)入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時(shí),將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校

7、驗(yàn)時(shí),P1口作為第八位地址接收。 本次設(shè)計(jì)P1口分別接段選74HC573的29引腳,鎖存控制數(shù)碼管的點(diǎn)亮。 P2口:P2口為一個(gè)內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個(gè)TTL門(mén)電流,當(dāng)P2口被寫(xiě)“1”時(shí),其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時(shí),P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲(chǔ)器或16位地址外部數(shù)據(jù)存儲(chǔ)器進(jìn)行存取時(shí),P2口輸出地址的高八位。在給出地址“1”時(shí),它利用內(nèi)部上拉優(yōu)勢(shì),當(dāng)對(duì)外部八位地址數(shù)據(jù)存儲(chǔ)器進(jìn)行讀寫(xiě)時(shí),P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗(yàn)時(shí)接收高八位地址信號(hào)和控制信號(hào)。

8、本次設(shè)計(jì)使用P2口的P2.0P2.5分別接位選74HC573的27腳,控制數(shù)碼管輪流點(diǎn)亮。此外,我們同樣用P2.7口控制蜂鳴器的報(bào)時(shí)。 P3口:P3口管腳是8個(gè)帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個(gè)TTL門(mén)電流。當(dāng)P3口寫(xiě)入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。本次使用了P3的P3.1P3.2分別控制段選和位選。(二)、軟件實(shí)現(xiàn)利用C語(yǔ)言編程如下(部分說(shuō)明已注釋?zhuān)?*P1口接段選,P2口接位選(P2.0到P2.5),段選letch接P3.1,位選letch接P3.2*/#include#include

9、DS18B20_3.H#define uint unsigned int#define uchar unsigned charuchar a,miao,shi,fen,ri,yue,nian,week,flag,key1n,temp;/flag用于讀取頭文件中的溫度值,和顯示溫度值#define yh 0x80 /LCD第一行的初始位置,因?yàn)長(zhǎng)CD1602字符地址首位D7恒定為1(100000000=80)#define er 0x80+0x40 /LCD第二行初始位置(因?yàn)榈诙械谝粋€(gè)字符位置地址是0x40)/液晶屏的與C51之間的引腳連接定義(顯示數(shù)據(jù)線接C51的P0口)sbit rs=P

10、10;sbit en=P12;sbit rw=P11; /如果硬件上rw接地,就不用寫(xiě)這句和后面的rw=0了/DS1302時(shí)鐘芯片與C51之間的引腳連接定義sbit IO=P14;sbit SCLK=P15;sbit RST=P13;sbit ACC0=ACC0;sbit ACC7=ACC7;/校時(shí)按鍵與C51的引腳連接定義sbit key1=P20; /設(shè)置鍵sbit key2=P21; /加鍵sbit key3=P22; /減鍵sbit buzzer=P34;/蜂鳴器,通過(guò)三極管9012驅(qū)動(dòng),端口低電平響uchar code tab1=20 - - ; /年顯示的固定字符uchar cod

11、e tab2= : : ;/時(shí)間顯示的固定字符uchar code tab3=liujuan & wzn ;/時(shí)間顯示的固定字符uchar code tab4=Num :15 & 26 ;/時(shí)間顯示的固定字符/延時(shí)函數(shù),后面經(jīng)常調(diào)用void delay(uint xms)/延時(shí)函數(shù),有參函數(shù)uint x,y;for(x=xms;x0;x-) for(y=110;y0;y-);/*液晶寫(xiě)入指令函數(shù)與寫(xiě)入數(shù)據(jù)函數(shù),以后可調(diào)用*/*在這個(gè)程序中,液晶寫(xiě)入有關(guān)函數(shù)會(huì)在DS1302的函數(shù)中調(diào)用,所以液晶程序要放在前面*/write_1602com(uchar com)/*液晶寫(xiě)入指令函數(shù)*rs=0;/數(shù)

12、據(jù)/指令選擇置為指令rw=0; /讀寫(xiě)選擇置為寫(xiě)P0=com;/送入數(shù)據(jù)delay(1);en=1;/拉高使能端,為制造有效的下降沿做準(zhǔn)備delay(1);en=0;/en由高變低,產(chǎn)生下降沿,液晶執(zhí)行命令write_1602dat(uchar dat)/*液晶寫(xiě)入數(shù)據(jù)函數(shù)*rs=1;/數(shù)據(jù)/指令選擇置為數(shù)據(jù)rw=0; /讀寫(xiě)選擇置為寫(xiě)P0=dat;/送入數(shù)據(jù)delay(1);en=1; /en置高電平,為制造下降沿做準(zhǔn)備delay(1);en=0; /en由高變低,產(chǎn)生下降沿,液晶執(zhí)行命令lcd_init()/*液晶初始化函數(shù)*write_1602com(0x38);/設(shè)置液晶工作模式,意思

13、:16*2行顯示,5*7點(diǎn)陣,8位數(shù)據(jù)write_1602com(0x0c);/開(kāi)顯示不顯示光標(biāo)write_1602com(0x06);/整屏不移動(dòng),光標(biāo)自動(dòng)右移write_1602com(0x01);/清顯示write_1602com(yh);/開(kāi)機(jī)后姓名顯示for(a=0;a15;a+)write_1602dat(tab3a);/向液晶屏寫(xiě)姓名部分delay(20);write_1602com(er+1);/序號(hào)寫(xiě)入位置for(a=0;a14;a+)write_1602dat(tab4a);delay(20);delay(4000);write_1602com(0x01);/清顯示writ

14、e_1602com(yh+1);/日歷顯示固定符號(hào)從第一行第1個(gè)位置之后開(kāi)始顯示for(a=0;a14;a+)write_1602dat(tab1a);/向液晶屏寫(xiě)日歷顯示的固定符號(hào)部分/delay(3);write_1602com(er+2);/時(shí)間顯示固定符號(hào)寫(xiě)入位置,從第2個(gè)位置后開(kāi)始顯示for(a=0;a0;a-)IO=ACC0;SCLK=0;SCLK=1;ACC=ACC1;uchar read_byte()/讀一個(gè)字節(jié)RST=1;for(a=8;a0;a-)ACC7=IO;SCLK=1;SCLK=0;ACC=ACC1;return (ACC);/-void write_1302(uc

15、har add,uchar dat)/向1302芯片寫(xiě)函數(shù),指定寫(xiě)入地址,數(shù)據(jù)RST=0;SCLK=0;RST=1;write_byte(add);write_byte(dat);SCLK=1;RST=0;uchar read_1302(uchar add)/從1302讀數(shù)據(jù)函數(shù),指定讀取數(shù)據(jù)來(lái)源地址uchar temp;RST=0;SCLK=0;RST=1;write_byte(add);temp=read_byte();SCLK=1;RST=0;return(temp);uchar BCD_Decimal(uchar bcd)/BCD碼轉(zhuǎn)十進(jìn)制函數(shù),輸入BCD,返回十進(jìn)制uchar Dec

16、imal;Decimal=bcd4;return(Decimal=Decimal*10+(bcd&=0x0F);/-void ds1302_init() /1302芯片初始化子函數(shù)(2010-01-07,12:00:00,week4)RST=0;SCLK=0;write_1302(0x8e,0x00); /允許寫(xiě),禁止寫(xiě)保護(hù) write_1302(0x80,0x00); /向DS1302內(nèi)寫(xiě)秒寄存器80H寫(xiě)入初始秒數(shù)據(jù)00write_1302(0x82,0x00); /向DS1302內(nèi)寫(xiě)分寄存器82H寫(xiě)入初始分?jǐn)?shù)據(jù)00write_1302(0x84,0x12); /向DS1302內(nèi)寫(xiě)小時(shí)寄存器

17、84H寫(xiě)入初始小時(shí)數(shù)據(jù)12write_1302(0x8a,0x05); /向DS1302內(nèi)寫(xiě)周寄存器8aH寫(xiě)入初始周數(shù)據(jù)5write_1302(0x86,0x02); /向DS1302內(nèi)寫(xiě)日期寄存器86H寫(xiě)入初始日期數(shù)據(jù)21write_1302(0x88,0x07); /向DS1302內(nèi)寫(xiě)月份寄存器88H寫(xiě)入初始月份數(shù)據(jù)06write_1302(0x8c,0x13); /向DS1302內(nèi)寫(xiě)年份寄存器8cH寫(xiě)入初始年份數(shù)據(jù)13write_1302(0x8e,0x80); /打開(kāi)寫(xiě)保護(hù)/-/溫度顯示子函數(shù)void write_temp(uchar add,uchar dat)/向LCD寫(xiě)溫度數(shù)據(jù),

18、并指定顯示位置uchar gw,sw;gw=dat%10;/取得個(gè)位數(shù)字sw=dat/10;/取得十位數(shù)字write_1602com(er+add);/er是頭文件規(guī)定的值0x80+0x40write_1602dat(0x30+sw);/數(shù)字+30得到該數(shù)字的LCD1602顯示碼write_1602dat(0x30+gw);/數(shù)字+30得到該數(shù)字的LCD1602顯示碼 write_1602dat(0xdf);/顯示溫度的小圓圈符號(hào),0xdf是液晶屏字符庫(kù)的該符號(hào)地址碼 write_1602dat(0x43);/顯示C符號(hào),0x43是液晶屏字符庫(kù)里大寫(xiě)C的地址碼/-/時(shí)分秒顯示子函數(shù)void w

19、rite_sfm(uchar add,uchar dat)/向LCD寫(xiě)時(shí)分秒,有顯示位置加、現(xiàn)示數(shù)據(jù),兩個(gè)參數(shù)uchar gw,sw;gw=dat%10;/取得個(gè)位數(shù)字sw=dat/10;/取得十位數(shù)字write_1602com(er+add);/er是頭文件規(guī)定的值0x80+0x40write_1602dat(0x30+sw);/數(shù)字+30得到該數(shù)字的LCD1602顯示碼write_1602dat(0x30+gw);/數(shù)字+30得到該數(shù)字的LCD1602顯示碼/-/年月日顯示子函數(shù)void write_nyr(uchar add,uchar dat)/向LCD寫(xiě)年月日,有顯示位置加數(shù)、顯示數(shù)

20、據(jù),兩個(gè)參數(shù)uchar gw,sw;gw=dat%10;/取得個(gè)位數(shù)字sw=dat/10;/取得十位數(shù)字write_1602com(yh+add);/設(shè)定顯示位置為第一個(gè)位置+addwrite_1602dat(0x30+sw);/數(shù)字+30得到該數(shù)字的LCD1602顯示碼write_1602dat(0x30+gw);/數(shù)字+30得到該數(shù)字的LCD1602顯示碼/-void write_week(uchar week)/寫(xiě)星期函數(shù)write_1602com(yh+0x0c);/星期字符的顯示位置switch(week)case 1:write_1602dat(M);/星期數(shù)為1時(shí),顯示 writ

21、e_1602dat(O); write_1602dat(N); break; case 2:write_1602dat(T);/星期數(shù)據(jù)為2時(shí)顯示 write_1602dat(U); write_1602dat(E); break;case 3:write_1602dat(W);/星期數(shù)據(jù)為3時(shí)顯示 write_1602dat(E); write_1602dat(D); break;case 4:write_1602dat(T);/星期數(shù)據(jù)為4是顯示 write_1602dat(H); write_1602dat(U); break;case 5:write_1602dat(F);/星期數(shù)據(jù)為

22、5時(shí)顯示 write_1602dat(R); write_1602dat(I); break;case 6:write_1602dat(S);/星期數(shù)據(jù)為6時(shí)顯示 write_1602dat(T); write_1602dat(A); break;case 7:write_1602dat(S);/星期數(shù)據(jù)為7時(shí)顯示 write_1602dat(U); write_1602dat(N); break;/*鍵盤(pán)掃描有關(guān)函數(shù)*void keyscan()if(key1=0)/-key1為功能鍵(設(shè)置鍵)-delay(9);/延時(shí),用于消抖動(dòng)if(key1=0)/延時(shí)后再次確認(rèn)按鍵按下 buzzer=

23、0;/蜂鳴器短響一次 delay(20); buzzer=1;while(!key1);key1n+;if(key1n=9)key1n=1;/設(shè)置按鍵共有秒、分、時(shí)、星期、日、月、年、返回,8個(gè)功能循環(huán)switch(key1n)case 1: TR0=0;/關(guān)閉定時(shí)器/TR1=0;write_1602com(er+0x09);/設(shè)置按鍵按動(dòng)一次,秒位置顯示光標(biāo) write_1602com(0x0f);/設(shè)置光標(biāo)為閃爍 temp=(miao)/10*16+(miao)%10;/秒數(shù)據(jù)寫(xiě)入DS1302 write_1302(0x8e,0x00); write_1302(0x80,0x80|temp

24、);/miao write_1302(0x8e,0x80); break;case 2: write_1602com(er+6);/按2次fen位置顯示光標(biāo) /write_1602com(0x0f);break;case 3: write_1602com(er+3);/按動(dòng)3次,shi /write_1602com(0x0f);break;case 4: write_1602com(yh+0x0e);/按動(dòng)4次,week /write_1602com(0x0f);break;case 5: write_1602com(yh+0x0a);/按動(dòng)5次,ri /write_1602com(0x0f)

25、;break;case 6: write_1602com(yh+0x07);/按動(dòng)6次,yue /write_1602com(0x0f);break;case 7: write_1602com(yh+0x04);/按動(dòng)7次,nian /write_1602com(0x0f);break;case 8:write_1602com(0x0c);/按動(dòng)到第8次,設(shè)置光標(biāo)不閃爍TR0=1;/打開(kāi)定時(shí)器 temp=(miao)/10*16+(miao)%10; write_1302(0x8e,0x00); write_1302(0x80,0x00|temp);/miao數(shù)據(jù)寫(xiě)入DS1302 write_

26、1302(0x8e,0x80); break;/-加鍵key2-if(key1n!=0)/當(dāng)key1按下以下。再按以下鍵才有效(按鍵次數(shù)不等于零)if(key2=0) /上調(diào)鍵delay(10);if(key2=0) buzzer=0;/蜂鳴器短響一次 delay(20); buzzer=1;while(!key2);switch(key1n)case 1:miao+;/設(shè)置鍵按動(dòng)1次,調(diào)秒if(miao=60)miao=0;/秒超過(guò)59,再加1,就歸零write_sfm(0x08,miao);/令LCD在正確位置顯示加設(shè)定好的秒數(shù)temp=(miao)/10*16+(miao)%10;/十進(jìn)

27、制轉(zhuǎn)換成DS1302要求的DCB碼 write_1302(0x8e,0x00); /允許寫(xiě),禁止寫(xiě)保護(hù) write_1302(0x80,temp); /向DS1302內(nèi)寫(xiě)秒寄存器80H寫(xiě)入調(diào)整后的秒數(shù)據(jù)BCD碼 write_1302(0x8e,0x80); /打開(kāi)寫(xiě)保護(hù)write_1602com(er+0x09);/因?yàn)樵O(shè)置液晶的模式是寫(xiě)入數(shù)據(jù)后,光標(biāo)自動(dòng)右移,所以要指定返回/write_1602com(0x0b);break;case 2:fen+;if(fen=60)fen=0;write_sfm(0x05,fen);/令LCD在正確位置顯示加設(shè)定好的分?jǐn)?shù)據(jù)temp=(fen)/10*16

28、+(fen)%10;/十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼 write_1302(0x8e,0x00);/允許寫(xiě),禁止寫(xiě)保護(hù) write_1302(0x82,temp);/向DS1302內(nèi)寫(xiě)分寄存器82H寫(xiě)入調(diào)整后的分?jǐn)?shù)據(jù)BCD碼 write_1302(0x8e,0x80);/打開(kāi)寫(xiě)保護(hù)write_1602com(er+6);/因?yàn)樵O(shè)置液晶的模式是寫(xiě)入數(shù)據(jù)后,指針自動(dòng)加一,在這里是寫(xiě)回原來(lái)的位置break;case 3:shi+;if(shi=24)shi=0;write_sfm(2,shi);/令LCD在正確的位置顯示加設(shè)定好的小時(shí)數(shù)據(jù)temp=(shi)/10*16+(shi)%10;/

29、十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼 write_1302(0x8e,0x00);/允許寫(xiě),禁止寫(xiě)保護(hù) write_1302(0x84,temp);/向DS1302內(nèi)寫(xiě)小時(shí)寄存器84H寫(xiě)入調(diào)整后的小時(shí)數(shù)據(jù)BCD碼 write_1302(0x8e,0x80);/打開(kāi)寫(xiě)保護(hù)write_1602com(er+3);/因?yàn)樵O(shè)置液晶的模式是寫(xiě)入數(shù)據(jù)后,指針自動(dòng)加一,所以需要光標(biāo)回位break;case 4:week+;if(week=8)week=1; write_1602com(yh+0x0C);/指定加后的周數(shù)據(jù)顯示位置write_week(week);/指定周數(shù)據(jù)顯示內(nèi)容 temp=(week)

30、/10*16+(week)%10;/十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼 write_1302(0x8e,0x00);/允許寫(xiě),禁止寫(xiě)保護(hù) write_1302(0x8a,temp);/向DS1302內(nèi)寫(xiě)周寄存器8aH寫(xiě)入調(diào)整后的周數(shù)據(jù)BCD碼 write_1302(0x8e,0x80);/打開(kāi)寫(xiě)保護(hù) write_1602com(yh+0x0e);/因?yàn)樵O(shè)置液晶的模式是寫(xiě)入數(shù)據(jù)后,指針自動(dòng)加一,所以需要光標(biāo)回位break;case 5:ri+;if(ri=32)ri=1;write_nyr(9,ri);/令LCD在正確的位置顯示加設(shè)定好的日期數(shù)據(jù)temp=(ri)/10*16+(ri)%10

31、;/十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼 write_1302(0x8e,0x00);/允許寫(xiě),禁止寫(xiě)保護(hù) write_1302(0x86,temp);/向DS1302內(nèi)寫(xiě)日期寄存器86H寫(xiě)入調(diào)整后的日期數(shù)據(jù)BCD碼 write_1302(0x8e,0x80);/打開(kāi)寫(xiě)保護(hù)write_1602com(yh+10);/因?yàn)樵O(shè)置液晶的模式是寫(xiě)入數(shù)據(jù)后,指針自動(dòng)加一,所以需要光標(biāo)回位break;case 6:yue+;if(yue=13)yue=1;write_nyr(6,yue);/令LCD在正確的位置顯示加設(shè)定好的月份數(shù)據(jù)temp=(yue)/10*16+(yue)%10;/十進(jìn)制轉(zhuǎn)換成DS1

32、302要求的DCB碼 write_1302(0x8e,0x00);/允許寫(xiě),禁止寫(xiě)保護(hù) write_1302(0x88,temp);/向DS1302內(nèi)寫(xiě)月份寄存器88H寫(xiě)入調(diào)整后的月份數(shù)據(jù)BCD碼 write_1302(0x8e,0x80);/打開(kāi)寫(xiě)保護(hù)write_1602com(yh+7);/因?yàn)樵O(shè)置液晶的模式是寫(xiě)入數(shù)據(jù)后,指針自動(dòng)加一,所以需要光標(biāo)回位break;case 7:nian+; if(nian=100)nian=0;write_nyr(3,nian);/令LCD在正確的位置顯示加設(shè)定好的年份數(shù)據(jù) temp=(nian)/10*16+(nian)%10;/十進(jìn)制轉(zhuǎn)換成DS1302

33、要求的DCB碼 write_1302(0x8e,0x00);/允許寫(xiě),禁止寫(xiě)保護(hù) write_1302(0x8c,temp);/向DS1302內(nèi)寫(xiě)年份寄存器8cH寫(xiě)入調(diào)整后的年份數(shù)據(jù)BCD碼 write_1302(0x8e,0x80);/打開(kāi)寫(xiě)保護(hù)write_1602com(yh+4);/因?yàn)樵O(shè)置液晶的模式是寫(xiě)入數(shù)據(jù)后,指針自動(dòng)加一,所以需要光標(biāo)回位break;/-減鍵key3,各句功能參照加鍵注釋-if(key3=0)delay(10);/調(diào)延時(shí),消抖動(dòng)if(key3=0) buzzer=0;/蜂鳴器短響一次 delay(20); buzzer=1;while(!key3);switch(k

34、ey1n)case 1:miao-;if(miao=-1)miao=59;/秒數(shù)據(jù)減到-1時(shí)自動(dòng)變成59write_sfm(0x08,miao);/在LCD的正確位置顯示改變后新的秒數(shù) temp=(miao)/10*16+(miao)%10;/十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼 write_1302(0x8e,0x00); /允許寫(xiě),禁止寫(xiě)保護(hù) write_1302(0x80,temp); /向DS1302內(nèi)寫(xiě)秒寄存器80H寫(xiě)入調(diào)整后的秒數(shù)據(jù)BCD碼 write_1302(0x8e,0x80); /打開(kāi)寫(xiě)保護(hù)write_1602com(er+0x09);/因?yàn)樵O(shè)置液晶的模式是寫(xiě)入數(shù)據(jù)后,指

35、針自動(dòng)加一,在這里是寫(xiě)回原來(lái)的位置/write_1602com(0x0b);break;case 2:fen-;if(fen=-1)fen=59;write_sfm(5,fen);temp=(fen)/10*16+(fen)%10;/十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼 write_1302(0x8e,0x00);/允許寫(xiě),禁止寫(xiě)保護(hù) write_1302(0x82,temp);/向DS1302內(nèi)寫(xiě)分寄存器82H寫(xiě)入調(diào)整后的分?jǐn)?shù)據(jù)BCD碼 write_1302(0x8e,0x80);/打開(kāi)寫(xiě)保護(hù)write_1602com(er+6);/因?yàn)樵O(shè)置液晶的模式是寫(xiě)入數(shù)據(jù)后,指針自動(dòng)加一,在這里是寫(xiě)

36、回原來(lái)的位置break;case 3:shi-; if(shi=-1)shi=23;write_sfm(2,shi);temp=(shi)/10*16+(shi)%10;/十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼 write_1302(0x8e,0x00);/允許寫(xiě),禁止寫(xiě)保護(hù) write_1302(0x84,temp);/向DS1302內(nèi)寫(xiě)小時(shí)寄存器84H寫(xiě)入調(diào)整后的小時(shí)數(shù)據(jù)BCD碼 write_1302(0x8e,0x80);/打開(kāi)寫(xiě)保護(hù)write_1602com(er+3);/因?yàn)樵O(shè)置液晶的模式是寫(xiě)入數(shù)據(jù)后,指針自動(dòng)加一,所以需要光標(biāo)回位break;case 4:week-;if(week

37、=0)week=7; write_1602com(yh+0x0C);/指定加后的周數(shù)據(jù)顯示位置write_week(week);/指定周數(shù)據(jù)顯示內(nèi)容 temp=(week)/10*16+(week)%10;/十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼 write_1302(0x8e,0x00);/允許寫(xiě),禁止寫(xiě)保護(hù) write_1302(0x8a,temp);/向DS1302內(nèi)寫(xiě)周寄存器8aH寫(xiě)入調(diào)整后的周數(shù)據(jù)BCD碼 write_1302(0x8e,0x80);/打開(kāi)寫(xiě)保護(hù) write_1602com(yh+0x0e);/因?yàn)樵O(shè)置液晶的模式是寫(xiě)入數(shù)據(jù)后,指針自動(dòng)加一,所以需要光標(biāo)回位break;

38、case 5:ri-;if(ri=0)ri=31;write_nyr(9,ri);temp=(ri)/10*16+(ri)%10;/十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼 write_1302(0x8e,0x00);/允許寫(xiě),禁止寫(xiě)保護(hù) write_1302(0x86,temp);/向DS1302內(nèi)寫(xiě)日期寄存器86H寫(xiě)入調(diào)整后的日期數(shù)據(jù)BCD碼 write_1302(0x8e,0x80);/打開(kāi)寫(xiě)保護(hù)write_1602com(yh+10);/因?yàn)樵O(shè)置液晶的模式是寫(xiě)入數(shù)據(jù)后,指針自動(dòng)加一,所以需要光標(biāo)回位break;case 6:yue-;if(yue=0)yue=12;write_nyr(6

39、,yue);temp=(yue)/10*16+(yue)%10;/十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼 write_1302(0x8e,0x00);/允許寫(xiě),禁止寫(xiě)保護(hù) write_1302(0x88,temp);/向DS1302內(nèi)寫(xiě)月份寄存器88H寫(xiě)入調(diào)整后的月份數(shù)據(jù)BCD碼 write_1302(0x8e,0x80);/打開(kāi)寫(xiě)保護(hù)write_1602com(yh+7);/因?yàn)樵O(shè)置液晶的模式是寫(xiě)入數(shù)據(jù)后,指針自動(dòng)加一,所以需要光標(biāo)回位break;case 7:nian-; if(nian=-1)nian=99;write_nyr(3,nian); temp=(nian)/10*16+(ni

40、an)%10;/十進(jìn)制轉(zhuǎn)換成DS1302要求的DCB碼 write_1302(0x8e,0x00);/允許寫(xiě),禁止寫(xiě)保護(hù) write_1302(0x8c,temp);/向DS1302內(nèi)寫(xiě)年份寄存器8cH寫(xiě)入調(diào)整后的年份數(shù)據(jù)BCD碼 write_1302(0x8e,0x80);/打開(kāi)寫(xiě)保護(hù)write_1602com(yh+4);/因?yàn)樵O(shè)置液晶的模式是寫(xiě)入數(shù)據(jù)后,指針自動(dòng)加一,所以需要光標(biāo)回位break;/-void init() /定時(shí)器、計(jì)數(shù)器設(shè)置函數(shù)TMOD=0x11; /指定定時(shí)/計(jì)數(shù)器的工作方式為3TH0=0; /定時(shí)器T0的高四位=0TL0=0; /定時(shí)器T0的低四位=0EA=1; /系統(tǒng)允許有開(kāi)放的中斷ET0=1; /允許T0中斷TR0=1; /開(kāi)啟中斷,啟動(dòng)定時(shí)器/*主函數(shù)*/*void main()buzzer=0;/蜂鳴器響2次 delay(70); buzzer=1;delay(40);buzzer=0;delay(70); buzzer=1;lcd_init(); /調(diào)用液晶屏初始化子函數(shù)ds1302_init(); /調(diào)用DS1302時(shí)鐘的初始化子函數(shù)init(); /調(diào)用定時(shí)計(jì)數(shù)器的設(shè)置子函數(shù)while(1) /無(wú)限循環(huán)下面的語(yǔ)句: keyscan(); /調(diào)用鍵盤(pán)掃描子函數(shù) void timer0(

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論