單片機(jī)課程設(shè)計(jì)電子萬年歷設(shè)計(jì)報(bào)告_第1頁(yè)
單片機(jī)課程設(shè)計(jì)電子萬年歷設(shè)計(jì)報(bào)告_第2頁(yè)
單片機(jī)課程設(shè)計(jì)電子萬年歷設(shè)計(jì)報(bào)告_第3頁(yè)
單片機(jī)課程設(shè)計(jì)電子萬年歷設(shè)計(jì)報(bào)告_第4頁(yè)
單片機(jī)課程設(shè)計(jì)電子萬年歷設(shè)計(jì)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩29頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、單片機(jī)課程設(shè)計(jì)課題:電子萬年歷設(shè)計(jì)系 別: 電氣與電子工程系專 業(yè): 電子信息工程姓 名: 學(xué) 號(hào): 河南城建學(xué)院2011年 12 月 28 日成績(jī)?cè)u(píng)定一、指導(dǎo)教師評(píng)語(yǔ)(根據(jù)學(xué)生設(shè)計(jì)報(bào)告質(zhì)量、答辯情況及其平時(shí)表現(xiàn)綜合評(píng)定)。二、評(píng)分評(píng)分項(xiàng)目設(shè)計(jì)報(bào)告評(píng)分答辯評(píng)分平時(shí)表現(xiàn)評(píng)分合 計(jì) (100分)任務(wù)完成情 況(20分)課程設(shè)計(jì)報(bào)告質(zhì)量(40分)表達(dá)情況(10分)回答問題情 況(10分)工作態(tài)度與紀(jì)律(10分)獨(dú)立工作能力(10分)得分課程設(shè)計(jì)成績(jī)?cè)u(píng)定班級(jí) 姓名 學(xué)號(hào)成績(jī): 分(折合等級(jí) )指導(dǎo)教師簽字 年 月 日目 錄摘要abstract.1緒論(課題背景、概述、目的).12 設(shè)計(jì)要求與方案論述.

2、32.1設(shè)計(jì)要求.32.2創(chuàng)新要求 .32.3系統(tǒng)的方案選擇.32.4 電路設(shè)計(jì)最終方案 .53 系統(tǒng)的硬件設(shè)計(jì)與實(shí)現(xiàn).63.1電路設(shè)計(jì)框圖.63.2 硬件設(shè)計(jì)原理概述.63.3 主要模塊的設(shè)計(jì).64系統(tǒng)的軟件設(shè)計(jì)與實(shí)現(xiàn).104.1程序流程框圖.104.2程序的設(shè)計(jì).105總結(jié) .14參考文獻(xiàn) .15附錄1硬件電路全圖16附錄2程序17摘 要本設(shè)計(jì)基于at89s51單片機(jī),結(jié)合ds1302時(shí)鐘芯片設(shè)計(jì)了一個(gè)數(shù)字萬年歷,顯示部分用數(shù)碼管動(dòng)態(tài)顯示,初始時(shí)間可由按鍵設(shè)置,此外還具有溫度顯示功能,掉電保護(hù)功能。萬年歷還具有節(jié)能模式,具有很強(qiáng)的實(shí)用性。關(guān)鍵詞:?jiǎn)纹瑱C(jī) 萬年歷 數(shù)碼管顯示 溫度abstra

3、ctthis paper is designed based on the at89s52 scm, combining ds1302 clock chip. display section is using digital tube dynamic display ; initial time can be set by the button ; in addition , it has the temperature display function and the power-off protected function. besides, it has energy saving mo

4、de;this calendar has strong digital tube display practicability.keywords:scm;calendar; digital tube display; temperature display1緒論1.1設(shè)計(jì)背景電子萬年歷是實(shí)現(xiàn)對(duì)年,月,日,時(shí),分,秒數(shù)字顯示的計(jì)時(shí)裝置,廣泛用于個(gè)人家庭,車站, 碼頭,辦公室,銀行大廳等場(chǎng)所,成為人們?nèi)粘I钪械谋匦杵贰?shù)字集成電路的發(fā)展和石英晶體振蕩器的廣泛應(yīng)用,使得數(shù)字鐘的精度遠(yuǎn)遠(yuǎn)超過老式鐘表。鐘表的數(shù)字化給人們生產(chǎn)生活帶來了極大的方便,在此基礎(chǔ)上完成的萬年歷精度高,功能易于擴(kuò)展。可擴(kuò)展成為諸

5、如定時(shí)自動(dòng)報(bào)警、按時(shí)自動(dòng)打鈴、時(shí)間程序自動(dòng)控制、定時(shí)廣播、自動(dòng)起閉路燈、定時(shí)開關(guān)烘箱、通斷動(dòng)力設(shè)備、甚至各種定時(shí)電氣的自動(dòng)啟用等電路。所有這些,都是以鐘表數(shù)字化為基礎(chǔ)的。因此,研究數(shù)字時(shí)鐘及擴(kuò)大其應(yīng)用有著非常現(xiàn)實(shí)的意義。本設(shè)計(jì)就是數(shù)字時(shí)鐘簡(jiǎn)單的擴(kuò)展應(yīng)用。萬年歷的設(shè)計(jì)過程在硬件與軟件方面進(jìn)行同步設(shè)計(jì)。1.2硬件部分硬件部分主要由at89s52單片機(jī),led顯示電路,以及調(diào)時(shí)按鍵電路等組成。在單片機(jī)的選擇上使用at89s52單片機(jī),該單片機(jī)適合于許多較為復(fù)雜控制應(yīng)用場(chǎng)合。采用4-16譯碼器作為選擇端,控制共陰數(shù)碼管動(dòng)態(tài)顯示,結(jié)合時(shí)鐘芯片ds1302和溫度傳感器18b20顯示時(shí)間和溫度。制作前在pr

6、oteus軟件中嵌入單片機(jī)內(nèi)進(jìn)行仿真可以更好的進(jìn)行硬件布局。1.3軟件部分軟件方面主要包括日歷程序、時(shí)間調(diào)整程序,顯示程序等。程序采用c語(yǔ)言編寫,以便更簡(jiǎn)單地實(shí)現(xiàn)調(diào)整時(shí)間及陰歷顯示功能。所有程序編寫完成后,在keil軟件中進(jìn)行調(diào)試,確定沒有問題后,在proteus軟件中嵌入單片機(jī)內(nèi)進(jìn)行仿真。2設(shè)計(jì)要求與方案論證2.1設(shè)計(jì)要求:2.1.1具有年、月、日、星期、時(shí)、分、秒等功能;2.1.2萬年歷具有閏月識(shí)別顯示功能;2.1.3具備年、月、日、星期、時(shí)、分、秒校準(zhǔn)功能;2.2 創(chuàng)新要求2.2.1萬年歷具有陰歷顯示功能;2.2.2 具有測(cè)量室內(nèi)溫度功能;2.3 系統(tǒng)基本方案選擇和論證2.3.1單片機(jī)芯

7、片的選擇方案和論證:方案一: 采用89c51芯片作為硬件核心,采用flash rom,內(nèi)部具有4kb rom 存儲(chǔ)空間,能于3v的超低壓工作,而且與mcs-51系列單片機(jī)完全兼容,但是運(yùn)用于電路設(shè)計(jì)中時(shí)由于不具備isp在線編程技術(shù), 當(dāng)在對(duì)電路進(jìn)行調(diào)試時(shí),由于程序的錯(cuò)誤修改或?qū)Τ绦虻男略龉δ苄枰獰氤绦驎r(shí),對(duì)芯片的多次拔插會(huì)對(duì)芯片造成一定的損壞。方案二: 采用at89s52,片內(nèi)rom全都采用flash rom;能以3v的超底壓工作;同時(shí)也與mcs-51系列單片機(jī)完全該芯片內(nèi)部存儲(chǔ)器為8kb rom 存儲(chǔ)空間,同樣具有89c51的功能,且具有在線編程可擦除技術(shù),當(dāng)在對(duì)電路進(jìn)行調(diào)試時(shí),由于程序的

8、錯(cuò)誤修改或?qū)Τ绦虻男略龉δ苄枰獰氤绦驎r(shí),不需要對(duì)芯片多次拔插,所以不會(huì)對(duì)芯片造成損壞。所以選擇采用at89s52作為主控制系統(tǒng).2.3.2 顯示模塊選擇方案和論證:方案一: 采用led液晶顯示屏,液晶顯示屏的顯示功能強(qiáng)大,可顯示大量文字,圖形,顯示多樣,清晰可見,但是價(jià)格昂貴,需要的接口線多,所以在此設(shè)計(jì)中不采用led液晶顯示屏.方案二: 采用點(diǎn)陣式數(shù)碼管顯示,點(diǎn)陣式數(shù)碼管是由八行八列的發(fā)光二極管組成,對(duì)于顯示文字比較適合,如采用在顯示數(shù)字顯得太浪費(fèi),且價(jià)格也相對(duì)較高,所以也不用此種作為顯示.方案三:采用led數(shù)碼管動(dòng)態(tài)掃描,led數(shù)碼管價(jià)格適中,對(duì)于顯示數(shù)字最合適,而且采用動(dòng)態(tài)掃描法與單片

9、機(jī)連接時(shí),占用的單片機(jī)口線少。所以采用了led數(shù)碼管作為顯示。2.3.3時(shí)鐘芯片的選擇方案和論證:方案一: 直接采用單片機(jī)定時(shí)計(jì)數(shù)器提供秒信號(hào),使用程序?qū)崿F(xiàn)年、月、日、星期、時(shí)、分、秒計(jì)數(shù)。采用此種方案雖然減少芯片的使用,節(jié)約成本,但是,實(shí)現(xiàn)的時(shí)間誤差較大。所以不采用此方案。方案二: 采用ds1302時(shí)鐘芯片實(shí)現(xiàn)時(shí)鐘,ds1302芯片是一種高性能的時(shí)鐘芯片,可自動(dòng)對(duì)秒、分、時(shí)、日、周、月、年以及閏年補(bǔ)償?shù)哪赀M(jìn)行計(jì)數(shù),而且精度高,位的ram做為數(shù)據(jù)暫存區(qū),工作電壓2.5v5.5v范圍內(nèi),2.5v時(shí)耗電小于300na.2.4 電路設(shè)計(jì)最終方案綜上各方案所述,對(duì)此次作品的方案選定: 采用at89s5

10、2作為主控制系統(tǒng); ds1302提供時(shí)鐘;數(shù)字式溫度傳感器;led數(shù)碼管動(dòng)態(tài)掃描作為顯示。3.系統(tǒng)的硬件設(shè)計(jì)與實(shí)現(xiàn)3.1 電路設(shè)計(jì)框圖圖2.1 電路設(shè)計(jì)框圖3.2 系統(tǒng)硬件概述本電路是由at89s52單片機(jī)為控制核心,具有在線編程功能,低功耗,能在3v超低壓工作;時(shí)鐘電路由ds1302提供,它是一種高性能、低功耗、帶ram的實(shí)時(shí)時(shí)鐘電路,它可以對(duì)年、月、日、周日、時(shí)、分、秒進(jìn)行計(jì)時(shí),具有閏年補(bǔ)償功能,工作電壓為2.5v5.5v。采用三線接口與cpu進(jìn)行同步通信,并可采用突發(fā)方式一次傳送多個(gè)字節(jié)的時(shí)鐘信號(hào)或ram數(shù)據(jù)。溫度的采集由ds18b20構(gòu)成;顯示部份由17個(gè)數(shù)碼管,74ls154譯碼器構(gòu)

11、成。使用動(dòng)態(tài)掃描顯示方式對(duì)數(shù)字的顯示。3.3 主要模塊的設(shè)計(jì)3.3.1單片機(jī)主控制模塊的設(shè)計(jì) at89s52單片機(jī)為40引腳雙列直插芯片,有四個(gè)i/o口p0,p1,p2,p3, mcs-51單片機(jī)共有4個(gè)8位的i/o口(p0、p1、p2、p3),每一條i/o線都能獨(dú)立地作輸出或輸入。單片機(jī)的最小系統(tǒng)如下圖所示,18引腳和19引腳接時(shí)鐘電路,xtal1接外部晶振和微調(diào)電容的一端,在片內(nèi)它是振蕩器倒相放大器的輸入,xtal2接外部晶振和微調(diào)電容的另一端,在片內(nèi)它是振蕩器倒相放大器的輸出.第9引腳為復(fù)位輸入端,接上電容,電阻及開關(guān)后夠上電復(fù)位電路,20引腳為接地端,40引腳為電源端. 如圖3.3.1

12、 所示圖3.3.1 主控制系統(tǒng)3.3.2時(shí)鐘電路模塊的設(shè)計(jì)圖3.3.2示出ds1302的引腳排列,其中vcc1為后備電源,vcc2為主電源。在主電源關(guān)閉的情況下,也能保持時(shí)鐘的連續(xù)運(yùn)行。ds1302由vcc1或vcc2兩者中的較大者供電。當(dāng)vcc2大于vcc1+0.2v時(shí),vcc2給ds1302供電。當(dāng)vcc2小于vcc1時(shí),ds1302由vcc1供電。x1和x2是振蕩源,外接32.khz晶振。rst是復(fù)位/片選線,通過把rst輸入驅(qū)動(dòng)置高電平來啟動(dòng)所有的數(shù)據(jù)傳送。rst輸入有兩種功能:首先,rst接通控制邏輯,允許地址/命令序列送入移位寄存器;其次,rst提供終止單字節(jié)或多字節(jié)數(shù)據(jù)的傳送手段

13、。當(dāng)rst為高電平時(shí),所有的數(shù)據(jù)傳送被初始化,允許對(duì)ds1302進(jìn)行操作。如果在傳送過程中rsts置為低電平,則會(huì)終止此次數(shù)據(jù)傳送,i/o引腳變?yōu)楦咦钁B(tài)。上電動(dòng)行時(shí),在vcc大于等于2.5v之前,rst必須保持低電平。中有在sclk 為低電平時(shí),才能將rst置為高電平,i/o為串行數(shù)據(jù)輸入端(雙向)。sclk始終是輸入端。圖3.3.2 ds1302的引腳圖3.3.3溫度傳感器模塊圖3.3.318b20的引腳圖3.3.4顯示模塊的設(shè)計(jì)如圖3.3.4所示,采用動(dòng)態(tài)掃描顯示,由17個(gè)數(shù)碼管,4-16譯碼器74ls154接1k限流電阻接到共陰數(shù)碼管的com端作為選通位碼,每位選擇相應(yīng)的列,p0口輸出數(shù)

14、據(jù)再接9013三極管送達(dá)數(shù)碼管。圖3.3.4顯示模塊4.系統(tǒng)的軟件設(shè)計(jì)4.1程序流程框圖圖4.1程序流程框圖4.2 子程序的設(shè)計(jì)4.2.1 讀、寫ds1302子程序unsigned char ds1302outputbyte(void) /實(shí)時(shí)時(shí)鐘讀取一字節(jié)(內(nèi)部函數(shù))void ds1302inputbyte(unsigned char d) /實(shí)時(shí)時(shí)鐘寫入一字節(jié)(內(nèi)部函數(shù))unsigned char read1302(unsigned char ucaddr)/讀取ds1302某地址的數(shù)據(jù)void write1302(unsigned char ucaddr, unsigned char u

15、cda)/ucaddr: ds1302地址, ucdata: 要寫的數(shù)據(jù)void write1302(unsigned char ucaddr, unsigned char ucda)write1302(0x8e,0x00) ;/允許寫入write1302(0x8c,num) ;/寫入yearwrite1302(0x8e,0x80) ;/禁止寫操作4.2.2 讀18b20子程序/讀取溫度unsigned char readtemperature(void)unsigned char a=0;unsigned char b=0;unsigned char t=0;init_ds18b20();w

16、riteonechar(0xcc); / 跳過讀序號(hào)列號(hào)的操作writeonechar(0x44); / 啟動(dòng)溫度轉(zhuǎn)換delay_18b20(200);init_ds18b20();writeonechar(0xcc); /跳過讀序號(hào)列號(hào)的操作 writeonechar(0xbe); /讀取溫度寄存器等(共可讀9個(gè)寄存器) 前兩個(gè)就是溫度a=readonechar();b=readonechar();b4;t=b;return(t);4.2.3 顯示模塊子程序void display()/年 p2=0xf0; p0=seg2; delay(1);4.2.4按鍵子程序圖4.2.4按鍵子程序流程圖

17、5 總結(jié)在整個(gè)設(shè)計(jì)過程中,發(fā)揮團(tuán)隊(duì)精神,分工合作,充分發(fā)揮人的主觀能動(dòng)性,自主學(xué)習(xí),學(xué)到了許多沒學(xué)到的知識(shí)。較好的完成了作品。達(dá)到了預(yù)期的目的,在最初的設(shè)計(jì)中,相互學(xué)習(xí)、相互討論、研究,完了最初的設(shè)想。在電路焊接時(shí)雖然沒什么大問題,但從中也知道了焊接在整個(gè)作品中的重要性,電路工程量大,不能心急,一個(gè)個(gè)慢慢來不能急于求成。對(duì)電路的設(shè)計(jì)、布局要先有一個(gè)好的構(gòu)思,才顯得電路板美觀、大方。程序編寫中,由于思路不清晰,開始時(shí)遇到了很多的問題,經(jīng)過靜下心來思考,和同組員的討論,理清了思路。在此次設(shè)計(jì)中,知道了做凡事要有一顆平常的心,不要想著走捷徑,一步一腳印。也練就了我們的耐心,做什么事都在有耐心。致謝:

18、 感謝學(xué)院給我們提供了一個(gè)展現(xiàn)自己的舞臺(tái),給我們一次難得煅煉的機(jī)會(huì),使得我們的動(dòng)手能力和專業(yè)技能都有了很大的提高。感謝給我?guī)椭睦蠋熀屯瑢W(xué),在你們的幫助下我才能完成這次設(shè)計(jì)。參考文獻(xiàn)1.張齊,朱寧西 單片機(jī)系統(tǒng)設(shè)計(jì)與開發(fā) 華南理工大學(xué) 電子機(jī)械出版社.20082.陳正振 電子電路設(shè)計(jì)與制作 廣西交通職業(yè)技術(shù)學(xué)院信息工程系.20073.張友德,趙志英,涂時(shí)亮 單片微型機(jī) 復(fù)旦大學(xué)復(fù)旦大學(xué)出版社.2006 4.譚浩強(qiáng). c程序設(shè)計(jì)(第三版).北京:清華大學(xué)出版社.20055.譚浩強(qiáng). c程序設(shè)計(jì)題解與上機(jī)指導(dǎo)(第三版).北京:清華大學(xué)出版社.20056.徐慧 林銳 c語(yǔ)言實(shí)例解析精粹 .武漢:華中

19、理工大學(xué)出版社.19967.戴建鵬譯 c語(yǔ)言大全(第三版) .北京:電子工業(yè)大學(xué)出版社.19948.楊恢先,黃輝先 單片機(jī)原理及應(yīng)用 人民郵電出版社.2006附錄1硬件電路全圖附錄2程序#include#define uchar unsigned char#define uint unsigned intsbit ds1302_clk = p11; /實(shí)時(shí)時(shí)鐘時(shí)鐘線引腳 sbit ds1302_io = p10; /實(shí)時(shí)時(shí)鐘數(shù)據(jù)線引腳 sbit ds1302_rst = p12; /實(shí)時(shí)時(shí)鐘復(fù)位線引腳sbit dq = p14 ; /18b20接口sbit mode=p34;sbit inc=

20、p35;sbit dec=p36;sbit power=p37;sbit week_wei=p15; /星期位選sbit encode=p16; /譯碼器使能sbit acc0 = acc0;/累加器位定義sbit acc7 = acc7;uchar code seg=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;uchar temp,year,month,date,hour,minute,second,week,position;bit flag;/開關(guān)顯示標(biāo)志/*延時(shí)ms*/ void delay(uint z)uint x,y;for

21、(x=z;x0;x-)for(y=112;y0;y-);/* *ds1302驅(qū)動(dòng)程序*/void ds1302inputbyte(unsigned char d) /實(shí)時(shí)時(shí)鐘寫入一字節(jié)(內(nèi)部函數(shù)) unsigned char i; acc = d; for(i=8; i0; i-) ds1302_io = acc0; /相當(dāng)于匯編中的 rrc ds1302_clk = 1; ds1302_clk = 0; acc = acc 1; unsigned char ds1302outputbyte(void) /實(shí)時(shí)時(shí)鐘讀取一字節(jié)(內(nèi)部函數(shù)) unsigned char i; for(i=8; i0

22、; i-) acc = acc 1; /相當(dāng)于匯編中的 rrc acc7 = ds1302_io; ds1302_clk = 1; ds1302_clk = 0; return(acc); void write1302(unsigned char ucaddr, unsigned char ucda)/ucaddr: ds1302地址, ucdata: 要寫的數(shù)據(jù) ds1302_rst = 0; ds1302_clk = 0; ds1302_rst = 1; ds1302inputbyte(ucaddr); / 地址,命令 ds1302inputbyte(ucda); / 寫1byte數(shù)據(jù) d

23、s1302_clk = 1; ds1302_rst = 0; unsigned char read1302(unsigned char ucaddr)/讀取ds1302某地址的數(shù)據(jù) unsigned char ucdata; ds1302_rst = 0; ds1302_clk = 0; ds1302_rst = 1; ds1302inputbyte(ucaddr|0x01); / 地址,命令 ucdata = ds1302outputbyte(); / 讀1byte數(shù)據(jù) ds1302_clk = 1; ds1302_rst = 0; return(ucdata); void ds1302_i

24、nit()if(read1302(0xc1) != 0xf0) write1302(0x8e,0x00) ;/允許寫操作write1302(0xc0,0xf0) ; /寫入初始化標(biāo)志,系統(tǒng)上電后檢測(cè)此標(biāo)志,即此子函數(shù)只會(huì)在第一次初始化一次。/*時(shí)間初始值*/write1302(0x8c,0x10) ;/年write1302(0x88,0x04) ;/月write1302(0x86,0x06) ;/日write1302(0x84,0x22) ;/時(shí)write1302(0x82,0x59) ;/分write1302(0x80,0x55) ;/秒write1302(0x90,0xa4) ;/充電wr

25、ite1302(0x8e,0x80) ;/禁止寫操作 /* *ds18b20驅(qū)動(dòng)程序*/*/void delay_18b20(unsigned int i)/延時(shí)函數(shù) while(i-);/*/18b20初始化函數(shù)void init_ds18b20(void) unsigned char x=0; dq = 1; /dq復(fù)位 delay_18b20(8); /稍做延時(shí) dq = 0; /單片機(jī)將dq拉低 delay_18b20(80); /精確延時(shí) 大于 480us dq = 1; /拉高總線 delay_18b20(10); x=dq; /稍做延時(shí)后 如果x=0則初始化成功 x=1則初始化失

26、敗 delay_18b20(5);/讀一個(gè)字節(jié)unsigned char readonechar(void)unsigned char i=0;unsigned char dat = 0;for (i=8;i0;i-) dq = 0; / 給脈沖信號(hào) dat=1; dq = 1; / 給脈沖信號(hào) if(dq) dat|=0x80; delay_18b20(5); return(dat);/寫一個(gè)字節(jié)void writeonechar(unsigned char dat) unsigned char i=0; for (i=8; i0; i-) dq = 0; dq = dat&0x01; de

27、lay_18b20(5); dq = 1; dat=1; delay_18b20(5);/讀取溫度unsigned char readtemperature(void)unsigned char a=0;unsigned char b=0;unsigned char t=0;init_ds18b20();writeonechar(0xcc); / 跳過讀序號(hào)列號(hào)的操作writeonechar(0x44); / 啟動(dòng)溫度轉(zhuǎn)換delay_18b20(200);init_ds18b20();writeonechar(0xcc); /跳過讀序號(hào)列號(hào)的操作 writeonechar(0xbe); /讀取

28、溫度寄存器等(共可讀9個(gè)寄存器) 前兩個(gè)就是溫度a=readonechar();b=readonechar();b4;t=b;return(t);/*/void display()/年 p2=0xf0; p0=seg2; delay(1); p2=0xf1; p0=seg0; delay(1); p2=0xf2; p0=segyear/16; delay(1); p2=0xf3; p0=segyear%16; delay(1);/month p2=0xf4; p0=segmonth/16; delay(1); p2=0xf5; p0=segmonth%16; delay(1); /date p

29、2=0xf6; p0=segdate/16; delay(1); p2=0xf7; p0=segdate%16; delay(1); /hour p2=0xf8; p0=seghour/16; delay(1); p2=0xf9; p0=seghour%16; delay(1); /minute p2=0xfa; p0=segminute/16; delay(1); p2=0xfb; p0=segminute%16; delay(1); /second p2=0xfc; p0=segsecond/16; delay(1); p2=0xfd; p0=segsecond%16; delay(1);

30、 /temp p2=0xfe; p0=segtemp/10; delay(1); p2=0xff; p0=segtemp%10; delay(1); /week encode=1; week_wei=0; p0=segweek; delay(1); encode=0; week_wei=1; p0=0;void set() if(mode=0) delay(5); if(mode=0) position+; if(position=7) position=0; while(!mode); /再次確認(rèn)是否松開,松開就跳出while語(yǔ)句 / if(position=1) /year int num

31、; if(inc=0) delay(5); if(inc=0) num=read1302(0x8d); num=(num/16)*10+num%16; num+; if(num=99) num=0; num=(num/10)*16+num%10; write1302(0x8e,0x00) ;/允許寫入 write1302(0x8c,num) ;/寫入year write1302(0x8e,0x80) ;/禁止寫操作 while(!inc); /再次確認(rèn)是否松開,松開就跳出while語(yǔ)句 / else if(dec=0) delay(5); if(dec=0) num=read1302(0x8d

32、); num=(num/16)*10+num%16; num-; if(num=-1) num=99; num=(num/10)*16+num%10; write1302(0x8e,0x00) ;/允許寫入 write1302(0x8c,num) ;/寫入year write1302(0x8e,0x80) ;/禁止寫操作 while(!dec); /再次確認(rèn)是否松開,松開就跳出while語(yǔ)句 /year=read1302(0x8d); /年 p2=0xf0;p0=seg2;delay(4);p2=0xf1;p0=seg0;delay(4);p2=0xf2;p0=segyear/16;delay

33、(4);p2=0xf3;p0=segyear%16;delay(4); / /*/else if(position=2) /month int num; if(inc=0) delay(5); if(inc=0) num=read1302(0x89); num=(num/16)*10+num%16; num+; if(num=13) num=1; num=(num/10)*16+num%10; write1302(0x8e,0x00) ;/允許寫入 write1302(0x88,num) ;/寫入month write1302(0x8e,0x80) ;/禁止寫操作 while(!inc); /

34、再次確認(rèn)是否松開,松開就跳出while語(yǔ)句 / else if(dec=0) delay(5); if(dec=0) num=read1302(0x89); num=(num/16)*10+num%16; num-; if(num=0) num=12; num=(num/10)*16+num%10; write1302(0x8e,0x00) ;/允許寫入 write1302(0x88,num) ;/寫入month write1302(0x8e,0x80) ;/禁止寫操作 while(!dec); /再次確認(rèn)是否松開,松開就跳出while語(yǔ)句 /month=read1302(0x89); /mo

35、nth p2=0xf4; p0=segmonth/16; delay(8); p2=0xf5; p0=segmonth%16; delay(8); / /*/else if(position=3) /date int num; if(inc=0) delay(5); if(inc=0) num=read1302(0x87); num=(num/16)*10+num%16; num+; if(num=32) num=1; num=(num/10)*16+num%10; write1302(0x8e,0x00) ;/允許寫入 write1302(0x86,num) ;/寫入date write13

36、02(0x8e,0x80) ;/禁止寫操作 while(!inc); /再次確認(rèn)是否松開,松開就跳出while語(yǔ)句 / else if(dec=0) delay(5); if(dec=0) num=read1302(0x87); num=(num/16)*10+num%16; num-; if(num=0) num=31; num=(num/10)*16+num%10; write1302(0x8e,0x00) ;/允許寫入 write1302(0x86,num) ;/寫入date write1302(0x8e,0x80) ;/禁止寫操作 while(!dec); /再次確認(rèn)是否松開,松開就跳

37、出while語(yǔ)句 /date=read1302(0x87); /date p2=0xf6; p0=segdate/16; delay(8); p2=0xf7; p0=segdate%16; delay(8); / /*/else if(position=4) /hour int num; if(inc=0) delay(5); if(inc=0) num=read1302(0x85); num=(num/16)*10+num%16; num+; if(num=24) num=0; num=(num/10)*16+num%10; write1302(0x8e,0x00) ;/允許寫入 write

38、1302(0x84,num) ;/寫入hour write1302(0x8e,0x80) ;/禁止寫操作 while(!inc); /再次確認(rèn)是否松開,松開就跳出while語(yǔ)句 / else if(dec=0) delay(5); if(dec=0) num=read1302(0x85); num=(num/16)*10+num%16; num-; if(num=-1) num=23; num=(num/10)*16+num%10; write1302(0x8e,0x00) ;/允許寫入 write1302(0x84,num) ;/寫入hour write1302(0x8e,0x80) ;/禁

39、止寫操作 while(!dec); /再次確認(rèn)是否松開,松開就跳出while語(yǔ)句 /hour=read1302(0x85); p2=0xf8; p0=seghour/16; delay(8); p2=0xf9; p0=seghour%16; delay(8); / /*/else if(position=5) /minute int num; if(inc=0) delay(5); if(inc=0) num=read1302(0x83); num=(num/16)*10+num%16; num+; if(num=60) num=0; num=(num/10)*16+num%10; write1302(0x8e,0x00) ;/允許寫入 write1302(0x82,num) ;/寫入minute write1302(0x8e,0x80) ;/禁止寫操作 while(!inc);

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論