

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 目 錄</b></p><p> 1、設(shè)計(jì)內(nèi)容及要求..........................................2</p><p> 1.1、設(shè)計(jì)內(nèi)容...........................................2</p><p> 1.2、設(shè)計(jì)要求......
2、.....................................2</p><p> 1.3、撰寫設(shè)計(jì)報(bào)告.......................................2</p><p> 2、總體方案設(shè)計(jì).............................................2</p><p> 2.1、方案圖..
3、................................ .............2</p><p> 2.2、面板布置圖..................... ......................2</p><p> 2.3、方案討論.......................................... ...3</p><p&
4、gt; 2.4、明晰任務(wù).................. ...................... .....4</p><p> 3、電路原理圖................... ............................. 4 </p><p> 4、程序框圖 ........................ ...
5、.....................5</p><p> 4.1、顯示子程序流程圖............... .....................5</p><p> 4.2、實(shí)時(shí)時(shí)鐘芯片1302讀/寫數(shù)據(jù)流程圖.........................6</p><p> 5、編程序..........................
6、..........................6</p><p> 6、調(diào)試......................................................6</p><p> 6.1、軟件調(diào)試....................... .. ......................6</p><p> 6.2、仿真調(diào)
7、試........................ ............ ............7</p><p> 7、自我感想.................. ................................7</p><p> 8、參考書目......................... .........................8</p
8、><p> 9、附錄:C語言編程源程序.................... .................8</p><p> 1. 設(shè)計(jì)內(nèi)容及要求</p><p> 1. 1、設(shè)計(jì)內(nèi)容:</p><p> 以AT89C51單片機(jī)為核心,制作一個(gè)LCD顯示的智能電子鐘。</p><p><b>
9、 1.2、設(shè)計(jì)要求:</b></p><p> (1) 計(jì)時(shí):秒、分、時(shí)、天、周、月、年。</p><p> (2) 閏年自動(dòng)判別。</p><p> (3) 時(shí)間、月、日交替顯示。</p><p> (5) 自定任意時(shí)刻自動(dòng)開/關(guān)屏。</p><p> (6) 計(jì)時(shí)精度:誤差≤1秒/月(具有微調(diào)
10、設(shè)置)。</p><p> 1.3、 撰寫設(shè)計(jì)報(bào)告</p><p> 單片機(jī)課程設(shè)計(jì)是以課題或項(xiàng)目設(shè)計(jì)方式開展的一門課程,具有較強(qiáng)的綜合性、實(shí)踐性,是工科、工程類院?;蚵殬I(yè)類院校電類專業(yè)在校生的必修課,是將單片機(jī)原理與應(yīng)用課程的理論知識(shí)轉(zhuǎn)變?yōu)閼?yīng)用技術(shù)的重要教學(xué)環(huán)節(jié)。這一環(huán)節(jié)不但能加深對(duì)單片機(jī)原理的理解,而且還能培養(yǎng)學(xué)生的實(shí)踐動(dòng)手能力,開發(fā)學(xué)生的分析、解決問題的能力。單片機(jī)課程設(shè)計(jì)環(huán)節(jié)的
11、訓(xùn)練能夠讓學(xué)生知道單片機(jī)工程項(xiàng)目的制作過程,使學(xué)生盡早了解單片機(jī)系統(tǒng)的開發(fā)流程。</p><p><b> 2. 總體方案設(shè)計(jì)</b></p><p><b> 2.1、方案圖</b></p><p><b> 2.2、面板布置圖</b></p><p><b>
12、; 2.3、方案討論</b></p><p> 方案一:采用實(shí)時(shí)時(shí)鐘芯片</p><p> 實(shí)時(shí)時(shí)鐘芯片具備年、月、日、時(shí)、分、秒計(jì)時(shí)功能和多點(diǎn)計(jì)時(shí)功能,計(jì)時(shí)數(shù)據(jù)的更新每秒自動(dòng)進(jìn)行一次,不需程序干預(yù)。計(jì)算機(jī)可通過中斷或查詢方式讀取計(jì)時(shí)數(shù)據(jù)進(jìn)行顯示,因此計(jì)時(shí)功能的實(shí)現(xiàn)無需占用CPU的時(shí)間,程序簡單。此外,實(shí)時(shí)時(shí)鐘芯片多數(shù)帶有鋰電池做后備電源,具備永不停止的計(jì)時(shí)功能;具有可編
13、程方波輸出功能,可用做實(shí)時(shí)測(cè)控系統(tǒng)的采樣信號(hào)等;有的實(shí)時(shí)時(shí)鐘芯片內(nèi)部還帶有非易失性RAM,可用來存放需長期保存但有時(shí)也需變更的數(shù)據(jù),由于功能完善,精度高,軟件程序設(shè)計(jì)相對(duì)簡單,且計(jì)時(shí)不占用CPU時(shí)間,因此,在工業(yè)實(shí)時(shí)測(cè)控系統(tǒng)中多采用這一類專用芯片來實(shí)現(xiàn)實(shí)時(shí)時(shí)鐘功能。</p><p><b> 方案二:軟件控制</b></p><p> 利用單片機(jī)內(nèi)部的定時(shí)/計(jì)數(shù)器
14、進(jìn)行中斷定時(shí),配合軟件延時(shí)實(shí)現(xiàn)時(shí)、分、秒的計(jì)時(shí)及秒表計(jì)時(shí)。該方案節(jié)省硬件成本,且能使設(shè)計(jì)者對(duì)單片機(jī)的指令系統(tǒng)能有更深入的了解,從而掌握單片機(jī)應(yīng)用技術(shù)MCS-51匯編語言程序設(shè)計(jì)方法,因此,本系統(tǒng)設(shè)計(jì)采用此種軟件控制方法來實(shí)現(xiàn)計(jì)時(shí)。而由于Atmel公司的AT89C51是一種自帶4KB Flash存儲(chǔ)器的低電壓、高性能的CMOS 8位微處理器。該器件采用Atmel高密度非易失存儲(chǔ)器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出引腳相兼容
15、。AT89C51將多功能8位CPU和閃存集成在單個(gè)芯片中,是一種高效的微控制器,使用也更方便,壽命更長,可以反復(fù)擦除1000次。形成了功能強(qiáng)大、使用靈活和具有較高性能價(jià)格比的微控制器。它的功能強(qiáng)大,而且也比較容易購買,故本設(shè)計(jì)中所選的單片機(jī)為AT89C51單片機(jī)。</p><p><b> 2.4、明晰任務(wù)</b></p><p> 采用AT89C51單片機(jī)作為系
16、統(tǒng)的控制核心。時(shí)鐘數(shù)據(jù)通過市場(chǎng)上流行的時(shí)鐘芯片DS1302來獲取。DS1302是DALLAS公司推出的涓流充電時(shí)鐘芯片,內(nèi)含一個(gè)實(shí)時(shí)時(shí)鐘/日歷和31字節(jié)靜態(tài)RAM,可以通過串行接口與計(jì)算機(jī)進(jìn)行通信,使得管腳數(shù)量減少。實(shí)時(shí)時(shí)鐘/日歷電路能夠計(jì)算2100年之前的秒、分、時(shí)、日、星期、月、年的,具有閏年自動(dòng)判斷調(diào)整的能力。定時(shí)電路能夠?qū)崿F(xiàn)自定任意時(shí)刻自動(dòng)開/關(guān)屏,采用LCD LM016L顯示年、月、周、天、時(shí)、分、秒。通過按鍵開關(guān)實(shí)現(xiàn)微調(diào),確
17、保計(jì)時(shí)精度:誤差≤1秒/月。</p><p> DS1302時(shí)鐘芯片的主要功能特性:</p><p> (1) 能計(jì)算2100年之前的年、月、日、星期、時(shí)、分、秒的信息;每月的天數(shù)和閏年的天數(shù)可自動(dòng)調(diào)整;時(shí)鐘可設(shè)置為24或12小時(shí)格式。</p><p> (2) 31B的8位暫存數(shù)據(jù)存儲(chǔ)RAM。</p><p> (3) 串行I/O口
18、方式使得引腳數(shù)量最少。</p><p> (4) DS1302與單片機(jī)之間能簡單地采用同步串行的方式進(jìn)行通信,僅需3根線。</p><p> (5) 寬范圍工作電壓2.0-5.5V。</p><p> (6) 工作電流為2.0A時(shí),小于300nA。</p><p> (7) 功耗很低,保持?jǐn)?shù)據(jù)和時(shí)鐘信息時(shí)功率小于1mW。</p&
19、gt;<p><b> 3.電路原理圖</b></p><p><b> 4.程序框圖</b></p><p> 4.1、顯示子程序流程圖</p><p> 4.2、實(shí)時(shí)時(shí)鐘芯片1302讀/寫數(shù)據(jù)流程圖</p><p><b> 5.編程序</b><
20、;/p><p><b> 源程序見附錄部分</b></p><p><b> 6.調(diào)試</b></p><p><b> 6.1、軟件調(diào)試</b></p><p> 目前設(shè)計(jì)過程中容易造成元件和儀器儀表的損壞,而借助Keil和Proteus進(jìn)行單片機(jī)系統(tǒng)的開發(fā),可以節(jié)省設(shè)計(jì)
21、成本,提高設(shè)計(jì)速度。</p><p> Keil軟件包是一個(gè)功能強(qiáng)大的開發(fā)平臺(tái),它包括項(xiàng)目管理器、CX51編譯器、AX51宏匯編器、BL51/LX51連接定位器、RTX51實(shí)時(shí)操作系統(tǒng)、Simulator軟件模擬器及Monitor51硬件目標(biāo)調(diào)試器。它是一種集成化程度高的文件管理編譯環(huán)境,主要功能為編譯C語言源程序,匯編程序或混合語言源程序,連接和定位目標(biāo)文件和庫,創(chuàng)建HEX文件,調(diào)試目標(biāo)程序等。Keil是目前
22、最好的51單片機(jī)開發(fā)工具之一。Keil支持軟件模擬仿真(Simulator)和用戶目標(biāo)調(diào)試(Monitor51)兩種工作模式。前者不需要任何單片機(jī)硬件即可完成用戶程序仿真、調(diào)試,后者利用硬件目標(biāo)板中的監(jiān)控程序可以直接調(diào)試目標(biāo)硬件系統(tǒng)。</p><p> Proteus是一個(gè)完整的嵌入式系統(tǒng)軟件、硬件設(shè)計(jì)仿真平臺(tái),它包括原理圖輸入系統(tǒng)ISIS、帶擴(kuò)展的Prospice混合模型仿真器、動(dòng)態(tài)元件庫、高級(jí)圖形分析模塊和
23、處理器虛擬系統(tǒng)仿真模型VSM。ISIS是Proteus系統(tǒng)的中心,具有超強(qiáng)的控制原理設(shè)計(jì)環(huán)境。ProteusVSM最重要的特點(diǎn)是能把微處理器軟件作用在處理器上,并和該處理器的任何模擬和數(shù)字元件協(xié)同仿真,仿真執(zhí)行目標(biāo)碼就像在真正的單片機(jī)系統(tǒng)上運(yùn)行一樣,VSM CPU模型能完整仿真I/O接口、中斷、定時(shí)器、通用外部設(shè)備口及其他與CPU有關(guān)的外部設(shè)備,甚至能仿真多個(gè)處理器。</p><p><b> 6.2
24、、仿真調(diào)試</b></p><p><b> Keil仿真:</b></p><p> Proteus仿真:</p><p><b> 7.自我感想</b></p><p> 經(jīng)歷過這么多天不間斷的課程設(shè)計(jì),我們有挺多感觸的,從最基本上說我們看到了,也意識(shí)到了自己的不足,對(duì)于不斷
25、克服的各種阻礙也讓我們體會(huì)到了課程設(shè)計(jì)的意義所在。</p><p> 對(duì)于只接觸課本只動(dòng)筆桿的我們,面臨實(shí)際的設(shè)計(jì)尺寸,讓我們很是尷尬,都說理論聯(lián)系實(shí)際,真正到聯(lián)系的時(shí)候才發(fā)現(xiàn)挺困難的,不過正是理論知識(shí)的各種補(bǔ)充才讓我們能最終完成任務(wù),然后深深地體會(huì)到理論對(duì)現(xiàn)實(shí)的指導(dǎo)作用。我們現(xiàn)在最缺乏的就是實(shí)際工作經(jīng)驗(yàn),而理論聯(lián)系實(shí)踐并不像我們想象的那么簡單,他需要堅(jiān)實(shí)的理論基礎(chǔ)和實(shí)際工作經(jīng)驗(yàn)。堅(jiān)實(shí)的理論基礎(chǔ)決定了我必須堅(jiān)持
26、學(xué)習(xí)新的知識(shí)新的理論,完善了自己的知識(shí)結(jié)構(gòu),才能在以后的實(shí)際中輕松面對(duì),才能設(shè)計(jì)出更好的更有益于人們生活與工作的機(jī)械,才能跟上時(shí)代的步伐,不被淘汰。</p><p> 在這個(gè)一邊忙著復(fù)習(xí)忙著考試又要準(zhǔn)備課程設(shè)計(jì)的日子里,真真正正的體會(huì)到了時(shí)間的寶貴,有點(diǎn)像高中忙忙碌碌的生活,不過能按時(shí)完成課程設(shè)計(jì)對(duì)我們來說也是一個(gè)莫大的安慰。</p><p> 嚴(yán)謹(jǐn)和細(xì)心是做機(jī)械設(shè)計(jì)的必要態(tài)度,要想做
27、好一件事,就必須一絲不茍、態(tài)度認(rèn)真。俗話說:“失之毫厘,謬之千里?!痹跈C(jī)械設(shè)計(jì)上尤其應(yīng)該注意。在以后的工作中,你的很小的一個(gè)疏忽將會(huì)造成一個(gè)公司很大的損失,甚至給用戶帶去生命危險(xiǎn),而自己也會(huì)為自己的不負(fù)責(zé)任行為付出代價(jià)。</p><p> 再者就是設(shè)計(jì)中要嚴(yán)謹(jǐn)和細(xì)心,對(duì)于機(jī)械是不能出差錯(cuò)的,任何的微小誤差都可能產(chǎn)生不可預(yù)計(jì)的后果,當(dāng)然對(duì)于我們來說就是設(shè)計(jì)中要走一些彎路,而且在這個(gè)嚴(yán)重缺少時(shí)間又惦記回家問題的我們
28、來說也是一個(gè)很嚴(yán)重的后果。</p><p> 不過,困難雖是難免的,但我們有信心就能并且已經(jīng)戰(zhàn)勝了困難,完成了這個(gè)無比揪心的課程設(shè)計(jì)。</p><p> 因?yàn)闀r(shí)間等各種關(guān)系設(shè)計(jì)中難免有些不足還請(qǐng)老師助教給予批評(píng)和幫助。</p><p><b> 8.參考書目</b></p><p> 《單片機(jī)原理及其應(yīng)用教程》
29、 張?jiān)?主編</p><p> 《MCS-51系列單片機(jī)原理及應(yīng)用》 孫涵芳 主編</p><p> 《新概念51單片機(jī)C語言教程》 郭天祥 主編</p><p> 《51單片機(jī)課程設(shè)計(jì)》 周向紅 主編</p><p> 9.附錄:C語言編程源程序</p><p> #include<reg51
30、.H> </p><p> #include<intrins.h></p><p> //---------------------------------------</p><p> #define uint unsigned int </p><p> #define uchar unsigned char&l
31、t;/p><p> //---------------------------------------</p><p> /*uchar code </p><p> table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf 8, </p><p> 0x80,0x98,
32、0x88,0x83,0xc6,0xa1,0x86,0x8e};// 共 陽極數(shù)碼管代碼 */ </p><p> uchar code </p><p> xingqi[8]={0x00,0x07,0x01,0x02,0x03,0x04,0x05, 0x06}; </p><p><b> //星期顯示代碼 </
33、b></p><p><b> uchar </b></p><p> miao,shi,fen,date,month,day,year,year10,set,mun,set_shi,set_fen,time_flag;</p><p> // 全 局 定 義 </p><p> uint year_dat
34、a,t;</p><p> //------------------------------------</p><p> sbit SCLK=P3^5; //DS1302 通訊線定義 </p><p> sbit DIO=P3^6; </p><p> sbit RST=P3^7; </p><p> sb
35、it speak=P0^0;</p><p> sbit DS=P2^0; //595 通訊線定義 </p><p> sbit SH_CP=P2^1; </p><p> sbit ST_CP1=P2^2; </p><p> sbit ST_CP2=P2^3; </p><p> sbit ST_CP3=
36、P2^4;</p><p> sbit ST_CP4=P2^5; </p><p> sbit ST_CP5=P2^6; </p><p> sbit ST_CP6=P2^7; </p><p> sbit ST_CP7=P3^0; </p><p> sbit ST_CP8=P3^1; </p>
37、<p> sbit OE1=P1^0; </p><p> sbit OE2=P1^1; </p><p> sbit OE3=P1^2; </p><p> sbit OE4=P1^3; </p><p> sbit OE5=P1^4; </p><p> sbit OE6=P1^5; &l
38、t;/p><p> sbit OE7=P1^6; </p><p> sbit OE8=P1^7; </p><p> sbit K1=P3^2;//按鍵接口定義 </p><p> sbit K2=P3^3; </p><p> sbit K3=P3^4; </p><p> sbit
39、 K4=P0^1; </p><p> sbit K5=P0^2; </p><p> //------------------------------------</p><p> void write_595(uchar temp) //寫 74HC595 一個(gè)字節(jié)</p><p><b> { </b>&
40、lt;/p><p> uchar temp_595,i;</p><p> temp_595=temp; </p><p> for(i=0;i<8;i++)</p><p><b> { </b></p><p><b> SH_CP=0; </b></p
41、><p> _nop_();_nop_();_nop_();</p><p> if(temp_595&0x80)</p><p><b> { </b></p><p><b> DS=1; </b></p><p><b> }</b>
42、</p><p><b> else </b></p><p><b> { </b></p><p><b> DS=0;</b></p><p><b> } </b></p><p> _nop_();_nop_(
43、);_nop_();</p><p><b> SH_CP=1; </b></p><p> temp_595<<=1; </p><p><b> } </b></p><p><b> } </b></p><p> //--
44、-------------------------------------------</p><p> void delay(uint z) //Nms 延時(shí) </p><p><b> { </b></p><p> uint x,y; </p><p> for(x=z;x>0;x--) </
45、p><p> for(y=112;y>0;y--); </p><p><b> } </b></p><p> //--------------------------------------------</p><p> void delaynus(uint z) //ums 延時(shí) </p>
46、<p><b> { </b></p><p> uint x,y; </p><p> for(x=z;x>0;x--) </p><p> for(y=10;y>0;y--); </p><p><b> } </b></p><p>
47、; //----------------------------------------------</p><p> void write(uchar date) //寫入 DS1302 一個(gè)字節(jié) </p><p><b> { </b></p><p> uchar temp,i; </p><p><
48、b> RST=1; </b></p><p><b> SCLK=0; </b></p><p> temp=date; </p><p> for(i=0;i<8;i++) </p><p> { SCLK=0; </p><p> if(temp&0
49、x01) </p><p><b> DIO=1; </b></p><p><b> else </b></p><p><b> DIO=0; </b></p><p><b> SCLK=1; </b></p><p>
50、; temp>>=1; </p><p><b> } </b></p><p><b> } </b></p><p> //------------------------------------</p><p> uchar read() //讀出 DS1302 一個(gè)字
51、節(jié) </p><p><b> { </b></p><p> uchar a,temp; </p><p><b> RST=1; </b></p><p> for(a=8;a>0;a--) </p><p><b> { </b>
52、</p><p> temp>>=1; </p><p><b> SCLK=1;</b></p><p><b> _nop_();</b></p><p> _nop_(); </p><p><b> _nop_(); </b&g
53、t;</p><p><b> _nop_();</b></p><p><b> _nop_();</b></p><p><b> _nop_();</b></p><p><b> _nop_();</b></p><p&
54、gt;<b> SCLK=0; </b></p><p><b> if(DIO) </b></p><p><b> { </b></p><p> temp=temp|0x80; </p><p><b> } </b></p>
55、<p><b> else </b></p><p><b> { </b></p><p> temp=temp|0x00; </p><p><b> } </b></p><p><b> } </b></p>
56、<p> return (temp);</p><p><b> } </b></p><p> //----------------------------------</p><p> void write_1302(uchar add,uchar dat) //寫DS1302數(shù)據(jù) </p><p&g
57、t;<b> { </b></p><p><b> RST=0; </b></p><p><b> SCLK=0; </b></p><p><b> RST=1; </b></p><p> write(add); </p>
58、<p> write(dat);</p><p><b> SCLK=1; </b></p><p><b> RST=0; </b></p><p><b> } </b></p><p> //-----------------------------
59、------------</p><p> uchar read_1302(uchar add) // 讀DS1302數(shù)據(jù) </p><p><b> { </b></p><p> uchar temp; </p><p><b> RST=0; </b></p><p
60、><b> SCLK=0; </b></p><p><b> RST=1; </b></p><p> write(add); </p><p> temp=read(); </p><p><b> SCLK=1;</b></p><p&
61、gt;<b> RST=0; </b></p><p> return(temp); </p><p><b> } </b></p><p> //-------------------------------------------</p><p> void display() /
62、/顯示子程序 </p><p><b> { </b></p><p> miao=read_1302(0x81); //讀秒 </p><p> fen=read_1302(0x83); //讀分 </p><p> shi=read_1302(0x85)&0x3f;//讀時(shí) </p>
63、<p> date=read_1302(0x87); //讀日 </p><p> month=read_1302(0x89); //讀月 </p><p> year=read_1302(0x8d); //讀年 </p><p> day=read_1302(0x8B); //讀星期 </p><p> write_5
64、95(miao); //顯示秒 </p><p> ST_CP1=0; </p><p> ST_CP1=1; </p><p> ST_CP1=0; </p><p> delaynus(10);</p><p> write_595(fen); //顯示分 </p><p> S
65、T_CP2=0; </p><p> ST_CP2=1; </p><p> ST_CP2=0; </p><p> delaynus(10); </p><p> write_595(shi); //顯示時(shí) </p><p> ST_CP3=0; </p><p> ST_CP3=
66、1; </p><p> ST_CP3=0; </p><p> delaynus(10); </p><p> write_595(date); //顯示日 </p><p> ST_CP4=0; </p><p> ST_CP4=1; </p><p> ST_CP4=0; &
67、lt;/p><p> delaynus(10); </p><p> write_595(month); //顯示月 讀 </p><p> ST_CP5=0; </p><p> ST_CP5=1; </p><p> ST_CP5=0; </p><p> delaynus(10)
68、; </p><p> write_595(year); //顯示年 </p><p> ST_CP6=0; </p><p> ST_CP6=1; </p><p> ST_CP6=0; </p><p> delaynus(10); </p><p> write_595(xin
69、gqi[day]); //顯示星期 </p><p><b> ST_CP7=0;</b></p><p> ST_CP7=1; </p><p> ST_CP7=0; </p><p> delaynus(10);</p><p><b> } </b></
70、p><p> //----------------------------------------- </p><p> void ds1302_init() //1302 初始化 </p><p><b> { </b></p><p><b> RST=0;</b></p>&
71、lt;p><b> SCLK=0; </b></p><p><b> /*</b></p><p> write_1302(0x80,0x00);//設(shè)置初始值SEC </p><p> write_1302(0x82,0x00);//設(shè)置初始值MIN </p><p> writ
72、e_1302(0x84,0x00);//設(shè)置初始值HR </p><p> write_1302(0x86,0x00);//設(shè)置初始值DATE </p><p> write_1302(0x88,0x00);//設(shè)置初始值MONTH </p><p> write_1302(0x8A,0x00);//設(shè)置初始值DAY</p><p>&
73、lt;b> */</b></p><p> write_1302 (0x8C,0x10);//設(shè)置初始值YEAR </p><p><b> } </b></p><p> //--------------------------------------------- </p><p> vo
74、id PORT_INIT() //端口初始化 </p><p><b> { </b></p><p><b> P0=0XFE; </b></p><p><b> P1=0X00;</b></p><p><b> P2=0X00; </b>&
75、lt;/p><p><b> P3=0XFC;</b></p><p><b> } </b></p><p> void time_init() //定時(shí)器初始化 </p><p><b> { </b></p><p> TMOD=0x11;
76、//設(shè)置定時(shí) 器 0\1 都為工作方式 1 </p><p> TH0=(65536-50000)/256; //裝入初值 </p><p> TL0=(65536-50000)%256; </p><p> TH1=(65536-10000)/256; //裝入初值 </p><p> TL1=(65536-10000)%256;
77、</p><p> PT0=1; //T0 定時(shí)器優(yōu)先級(jí)最高</p><p> EA=1 ;//開總中斷</p><p> ET0=1;//開定時(shí)器 0 中斷</p><p> ET1=1;//開定時(shí)器 1 中斷</p><p> TR0=1;//啟動(dòng)定時(shí)器 0</p><p> T
78、R1=1; // 啟動(dòng)定時(shí)器 1</p><p><b> } </b></p><p> //---------------------------------------------</p><p> void main(void) //主程序 </p><p><b> {</b>&l
79、t;/p><p> PORT_INIT(); </p><p> ds1302_init();</p><p> time_init(); </p><p> year=read_1302(0x8d); //讀年數(shù)據(jù) </p><p> year_data=0x2000|year;</p><
80、p> write_595(year_data>>8); //顯示 2010 年的 20 字樣 </p><p><b> ST_CP8=0;</b></p><p> ST_CP8=1; </p><p> ST_CP8=0; </p><p> set_shi=0x09; //鬧鐘初始值設(shè)
81、定 </p><p> set_fen=0x39; </p><p> time_flag=0; //標(biāo)志位 </p><p><b> set=0;</b></p><p><b> while(1) </b></p><p><b> { </
82、b></p><p> switch(set) </p><p><b> { </b></p><p> case 0: //設(shè)置秒 </p><p><b> { </b></p><p> display(); // 顯 示 子 程 序 </p&
83、gt;<p> if((shi==set_shi)&&(fen==set_fen)&&(time_flag==0)) //鬧鐘設(shè)定 只設(shè)定小時(shí)和分鐘 </p><p><b> { </b></p><p> speak=~speak; </p><p> if((K2==0)&&
84、amp;(time_flag==0)) //按鍵 K2 停 止鬧鐘響 </p><p><b> { </b></p><p><b> P0&=0XFE;</b></p><p> time_flag=1; </p><p><b> } </b></
85、p><p> delay(10);</p><p><b> } </b></p><p><b> }</b></p><p><b> break; </b></p><p><b> } </b></p>
86、<p> if (fen==set_fen+1) // 當(dāng) 不 按 下 鬧 鐘 停止按鍵,一分鐘后自動(dòng)停止鬧鐘 </p><p><b> { </b></p><p> P0&=0XFE; time_flag=0; </p><p><b> }</b></p><p>
87、<b> }</b></p><p><b> } </b></p><p> //---------------------------------------</p><p> void time0()interrupt 1 // 定時(shí) 器 0 中斷 </p><p><b>
88、 { </b></p><p><b> TR0=0; </b></p><p> TH0=(65536-50000)/256; </p><p> TL0=(65536-50000)%256; </p><p><b> mun++;</b></p><p
89、> if(mun==15) </p><p><b> { </b></p><p><b> mun=0; </b></p><p> switch(set)</p><p><b> { </b></p><p> case 1:
90、//設(shè)置秒閃爍 </p><p><b> {OE1=1; </b></p><p> delay(300);</p><p><b> OE1=0; </b></p><p><b> } </b></p><p><b> bre
91、ak; </b></p><p> case 2: //設(shè)置分閃爍 </p><p><b> { </b></p><p><b> OE2=1; </b></p><p> delay(300);</p><p><b> OE2=0; &
92、lt;/b></p><p><b> } </b></p><p><b> break; </b></p><p> case 3: //設(shè)置時(shí)閃爍 </p><p><b> { </b></p><p><b> OE3
93、=1;</b></p><p> delay(300);</p><p><b> OE3=0; </b></p><p><b> } </b></p><p><b> break; </b></p><p> case 4:
94、//設(shè)置日閃爍 </p><p><b> { </b></p><p><b> OE4=1;</b></p><p> delay(300); </p><p><b> OE4=0; } </b></p><p><b> br
95、eak; </b></p><p> case 5: //設(shè)置月閃爍 </p><p><b> { </b></p><p><b> OE5=1;</b></p><p> delay(300);</p><p><b> OE5=0; &
96、lt;/b></p><p><b> } </b></p><p><b> break; </b></p><p> case 6: //設(shè)置年閃爍 </p><p><b> { </b></p><p><b> OE6
97、=1;</b></p><p><b> OE8=1;</b></p><p> delay(300); </p><p><b> OE6=0; </b></p><p><b> OE8=0;</b></p><p><b&
98、gt; } </b></p><p><b> break; </b></p><p> case 7: //設(shè)置星期閃爍 </p><p><b> {</b></p><p><b> OE7=1;</b></p><p>
99、delay(200);</p><p><b> OE7=0; </b></p><p><b> } </b></p><p><b> break; </b></p><p> case 8: //設(shè)置鬧鐘閃爍 </p><p><b&
100、gt; { </b></p><p><b> OE2=1; </b></p><p><b> OE3=1; </b></p><p> delay(200);</p><p><b> OE2=0; </b></p><p>&
101、lt;b> OE3=0;</b></p><p><b> } </b></p><p><b> break; </b></p><p><b> } </b></p><p><b> } </b></p>
102、<p><b> TR0=1;</b></p><p><b> } </b></p><p> //------------------------------------------</p><p> void time1()interrupt 3 // 定時(shí)器 1 中斷 </p>&l
103、t;p><b> { </b></p><p> TR1=0; //先關(guān)定時(shí)器 </p><p> TH1=(65536-20000)/256; </p><p> TL1=(65536-20000)%256; </p><p> //--------------------------------<
104、;/p><p> if(K1==0) </p><p><b> { </b></p><p> delay(10); </p><p> if(K1==0) </p><p><b> {</b></p><p><b> set+
105、+; </b></p><p> if(set==9) </p><p><b> { </b></p><p><b> set=0;</b></p><p> write_1302(0x80,miao); //設(shè)置初始值 SEC </p><p>
106、 write_1302(0x82,fen); //設(shè)置初始值 MIN </p><p> write_1302(0x84,shi); //設(shè)置初始值 HR </p><p> write_1302(0x86,date); //設(shè)置初始值 DATE </p><p> write_1302(0x88,month); // 設(shè)置初始值 MONTH </p&g
107、t;<p> write_1302(0x8A,day); //設(shè)置初始值 DAY </p><p> write_1302(0x8C,year_data); //設(shè)置初始值 YEAR</p><p><b> } </b></p><p><b> t=50000; </b></p>&
108、lt;p> while((!K1)&&t) </p><p><b> { t--;</b></p><p><b> } </b></p><p><b> }</b></p><p><b> } </b></p
109、><p> //--------------------------------------</p><p> if(K2==0) </p><p><b> {</b></p><p> delay(10); </p><p> if(K2==0) </p><p>
110、;<b> {</b></p><p> switch(set)</p><p><b> { </b></p><p><b> case 1: </b></p><p><b> {</b></p><p><b
111、> miao++;</b></p><p> if((miao&0x0f)>0x09) </p><p><b> { </b></p><p> miao+=0x10; </p><p> miao&=0xf0;</p><p><b>
112、; } </b></p><p> if(miao==0x60) </p><p><b> { </b></p><p> miao=0x00;</p><p><b> } </b></p><p> write_595(miao); </
113、p><p> ST_CP1=0; </p><p> ST_CP1=1; </p><p> ST_CP1=0; </p><p><b> } </b></p><p><b> break;</b></p><p><b> c
114、ase 2: </b></p><p><b> { </b></p><p><b> fen++; </b></p><p> if((fen&0x0f)>0x09) </p><p><b> {</b></p><p
115、> fen+=0x10; </p><p> fen&=0xf0; </p><p><b> } </b></p><p> if (fen==0x60) </p><p><b> { </b></p><p><b> fen=0x0
116、0;</b></p><p><b> } </b></p><p><b> ST_CP2=0;</b></p><p> ST_CP2=1; </p><p> ST_CP2=0; </p><p><b> } break; </b
117、></p><p><b> case 3: </b></p><p><b> {</b></p><p> if((read_1302(0x85)&0x80)==0x00)</p><p><b> { </b></p><p>
118、;<b> shi++; </b></p><p> if((shi&0x0f)>0x09)</p><p><b> { </b></p><p> shi+=0x10; </p><p> shi&=0xf0;</p><p><b
119、> }</b></p><p> if(shi==0x24) //24 小時(shí)制 </p><p><b> { </b></p><p> shi=0x00; </p><p><b> } </b></p><p><b> } &l
120、t;/b></p><p><b> else</b></p><p><b> { </b></p><p> shi=(shi|0x80)+1; </p><p> if((shi&0x0f)>0x09) </p><p><b>
121、 { </b></p><p> shi+=0x10;</p><p> shi&=0xf0;</p><p><b> }</b></p><p> if(shi==0x12) //12 小時(shí)制 </p><p><b> { </b>&l
122、t;/p><p><b> shi=0X80;</b></p><p><b> } </b></p><p><b> } </b></p><p> write_595(shi); //顯示時(shí) </p><p> ST_CP3=0; </
123、p><p> ST_CP3=1; </p><p> ST_CP3=0; </p><p> } break; </p><p><b> case 4: </b></p><p><b> { </b></p><p><b>
124、date++; </b></p><p> if((date&0x0f)>0x09)</p><p><b> {</b></p><p> date+=0x10; </p><p> date&=0xf0; </p><p> } if((date==
125、0x32)&&((month==0x01)||(month==0x03)||(month==0x05)||(month==0x07)||(month==0x08)||(month==0x10)||(month==0x12)))</p><p><b> { </b></p><p> date=0x01; </p><p>
126、<b> } </b></p><p><b> else </b></p><p> if((date==0x31)&&((month==0x04)||(month==0x06)||(month==0x09)||(month==0x11))) </p><p><b> { </
127、b></p><p> date=0x01; </p><p><b> } </b></p><p><b> else </b></p><p> if((date==0x29)&&(month==0x02)&&((year_data|read_13
128、02(0x8d))%100!=0)&&((year_data|read_1302(0x8d))%400!=0)) </p><p><b> { </b></p><p> date=0x01;</p><p><b> }</b></p><p><b> els
129、e</b></p><p> if((date==0x30)&&(month==0x02)&&((year_data|read_1302(0x8d))%100==0)&&((year_data|read_1302(0x8d))%400==0)) </p><p><b> { </b></p>
130、<p> date=0x01;</p><p><b> } </b></p><p> write_595(date);</p><p> ST_CP4=0; </p><p> ST_CP4=1; </p><p><b> ST_CP4=0;</b
131、></p><p><b> } break;</b></p><p><b> case 5: </b></p><p><b> { </b></p><p><b> month++;</b></p><p>
132、 if((month&0x0f)>0x09) </p><p><b> { </b></p><p> month+=0x10;</p><p> month&=0xf0;</p><p><b> } </b></p><p> if(mo
133、nth==0x13) </p><p><b> { </b></p><p> month=0x01;</p><p><b> } </b></p><p> write_595(month); </p><p> ST_CP5=0; </p>
134、<p><b> ST_CP5=1;</b></p><p><b> ST_CP5=0;</b></p><p><b> } break; </b></p><p><b> case 6:</b></p><p><b>
135、 { </b></p><p> year_data++;</p><p> if((year_data&0x000f)==0x0a) </p><p><b> { </b></p><p> year_data+=0x0010; </p><p> year_d
136、ata&=0xfff0; </p><p><b> } </b></p><p> if((year_data&0x00ff)==0xa0)</p><p><b> { </b></p><p> year_data+=0x0100; //向前進(jìn) 1 </p>
137、<p> year_data&=0xff00; //后面尾數(shù)歸 0</p><p><b> }</b></p><p> write_595(year_data); </p><p> ST_CP6=0; </p><p><b> ST_CP6=1;</b>&l
138、t;/p><p> ST_CP6=0; </p><p> write_595(year_data>>8); </p><p> ST_CP8=0; </p><p> ST_CP8=1; </p><p> ST_CP8=0; </p><p><b> } b
139、reak; </b></p><p><b> case 7: </b></p><p><b> {</b></p><p><b> day++; </b></p><p> if((day&0x0f)==0x08) </p>&l
140、t;p><b> { </b></p><p><b> day=0x01;</b></p><p><b> } </b></p><p> write_595(xingqi[day]);</p><p> ST_CP7=0; </p><
141、;p><b> ST_CP7=1;</b></p><p><b> ST_CP7=0;</b></p><p><b> } break;</b></p><p><b> } </b></p><p> t=50000; </
142、p><p> while((!K2)&&t) </p><p><b> { </b></p><p><b> t--; </b></p><p><b> }</b></p><p><b> }</b>&
143、lt;/p><p><b> } </b></p><p> //-------------------------</p><p> if(K3==0) </p><p><b> { </b></p><p> delay(10);</p><
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機(jī)課程設(shè)計(jì)-智能電子鐘
- 單片機(jī)課程設(shè)計(jì)--智能電子鐘的設(shè)計(jì)
- 電子鐘單片機(jī)課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--電子鐘
- 單片機(jī)課程設(shè)計(jì)(電子鐘)
- 《單片機(jī)技術(shù)》電子鐘課程設(shè)計(jì)---數(shù)字電子鐘
- 電子鐘課程設(shè)計(jì)--基于單片機(jī)的電子鐘設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)——數(shù)字電子鐘
- 單片機(jī)課程設(shè)計(jì)--數(shù)字電子鐘
- 單片機(jī)課程設(shè)計(jì)--數(shù)字電子鐘
- 單片機(jī)原理課程設(shè)計(jì)--電子鐘
- 單片機(jī)數(shù)字電子鐘課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--數(shù)字電子鐘
- 單片機(jī)課程設(shè)計(jì)--數(shù)字鐘電子鐘
- 單片機(jī)課程設(shè)計(jì)--簡單電子鐘設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--數(shù)字電子鐘設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---電子鐘的設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)報(bào)告-電子鐘設(shè)計(jì)
- 單片機(jī)電子鐘課程設(shè)計(jì)---數(shù)字電子鐘
- 單片機(jī)課程設(shè)計(jì)報(bào)告---單片機(jī)的電子鐘設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論