帶溫度顯示的數(shù)字時鐘設(shè)計_第1頁
帶溫度顯示的數(shù)字時鐘設(shè)計_第2頁
帶溫度顯示的數(shù)字時鐘設(shè)計_第3頁
帶溫度顯示的數(shù)字時鐘設(shè)計_第4頁
帶溫度顯示的數(shù)字時鐘設(shè)計_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、專業(yè)技能實(shí)訓(xùn)報告題 目 帶溫度顯示的數(shù)字時鐘設(shè)計 學(xué) 院 專 業(yè) 班 級 學(xué) 生 學(xué) 號 二一三 年 一 月 六 日目 錄1 前言.1 2功能描述與總體方案.2 2.1功能描述.2 2.2系統(tǒng)組成.23硬件設(shè)計.3 3.1時鐘電路.3 3.2復(fù)位電路.3 3.3 ds1302時鐘電路.4 3.4 ds18b20溫度計電路.4 3.5 按鍵電路.5 3.6 顯示電路.6 3.7 鬧鈴模塊電路.74軟件設(shè)計.8 4.1 主函數(shù)流程圖.8 4.2 18b20溫度計流程圖.9 4.3 按鍵電路流程圖.105結(jié)語.116參考文獻(xiàn).127附錄.13 前言單片微型計算機(jī)是隨著超大規(guī)模集成電路技術(shù)的發(fā)展而誕生

2、的,由于它具有體積小、功能強(qiáng)、性價比高等特點(diǎn),所以廣泛應(yīng)用于電子儀表、家用電器、節(jié)能裝置、軍事裝置、機(jī)器人、工業(yè)控制等諸多領(lǐng)域,使產(chǎn)品小型化、智能化,既提高了產(chǎn)品的功能和質(zhì)量,又降低了成本,簡化了設(shè)計。本文主要介紹由單片機(jī)控制的帶有溫度顯示的電子鐘的設(shè)計。隨著人們生活水平的日益提高,人們對生活的要求越來越高,原有的事物已經(jīng)不能滿足人們的生活需求了,一些帶有新功能的事物已經(jīng)在慢慢的取代舊事物。就像電子鐘一樣,人們用電子鐘不僅僅只是看時間了,人們還需要看溫度了。越來越多的新功能更貼近人們的生活了,所以也越來越受人們所喜歡。帶有溫度的的電子鐘可以使人們隨時都可以了解溫度的變化。本文介紹了設(shè)計的框架結(jié)

3、構(gòu)和組成模塊以及各模塊的原理,介紹了各部分硬件設(shè)計和各部分軟件設(shè)計以及軟件流程圖。該設(shè)計是以at89c51單片機(jī)為控制核心的集多種功能于一體的數(shù)字鐘。該數(shù)字鐘實(shí)現(xiàn)了具有時間顯示功能;具有溫度顯示功能。硬件設(shè)計分為單片機(jī)控制模塊、按鍵模塊、溫度模塊、時鐘模塊、顯示模塊等幾個部分。 功能描述與總體方案2.1 功能描述根據(jù)主要功能要求,該設(shè)計利用51單片機(jī)實(shí)現(xiàn)了電子時鐘、溫度的顯示以及設(shè)置鬧鈴等功能。具體可分為一下幾種:(1)顯示當(dāng)前的時間,24時制的時、分、秒;(2)可調(diào)節(jié)時間;(3)顯示當(dāng)前屋內(nèi)溫度; 2.2系統(tǒng)組成用主芯片為at89c51的單片機(jī)控制實(shí)現(xiàn),為了滿足單片機(jī)系統(tǒng)的實(shí)時控制的需求,采

4、用實(shí)時鐘芯片ds1302,使用按鍵進(jìn)行時間的調(diào)整和定時,溫度傳感器使用ds18b20。顯示時間和溫度使用lcd1602顯示。主程序如圖2.1,一給單片機(jī)上電,單片機(jī)就初始化。單片機(jī)接收并處理來自ds18b20傳過來的數(shù)據(jù)在液晶上顯示當(dāng)時的室內(nèi)溫度,液晶還顯示當(dāng)前的時間,日期。當(dāng)需要設(shè)置鬧鐘或調(diào)整時間時,又檢測按鍵是否按下,以便對時間進(jìn)行修正、設(shè)置鬧鐘時間,最后進(jìn)入循環(huán)。圖2.1 主程序框圖 硬件設(shè)計 3.1時鐘電路系統(tǒng)的時鐘電路設(shè)計是采用的內(nèi)部方式,即利用芯片內(nèi)部的振蕩電路。51單片機(jī)內(nèi)部有一個用于構(gòu)成振蕩器的高增益反相放大器。引腳xtal1和xtal2分別是此放大器的輸入端和輸出端。這個放大

5、器與作為反饋元件的片外晶體諧振器一起構(gòu)成一個自激振蕩器。外接晶體諧振器以及電容c1和c2構(gòu)成并聯(lián)諧振電路,接在放大器的反饋回路中。圖3.1 時鐘電路圖3.2復(fù)位電路復(fù)位是由外部的復(fù)位電路來實(shí)現(xiàn)的。片內(nèi)復(fù)位電路是復(fù)位引腳rst通常采用上電自動復(fù)位和按鍵手動復(fù)位兩種方式,此電路系統(tǒng)采用的是按鍵手動復(fù)位電路,高電平時復(fù)位,如圖3.2所示。圖3.2 復(fù)位電路圖3.3 ds1302時鐘電路ds1302內(nèi)含一個實(shí)時時鐘/日歷和31字節(jié)靜態(tài)ram,可以通過串行接口與單片機(jī)進(jìn)行通信。實(shí)時時鐘/日歷電路提供秒、分、時、日、星期、月、年的信息,每個月的天數(shù)和閏年的天數(shù)可自動調(diào)整,時鐘操作可通過am/pm標(biāo)志位決定

6、采用24或12小時時間格式。ds1302與單片機(jī)之間能簡單地采用同步串行的方式進(jìn)行通信,僅需三根i/o線:復(fù)位(rst)、i/o數(shù)據(jù)線、串行時鐘(sclk)。ds1302時鐘電路如圖3.3所示。圖3.3 ds1302時鐘電路3.4 ds18b20溫度計電路ds18b20溫度傳感器的內(nèi)部存儲器包括一個高速暫存ram和一個非易失性的可電擦除的e2ppram,后者存放高溫度和低溫度觸發(fā)器th、t和結(jié)構(gòu)寄存器。暫存存儲器包含了8個連續(xù)字節(jié),前兩個字節(jié)是測得的溫度信息,第一個字節(jié)的內(nèi)容是溫度的低八位,第二個字節(jié)是溫度的高八位。第三個和第四個字節(jié)是th、tl的易失性拷貝,第五個字節(jié)是結(jié)構(gòu)寄存器的易失性拷貝

7、,這三個字節(jié)的內(nèi)容在每一次上電復(fù)位時被刷新。第六、七、八個字節(jié)用于內(nèi)部計算.ds18b20它具有3引腳to92小體積封裝形式,溫度測量范圍為55125,可編程為9位12位a/d轉(zhuǎn)換精度,測溫分辨率可達(dá)0.0625,被測溫度用符號擴(kuò)展的16位數(shù)字量方式串行輸出,其工作電源既可在遠(yuǎn)端引入,也可采用寄生電源方式產(chǎn)生,多個ds18b20可以并聯(lián)到3根或2根線上,cpu只需一根端口線就能與多個ds18b20通信,占用微處理器的端口較少,可節(jié)省大量的引線和邏輯電路。以上特點(diǎn)使ds18b20非常適用于遠(yuǎn)距離多點(diǎn)溫度檢測系統(tǒng)。電路圖如圖3.4所示。圖3.4 ds18b20溫度計電路 3.5按鍵電路獨(dú)立按鍵用來

8、用作調(diào)節(jié)時鐘以及鬧鈴。按鍵均采用低電平有效連接方式。幾個按鍵可以對時鐘進(jìn)行設(shè)置調(diào)節(jié),并調(diào)節(jié)設(shè)置鬧鈴,當(dāng)時間與設(shè)置的時間一致是鬧鈴報警,即蜂鳴器響。鍵盤接口是單片機(jī)應(yīng)用系統(tǒng)中最常用的接口之一,鍵盤的類型很多,常用的有獨(dú)立式鍵盤和矩陣式鍵盤,因?yàn)楸驹O(shè)計需要的鍵盤比較少,所以采用獨(dú)立式的應(yīng)用中,需要解決鍵盤消抖的問題,一般使用的是軟件消抖的方法。圖3.5按鍵電路圖3.6顯示電路顯示器是單片機(jī)常用的功能單元之一,顯示器的主要功能是為單片機(jī)系統(tǒng)使用者提供必要的單片機(jī)工作信息,或者提供工作狀態(tài)的提示信息,顯示器的工作是由單片機(jī)通過顯示接口驅(qū)動的。本設(shè)計采用的是lcd1602顯示電路圖如圖3.6所示。160

9、2液晶顯示器以其微功耗、體積小、顯示內(nèi)容豐富、超薄輕巧的諸多優(yōu)點(diǎn),在袖珍式儀表和低功耗應(yīng)用系統(tǒng)中得到越來越廣泛的應(yīng)用。1602采用標(biāo)準(zhǔn)的16腳接口,其中vss為地電源,vdd接5v正電源,v0為液晶顯示器對比度調(diào)整端,接正電源時對比度最弱,接地電源時對比度最高,對比度過高時會產(chǎn)生“鬼影”,可通過一10k的電位器調(diào)整對比度。rs為寄存器選擇,高電平時選擇數(shù)據(jù)寄存器、低電平時選擇指令寄存器。rw為讀寫信號線,高電平時進(jìn)行讀操作,低電平時進(jìn)行寫操作。當(dāng)rs和rw共同為低電平時可以寫入指令或者顯示地址,當(dāng)rs為低電平rw為高電平時可以讀忙信號,當(dāng)rs為高電平rw為低電平時可以寫入數(shù)據(jù)。e端為使能端,當(dāng)

10、e端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。液晶顯示部分,我們選用lcd1602c,其接法和普通的1602接法一樣。1腳接地,2腳接電源,3腳接一個電位器以調(diào)節(jié)液晶顯示器的亮度,16腳接地,15腳接背光電源。在調(diào)試的時候,有時液晶不亮,多半是因?yàn)檫z漏背光電源,也有可能是虛焊導(dǎo)致。圖3.6顯示電路3.7 鬧鈴模塊電路鬧鈴模塊主要就是一個蜂鳴器,其作用是當(dāng)?shù)竭_(dá)設(shè)定的時間到時發(fā)出蜂鳴聲報警。用一個pnp型三極管和蜂鳴器連接主要是給蜂鳴器一個驅(qū)動,讓蜂鳴器為高電平有效,即p07口高電平時蜂鳴器發(fā)聲報警。圖3.7 鬧鈴模塊電路 軟件設(shè)計 4.1主函數(shù)流程 圖4.1 主函數(shù)流程圖 4.2 18b20溫度

11、計流程圖4.2 18b20溫度計流程 4.3 按鍵電路流程圖 圖4.3按鍵電路流程圖 結(jié)語 本次實(shí)訓(xùn)在老師的指導(dǎo)和同學(xué)的幫助下順利完成。本次設(shè)計的是一個帶溫度顯示的電子時鐘。在本次試驗(yàn)中,感覺到自己單片機(jī)知識非常欠缺,編程方面很多知識不懂,在同學(xué)的幫助下,并借鑒了其他同學(xué)的部分程序,經(jīng)過調(diào)試后在單片機(jī)上顯示出最終結(jié)果,一個小型的帶溫度顯示的萬年歷就做出來了。通過本次設(shè)計,了解了時鐘芯片、溫度傳感器的一些基本原理及用途,并學(xué)習(xí)了單片機(jī)中一些基本指令的運(yùn)用,明白了寫程序的困難及軟件思維和邏輯思維能力的重要性,提高了自己思考問題的嚴(yán)謹(jǐn)性,并且體會到了團(tuán)隊合作的重要性,增強(qiáng)了解決困難的能力。在此感謝老

12、師在本次課程設(shè)計中的指導(dǎo),使得本次設(shè)計順利的完成。參考文獻(xiàn)1 萬光毅. 嚴(yán)義. 單片機(jī)實(shí)驗(yàn)與實(shí)踐教程(一)m, 北京航空航天大學(xué)出版社;2 夏繼強(qiáng). 沈德金. 單片機(jī)實(shí)驗(yàn)與實(shí)踐教程(二)m ,北京航空航天大學(xué)出版社;3 李廣弟. 朱月秀. 王秀山. 單片機(jī)基礎(chǔ)(修訂本)m,北京航空航天大學(xué)出版社;4 徐愛鈞. 彭秀華. 單片機(jī)高級語言c51應(yīng)用程序設(shè)計m,2000年版;5 馬家辰. mcs-51單片機(jī)原理及其接口技術(shù)m,哈爾濱工業(yè)大學(xué)出版社,1997年版;6 甕嘉民. 單片機(jī)應(yīng)用開發(fā)技術(shù)基于proteus仿真和c語言編程m,中國電力出版社,2009年版;7李強(qiáng). 51系列單片機(jī)應(yīng)用軟件編程技術(shù)

13、m,北京航空航天大學(xué)出版社,2009年版。附錄#include#includeds18b20_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)閘cd1602字符地址首位d7恒定為1(100000000=80)#define er 0x80+0x40 /lcd第二行初始位置(因?yàn)榈诙械谝粋€字符位置地址是0x40)/液晶

14、屏的與c51之間的引腳連接定義(顯示數(shù)據(jù)線接c51的p0口)sbit rs=p20;sbit en=p22;sbit rw=p21; /如果硬件上rw接地,就不用寫這句和后面的rw=0了sbit led=p26; /lcd背光開關(guān)/ds1302時鐘芯片與c51之間的引腳連接定義sbit io=p11;sbit sclk=p10;sbit rst=p12;sbit acc0=acc0;sbit acc7=acc7;/*acc累加器=aacc.0=e0h acc.0就是acc的第0位。acc可以位尋址。 */校時按鍵與c51的引腳連接定義sbit key1=p15; /設(shè)置鍵sbit key2=p

15、16; /加鍵sbit key3=p17; /減鍵sbit buzzer=p13;/蜂鳴器,通過三極管9012驅(qū)動,端口低電平響/*/uchar code tab1=20 - - ; /年顯示的固定字符uchar code tab2= : : ;/時間顯示的固定字符/延時函數(shù),后面經(jīng)常調(diào)用void delay(uint xms)/延時函數(shù),有參函數(shù)uint x,y;for(x=xms;x0;x-) for(y=110;y0;y-);/*液晶寫入指令函數(shù)與寫入數(shù)據(jù)函數(shù),以后可調(diào)用*/*在這個程序中,液晶寫入有關(guān)函數(shù)會在ds1302的函數(shù)中調(diào)用,所以液晶程序要放在前面*/write_1602com

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

17、te_1602com(0x38);/設(shè)置液晶工作模式,意思:16*2行顯示,5*7點(diǎn)陣,8位數(shù)據(jù)write_1602com(0x0c);/開顯示不顯示光標(biāo)write_1602com(0x06);/整屏不移動,光標(biāo)自動右移write_1602com(0x01);/清顯示write_1602com(yh+1);/日歷顯示固定符號從第一行第1個位置之后開始顯示for(a=0;a14;a+)write_1602dat(tab1a);/向液晶屏寫日歷顯示的固定符號部分/delay(3);write_1602com(er+2);/時間顯示固定符號寫入位置,從第2個位置后開始顯示for(a=0;a0;a-)

18、io=acc0;sclk=0;sclk=1;acc=acc1;uchar read_byte()/讀一個字節(jié)rst=1;for(a=8;a0;a-)acc7=io;sclk=1;sclk=0;acc=acc1;return (acc);/-void write_1302(uchar add,uchar dat)/向1302芯片寫函數(shù),指定寫入地址,數(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ù)來源地址uchar temp;

19、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 decimal; 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); /允許寫,禁

20、止寫保護(hù) /write_1302(0x80,0x00); /向ds1302內(nèi)寫秒寄存器80h寫入初始秒數(shù)據(jù)00/write_1302(0x82,0x00);/向ds1302內(nèi)寫分寄存器82h寫入初始分?jǐn)?shù)據(jù)00/write_1302(0x84,0x12);/向ds1302內(nèi)寫小時寄存器84h寫入初始小時數(shù)據(jù)12/write_1302(0x8a,0x04);/向ds1302內(nèi)寫周寄存器8ah寫入初始周數(shù)據(jù)4/write_1302(0x86,0x07);/向ds1302內(nèi)寫日期寄存器86h寫入初始日期數(shù)據(jù)07/write_1302(0x88,0x01);/向ds1302內(nèi)寫月份寄存器88h寫入初始月

21、份數(shù)據(jù)01/write_1302(0x8c,0x10);/向ds1302內(nèi)寫年份寄存器8ch寫入初始年份數(shù)據(jù)10write_1302(0x8e,0x80); /打開寫保護(hù)/-/溫度顯示子函數(shù)void write_temp(uchar add,uchar dat)/向lcd寫溫度數(shù)據(jù),并指定顯示位置uchar gw,sw;gw=dat%10;/取得個位數(shù)字sw=dat/10;/取得十位數(shù)字write_1602com(er+add);/er是頭文件規(guī)定的值0x80+0x40write_1602dat(0x30+sw);/數(shù)字+30得到該數(shù)字的lcd1602顯示碼write_1602dat(0x30

22、+gw);/數(shù)字+30得到該數(shù)字的lcd1602顯示碼 write_1602dat(0xdf);/顯示溫度的小圓圈符號,0xdf是液晶屏字符庫的該符號地址碼 write_1602dat(0x43);/顯示c符號,0x43是液晶屏字符庫里大寫c的地址碼/-/時分秒顯示子函數(shù)void write_sfm(uchar add,uchar dat)/向lcd寫時分秒,有顯示位置加、現(xiàn)示數(shù)據(jù),兩個參數(shù)uchar gw,sw;gw=dat%10;/取得個位數(shù)字sw=dat/10;/取得十位數(shù)字write_1602com(er+add);/er是頭文件規(guī)定的值0x80+0x40write_1602dat(0

23、x30+sw);/數(shù)字+30得到該數(shù)字的lcd1602顯示碼write_1602dat(0x30+gw);/數(shù)字+30得到該數(shù)字的lcd1602顯示碼/-/年月日顯示子函數(shù)void write_nyr(uchar add,uchar dat)/向lcd寫年月日,有顯示位置加數(shù)、顯示數(shù)據(jù),兩個參數(shù)uchar gw,sw;gw=dat%10;/取得個位數(shù)字sw=dat/10;/取得十位數(shù)字write_1602com(yh+add);/設(shè)定顯示位置為第一個位置+addwrite_1602dat(0x30+sw);/數(shù)字+30得到該數(shù)字的lcd1602顯示碼write_1602dat(0x30+gw)

24、;/數(shù)字+30得到該數(shù)字的lcd1602顯示碼/-void write_week(uchar week)/寫星期函數(shù)write_1602com(yh+0x0c);/星期字符的顯示位置switch(week)case 1:write_1602dat(m);/星期數(shù)為1時,顯示 write_1602dat(o); write_1602dat(n); break; case 2:write_1602dat(t);/星期數(shù)據(jù)為2時顯示 write_1602dat(u); write_1602dat(e); break;case 3:write_1602dat(w);/星期數(shù)據(jù)為3時顯示 write_1

25、602dat(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ù)為5時顯示 write_1602dat(r); write_1602dat(i); break;case 6:write_1602dat(s);/星期數(shù)據(jù)為6時顯示 write_1602dat(t); write_1602dat(a); break;case 7:write_1602dat(s);/星期數(shù)據(jù)為7時顯示

26、 write_1602dat(u); write_1602dat(n); break;/*鍵盤掃描有關(guān)函數(shù)*void keyscan()if(key1=0)/-key1為功能鍵(設(shè)置鍵)-delay(9);/延時,用于消抖動if(key1=0)/延時后再次確認(rèn)按鍵按下 buzzer=0;/蜂鳴器短響一次 delay(20); buzzer=1;while(!key1);key1n+;if(key1n=9)key1n=1;/設(shè)置按鍵共有秒、分、時、星期、日、月、年、返回,8個功能循環(huán)switch(key1n)case 1: tr0=0;/關(guān)閉定時器/tr1=0;write_1602com(er+

27、0x09);/設(shè)置按鍵按動一次,秒位置顯示光標(biāo) write_1602com(0x0f);/設(shè)置光標(biāo)為閃爍 temp=(miao)/10*16+(miao)%10;/秒數(shù)據(jù)寫入ds1302 write_1302(0x8e,0x00); write_1302(0x80,0x80|temp);/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);/按動3次,shi /write_1602com

28、(0x0f);break;case 4: write_1602com(yh+0x0e);/按動4次,week /write_1602com(0x0f);break;case 5: write_1602com(yh+0x0a);/按動5次,ri /write_1602com(0x0f);break;case 6: write_1602com(yh+0x07);/按動6次,yue /write_1602com(0x0f);break;case 7: write_1602com(yh+0x04);/按動7次,nian /write_1602com(0x0f);break;case 8:write_1

29、602com(0x0c);/按動到第8次,設(shè)置光標(biāo)不閃爍tr0=1;/打開定時器 temp=(miao)/10*16+(miao)%10; write_1302(0x8e,0x00); write_1302(0x80,0x00|temp);/miao數(shù)據(jù)寫入ds1302 write_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

30、);switch(key1n)case 1:miao+;/設(shè)置鍵按動1次,調(diào)秒if(miao=60)miao=0;/秒超過59,再加1,就歸零write_sfm(0x08,miao);/令lcd在正確位置顯示加設(shè)定好的秒數(shù)temp=(miao)/10*16+(miao)%10;/十進(jìn)制轉(zhuǎn)換成ds1302要求的dcb碼 write_1302(0x8e,0x00); /允許寫,禁止寫保護(hù) write_1302(0x80,temp); /向ds1302內(nèi)寫秒寄存器80h寫入調(diào)整后的秒數(shù)據(jù)bcd碼 write_1302(0x8e,0x80); /打開寫保護(hù)write_1602com(er+0x09);

31、/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+(fen)%10;/十進(jìn)制轉(zhuǎn)換成ds1302要求的dcb碼 write_1302(0x8e,0x00);/允許寫,禁止寫保護(hù) write_1302(0x82,temp);/向ds1302內(nèi)寫分寄存器82h寫入調(diào)整后的分?jǐn)?shù)據(jù)bcd碼 write_1302(0x8e,0x80);/打開寫保護(hù)write_1602com(er+6);/break;case 3:shi+;if(sh

32、i=24)shi=0;write_sfm(2,shi);/令lcd在正確的位置顯示加設(shè)定好的小時數(shù)據(jù)temp=(shi)/10*16+(shi)%10;/十進(jìn)制轉(zhuǎn)換成ds1302要求的dcb碼 write_1302(0x8e,0x00);/允許寫,禁止寫保護(hù) write_1302(0x84,temp);/向ds1302內(nèi)寫小時寄存器84h寫入調(diào)整后的小時數(shù)據(jù)bcd碼 write_1302(0x8e,0x80);/打開寫保護(hù)write_1602com(er+3);/break;case 4:week+;if(week=8)week=1; write_1602com(yh+0x0c);/指定加后的

33、周數(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);/允許寫,禁止寫保護(hù) write_1302(0x8a,temp);/向ds1302內(nèi)寫周寄存器8ah寫入調(diào)整后的周數(shù)據(jù)bcd碼 write_1302(0x8e,0x80);/打開寫保護(hù) write_1602com(yh+0x0e);/break;case 5:ri+;if(ri=32)ri=1;write_nyr(9,ri);/令lcd在正確的位置顯示加設(shè)定好的日期數(shù)據(jù)temp=(ri

34、)/10*16+(ri)%10;/十進(jìn)制轉(zhuǎn)換成ds1302要求的dcb碼 write_1302(0x8e,0x00);/允許寫,禁止寫保護(hù) write_1302(0x86,temp);/向ds1302內(nèi)寫日期寄存器86h寫入調(diào)整后的日期數(shù)據(jù)bcd碼 write_1302(0x8e,0x80);/打開寫保護(hù)write_1602com(yh+10);/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)換成ds1302要求的dcb碼 write

35、_1302(0x8e,0x00);/允許寫,禁止寫保護(hù) write_1302(0x88,temp);/向ds1302內(nèi)寫月份寄存器88h寫入調(diào)整后的月份數(shù)據(jù)bcd碼 write_1302(0x8e,0x80);/打開寫保護(hù)write_1602com(yh+7);/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要求的dcb碼 write_1302(0x8e,0x00);/允許寫,禁止寫保護(hù) write_

36、1302(0x8c,temp);/向ds1302內(nèi)寫年份寄存器8ch寫入調(diào)整后的年份數(shù)據(jù)bcd碼 write_1302(0x8e,0x80);/打開寫保護(hù)write_1602com(yh+4);/break;/-減鍵key3,各句功能參照加鍵注釋-if(key3=0)delay(10);/調(diào)延時,消抖動if(key3=0) buzzer=0;/蜂鳴器短響一次 delay(20); buzzer=1;while(!key3);switch(key1n)case 1:miao-;if(miao=-1)miao=59;/秒數(shù)據(jù)減到-1時自動變成59write_sfm(0x08,miao);/在lcd

37、的正確位置顯示改變后新的秒數(shù) temp=(miao)/10*16+(miao)%10;/十進(jìn)制轉(zhuǎn)換成ds1302要求的dcb碼 write_1302(0x8e,0x00); /允許寫,禁止寫保護(hù) write_1302(0x80,temp); /向ds1302內(nèi)寫秒寄存器80h寫入調(diào)整后的秒數(shù)據(jù)bcd碼 write_1302(0x8e,0x80); /打開寫保護(hù)write_1602com(er+0x09);/write_1602com(0x0b);break;case 2:fen-;if(fen=-1)fen=59;write_sfm(5,fen);temp=(fen)/10*16+(fen)%

38、10;/十進(jìn)制轉(zhuǎn)換成ds1302要求的dcb碼 write_1302(0x8e,0x00);/允許寫,禁止寫保護(hù) write_1302(0x82,temp);/向ds1302內(nèi)寫分寄存器82h寫入調(diào)整后的分?jǐn)?shù)據(jù)bcd碼 write_1302(0x8e,0x80);/打開寫保護(hù)write_1602com(er+6);/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);/允許寫,禁止寫保護(hù) write_13

39、02(0x84,temp);/向ds1302內(nèi)寫小時寄存器84h寫入調(diào)整后的小時數(shù)據(jù)bcd碼 write_1302(0x8e,0x80);/打開寫保護(hù)write_1602com(er+3);/break;case 4:week-;if(week=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);/允許寫,禁止寫保護(hù) write_1302(0x8a,temp)

40、;/向ds1302內(nèi)寫周寄存器8ah寫入調(diào)整后的周數(shù)據(jù)bcd碼 write_1302(0x8e,0x80);/打開寫保護(hù) write_1602com(yh+0x0e);/break;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);/允許寫,禁止寫保護(hù) write_1302(0x86,temp);/向ds1302內(nèi)寫日期寄存器86h寫入調(diào)整后的日期數(shù)據(jù)bcd碼 write_1302(0x8e,0x80);/打開寫保護(hù)write_1602com(yh+10);/break;case 6:yue-;if(yue=0)yue=12;write_nyr(6,yue);temp=(yue)/10*16+(yue)%10;/十進(jìn)制轉(zhuǎn)換成ds1302要求的dcb碼 write_1302(0x8e,0x00)

溫馨提示

  • 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

提交評論