

版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機(jī)電子時(shí)鐘課程設(shè)計(jì)報(bào)告
- 單片機(jī)電子時(shí)鐘課程設(shè)計(jì)報(bào)告
- 單片機(jī)電子時(shí)鐘課程設(shè)計(jì)報(bào)告
- 單片機(jī)電子時(shí)鐘課程設(shè)計(jì)報(bào)告
- 單片機(jī)電子時(shí)鐘課程設(shè)計(jì)報(bào)告
- 單片機(jī)電子時(shí)鐘課程設(shè)計(jì)報(bào)告
- 單片機(jī)電子時(shí)鐘課程設(shè)計(jì)
- 單片機(jī)電子時(shí)鐘課程設(shè)計(jì)
- 單片機(jī)電子時(shí)鐘課程設(shè)計(jì)
- 單片機(jī)電子時(shí)鐘課程設(shè)計(jì)
- 課程設(shè)計(jì)----單片機(jī)電子時(shí)鐘
- 51單片機(jī)電子時(shí)鐘課程設(shè)計(jì)報(bào)告
- 單片機(jī)電子時(shí)鐘課程設(shè)計(jì)報(bào)告 (2)
- 單片機(jī)課程設(shè)計(jì)---單片機(jī)電子時(shí)鐘
- 單片機(jī)課程設(shè)計(jì)--- 單片機(jī)電子時(shí)鐘設(shè)計(jì)
- 51單片機(jī)電子時(shí)鐘課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---單片機(jī)電子時(shí)鐘的設(shè)計(jì)
- 單片機(jī)電子時(shí)鐘的設(shè)計(jì) 單片機(jī)課程設(shè)計(jì)
- 51單片機(jī)電子時(shí)鐘課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告
- 51單片機(jī)電子時(shí)鐘課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告
評(píng)論
0/150
提交評(píng)論