單片機(jī)電子時(shí)鐘課程設(shè)計(jì)報(bào)告_第1頁
已閱讀1頁,還剩29頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  目 錄</b></p><p>  1、引言 ··························

2、···························3</p><p>  2、總體設(shè)計(jì) ····

3、83;····································&

4、#183;·····4</p><p>  3、詳細(xì)設(shè)計(jì) ·························&

5、#183;··················5</p><p>  3.1硬件設(shè)計(jì) ············&#

6、183;······························5</p><p>  3.2軟件設(shè)計(jì)

7、3;····································&#

8、183;····10</p><p>  4、實(shí)驗(yàn)結(jié)果分析··························

9、83;·················26</p><p>  5、心得體會(huì)··············

10、···································27</p&g

11、t;<p>  6、參考文獻(xiàn)·································&

12、#183;···············27</p><p><b>  摘   要 </b></p><p>  單片機(jī)自20世紀(jì)70年代問世以來,以其極高的性能價(jià)格比,受到人們

13、的重視和關(guān)注,應(yīng)用很廣、發(fā)展很快。單片機(jī)體積小、重量輕、抗干擾能力強(qiáng)、環(huán)境要求不高、價(jià)格低廉、可靠性高、靈活性好、開發(fā)較為容易。由于具有上述優(yōu)點(diǎn),在我國,單片機(jī)已廣泛地應(yīng)用在工業(yè)自動(dòng)化控制、自動(dòng)檢測(cè)、智能儀器儀表、家用電器、電力電子、機(jī)電一體化設(shè)備等各個(gè)方面,而51單片機(jī)是各單片機(jī)中最為典型和最有代表性的一種。這次畢業(yè)設(shè)計(jì)通過對(duì)它的學(xué)習(xí)、應(yīng)用,以AT89S51芯片為核心,輔以必要的電路,設(shè)計(jì)了一個(gè)簡(jiǎn)易的電子時(shí)鐘,它由4.5V直流電源供電

14、,通過數(shù)碼管能夠準(zhǔn)確顯示時(shí)間,調(diào)整時(shí)間,從而到達(dá)學(xué)習(xí)、設(shè)計(jì)、開發(fā)軟、硬件的能力。 </p><p>  關(guān)鍵詞: 單片機(jī) AT89C51</p><p><b>  1.引言</b></p><p>  20世紀(jì)末,電子技術(shù)獲得了飛速的發(fā)展,在其推動(dòng)下,現(xiàn)代電子產(chǎn)品幾乎滲透了社會(huì)的各個(gè)領(lǐng)域,有力地推動(dòng)了社會(huì)生產(chǎn)力的發(fā)展和

15、社會(huì)信息化程度的提高,同時(shí)也使現(xiàn)代電子產(chǎn)品性能進(jìn)一步提高,產(chǎn)品更新?lián)Q代的節(jié)奏也越來越快。 時(shí)間對(duì)人們來說總是那么寶貴,工作的忙碌性和繁雜性容易使人忘記當(dāng)前的時(shí)間。忘記了要做的事情,當(dāng)事情不是很重要的時(shí)候,這種遺忘無傷大雅。但是,一旦重要事情,一時(shí)的耽誤可能釀成大禍。 </p><p>  目前,單片機(jī)正朝著高性能和多品種方向發(fā)展趨勢(shì)將是進(jìn)一步向著CMOS化、低功耗、小體積、大容量、高性能、低價(jià)

16、格和外圍電路內(nèi)裝化等幾個(gè)方面發(fā)展。下面是單片機(jī)的主要發(fā)展趨勢(shì)。單片機(jī)應(yīng)用的重要意義還在于,它從根本上改變了傳統(tǒng)的控制系統(tǒng)設(shè)計(jì)思想和設(shè)計(jì)方法。從前必須由模擬電路或數(shù)字電路實(shí)現(xiàn)的大部分功能,現(xiàn)在已能用單片機(jī)通過軟件方法來實(shí)現(xiàn)了。這種軟件代替硬件的控制技術(shù)也稱為微控制技術(shù),是傳統(tǒng)控制技術(shù)的一次革命。 </p><p>  單片機(jī)模塊中最常見的是數(shù)字鐘,數(shù)字鐘是一種用數(shù)字電路技術(shù)實(shí)現(xiàn)時(shí)、分、秒計(jì)時(shí)的裝置,與機(jī)械

17、式時(shí)鐘相比具有更高的準(zhǔn)確性和直觀性,且無機(jī)械裝置,具有更更長的使用壽命,因此得到了廣泛的使用.</p><p>  數(shù)字鐘是采用數(shù)字電路實(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)生活帶來了極大的方便。<

18、;/p><p><b>  2.總體設(shè)計(jì)</b></p><p>  1、準(zhǔn)確計(jì)時(shí),以數(shù)字形式顯示時(shí)、分、秒的時(shí)間。</p><p>  2、小時(shí)以24小時(shí)計(jì)時(shí)形式,分秒計(jì)時(shí)為60進(jìn)位。 </p><p>  3、校正時(shí)間功能,即能隨意設(shè)定走時(shí)時(shí)間。</p><p>  4、設(shè)計(jì)5V直流電源,系統(tǒng)時(shí)鐘

19、電路、復(fù)位電路。 </p><p>  本次設(shè)計(jì)時(shí)鐘電路,使用了ATC89C51單片機(jī)芯片控制電路,單片機(jī)控制電單且省去了很多復(fù)雜的線路,使得電路簡(jiǎn)明易懂,使用鍵盤鍵上的按鍵來調(diào)整時(shí)鐘的時(shí)、分、秒, 采用實(shí)時(shí)時(shí)鐘芯片</p><p>  現(xiàn)在市場(chǎng)上有很多實(shí)時(shí)時(shí)鐘集成電路,如DS1287、DS12887、DS1302等。</p><p>  實(shí)時(shí)時(shí)芯片具備年、月、日、

20、時(shí)、分、秒計(jì)時(shí)功能和多點(diǎn)定時(shí)功能,計(jì)時(shí)數(shù)據(jù)的更新每秒自動(dòng)進(jìn)行一次,不需要程序干預(yù)。因此,在工業(yè)實(shí)時(shí)測(cè)控系統(tǒng)中多采用這一類專用芯片來實(shí)現(xiàn)實(shí)時(shí)時(shí)鐘功能。</p><p>  總設(shè)計(jì)原理框圖如下圖所示:</p><p><b>  3.詳細(xì)設(shè)計(jì)</b></p><p><b>  3.1硬件設(shè)計(jì)</b></p>&

21、lt;p>  3.1.1、STC89C51單片機(jī)介紹 </p><p>  STC89C51單片機(jī)內(nèi)部主要包括累加器ACC(有時(shí)也簡(jiǎn)稱為A)、程序狀態(tài)字PSW、地址指示器DPTR、只讀存儲(chǔ)器ROM、隨機(jī)存取存儲(chǔ)器RAM、寄存器、并行I/O接口P0~P3、定時(shí)器/計(jì)數(shù)器、串行I/O接口以及定時(shí)控制邏輯電路等。這些部件通過內(nèi)部總線聯(lián)接起來,構(gòu)成一個(gè)完整的微型計(jì)算機(jī)。其管腳圖如圖 </p><

22、p>  STC89C51單片機(jī)管腳結(jié)構(gòu)圖</p><p><b>  VCC:電源。</b></p><p><b>  GND:接地。</b></p><p>  P0口:P0口為一個(gè)8位漏級(jí)開路雙向I/O口,每腳可吸收8TTL門電流。當(dāng)P1口的管腳第一次寫1時(shí),被定義為高阻輸入。P0能夠用于外部程 序數(shù)據(jù)存儲(chǔ)器,

23、它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時(shí),P0 口作為原碼輸入口,當(dāng)FIASH進(jìn)行校驗(yàn)時(shí),P0輸出原碼,此時(shí)P0外部必須被拉高。</p><p>  P1口:P1口是一個(gè)內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作 輸入,P1口被外部下拉為低電平時(shí),將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗(yàn)時(shí),P1口作為第八位地址

24、接收。 </p><p>  P2口:P2口為一個(gè)內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個(gè)TTL門電流,當(dāng)P2口被寫“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ù)存

25、儲(chǔ)器進(jìn)行讀寫時(shí),P2口輸出其特殊功能寄存器 的內(nèi)容。P2口在FLASH編程和校驗(yàn)時(shí)接收高八位地址信號(hào)和控制信號(hào)。</p><p>  P3口:P3口管腳是8個(gè)帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個(gè)TTL門電流。當(dāng)P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。</p><p>  P3口也可作為AT

26、89C51的一些特殊功能口,如下表所示:</p><p><b>  口管腳 備選功能</b></p><p>  P3.0 RXD(串行輸入口)</p><p>  P3.1 TXD(串行輸出口)</p><p>  P3.2 /INT0(外部中斷0)</p><p>  P3.3 /INT1(

27、外部中斷1)</p><p>  P3.4 T0(記時(shí)器0外部輸入)</p><p>  P3.5 T1(記時(shí)器1外部輸入)</p><p>  P3.6 /WR(外部數(shù)據(jù)存儲(chǔ)器寫選通)</p><p>  P3.7 /RD(外部數(shù)據(jù)存儲(chǔ)器讀選通)</p><p>  P3口同時(shí)為閃爍編程和編程校驗(yàn)接收一些控制信號(hào)。&

28、lt;/p><p>  RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時(shí),要保持RST腳兩個(gè)機(jī)器周期的高電平時(shí)間。</p><p>  ALE/PROG:當(dāng)訪問外部存儲(chǔ)器時(shí),地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時(shí),ALE 端以不變的頻率周期輸出正脈沖信號(hào),此頻率為振蕩器頻率的1/6。因此它可用作對(duì)外部輸出的脈沖或用于定時(shí)目的。然而要注意的是:每當(dāng)

29、用作外部數(shù)據(jù)存儲(chǔ)器 時(shí),將跳過一個(gè)ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時(shí), ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。</p><p>  PSEN:外部程序存儲(chǔ)器的選通信號(hào)。在由外部程序存儲(chǔ)器取指期間,每個(gè)機(jī)器周期兩次/PSEN有效。但在訪問外部數(shù)據(jù)存儲(chǔ)器時(shí),這兩次有效的/PSEN信號(hào)將不出現(xiàn)。<

30、;/p><p>  EA/VPP:當(dāng)/EA保持低電平時(shí),則在此期間外部程序存儲(chǔ)(0000H-FFFFH),不管是否有內(nèi)部程序存儲(chǔ)器。注意加密方式1時(shí), /EA將內(nèi)部鎖定為RESET;當(dāng)/EA端保持高電平時(shí),此間內(nèi)部程序存儲(chǔ)器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。</p><p>  3.1.2、上電按鈕復(fù)位電路</p><p>  本設(shè)計(jì)采用

31、上電按鈕復(fù)位電路:首先經(jīng)過上電復(fù)位,當(dāng)按下按鍵時(shí),RST直接與VCC相連,為高電平形成復(fù)位,同時(shí)電解電容被電路放電;按鍵松開時(shí),VCC對(duì)電容充電,充電電流在電阻上,RST依然為高電平,仍然是復(fù)位,充電完成后,電容相當(dāng)于開路,RST為低電平,單片機(jī)芯片正常工作。其中電阻R2決定了電容充電的時(shí)間,R2越大則充電時(shí)間長,復(fù)位信號(hào)從VCC回落到0V的時(shí)間也長。</p><p>  3.1.3、晶振電路</p>

32、<p>  本設(shè)計(jì)晶振電路采用12M的晶振。晶振的作用是給單片機(jī)正常工作提供穩(wěn)定的時(shí)鐘信號(hào)。單片機(jī)的晶振并不是只能用12M,只要不超過20M就行,在準(zhǔn)許的范圍內(nèi),晶振越大,單片機(jī)運(yùn)行越快,還有用12M的就是好算時(shí)間,因?yàn)橐粋€(gè)機(jī)器周期為1/12時(shí)鐘周期,所以這樣用12M的話,一個(gè)時(shí)鐘周期為12us,那么定時(shí)器計(jì)一次數(shù)就是1us了,電容范圍在20-40pF之間,這里連接的是30pF的電容。</p><p&g

33、t;  機(jī)器周期=10*晶振周期=12*系統(tǒng)時(shí)鐘周期</p><p>  3.1.4.下載端口</p><p>  設(shè)計(jì)用到的STC89C52單片機(jī)芯片的ISP下載線是通過單片機(jī)的TXD,RXD引腳把程序燒進(jìn)去的。管腳TXD和RXD用于異步串行通信。其實(shí)STC89C52單片機(jī)的ISP下載線就是一個(gè)max232芯片連接STC和計(jì)算機(jī)的串行通信口。計(jì)算機(jī)把程序從九針串口送到max232芯片,電

34、平轉(zhuǎn)換后送進(jìn)單片機(jī)的串行口,也就是TXD和RXD。然后單片機(jī)的串行模塊把數(shù)據(jù)送到程序區(qū)。</p><p>  3.1.5、顯示電路 </p><p>  就時(shí)鐘而言,通??刹捎靡壕э@示或數(shù)碼管顯示。由于一般的段式液晶屏要專門的驅(qū)動(dòng)電路,而且液晶顯示具有亮度高、價(jià)格便宜等優(yōu)點(diǎn)。</p><p>  3.1.6時(shí)鐘顯示校正電路</p><p> 

35、 本設(shè)計(jì)利用按鍵開關(guān)來校正時(shí)鐘顯示的數(shù)字。當(dāng)按鈕按下時(shí),將在相應(yīng)的端口輸入一個(gè)低電平,通過相應(yīng)的程序來改變時(shí)鐘顯示。其中S1按鍵開關(guān)用來選擇要修改的數(shù)字;S2按鍵用來增加所選數(shù)字的數(shù)值;S3按鍵用來減少所選數(shù)字的數(shù)值。</p><p><b>  3.2軟件設(shè)計(jì)</b></p><p><b>  3.2.1主程序。</b></p>

36、<p>  主程序主要用于系統(tǒng)初始化:設(shè)置計(jì)時(shí)緩沖區(qū)的位置及初值,設(shè)置8155的工作方式、定時(shí)器的工作方式和計(jì)數(shù)初值等參數(shù)。主程序流程如下圖所示。</p><p><b>  開始</b></p><p><b>  定義堆棧區(qū)</b></p><p>  T0、數(shù)據(jù)緩沖區(qū)、標(biāo)志位初始化</p>

37、<p><b>  調(diào)用鍵盤掃描程序</b></p><p><b>  否</b></p><p>  是C/R鍵? </p><p><b>  是</b></p><p>  地址指針指向計(jì)時(shí)緩沖區(qū)</p><p><b

38、>  調(diào)用時(shí)間設(shè)置程序</b></p><p><b>  主程序流程圖</b></p><p><b>  3.2.2計(jì)時(shí)。</b></p><p>  即定時(shí)器0中斷子程序,完成刷新計(jì)時(shí)緩沖區(qū)的功能。</p><p>  系統(tǒng)使用6MHz的晶振,假設(shè)定時(shí)器0工作在方式1,則定時(shí)

39、器的最大定時(shí)時(shí)間為65.536ms,這個(gè)值遠(yuǎn)遠(yuǎn)小于1s。因此本系統(tǒng)采用定時(shí)器與軟件循環(huán)相結(jié)合的定時(shí)方法。設(shè)定時(shí)器0工作在方式1,每隔50ms溢出中斷一次,則循環(huán)中斷20次延時(shí)時(shí)間是1s,上述過程重復(fù)60次為1分,分計(jì)時(shí)60次為1小時(shí),小時(shí)計(jì)時(shí)24次則時(shí)間重新回到00:00:00。</p><p>  因定時(shí)器0工作在方式1,則50ms定時(shí)對(duì)應(yīng)的定時(shí)器初值為:65536-50ms/2us=40536=9E58H,即

40、TH0=9EH,TH0=58H。</p><p>  但應(yīng)當(dāng)指出:CPU從響應(yīng)T0中斷到完成定時(shí)器初值重裝這段時(shí)間,定時(shí)器T0并不停止工作,而是繼續(xù)計(jì)數(shù)。因此,為了確保T0能準(zhǔn)確定時(shí)50ms,重裝的定時(shí)器初值必須加以修正,修正的定時(shí)器初值必須考慮到從原定時(shí)器初值中扣除計(jì)數(shù)器多計(jì)的脈沖個(gè)數(shù)。由于定時(shí)器計(jì)數(shù)脈沖的周期恰好和機(jī)器周期吻合,因此修正量等于CPU從響應(yīng)中斷到重裝完TL0為止所用的機(jī)器周期數(shù)。CPU響應(yīng)中斷通

41、常要3~8個(gè)機(jī)器周期。經(jīng)過測(cè)試,定時(shí)器0重裝的計(jì)數(shù)初值設(shè)為9E5FH~9E67H,可以滿足精度要求。另外,MCS-51單片機(jī)只有二進(jìn)制加法指令,而時(shí)間是按十進(jìn)制遞增,因此用加法指令后必須進(jìn)行二-十進(jìn)制轉(zhuǎn)換。</p><p>  計(jì)時(shí)模塊流程圖如下圖所示。</p><p><b>  保護(hù)現(xiàn)場(chǎng)</b></p><p><b>  重裝定

42、時(shí)器初值</b></p><p><b>  循環(huán)次數(shù)減1</b></p><p><b>  否</b></p><p><b>  滿20次?</b></p><p><b>  是</b></p><p><

43、b>  秒單元加1</b></p><p><b>  否</b></p><p><b>  60s到?</b></p><p><b>  是</b></p><p>  秒單元清0,分單元加1</p><p><b> 

44、 否</b></p><p><b>  60分到?</b></p><p><b>  是</b></p><p>  分單元清0,時(shí)單元加1</p><p><b>  否</b></p><p><b>  24小時(shí)到?<

45、;/b></p><p><b>  是</b></p><p><b>  時(shí)單元清0</b></p><p><b>  恢復(fù)現(xiàn)場(chǎng)</b></p><p><b>  返回</b></p><p>  3.2.3時(shí)間設(shè)置模

46、塊。</p><p>  該模塊由鍵盤輸入相應(yīng)的數(shù)據(jù)來設(shè)置當(dāng)前時(shí)間。程序通過調(diào)用一個(gè)鍵盤設(shè)置子程序通過鍵盤掃描將鍵入的6位時(shí)間值送入顯示緩沖區(qū)。</p><p>  設(shè)置時(shí)間后,時(shí)鐘要從這個(gè)時(shí)間開始計(jì)時(shí),而時(shí)分秒單元各占一個(gè)字節(jié),鍵盤占6個(gè)字節(jié)。因此程序中要調(diào)用一個(gè)合字子程序?qū)@示緩沖區(qū)中的6位BCD碼合并為3位壓縮BCD碼,并送入計(jì)時(shí)緩沖區(qū),作為當(dāng)前計(jì)時(shí)起始時(shí)間。</p>

47、<p>  該程序同時(shí)要檢測(cè)輸入時(shí)間值的合法性,若鍵盤輸入的小時(shí)值大于23,分、秒值大于59,則不合法,將取消本次設(shè)置,清零重新開始計(jì)時(shí)。</p><p>  時(shí)間設(shè)置和鍵盤設(shè)置子程序的流程圖如下圖所示。</p><p><b>  保護(hù)現(xiàn)場(chǎng)</b></p><p>  調(diào)用鍵盤設(shè)置子程序KETIN</p><p&

48、gt;  調(diào)用合字子程序COMB</p><p><b>  恢復(fù)現(xiàn)場(chǎng)</b></p><p><b>  返回</b></p><p><b>  時(shí)間設(shè)置流程圖</b></p><p><b>  保護(hù)現(xiàn)場(chǎng)</b></p><p&g

49、t;  顯示緩沖區(qū)首地址送R0鍵盤輸入次數(shù)送R7</p><p>  調(diào)用鍵盤掃描程序KEYSCAN</p><p><b>  鍵號(hào)送@R0</b></p><p><b>  顯示緩沖區(qū)地址加1</b></p><p><b>  循環(huán)次數(shù)減1</b></p>

50、<p><b>  否</b></p><p><b>  循環(huán)結(jié)束?</b></p><p><b>  是</b></p><p><b>  恢復(fù)現(xiàn)場(chǎng)</b></p><p><b>  返回</b></p&g

51、t;<p>  鍵盤設(shè)置子程序流程圖</p><p><b>  3.2.4顯示。</b></p><p>  連接電源后,調(diào)整時(shí)間,lcd屏上會(huì)顯示出年月日時(shí)分秒。</p><p>  顯示程序流程圖如下圖所示。</p><p><b>  保護(hù)現(xiàn)場(chǎng)</b></p>&

52、lt;p><b>  否</b></p><p><b>  允許顯示?</b></p><p><b>  調(diào)用拆字程序</b></p><p><b>  是</b></p><p><b>  動(dòng)態(tài)掃描顯示</b><

53、/p><p><b>  返回</b></p><p><b>  顯示程序流程圖</b></p><p><b>  掃描鍵盤</b></p><p><b>  否</b></p><p>  調(diào)用顯示程序

54、 有鍵按下?</p><p><b>  是</b></p><p><b>  調(diào)用顯示程序</b></p><p><b>  否</b></p><p><b>  有鍵按下?</b></p><p><b>  是

55、</b></p><p><b>  求取鍵號(hào)</b></p><p><b>  返回</b></p><p><b>  鍵盤掃描程序流程圖</b></p><p><b>  3.2.5程序:</b></p><p&g

56、t;  #include<reg52.h></p><p>  #include<intrins.h></p><p>  #define uint unsigned int </p><p>  #define uchar unsigned char</p><p>  #define PIN P0</p&g

57、t;<p>  sbit LCDE=P2^7;</p><p>  sbit RW=P2^5;</p><p>  sbit RS=P2^6;</p><p>  sbit k1=P1^0;</p><p>  sbit k2=P1^1;</p><p>  sbit k3=P1^2;</p>

58、<p>  sbit sck=P3^6;</p><p>  sbit io=P3^4;</p><p>  sbit RST=P3^5;</p><p>  uint w[7]={0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c}; //寫地址</p><p>  uint r[7]={0x

59、81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d}; //讀地址</p><p>  char num1[10]="0123456789";</p><p>  unsigned char time1[7]={0x50,0x59,0x23,0x04,0x11,0x02,0x14};</p><p>  uint se

60、cond,hour,min,num,a,time[7];</p><p>  uint nian,yue,ri,shi,fen,miao,zhou;</p><p>  void delay(uint z)//延時(shí)程序</p><p><b>  {</b></p><p><b>  uint

61、 x,y;</b></p><p>  for(x=z;x>0;x--)</p><p>  for(y=110;y>0;y--);</p><p><b>  } </b></p><p>  void writecom(uchar com) //LCD寫命令</p>

62、<p><b>  {</b></p><p><b>  LCDE=0;</b></p><p><b>  RS=0;</b></p><p><b>  RW=0;</b></p><p><b>  PIN=com;</

63、b></p><p>  delay(10);</p><p><b>  LCDE=1;</b></p><p>  delay(10);</p><p><b>  LCDE=0;</b></p><p><b>  }</b></p&g

64、t;<p>  void writedata(uchar dat)//LCD寫數(shù)據(jù)</p><p><b>  {</b></p><p><b>  LCDE=0;</b></p><p><b>  RS=1;</b></p><p><b>

65、;  RW=0;</b></p><p><b>  PIN=dat;</b></p><p>  delay(10);</p><p><b>  LCDE=1;</b></p><p>  delay(10);</p><p><b>  LCDE=

66、0;</b></p><p><b>  RS=0;</b></p><p><b>  }</b></p><p>  void LCDINIT()//初始化LCD</p><p><b>  { </b></p><p> 

67、 delay(1000);</p><p><b>  LCDE=0;</b></p><p><b>  RW=0;</b></p><p>  writecom(0x38);設(shè)置顯示模式</p><p>  writecom(0x0c);不顯示光標(biāo),光標(biāo)不閃爍</p><p&

68、gt;  writecom(0x06);寫一個(gè)指針加1</p><p>  writecom(0x01);清屏</p><p>  writecom(0x80);設(shè)置數(shù)據(jù)指針起點(diǎn)</p><p><b>  }</b></p><p>  void ds1302writebyte(uint dat)//ds1302寫

69、單個(gè)數(shù)據(jù)</p><p><b>  {</b></p><p><b>  uint i;</b></p><p><b>  sck=0;</b></p><p><b>  _nop_();</b></p><p><b

70、>  _nop_();</b></p><p>  for(i=0;i<8;i++)</p><p><b>  {</b></p><p>  io=dat&0x01;</p><p><b>  dat>>=1;</b></p><

71、p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  sck=1;</b></p><p><b>  _nop_();</b></p><p><b>  _nop_(

72、);</b></p><p><b>  sck=0;</b></p><p><b>  _nop_();</b></p><p>  _nop_();</p><p><b>  }</b></p><p><b>  

73、}</b></p><p>  uint ds1302readbyte() //1302讀單個(gè)數(shù)據(jù)</p><p><b>  {</b></p><p>  uint i,value;</p><p><b>  sck=0;</b></p><p>

74、<b>  _nop_();</b></p><p><b>  _nop_();</b></p><p>  for(i=0;i<8;i++)</p><p><b>  {</b></p><p>  value>>=1;</p><p

75、><b>  if(io)</b></p><p><b>  {</b></p><p>  value=value|0x80;</p><p><b>  } </b></p><p><b>  sck=1;</b></p>

76、<p><b>  _nop_();</b></p><p><b>  _nop_();</b></p><p><b>  sck=0;</b></p><p><b>  _nop_();</b></p><p><b>  _

77、nop_();</b></p><p><b>  }</b></p><p>  return value;</p><p><b>  }</b></p><p>  void ds1302wr(uint add,uint dat) //多個(gè)字節(jié)寫入</p>&l

78、t;p><b>  {</b></p><p><b>  RST=0;</b></p><p><b>  _nop_();</b></p><p><b>  sck=0;</b></p><p><b>  _nop_();</

79、b></p><p><b>  RST=1;</b></p><p><b>  _nop_();</b></p><p>  ds1302writebyte(add);</p><p>  ds1302writebyte(dat);</p><p><b&g

80、t;  RST=0;</b></p><p><b>  _nop_();</b></p><p><b>  }</b></p><p>  uint ds1302rd(uint add)//讀取多個(gè)數(shù)據(jù)</p><p><b>  {</b></p&g

81、t;<p><b>  uint ks;</b></p><p><b>  RST=0;</b></p><p><b>  _nop_();</b></p><p><b>  sck=0;</b></p><p><b>  

82、_nop_();</b></p><p><b>  RST=1;</b></p><p><b>  _nop_();</b></p><p>  ds1302writebyte(add);</p><p>  ks=ds1302readbyte();</p><p

83、><b>  RST=0;</b></p><p><b>  _nop_();</b></p><p>  io=0; //此條語句必不可少。如果少了這條語句的話,液晶顯示會(huì)不完全。</p><p><b>  _nop_();</b></p><p><b&

84、gt;  io=1;</b></p><p><b>  _nop_();</b></p><p>  return ks;</p><p><b>  }</b></p><p>  void Ds1302Init()</p><p><b>  {&

85、lt;/b></p><p>  unsigned char n;</p><p>  ds1302wr(0x8E,0X00); //禁止寫保護(hù),就是關(guān)閉寫保護(hù)功能</p><p>  for(n=3;n<7;n++)//寫入7個(gè)字節(jié)的時(shí)鐘信號(hào):分秒時(shí)日月周年</p><p><b>  {</b><

86、;/p><p>  ds1302wr(w[n],time1[n]);</p><p><b>  }</b></p><p>  ds1302wr(0x8E,0x80); //打開寫保護(hù)功能</p><p><b>  }</b></p><p>  void rdtime

87、()//1302讀初始時(shí)間</p><p><b>  {</b></p><p>  miao=ds1302rd(r[0]);</p><p>  fen=ds1302rd(r[1]);</p><p>  shi=ds1302rd(r[2]); </p><p>  zhou=d

88、s1302rd(r[5]);</p><p>  ri=ds1302rd(r[3]);</p><p>  yue=ds1302rd(r[4]);</p><p>  nian=ds1302rd(r[6]);</p><p><b>  }</b></p><p>  void displ

89、ay()</p><p><b>  { </b></p><p><b>  //顯示函數(shù)</b></p><p>  int i,j,a[8];</p><p>  writecom(0x80);</p><p>  a[0]=(num1[(nian)/16]);

90、 // 年</p><p>  a[1]=(num1[(nian)%16]);</p><p>  a[2]=0X3A;</p><p>  a[3]=num1[yue/16];//月</p><p>  a[4]=num1[yue%16];</p><p>  a[5]=0X3A;</p&

91、gt;<p>  a[6]=num1[ri/16];//日</p><p>  a[7]=num1[ri%16];</p><p>  for( i=0;i<8;i++)</p><p><b>  {</b></p><p>  writedata(a[i]);</p><

92、p>  delay(10);</p><p><b>  }</b></p><p>  writecom(0x80+0x40+7);</p><p>  a[0]=(num1[(shi)/16]); //小時(shí)</p><p>  a[1]=(num1[(shi)%16]);</p><

93、p>  a[2]=0X3A;</p><p>  a[3]=num1[fen/16];//分鐘</p><p>  a[4]=num1[fen%16];</p><p>  a[5]=0X3A;</p><p>  a[6]=num1[miao/16]; //秒鐘</p><p>

94、  a[7]=num1[miao%16];</p><p>  for(j=0;j<8;j++) </p><p><b>  { </b></p><p>  writedata(a[j]);</p><p><b>  }</b></p><p><b

95、>  } </b></p><p>  void showtime(uint address,uint time)</p><p><b>  {</b></p><p>  delay(500);</p><p>  writedata(num1[time%16]);</p><p

96、>  writecom(0x80+0x40+address);</p><p>  writedata(num1[time/16]);</p><p>  writecom(0x80+0x40+1+address);</p><p>  writecom(0x0f);</p><p><b>  }</b><

97、/p><p>  void keyscan() //鍵盤掃描函數(shù)</p><p><b>  { </b></p><p>  if (0==k1) //K1時(shí)間停止</p><p><b>  { </b></p><p>  delay(1

98、0);</p><p><b>  if(0==k1)</b></p><p><b>  { </b></p><p><b>  num++;</b></p><p>  while(num>0&&num<=8)</p>

99、<p><b>  {</b></p><p>  if (0==k1)</p><p><b>  {</b></p><p><b>  if(0==k1)</b></p><p><b>  {num++;</b></p>

100、<p>  while(!k1)</p><p><b>  {</b></p><p>  switch(num)</p><p><b>  {</b></p><

101、p><b>  case 2:</b></p><p><b>  { </b></p><p><b>  uint i;</b></p><p><b>  num++;</b></p><p><b>  a=1;</b>

102、</p><p>  writecom(0x80+0x40+0x0e);</p><p>  writecom(0x0f);</p><p>  for(i=0;i<7;i++)</p><p><b>  {</b></p><p>  time1[i]=ds1302rd(r[i]);;&

103、lt;/p><p><b>  }</b></p><p><b>  }</b></p><p><b>  break;</b></p><p><b>  case 4:</b></p><p><b>  {<

104、/b></p><p><b>  num++;</b></p><p>  writecom(0x80+0x40+0x0b);</p><p>  writecom(0x0f);</p><p><b>  }</b></p><p><b>  break

105、;</b></p><p><b>  case 6:</b></p><p><b>  {</b></p><p><b>  num++;</b></p><p>  writecom(0x80+0x40+0x08);</p><p>

106、  writecom(0x0f);</p><p><b>  }</b></p><p><b>  break;</b></p><p><b>  case 8:</b></p><p><b>  {</b></p><p>

107、;<b>  num=0;</b></p><p><b>  a=0;</b></p><p>  Ds1302Init();</p><p>  delay(10);</p><p>  writecom(0x0c);</p><p><b>  }</b

108、></p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }<

109、/b></p><p><b>  if(0==k2)</b></p><p><b>  {</b></p><p><b>  delay(5);</b></p><p><b>  if(0==k2)</b></p><p&

110、gt;<b>  {</b></p><p>  while(!k2)</p><p>  switch(num)//K2,時(shí),分,秒加數(shù)</p><p><b>  {</b></p><p><b>  case 3:</b></p><p>

111、;<b>  {</b></p><p>  if(9==time1[0]%16)</p><p><b>  { </b></p><p>  time1[0]+=6;</p><p><b>  }</b></p><p>  time1[

112、0]++; </p><p>  if(time1[0]==0x60)</p><p>  time1[0]=0;</p><p>  showtime(0xd,time1[0]);</p><p><b>  }</b></p><p><b>  break;</b

113、></p><p><b>  case 5:</b></p><p><b>  { </b></p><p>  if(9==time1[1]%16)</p><p><b>  { </b></p><p>  time1[1]+=6;

114、</p><p><b>  }</b></p><p>  ++time1[1];</p><p>  while(0x60==time1[1])</p><p>  time1[1]=0;</p><p>  showtime(0xa,time1[1]); </p&

115、gt;<p><b>  }</b></p><p><b>  break;</b></p><p><b>  case 7:</b></p><p><b>  { </b></p><p>  if(9==time1[2]%16)&l

116、t;/p><p><b>  { </b></p><p>  time1[2]+=6;</p><p><b>  }</b></p><p>  ++time1[2];</p><p>  while(0x24==time1[2])</p><p&g

117、t;  time1[2]=0;</p><p>  Ds1302Init();</p><p>  showtime(7,time1[2]);</p><p><b>  }</b></p><p><b>  break;</b></p><p>

118、<b>  }</b></p><p><b>  }</b></p><p>  } </p><p><b>  if(0==k3)</b></p><p><b>  {</b></p><p><

119、b>  delay(5);</b></p><p><b>  if(0==k3)</b></p><p><b>  {</b></p><p>  while(!k3)</p><p>  switch(num) //K3,時(shí),分,秒減數(shù)</p><

120、p><b>  {</b></p><p><b>  case 3:</b></p><p><b>  {</b></p><p>  if(0==time1[0]%16)</p><p><b>  { </b></p><

121、;p>  time1[0]-=6;</p><p>  if((0-6)==time1[0])</p><p>  time1[0]=0x5a;</p><p>  } </p><p>  --time1[0];</p><p>  showtime(0x0d,time1[0]);&l

122、t;/p><p><b>  }</b></p><p><b>  break;</b></p><p><b>  case 5:</b></p><p><b>  { </b></p><p>  if(0==time1[1]

123、%16)</p><p><b>  { </b></p><p>  time1[1]-=6;</p><p>  if((0-6)==time1[1])</p><p>  time1[1]=0x5a;</p><p><b>  }</b></p>

124、<p>  --time1[1];</p><p>  showtime(0x0a,time1[1]);</p><p><b>  }</b></p><p><b>  break;</b></p><p><b>  case 7:</b></p>

125、;<p>  { </p><p>  if(0==time1[2]%16)</p><p><b>  { </b></p><p>  time1[2]-=6;</p><p>  if((0-6)==time1[2])</p><p>  time1[

126、2]=0x5a;</p><p><b>  }</b></p><p>  --time1[2];</p><p>  showtime(0x07,time1[2]);</p><p><b>  }</b></p><p><b>  break;<

127、;/b></p><p><b>  } </b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }<

128、/b></p><p><b>  } </b></p><p><b>  } </b></p><p>  void main()</p><p><b>  {</b></p><p>  Ds1302Init();</

129、p><p>  LCDINIT();</p><p><b>  while(1)</b></p><p><b>  { </b></p><p>  keyscan();</p><p><b>  rdtime();</b></p>

130、<p>  display();</p><p><b>  }</b></p><p><b>  } </b></p><p><b>  4.實(shí)驗(yàn)結(jié)果與分析</b></p><p><b>  5.心得體會(huì)</b></p>

131、<p>  我在這一次電子鐘的設(shè)計(jì)過程中,很是受益匪淺。通過對(duì)自己在大學(xué)三年時(shí)間里所學(xué)的知識(shí)的回顧,并充分發(fā)揮對(duì)所學(xué)知識(shí)的理解和對(duì)畢業(yè)設(shè)計(jì)的思考及書面表達(dá)能力,最終完成了。這為自己今后進(jìn)一步深化學(xué)習(xí),積累了一定寶貴的經(jīng)驗(yàn)。撰寫論文的過程也是專業(yè)知識(shí)的學(xué)習(xí)過程,它使我運(yùn)用已有的專業(yè)基礎(chǔ)知識(shí),對(duì)其進(jìn)行設(shè)計(jì),分析和解決一個(gè)理論問題或?qū)嶋H問題,把知識(shí)轉(zhuǎn)化為能力的實(shí)際訓(xùn)練。培養(yǎng)了我運(yùn)用所學(xué)知識(shí)解決實(shí)際問題的能力。</p>

132、<p>  通過這次課程設(shè)計(jì)我發(fā)現(xiàn),只有理論水平提高了;才能夠?qū)⒄n本知識(shí)與實(shí)踐相整合,理論知識(shí)服務(wù)于教學(xué)實(shí)踐,以增強(qiáng)自己的動(dòng)手能力。這個(gè)實(shí)驗(yàn)十分有意義 我獲得很深刻的經(jīng)驗(yàn)。通過這次課程設(shè)計(jì),我們知道了理論和實(shí)際的距離,也知道了理論和實(shí)際想結(jié)合的重要性,也從中得知了很多書本上無法得知的知識(shí)。 </p><p>  我們的學(xué)習(xí)不但要立足于書本,以解決理論和實(shí)際教學(xué)中的實(shí)際問題為目的,還要

133、以實(shí)踐相結(jié)合,理論問題即實(shí)踐課題,解決問題即課程研究,學(xué)生自己就是一個(gè)專家,通過自己的手來解決問題比用腦子解決問題更加深刻。學(xué)習(xí)就應(yīng)該采取理論與實(shí)踐結(jié)合的方式,理論的問題,也就是實(shí)踐性的課題。這種做法既有助于完成理論知識(shí)的鞏固,又有助于帶動(dòng)實(shí)踐,解決實(shí)際問題,加強(qiáng)我們的動(dòng)手能力和解決問題的能力。</p><p><b>  參考文獻(xiàn)</b></p><p>  [1]

134、 謝自美.電子線路設(shè)計(jì)·實(shí)驗(yàn)·測(cè)試[M].武漢:華中理工大學(xué)出版社,1992.</p><p>  [2] 何立民.單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)[M].北京:北京航空航天大學(xué)出版社,1993.</p><p>  [3] 樓然笛.單片機(jī)開發(fā)[M].北京:人民郵電出版社,1994.[4] 付家才.單片機(jī)控制工程實(shí)踐技術(shù)[M].北京:化學(xué)工業(yè)出版社 2004.3.[5] 李光才.

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲(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)論