西華大學(xué)單片機(jī)課程設(shè)計(jì)之基于單片機(jī)與DS1302的數(shù)字鬧鐘_第1頁
西華大學(xué)單片機(jī)課程設(shè)計(jì)之基于單片機(jī)與DS1302的數(shù)字鬧鐘_第2頁
西華大學(xué)單片機(jī)課程設(shè)計(jì)之基于單片機(jī)與DS1302的數(shù)字鬧鐘_第3頁
西華大學(xué)單片機(jī)課程設(shè)計(jì)之基于單片機(jī)與DS1302的數(shù)字鬧鐘_第4頁
西華大學(xué)單片機(jī)課程設(shè)計(jì)之基于單片機(jī)與DS1302的數(shù)字鬧鐘_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上課程設(shè)計(jì)說明書 課 程 名 稱: 單片機(jī)應(yīng)用課程設(shè)計(jì) 課 程 代 碼: 題 目: 數(shù)字鬧鐘的設(shè)計(jì) 學(xué) 生 姓 名: 學(xué) 號(hào): 7 年級(jí)/專業(yè)/班: 2011級(jí)機(jī)電2班 學(xué)院(直屬系) : 機(jī)械工程與自動(dòng)化學(xué)院 指 導(dǎo) 教 師: 張恕遠(yuǎn) 數(shù)字鬧鐘的設(shè)計(jì)摘要電子時(shí)鐘主要是利用電子技術(shù)將時(shí)鐘電子化、數(shù)字化,擁有時(shí)鐘精確、體積小、界面友好、可擴(kuò)展性能強(qiáng)等特點(diǎn),被廣泛應(yīng)用于生活和工作當(dāng)中。另外,在生活和工農(nóng)業(yè)生產(chǎn)中,也常常需要溫度,這就需要電子時(shí)鐘具有多功能性。本設(shè)計(jì)主要為實(shí)現(xiàn)一款可正常顯示時(shí)鐘/日歷、帶有定時(shí)鬧鈴的多功能電子時(shí)鐘。本文對(duì)當(dāng)前電子鐘開發(fā)手段進(jìn)行了比較和分析,最終

2、確定了采用單片機(jī)技術(shù)實(shí)現(xiàn)多功能電子時(shí)鐘。本設(shè)計(jì)應(yīng)用AT89C52芯片作為核心,LCD1062進(jìn)行顯示,使用DS1302實(shí)時(shí)時(shí)鐘日歷芯片完成時(shí)鐘/日歷的基本功能。這種實(shí)現(xiàn)方法的優(yōu)點(diǎn)是電路簡(jiǎn)單,性能可靠,實(shí)時(shí)性好,時(shí)間精確,操作簡(jiǎn)單,編程容易。該電子時(shí)鐘可以應(yīng)用于一般的生活和工作中,也可通過改裝,提高性能,增加新功能,從而給人們的生活和工作帶來更多的方便。關(guān)鍵詞:電子時(shí)鐘;多功能;AT89C52;時(shí)鐘日歷專心-專注-專業(yè)目 錄摘要I1、設(shè)計(jì)任務(wù)、目的、思路12、總體設(shè)計(jì)方案23、電路原理的設(shè)計(jì)33.1        &

3、#160;  DS1302原理及電路33.2           晶振電路33.3           復(fù)位電路原理及電路43.4        LCD1602原理及電路43.5         &#

4、160; DS18B20電路53.6           按鍵電路及功能53.7           蜂鳴器電路64、軟件系統(tǒng)設(shè)計(jì)74.1          系統(tǒng)工作流程圖74.2           軟件系統(tǒng)

5、構(gòu)成85、系統(tǒng)調(diào)試與結(jié)果96、課程設(shè)計(jì)體會(huì)107、參考文獻(xiàn)11附錄: 程序代碼121、設(shè)計(jì)任務(wù)、目的、思路(1)任務(wù)用LCD顯示出月、日、分、星期和溫度,三四個(gè)按鍵可對(duì)時(shí)間進(jìn)行校正,并能實(shí)現(xiàn)鬧鐘功能。(2)目的1、掌握電子時(shí)鐘的基本工作方式。2、進(jìn)一步熟悉DS1302及DS18B20芯片的特性。3、通過使用各基本指令,進(jìn)一步熟練掌握單片機(jī)的編程和程序調(diào)試。(3)思路利用AT89C52的特點(diǎn)及DS1302的特點(diǎn),設(shè)計(jì)一種基于DS1302單片機(jī)控制,再利用LCD顯示的數(shù)字鐘。本系統(tǒng)硬件利用AT89S52作為CPU進(jìn)行總體控制,通過DS1302時(shí)鐘芯片獲取準(zhǔn)確詳細(xì)的時(shí)間(年、月、日、周、日、時(shí)、分、

6、秒準(zhǔn)確時(shí)間),對(duì)時(shí)鐘信號(hào)進(jìn)行控制,同時(shí)利用液晶顯示芯片LCD1602對(duì)時(shí)間進(jìn)行準(zhǔn)確顯示年、月、日、周、日、時(shí)、分、秒。2、總體設(shè)計(jì)方案LCD1602液晶顯示模塊DS1302時(shí)鐘模塊AT89C52單片機(jī)按鍵模塊蜂鳴器模塊晶振電路18B20溫度模塊復(fù)位電路根據(jù)系統(tǒng)設(shè)計(jì)的要求和設(shè)計(jì)思路,確定該系統(tǒng)的系統(tǒng)設(shè)計(jì)結(jié)構(gòu)圖。如圖所示。硬件電路主要由AT89C52單片機(jī)控制器單元、DS1302時(shí)鐘電路、復(fù)位電路、DS18B20溫度模塊、按鍵模塊、晶振電路、蜂鳴器模塊、LCD1602液晶顯示模塊等構(gòu)成。3、電路原理的設(shè)計(jì)3.1 DS1302原理及電路如下所示本設(shè)計(jì)使用的實(shí)時(shí)時(shí)鐘電路芯片是美國(guó)DALLAS公司生產(chǎn)的

7、一種高性能、低功耗、帶RAM的實(shí)時(shí)時(shí)鐘電路芯片DS1302。VCC1為后備電源,VCC2為主電源。在主電源關(guān)閉的情況下,也能保持時(shí)鐘的連續(xù)運(yùn)行。DS1302由VCC1或VCC2兩者中的較大 者供電;當(dāng)VCC2大于VCC10.2V時(shí),VCC2給DS1302供電;當(dāng)VCC2小于VCC1時(shí),DS1302由VCC1供電。X1和X2是振蕩源,外接32.768kHz晶振。RST非是復(fù)位/片選線,通過把RST非輸 入驅(qū)動(dòng)置高電平來啟動(dòng)所有的數(shù)據(jù)傳送。圖3.1-1圖3.1-23.2 晶振電路如下AT89S52在工作時(shí)需要外部提供時(shí)鐘信號(hào),因此,本設(shè)計(jì)選擇在其18腳19腳之間接上12MHz的晶振,為單片機(jī)提供1

8、s的機(jī)器振蕩周期。其電路連接圖如圖所示。在圖中,電容器C3、C4起穩(wěn)定振蕩頻率、快速起振的作用,其電容值一般在2050pF。圖3.23.3 復(fù)位電路原理及電路如下在AT89C52單片機(jī)中的振蕩器運(yùn)行時(shí),RST非引腳上保持到少2個(gè)機(jī)器周期的高電平輸入信號(hào),復(fù)位過程即可完成。根據(jù)此原理,本設(shè)計(jì)采用上電復(fù)位和按鍵復(fù)位嵌套在系統(tǒng)中,增強(qiáng)了系統(tǒng)的實(shí)用性。圖3.33.4 LCD1602原理及電路如下LCD1602液晶顯示是一種專門用來顯示字母、數(shù)字、符號(hào)等的點(diǎn)陣型液晶模塊。它由若干個(gè)5X7或者5X11等點(diǎn)陣字符位組成,每個(gè)點(diǎn)陣字符位都可以顯示一個(gè)字符,每位之間有一個(gè)點(diǎn)距的間隔,每行之間也有間隔,起到了字符

9、間距和行間距的作用,正因?yàn)槿绱怂运荒芎芎玫仫@示圖形(用自定義CGRAM,顯示效果也不好)。1602LCD是指顯示的內(nèi)容為16X2,即可以顯示兩行,每行16個(gè)字符液晶模塊(顯示字符和數(shù)字)。以其微功耗、體積小、顯示內(nèi)容豐富、超薄輕巧的諸多優(yōu)點(diǎn),在各種小系統(tǒng)中得到了更廣泛的應(yīng)用。本設(shè)計(jì)中使用的液晶顯示模塊是LCD1602。圖3.43.5 DS18B20電路如下DS18B20,常用的溫度傳感器,具有體積小,硬件開銷低,抗干擾能力強(qiáng),精度高的特點(diǎn)。圖3.53.6 按鍵電路如下圖3.6按鍵功能說明:KEY0為時(shí)鐘調(diào)節(jié)功能鍵,第一次按KEY0時(shí),時(shí)間停止且光標(biāo)在年處閃爍。第二次按KEY0時(shí),光標(biāo)在月處

10、閃爍。第三次按KEY0時(shí),光標(biāo)在日處閃爍。第四次按KEY0時(shí),光標(biāo)在星期處閃爍。第五次按KEY0時(shí),光標(biāo)在時(shí)處閃爍。第六次按KEY0時(shí),光標(biāo)在日處閃爍。第七次按KEY0時(shí),光標(biāo)在秒處閃爍。光標(biāo)閃爍時(shí)可用KEY1增加相應(yīng)的值或KEY2減少相應(yīng)的值。第八次按KEY0時(shí),保存了修改的時(shí)間值并返回顯示時(shí)間。KEY3為鬧鐘功能鍵。第一次按KEY3時(shí),進(jìn)入鬧鐘設(shè)置頁面,光標(biāo)在鬧鐘開關(guān)處閃爍。第二次按KEY3時(shí),光標(biāo)在分處閃爍。第三次按KEY3時(shí),光標(biāo)在時(shí)處閃爍。光標(biāo)閃爍時(shí),同樣可以用KEY1與KEY2修改相應(yīng)的值。當(dāng)鬧鐘響起時(shí),1分鐘后自動(dòng)關(guān)閉。3.7 蜂鳴器電路如下圖3.74、軟件系統(tǒng)設(shè)計(jì)4.1、系統(tǒng)工

11、作流程圖開始時(shí)間及LCD初始化鍵盤是否按下 y 設(shè)置時(shí)間(向DS1302寫入)讀取DS1302時(shí)間 NLCD顯示時(shí)間蜂鳴器響鬧鐘是否開起及鬧鐘時(shí)間是否到 Y 圖4.1系統(tǒng)工作流程圖4.2軟件系統(tǒng)構(gòu)成 軟件系統(tǒng)包含引腳定義及變量申明、LCD顯示部分、DS1302部分、鍵盤掃描部分、DS18B20溫度部分、主函數(shù)等等。 LCD部分對(duì)不變的顯示部分進(jìn)行LCD初始化,將需要變化的部分分開顯示,如將年、月、日、星期顯示在第一行,將時(shí)、分、秒、溫度、鬧鐘設(shè)置顯示在第二行。 DS1302對(duì)將要顯示的時(shí)間送入LCD進(jìn)行顯示,以及對(duì)調(diào)整后的時(shí)間進(jìn)行接收存儲(chǔ)計(jì)算及送入LCD重新顯示。 鍵盤掃描部分對(duì)鍵盤進(jìn)行掃描,

12、修改時(shí)間時(shí)按鍵使數(shù)據(jù)的改變而送入DS1302進(jìn)行時(shí)間的修改,以及鬧鐘時(shí)間的修改。 DS18B20部分對(duì)硬件采集到的環(huán)境溫度進(jìn)行數(shù)據(jù)轉(zhuǎn)換并送入LCD顯示。5、系統(tǒng)調(diào)試與結(jié)果系統(tǒng)調(diào)試過程利用Proteus繪制出相應(yīng)硬件電路后進(jìn)行仿真,出現(xiàn)液晶顯示無法正常顯示的問題。經(jīng)過思考和查閱的資料發(fā)現(xiàn)AT89C52的P0在進(jìn)高電平時(shí)沒有接上拉電阻導(dǎo)致LCD1602無法正常顯示時(shí)間。修改電路后(P0口接上拉電阻)燒入程序后,程序正常運(yùn)行,LCD1602準(zhǔn)確的顯示。用Proteus仿真能夠正確的現(xiàn)實(shí)時(shí)間,但燒入學(xué)習(xí)板出現(xiàn)亂碼現(xiàn)實(shí)不能正常工作。經(jīng)過反復(fù)檢查及思考發(fā)現(xiàn)仿真軟件上的硬件電路與學(xué)習(xí)板上的硬件電路不一致無法

13、對(duì)應(yīng)起來。最后根據(jù)學(xué)習(xí)板的硬件電路修改相應(yīng)程序及仿真軟件上的硬件電路,最終現(xiàn)實(shí)了功能。系統(tǒng)調(diào)試結(jié)果:圖5.16、課程設(shè)計(jì)體會(huì)本設(shè)計(jì)利用單片機(jī)AT89C512控制串行實(shí)時(shí)時(shí)鐘芯DS1302構(gòu)成數(shù)字時(shí)鐘電路,實(shí)現(xiàn)計(jì)時(shí)功能。該電路使用簡(jiǎn)單的三線接口,為單片機(jī)節(jié)省大量的接口資源,時(shí)鐘芯片帶有后備電池。該時(shí)鐘功能強(qiáng)大,性能優(yōu)越,能為很多領(lǐng)域,特別是對(duì)時(shí)鐘工作的準(zhǔn)確性和可靠性有較高要求。通過對(duì)電子時(shí)鐘的設(shè)計(jì)的設(shè)計(jì)與制作,讓我了解了電子時(shí)鐘模塊的編程思想,也讓我明白了電子時(shí)鐘的基本原理與設(shè)計(jì)理念,要設(shè)計(jì)一個(gè)電路必須先編好程序,用仿真軟件測(cè)試成功后再得出結(jié)論。通過這次學(xué)習(xí),讓我對(duì)該軟件有了更熟悉的了解,我們應(yīng)

14、該自己動(dòng)手,實(shí)際操作,才會(huì)有更深刻的理解。7、參考文獻(xiàn)1 黃惟公單片機(jī)原理與應(yīng)用技術(shù):西安電子科大出版社20072 張毅剛MC-51單片機(jī)應(yīng)用設(shè)計(jì)(二版):哈工大出版社 20053 宋戈. 黃鶴松. 51單片機(jī)應(yīng)用開發(fā)范例大全:人民郵電出版社 20104 劉建清. 51單片機(jī)新穎實(shí)例非常入門與視頻演練:電子工業(yè)出版社20125 郭天祥. 新概念51單片機(jī)C語言教程:電子工業(yè)出版社 2009附錄:程序代碼:#include<reg52.h>#define uchar unsigned char#define uint unsigned int/*-引腳定義-*/sbit RST=P3

15、5; /DS1302片選sbit DIO=P34; /DS1302數(shù)據(jù)信號(hào)sbit SCLK=P36; /DS1302時(shí)鐘信號(hào)sbit ACC7=ACC7;sbit ACC0=ACC0;sbit LCD_E=P27; /液晶使能端sbit LCD_RS=P26; /液晶數(shù)據(jù)命令選擇端sbit LCD_RW=P25; /液晶讀寫選擇端sbit key0=P10; /功能鍵sbit key1=P11; /增大鍵sbit key2=P12; /減小鍵sbit key3=P13;/鬧鐘調(diào)節(jié)按鍵sbit beep=P33;/蜂鳴器sbit DQ=P37; /18b20溫度輸入輸出端 void INITI

16、AL_1302(); /初始化1302uchar READ_1302(uchar addr); /讀1302 void WRITE_1302(uchar addr,uchar date);/寫1302uint temp;/定義整型的溫度數(shù)據(jù)float f_temp; /定義浮點(diǎn)型的溫度數(shù)據(jù)char hour,minute,second,week,day,month,year,tem;unsigned char num,num1,flag;bit alarmon,alarmoff;uchar xx,yy;unsigned char clkhh=0,clkmm=0,clkflag,clkvalue

17、;unsigned char str1="20 - - "unsigned char str2=" : : . C "unsigned char str3="alarm : "void delay(uchar z);/延時(shí)函數(shù)void LCD_WRITE_COM(uchar com);/LCD寫函數(shù)void LCD_WRITE_DATA(uchar date);/LCD寫數(shù)據(jù)void LCD_WRITE_SFM(uchar addr,uchar date);/LCD寫時(shí)分秒void LCD_WRITE_NYR(uchar addr,u

18、char date);/LCD寫年月日void LCD_WRITE_WEEK(uchar week);/LCD寫星期void LCD_INITIAL();/LCD初始化void LCD_WRITE_TEMP(uchar addr,uchar temp);/LCD寫溫度void keyscan();/鍵盤掃描void dis_temp(uint t);void tempchange(void);void tempwritebyte(uchar dat);uchar tempread(void);bit tempreadbit(void);void dsreset(void);uint get_t

19、emp();/獲取溫度/*主函數(shù)*/ void main() LCD_INITIAL(); /液晶初始化 INITIAL_1302(); /DS1302初始化 dsreset(); while(1) keyscan(); /按鍵掃描if(flag=0) /當(dāng)標(biāo)志位為0,允許讀取DS1302數(shù)據(jù),將數(shù)據(jù)送入液晶顯示 second=READ_1302(0x81); LCD_WRITE_SFM(6,second); minute=READ_1302(0x83); LCD_WRITE_SFM(3,minute); hour=READ_1302(0x85); LCD_WRITE_SFM(0,hour);

20、 week=READ_1302(0x8b); LCD_WRITE_WEEK(week); day=READ_1302(0x87); LCD_WRITE_NYR(8,day); month=READ_1302(0x89); LCD_WRITE_NYR(5,month); year=READ_1302(0x8d); LCD_WRITE_NYR(2,year); tempchange(); dis_temp(get_temp(); /*LCD1602*/void delay(uchar z) /1602de延時(shí)函數(shù) unsigned char x,y; for(x=z;x>0;x-) for(

21、y=110;y>0;y-);void LCD_WRITE_COM(uchar com) /1602寫函數(shù) LCD_RS=0; LCD_RW=0; LCD_E=1; P0=com; delay(5); LCD_E=0;void LCD_WRITE_DATA(uchar date) /1602寫數(shù)據(jù) LCD_RS=1; LCD_RW=0; LCD_E=1; P0=date; delay(5); LCD_E=0;void LCD_WRITE_SFM(uchar addr,uchar date) /LCD寫時(shí)分秒 unsigned char shi,ge; shi=date/10; ge=dat

22、e%10; LCD_WRITE_COM(0x80+0x40+addr); LCD_WRITE_DATA(0x30+shi); LCD_WRITE_DATA(0x30+ge); void LCD_WRITE_NYR(unsigned char addr,unsigned char date)/LCD寫年月日 char shi,ge; shi=date/10; ge=date%10; LCD_WRITE_COM(0x80+addr); LCD_WRITE_DATA(0x30+shi); LCD_WRITE_DATA(0x30+ge);void LCD_WRITE_CLK(unsigned char

23、 addr,unsigned char date)/LCD寫鬧鐘 char shi,ge; shi=date/10; ge=date%10; LCD_WRITE_COM(0x80+0x40+addr); LCD_WRITE_DATA(0x30+shi); LCD_WRITE_DATA(0x30+ge);void LCD_WRITE_WEEK(uchar week)/LCD寫星期 LCD_WRITE_COM(0x80+11); switch(week) case 1: LCD_WRITE_DATA('S');delay(5); LCD_WRITE_DATA('U'

24、);delay(5); LCD_WRITE_DATA('N');break; case 2: LCD_WRITE_DATA('M');delay(5); LCD_WRITE_DATA('O');delay(5); LCD_WRITE_DATA('N');break; case 3: LCD_WRITE_DATA('T');delay(5); LCD_WRITE_DATA('U');delay(5); LCD_WRITE_DATA('E');break; case 4: LCD_WRI

25、TE_DATA('W');delay(5); LCD_WRITE_DATA('E');delay(5); LCD_WRITE_DATA('D');break; case 5: LCD_WRITE_DATA('T');delay(5); LCD_WRITE_DATA('H');delay(5); LCD_WRITE_DATA('U');break; case 6: LCD_WRITE_DATA('F');delay(5); LCD_WRITE_DATA('R');del

26、ay(5); LCD_WRITE_DATA('I');break; case 7: LCD_WRITE_DATA('S');delay(5); LCD_WRITE_DATA('A');delay(5); LCD_WRITE_DATA('T');break; void LCD_WRITE_TEMP(uchar addr,uchar temp)/LCD寫溫度 LCD_WRITE_COM(0x80+0x40+addr); LCD_WRITE_DATA(0x30+temp);void CLK_INITIAL(uchar addr,ucha

27、r clknum)/鬧鐘初始化uchar i;char shi,ge; shi=clknum/10; ge=clknum%10;LCD_WRITE_COM(0x38); LCD_WRITE_COM(0x0c); LCD_WRITE_COM(0x06);LCD_WRITE_COM(0x80);LCD_WRITE_COM(0x80+0x40);/液晶第二行顯示for(i=0;i<16;i+) LCD_WRITE_DATA(str3i); delay(5);LCD_WRITE_COM(0x80+0x40+addr);LCD_WRITE_DATA(shi/10+0x30);LCD_WRITE_D

28、ATA(ge%10+0x30);void LCD_INITIAL()/LCD初始化 unsigned char i;LCD_WRITE_COM(0x38); LCD_WRITE_COM(0x0c); LCD_WRITE_COM(0x06);LCD_WRITE_COM(0x80);for(i=0;i<16;i+)/液晶第一行顯示 LCD_WRITE_DATA(str1i); delay(5);LCD_WRITE_COM(0x80+0x40);/液晶第二行顯示for(i=0;i<16;i+) LCD_WRITE_DATA(str2i); delay(5);/*1302*/void WR

29、ITE_1302(uchar addr,uchar date)/向1302寫數(shù)據(jù) unsigned char i; RST=0; SCLK=0; RST=1; for(i=8;i>0;i-) SCLK=0; ACC=addr; DIO=ACC0; addr>>=1; SCLK=1; for(i=8;i>0;i-) SCLK=0; ACC=date; DIO=ACC0; date>>=1; SCLK=1; RST=0;unsigned char READ_1302(unsigned char addr)/從1302讀數(shù)據(jù) unsigned char i,dat

30、e1,date2; RST=0; SCLK=0; RST=1; for(i=8;i>0;i-) SCLK=0; ACC=addr; DIO=ACC0; addr>>=1; SCLK=1; for(i=8;i>0;i-) ACC7=DIO; SCLK=1; ACC>>=1; SCLK=0; RST=0; date1=ACC; date2=date1/16; date1=date1%16; date1=date1+date2*10; return(date1) ;void INITIAL_1302()/初始化1302 WRITE_1302(0x80,READ_1

31、302(0x81)&0x7f); /啟動(dòng)DS1302 0x80寫秒地址/*鍵盤掃描部分*/void keyscan() if(key0=0)/確認(rèn)功能鍵按下 delay(20); if(key0=0)/去抖 while(!key0);/釋放 num+; switch(num) case 1: flag=1; /修改時(shí)間,禁止從DS1302讀數(shù)據(jù) LCD_WRITE_COM(0x0f); /光標(biāo)開始閃爍 LCD_WRITE_COM(0x80+3);/第一次按下,光標(biāo)定位到年位置 break; case 2: LCD_WRITE_COM(0x80+6);/第二次按下,光標(biāo)定位到月位置 br

32、eak; case 3: LCD_WRITE_COM(0x80+9);/第三次按下,光標(biāo)定位到日位置 break; case 4: LCD_WRITE_COM(0x80+13);/第四次按下,光標(biāo)定位到星期位置 break; case 5: LCD_WRITE_COM(0x80+0x40+1);/第五次按下,光標(biāo)定位到時(shí)位置 break; case 6: LCD_WRITE_COM(0x80+0x40+4);/第六次按下,光標(biāo)定位到分位置 break; case 7:LCD_WRITE_COM(0x80+0x40+7);/第七次按下,光標(biāo)定位到秒位 break; case 8: num=0;/

33、第八次按下,記錄清零 LCD_WRITE_COM(0x0c);/不顯示光標(biāo) WRITE_1302(0x8E,0x00); /允許寫操作 0x8E寫保護(hù) WRITE_1302(0x80,(second/10*16)+second%10);/將調(diào)節(jié)后的秒寫入DS1302 WRITE_1302(0x82,(minute/10*16)+minute%10);/將調(diào)節(jié)后的分寫入DS1302 WRITE_1302(0x84,(hour/10*16)+hour%10);/將調(diào)節(jié)后的時(shí)寫入DS1302 WRITE_1302(0x8a,(week/10*16)+week%10);/將調(diào)節(jié)后的星期寫入DS1302

34、 WRITE_1302(0x86,(day/10*16)+day%10);/將調(diào)節(jié)后的日寫入DS1302 WRITE_1302(0x88,(month/10*16)+month%10);/將調(diào)節(jié)后的月寫入DS1302 WRITE_1302(0x8c,(year/10*16)+year%10);/將調(diào)節(jié)后的年寫入DS1302 WRITE_1302(0x8E,0x80); /開寫保護(hù) flag=0; /時(shí)間修改完畢,允許液晶從DS1302讀數(shù)據(jù) break; if(num!=0) if(key1=0)/確認(rèn)增大鍵按下 delay(20); if(key1=0)/增大鍵確實(shí)按下 while(!key

35、1);switch(num) case 1:year+;/調(diào)節(jié)年 if(year=100)year=0; LCD_WRITE_NYR(2,year);/將調(diào)節(jié)后的年送入液晶顯示 LCD_WRITE_COM(0x80+3);/光標(biāo)回到指定處break; case 2: month+;/調(diào)節(jié)月 if(month=13)month=0; LCD_WRITE_NYR(5,month);/將調(diào)節(jié)后的月送入液晶顯示 LCD_WRITE_COM(0x80+6);/光標(biāo)回到指定處break; case 3: day+;/調(diào)節(jié)日 if(day=32)day=0; LCD_WRITE_NYR(8,day);/將調(diào)

36、節(jié)后的日送入液晶顯示 LCD_WRITE_COM(0x80+9);/光標(biāo)回到指定處 break; case 4: week+; if(week=8)week=0; LCD_WRITE_WEEK(week);/將調(diào)節(jié)后的星期送入液晶顯示 LCD_WRITE_COM(0x80+13);/光標(biāo)回到指定處 break; case 5: hour+; if(hour=24)hour=0; LCD_WRITE_SFM(0,hour);/將調(diào)節(jié)后的小時(shí)送入液晶顯示 LCD_WRITE_COM(0x80+0x40+1);/光標(biāo)回到指定處 break; case 6: minute+; if(minute=60

37、)minute=0; LCD_WRITE_SFM(3,minute);/將調(diào)節(jié)后的分送入液晶顯示 LCD_WRITE_COM(0x80+0x40+4);/光標(biāo)回到指定處 break; case 7: second+; if(second=60)second=0; LCD_WRITE_SFM(6,second);/將調(diào)節(jié)后的秒送入液晶顯示 LCD_WRITE_COM(0x80+0x40+7);/光標(biāo)回到指定處 break;default:break; if(key2=0)/確認(rèn)減小鍵按下 delay(20); if(key2=0)/減小鍵確實(shí)按下 while(!key2);switch(num)

38、 case 1: year-;/調(diào)節(jié)年 if(year=-1)year=99; LCD_WRITE_NYR(2,year); LCD_WRITE_COM(0x80+3); break; case 2: month-;/調(diào)節(jié)月 if(month=-1)month=12; LCD_WRITE_NYR(5,month); LCD_WRITE_COM(0x80+6); break; case 3: day-;/調(diào)節(jié)日 if(day=-1)day=31; LCD_WRITE_NYR(8,day); LCD_WRITE_COM(0x80+9); break; case 4: week-;/調(diào)節(jié)星期 if(

39、week=0)week=7; LCD_WRITE_WEEK(week); LCD_WRITE_COM(0x80+13); break; case 5: hour-;/調(diào)節(jié)時(shí) if(hour=-1)hour=23; LCD_WRITE_SFM(0,hour); LCD_WRITE_COM(0x80+0x40+1); break; case 6: minute-;/調(diào)節(jié)分 if(minute=-1)minute=59; LCD_WRITE_SFM(3,minute); LCD_WRITE_COM(0x80+0x40+4); break; case 7: second-;/調(diào)節(jié)秒 if(second

40、=-1)second=59; LCD_WRITE_SFM(6,second); LCD_WRITE_COM(0x80+0x40+7); break; default:break; /*鬧鐘部分*/ if(key3=0)/鬧鐘調(diào)節(jié)鍵delay(20);if(key3=0)while(!key3);num1+; switch(num1) case 1: CLK_INITIAL(6,clkhh); CLK_INITIAL(9,clkmm); flag=1; LCD_WRITE_COM(0x0f); /光標(biāo)開始閃爍 LCD_WRITE_COM(0x80+0x40+12);/第一次按/下,光標(biāo)定位到鬧鐘

41、開關(guān)位置 break; case 2: LCD_WRITE_COM(0x80+0x40+10);/第二次按下,/光標(biāo)定位到鬧鐘分鐘位置 break; case 3: LCD_WRITE_COM(0x80+0x40+7);/第二次按下,/光標(biāo)定位到鬧鐘分鐘位置 break; case 4: num1=0; LCD_WRITE_COM(0x0c); LCD_INITIAL(); flag=0; break; if(num1!=0) if(key1=0)/確認(rèn)增大鍵按下 delay(20); if(key1=0)/增大鍵確實(shí)按下 while(!key1);switch(num1)case 1: cl

42、kflag+; switch(clkflag) case 1:clkvalue=1; LCD_WRITE_DATA('O'); LCD_WRITE_DATA('N'); LCD_WRITE_DATA(' ');LCD_WRITE_COM(0X80+0X40+12);break; case 2:clkvalue=0; clkflag=0;LCD_WRITE_DATA('O');LCD_WRITE_DATA('F');LCD_WRITE_DATA('F');LCD_WRITE_COM(0X80+0X40+12);break; ;break;case 3: clkhh+;if(clkhh=24)clkhh=0;LCD_WRITE_CLK(6,clkhh);LCD_WRITE_COM(0x80+0x40+7);/光標(biāo)回到指定處break; case 2: clkmm+;if(clkmm=60)clkmm=0;LCD_WRITE_CLK(9,clkmm);LCD_WRITE_COM(0x80+0x40+10);/光標(biāo)回到指定處break; defa

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論