2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩24頁未讀, 繼續(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>  論文題目_基于AT89C51單片機(jī)萬年歷的設(shè)計(jì)</p><p>  指導(dǎo)老師______ _____________</p><p>  學(xué)生姓名_______ ________________</p><p>  準(zhǔn)考證號(hào)_______ ___________</p><p>  2011年 08 月

2、23 日</p><p>  基于AT89C51單片機(jī)萬年歷的設(shè)計(jì)</p><p><b>  電子工程</b></p><p>  摘要 :本文介紹了基于AT89C52單片機(jī)的多功能電子萬年歷的硬件結(jié)構(gòu)和軟硬件設(shè)計(jì)方法。系統(tǒng)以AT89C52單片機(jī)為控制器,以串行時(shí)鐘日歷芯片DS1302記錄日歷和時(shí)間,它可以對(duì)年、月、日、時(shí)、分、秒進(jìn)行計(jì)時(shí),

3、還具有閏年補(bǔ)償?shù)榷喾N功能。運(yùn)用單片機(jī)實(shí)現(xiàn)公歷農(nóng)歷之間的轉(zhuǎn)換,電子鬧鐘,計(jì)時(shí)器和對(duì)指定日期的查詢等功能。萬年歷采用液晶顯示LCD-12864顯示,可以同時(shí)顯示年、月、日、周幾、時(shí)、分、秒,農(nóng)歷。</p><p>  綜上所述此電子晚年歷具有讀取方便、顯示直觀、功能多樣、電路簡(jiǎn)潔、成本低廉等諸多優(yōu)點(diǎn),符合電子儀器儀表的發(fā)展趨勢(shì),具有廣闊的市場(chǎng)前景</p><p>  關(guān)鍵字:AT89C51;電

4、子萬年歷;公農(nóng)歷轉(zhuǎn)換;電子鬧鐘</p><p>  Based on AT89C51 calendar design</p><p>  electronic engineering</p><p>  Students zengJunqiang guide teacher JiaLaoShi</p><p>  Abstract: this

5、 paper introduces the AT89C52 single chip based on the multi-function electronic calendar the hardware structure and software and hardware design method. System to the microcontroller of AT89C52 controller, in a serial c

6、lock calendar chip DS1302 record calendar and time, it can be to date and time, minutes and seconds a clock, but also has a leap year compensation, etc DuoZhong function. Using single chip microcomputer, the lunar calend

7、ar conversion between electronic alarm clock, </p><p>  To sum up the electronic late calendar has read convenient, direct display, functional diversity, simple circuit, low cost, and many other advantages,

8、conform to the trend of the development of electronic instruments, and has a broad market prospect</p><p>  Key word: AT89C51; Electronic calendar; And the lunar transformation; Electronic alarm clock</p&

9、gt;<p><b>  一 、緒論</b></p><p>  1.1 課題研究的背景</p><p>  隨著科技的快速發(fā)展,時(shí)間的流逝,從觀太陽、擺鐘到現(xiàn)在電子鐘,人類不斷研究,不斷創(chuàng)新紀(jì)錄。對(duì)于數(shù)字電子萬年歷采用直觀的數(shù)字顯示,可以同時(shí)顯示年、月、日、時(shí)、分、秒和溫度等信息,還具有時(shí)間校準(zhǔn)等功能。該電路采用AT89C51單片機(jī)作為核心,功耗小,能

10、在3V的低壓工作,電壓可選用3~5V電壓供電。此萬年歷具有讀取方便、顯示直觀、功能多樣、電路簡(jiǎn)潔、成本低廉等諸多優(yōu)點(diǎn),符合電子儀器儀表的發(fā)展趨勢(shì),具有廣闊的市場(chǎng)前景。</p><p>  1.2課題的研究目的與意義</p><p>  二十一世紀(jì)是數(shù)字化技術(shù)高速發(fā)展的時(shí)代,而單片機(jī)在數(shù)字化高速發(fā)展的時(shí)代扮演著極為重要的角色。電子萬年歷的開發(fā)與研究在信息化時(shí)代的今天亦是當(dāng)務(wù)之急,因?yàn)樗鼞?yīng)用

11、在學(xué)校、機(jī)關(guān)、企業(yè)、部隊(duì)等單位禮堂、訓(xùn)練場(chǎng)地、教學(xué)室、公共場(chǎng)地等場(chǎng)合,可以說遍及人們生活的每一個(gè)角落。所以說電子萬年歷的開發(fā)是國家之所需,社會(huì)之所需,人民之所需。</p><p>  1.3課題解決的主要內(nèi)容</p><p>  本課題所研究的電子萬年歷是單片機(jī)控制技術(shù)的一個(gè)具體應(yīng)用,主要研究?jī)?nèi)容包括以下幾個(gè)方面:</p><p> ?。?)選用電子萬年歷芯片時(shí),應(yīng)

12、重點(diǎn)考慮功能實(shí)在、使用方便、單片存儲(chǔ)、低功耗、抗斷電的器件。</p><p> ?。?)根據(jù)選用的電子萬年歷芯片設(shè)計(jì)外圍電路和單片機(jī)的接口電路。</p><p>  (3)在硬件設(shè)計(jì)時(shí),結(jié)構(gòu)要盡量簡(jiǎn)單實(shí)用易于實(shí)現(xiàn),使系統(tǒng)電路盡量簡(jiǎn)單。</p><p> ?。?)根據(jù)硬件電路圖,在電路板上完成器件的焊接。</p><p> ?。?)根據(jù)設(shè)計(jì)的硬

13、件電路,編寫控制AT89C51芯片的單片機(jī)程序。</p><p> ?。?)通過編程、編譯、調(diào)試,把程序下載到單片機(jī)上運(yùn)行,并實(shí)現(xiàn)本設(shè)計(jì)的功能。</p><p> ?。?)在硬件電路和軟件程序設(shè)計(jì)時(shí),主要考慮提高人機(jī)界面的友好性,方便用戶操作等因素。</p><p> ?。?)軟件設(shè)計(jì)時(shí)必須要有完善的思路,要做到程序簡(jiǎn)單,調(diào)試方便。</p><p

14、><b>  二、系統(tǒng)的總體設(shè)計(jì)</b></p><p>  單片機(jī)電子萬年歷的制作有多種方法,可供選擇的器件和運(yùn)用的技術(shù)也有很多種。所以,系統(tǒng)的總體設(shè)計(jì)方案應(yīng)在滿足系統(tǒng)功能的前提下,充分考慮系統(tǒng)使用的環(huán)境,所選的結(jié)構(gòu)要簡(jiǎn)單實(shí)用、易于實(shí)現(xiàn),器件的選用著眼于合適的參數(shù)、穩(wěn)定的性能、較低的功耗以及低廉的成本。</p><p>  2.1系統(tǒng)方案的構(gòu)想與確定</

15、p><p>  系統(tǒng)的功能往往決定了系統(tǒng)采用的結(jié)構(gòu),經(jīng)過成本,性能,功耗等多方面的考慮決定用液晶顯示12864顯示器顯示,5V直流電源對(duì)單片機(jī)AT89C51進(jìn)行供電,時(shí)間芯片DS1302連接單片機(jī)AT89C51。從而實(shí)現(xiàn)電子萬年歷的功能。</p><p><b>  2.2 器件的選用</b></p><p>  1、AT89C51單片機(jī)</

16、p><p>  本系統(tǒng)采用的是美國ATMEL公司生產(chǎn)的AT89C51單片機(jī),首先我們來熟悉一下AT89C51單片機(jī)的外部引腳和內(nèi)部結(jié)構(gòu)。</p><p>  1).單片機(jī)的引腳功能</p><p>  AT89C51單片機(jī)有40個(gè)引腳。</p><p>  Vcc:電源電壓+5V</p><p><b>  GN

17、D:接地</b></p><p>  P0口:P0口是一組8位漏極開路型雙向I/O口,也即地址/數(shù)據(jù)總線復(fù)用口。作為輸出口用時(shí),每位能驅(qū)動(dòng)8個(gè)TTL邏輯門電路,對(duì)端口寫“1”可作為高阻抗輸入端用。</p><p>  在訪問外部數(shù)據(jù)存儲(chǔ)器或程序存儲(chǔ)器時(shí),這組口線分時(shí)轉(zhuǎn)換地址(低8位)和數(shù)據(jù)總線服用,在訪問期間激活內(nèi)部上拉電阻。</p><p>  在Fl

18、ash編程時(shí),P0口接收指令字節(jié),而在程序校驗(yàn)時(shí),輸出指令字節(jié),校驗(yàn)時(shí)要求外接上拉電阻。</p><p>  P1口:P1口是一個(gè)帶內(nèi)部上拉電阻的8位雙向I/O,P1的輸出緩沖級(jí)可驅(qū)動(dòng)(吸收或輸出電流)4個(gè)TTL邏輯門電路。對(duì)端口寫“1”,通過內(nèi)部的上拉電阻把端口拉到高電平,此時(shí)可作輸入口。</p><p>  Flash 編程和程序校驗(yàn)期間,P1接收低8位地址。</p>&

19、lt;p>  P2口:P2口是一個(gè)帶內(nèi)部上拉電阻的8位雙向I/O,P2的輸出緩沖級(jí)可驅(qū)動(dòng)(吸收或輸出電流)4個(gè)TTL邏輯門電路。對(duì)端口寫“1”,通過內(nèi)部的上拉電阻把端口拉到高電平,此時(shí)可作輸入口。</p><p>  在訪問外部程序存儲(chǔ)器或16位地址的外部數(shù)據(jù)存儲(chǔ)器(例如執(zhí)行MOVX@DPTR指令)時(shí),P2口送出高8位地址數(shù)據(jù)。在訪問8位地址的外部數(shù)據(jù)存儲(chǔ)器(MOVX @Ri指令)時(shí),P2口線上的內(nèi)容(也即

20、特殊功能寄存器(SFR)區(qū)中P2寄存器的內(nèi)容),在整個(gè)訪問期間不改變。</p><p>  Flash 編程和程序校驗(yàn)期間,P2亦接收低高位地址和其他控制信號(hào)。</p><p>  P3口:P3口是一組帶內(nèi)部上拉電阻的8位雙向I/O,P3的輸出緩沖級(jí)可驅(qū)動(dòng)(吸收或輸出電流)4個(gè)TTL邏輯門電路。對(duì)P3口寫入“1”時(shí),它們被內(nèi)部的上拉電阻拉高并可作為輸入端口。作輸入端時(shí),被外部拉低的P3口將

21、用上拉電阻輸出電流。P3口除了作為一般的I/O口線外,更重要的用途是它的第二功能,見表2-1所示:</p><p>  表2-1 P3口的第二功能圖</p><p>  P3口還接收一些用于Flash閃速存儲(chǔ)器編程和程序校驗(yàn)的控制信號(hào)。</p><p>  RST:復(fù)位輸入。當(dāng)振蕩器工作時(shí),RST引腳出現(xiàn)兩個(gè)機(jī)器周期以上高電平將使單片機(jī)復(fù)位。WDT溢出將使引腳輸出高

22、電平,設(shè)置SFR AUXR的DISRT0(地址8EH)可打開或關(guān)閉該功能。DISRT0位缺省為RESET輸出高電平打開狀態(tài)。</p><p>  ALE/PROG:當(dāng)訪問外部程序存儲(chǔ)器或數(shù)據(jù)存儲(chǔ)器時(shí),ALE(地址鎖存器允許)輸出脈沖用于鎖存地址的低8位字節(jié)。即使不訪問外部存儲(chǔ)器,ALE仍以時(shí)鐘振蕩頻率的1/6輸出固定的正脈沖信號(hào),因此它可對(duì)外輸出時(shí)鐘或用于定時(shí)目的。要注意的是:每當(dāng)訪問外部數(shù)據(jù)存儲(chǔ)器時(shí)將跳過一個(gè)

23、ALE脈沖。對(duì)Flash存儲(chǔ)器編程期間,該引腳還用于輸入編程脈沖(PROG)。如有必要,可通過多特殊功能寄存器(SFR)區(qū)中的8EH單元的D0位置,可禁止ALE操作。</p><p>  PSEN:程序存儲(chǔ)允許(PSEN)輸出是外部程序存儲(chǔ)器的讀選通信號(hào),當(dāng)AT89C51由外部程序存儲(chǔ)器取指令(或數(shù)據(jù))時(shí),每個(gè)機(jī)器周期兩次PSEN有效,即輸出兩個(gè)脈沖。當(dāng)訪問外部數(shù)據(jù)存儲(chǔ)器,沒有兩次有效的PSEN信號(hào)。</p

24、><p>  EA/VPP:外部訪問允許。欲使CPU僅訪問外部程序存儲(chǔ)器(地址為0000H—FFFFH),EA端必須保持低電平(接地)。</p><p>  Flash存儲(chǔ)器編程時(shí),該引腳加上+12V的變成電壓Vpp.</p><p>  XTAL1:振蕩器反相放大器及內(nèi)部時(shí)鐘發(fā)生器的輸入端。</p><p>  XTAL2:振蕩器反相放大器的輸

25、出端。</p><p>  2、 實(shí)時(shí)時(shí)鐘芯片 DS1302 </p><p>  DS1302 是美國DALLAS公司推出的一種高性能、低功耗、帶RAM的實(shí)時(shí)時(shí)鐘電路,它可以對(duì)年、月、日、周日、時(shí)、分、秒進(jìn)行計(jì)時(shí),具有閏年補(bǔ)償功能,工作電壓為2.5V~5.5V。采用三線接口與CPU進(jìn)行同步通信,并可采用突發(fā)方式一次傳送多個(gè)字節(jié)的時(shí)鐘信號(hào)或RAM數(shù)據(jù)。DS1302內(nèi)部有一個(gè)31×

26、8的用于臨時(shí)性存放數(shù)據(jù)的RAM寄存器。DS1302是DS1202的升級(jí)產(chǎn)品,與DS1202兼容,但增加了主電源/后背電源雙電源引腳,同時(shí)提供了對(duì)后背電源進(jìn)行涓細(xì)電流充電的能力。 </p><p>  1)、DS1302有下列幾組寄存器:</p><p>  DS1302有關(guān)日歷、時(shí)間的寄存器共有12個(gè),其中有7個(gè)寄存器(讀時(shí)81h~8Dh,寫時(shí)80h~8Ch),存放的數(shù)據(jù)格式為 BCD 碼

27、形式,如表2-2所示。</p><p>  表2-2 DS1302有關(guān)日歷、時(shí)間的寄存器</p><p>  2)、DS1302有關(guān)日歷、時(shí)間的寄存器</p><p>  小時(shí)寄存器(85h、84h)的位7用于定義 DS1302是運(yùn)行于12小時(shí)模式還是24小時(shí)模式。當(dāng)為高時(shí),選擇12小時(shí)模式。在12小時(shí)模式時(shí),位5是 ,當(dāng)為1時(shí),表示 PM。在24小時(shí)模式時(shí),位5是

28、第二個(gè)10小時(shí)位。</p><p>  秒寄存器(81h、80h)的位7定義為時(shí)鐘暫停標(biāo)志(CH)。當(dāng)該位置為1時(shí),時(shí)鐘振蕩器停止,DS1302處于低功耗狀態(tài);當(dāng)該位置為0時(shí),時(shí)鐘開始運(yùn)行。</p><p>  控制寄存器(8Fh、8Eh)的位7是寫保護(hù)位(WP),其它7位均置為0。在任何的對(duì)時(shí)鐘和 RAM 的寫操作之前,WP 位必須為0。當(dāng)WP 位為1時(shí),寫保護(hù)位防止對(duì)任一寄存器的寫操作

29、。</p><p><b>  3).讀寫時(shí)序說明</b></p><p>  DS1302是 SPI 總線驅(qū)動(dòng)方式。它不僅要向寄存器寫入控制字,還需要讀取相應(yīng)寄存器的數(shù)據(jù)。要想與 DS1302通信,首先要先了解 DS1302的控制字。DS1302的控制字如表2-3:</p><p>  表 2-3 DS1302的控制字</p>

30、<p>  控制字(即地址及命令字節(jié))</p><p>  控制字的最高有效位(位7)必須是邏輯1,如果它為0,則不能把數(shù)據(jù)寫入到 DS1302中。</p><p>  位6:如果為0,則表示存取日歷時(shí)鐘數(shù)據(jù),為1表示存取 RAM 數(shù)據(jù);</p><p>  位5至位1(A4~A0):指示操作單元的地址;</p><p>  位0(

31、最低有效位):如為0,表示要進(jìn)行寫操作,為1表示進(jìn)行讀操作。</p><p>  控制字總是從最低位開始輸出。在控制字指令輸入后的下一個(gè)SCLK 時(shí)鐘的上升沿時(shí),數(shù)據(jù)被寫入 DS1302,數(shù)據(jù)輸入從最低位(0位)開始。同樣,在緊跟8位的控制字指令后的下一個(gè) SCLK 脈沖的下降沿讀出 DS1302的數(shù)據(jù),讀出的數(shù)據(jù)也是從最低位到最高位。</p><p>  2.2.2 LCD 液晶顯示器1

32、2864 選用及工作原。</p><p>  FYD12864-0402B 是一種具有 4 位/8 位并行、2 線或 3 線串行多種接口方式,內(nèi)部含有國標(biāo)一級(jí)、二級(jí)簡(jiǎn)體中文字庫的點(diǎn)陣圖形液晶顯示模塊;其顯示分辨率為 128×64, 內(nèi)置 8192 個(gè) 16*16 點(diǎn)漢字,和 128 個(gè) 16*8 點(diǎn) ASCII 字符集.利用該模塊靈活的接口方式和簡(jiǎn)單、方便的操作指令,可構(gòu)成全中文人機(jī)交互圖形界面??梢燥@

33、示 8×4 行 16×16 點(diǎn)陣的漢字. 也可完成圖形顯示.低電壓低功耗是其又一顯著特點(diǎn)。由該模塊構(gòu)成的液晶顯示方案與同類型的圖形點(diǎn)陣液晶顯示模塊相比,不論硬件電路結(jié)構(gòu)或顯示程序都要簡(jiǎn)潔得多,且該模塊的價(jià)格也略低于相同點(diǎn)陣的圖形液晶模塊。</p><p>  1、模塊主要硬件構(gòu)成說明</p><p>  控制器接口信號(hào)說明:</p><p>  

34、1)、RS,R/W 的配合選擇決定控制界面的 4 種模式表2-4:</p><p>  表 2-4 12864 控制界面的 4 種模式</p><p><b>  2)、功能說明:</b></p><p><b>  ●忙標(biāo)志:BF</b></p><p>  BF 標(biāo)志提供內(nèi)部工作情況.BF=1

35、表示模塊在進(jìn)行內(nèi)部操作,此時(shí)模塊不接受外部指令和數(shù)據(jù).BF=0 時(shí),模塊為準(zhǔn)備狀態(tài),隨時(shí)可接受外部指令和數(shù)據(jù).利用 STATUS RD 指令,可以將 BF 讀到 DB7 總線,從而檢驗(yàn)?zāi)K之工作狀態(tài).</p><p>  ●字型產(chǎn)生 ROM(CGROM)</p><p>  字型產(chǎn)生RO(MCGROM)提供8192個(gè)此觸發(fā)器是用于模塊屏幕顯示開和關(guān)的控制。DFF=1為開顯示(DISPLAY

36、 ON),DDRAM的內(nèi)容就顯示在屏幕上,DFF=0 為關(guān)顯示(DISPLAY OFF)。DFF 的狀態(tài)是指令 DISPLAY ON/OFF 和 RS信號(hào)控制的。</p><p>  ●顯示數(shù)據(jù) RAM(DDRAM)</p><p>  模塊內(nèi)部顯示數(shù)據(jù) RAM 提供 64×2 個(gè)位元組的空間,最多可控制 4 行 16 字(64 個(gè)字)的中文字型顯示,當(dāng)寫入顯示數(shù)據(jù) RAM 時(shí),

37、可分別顯示 CGROM 與 CGRAM 的字型;此模塊可顯示三種字型,分別是半角英數(shù)字型(16*8)、CGRAM字型及 CGROM 的中文字型,三種字型的選擇,由在 DDRAM 中寫入的編碼選擇,在 0000H—0006H 的編碼中(其代碼分別是 0000、0002、0004、0006 共 4 個(gè))將選擇 CGRAM 的自定義字型,02H—7FH 的編碼中將選擇半角英數(shù)字的字型,至于A1 以上的編碼將自動(dòng)的結(jié)合下一個(gè)位元組,組成兩個(gè)位元

38、組的編碼形成中文字型的編碼 BIG5(A140—D75F),GB(A1A0-F7FFH)。</p><p>  ●字型產(chǎn)生 RAM(CGRAM)</p><p>  字型產(chǎn)生 RAM 提供圖象定義(造字)功能, 可以提供四組 16×16 點(diǎn)的自定義圖象空間,使用者可以將內(nèi)部字型沒有提供的圖象字型自行定義到 CGRAM 中,便可和 CGROM 中的定義一樣地通過 DDRAM 顯示在

39、屏幕中。</p><p><b>  ●地址計(jì)數(shù)器 AC</b></p><p>  地址計(jì)數(shù)器是用來貯存 DDRAM/CGRAM 之一的地址,它可由設(shè)定指令暫存器來改變,之后只要讀取或是寫入DDRAM/CGRAM 的值時(shí),地址計(jì)數(shù)器的值就會(huì)自動(dòng)加一,當(dāng) RS 為“0”時(shí)而 R/W 為“1”時(shí),地址計(jì)數(shù)器的值會(huì)被讀取到DB6——DB0 中。</p>&l

40、t;p>  ●光標(biāo)/閃爍控制電路</p><p>  此模塊提供硬體光標(biāo)及閃爍控制電路,由地址計(jì)數(shù)器的值來指定 DDRAM 中的光標(biāo)或閃爍位置。</p><p>  2.2.3公農(nóng)歷轉(zhuǎn)換</p><p>  實(shí)現(xiàn)公歷與農(nóng)歷的轉(zhuǎn)換一般采用查表法,按日查表是速度最快的方法,但51 單片機(jī)尋址能力有限不可能采用按日查表的方法,除按日查外我們可以通過按月查表和按年查表

41、的方法,再通過適當(dāng)?shù)挠?jì)算來確定公歷日所對(duì)應(yīng)的農(nóng)歷日期,本文采用的是按年查表法最大限度地減少表格所占的程序空間。 </p><p>  對(duì)于農(nóng)歷月來說大月為30 天小月為29 天,這是固定不變的,這樣我們就可用1 個(gè)BIT 位來表示大小月信息,農(nóng)歷一年如有閏月為13 個(gè)月,否則是12 個(gè)月,所以一年需要用13 個(gè)BIT 。閏月在農(nóng)歷年中所在的月份并不固定大部分閏月分布在農(nóng)歷2 8 月但也有少量年份在9 月以后,所

42、以要表示閏月的信息至少要4 個(gè)BIT。</p><p>  計(jì)算公歷日對(duì)應(yīng)的農(nóng)歷日期的方法,先計(jì)算出公歷日離當(dāng)年元旦的天數(shù),然后查表取得當(dāng)年的春節(jié)日期,計(jì)算出春節(jié)離元旦的天數(shù),二者相減即可算出公歷日離春節(jié)的天數(shù)以后只要根據(jù)大小月和閏月信息減一月天數(shù),調(diào)整一月農(nóng)歷月份即可推算出公歷日所對(duì)應(yīng)的農(nóng)歷日期,如公歷日不到春節(jié)日期農(nóng)歷年要比公歷年小一年,農(nóng)歷大小月取前一年的信息,農(nóng)歷月從12 月向前推算。</p>

43、<p><b>  三、系統(tǒng)硬件的設(shè)計(jì)</b></p><p>  3.1系統(tǒng)硬件電路設(shè)計(jì)</p><p>  1)、系統(tǒng)硬件框圖如圖3-1:</p><p><b>  圖3-1</b></p><p>  AT89C51單片機(jī)內(nèi)部結(jié)構(gòu)</p><p>  2

44、).Ds1302電路原理圖:</p><p>  電路原理圖如圖3-2,DS1302與單片機(jī)的連接也僅需要3條線:CE 引腳、SCLK 串行時(shí)鐘引腳、I/O 串?dāng)?shù)據(jù)引腳,Vcc2為備用電源,外接32.768kHz 晶振,為芯片提供計(jì)時(shí)脈沖。</p><p><b>  圖 3-2</b></p><p>  3)、FYD12864-0402B

45、內(nèi)部提供 128×2 字節(jié)的字符顯示 RAM 緩沖區(qū)(DDRAM)。字符顯示是通過將字符顯示編碼寫入該字符顯示 RAM 實(shí)現(xiàn)的。根據(jù)寫入內(nèi)容的不同,可分別在液晶屏上顯示 CGROM(中文字庫)、HCGROM(ASCII 碼字庫)及 CGRAM(自定義字形)的內(nèi)容。FYD12864-0402B 每屏可顯示 4 行 8 列共 32 個(gè) 16×16 點(diǎn)陣的漢字,每個(gè)顯示 RAM 可顯示 1 個(gè)中文字符或 2 個(gè) 16

46、15;8 點(diǎn)陣全高 ASCII 碼字符,即每屏最多可實(shí)現(xiàn) 32 個(gè)中文字符或 64 個(gè) ASCII 碼字符的顯示。YD12864-0402B 與單片機(jī) 80C51 的一種接口如圖3-3:</p><p><b>  圖3-3</b></p><p><b>  四、系統(tǒng)的軟件設(shè)計(jì)</b></p><p>  電子萬年歷的功

47、能是在程序控制下實(shí)現(xiàn)的。該系統(tǒng)的軟件設(shè)計(jì)方法與硬件設(shè)計(jì)相對(duì)應(yīng),按整體功能分成多個(gè)不同的程序模塊,分別進(jìn)行設(shè)計(jì)、編程和調(diào)試,最后通過主程序?qū)⒏鞒绦蚰K連接起來。這樣有利于程序修改和調(diào)試,增強(qiáng)了程序的可移植性。</p><p><b>  4.1 主程序</b></p><p>  1).主程序流程圖如圖4-1所示:</p><p><b&g

48、t;  圖 4-1</b></p><p>  2).從1302中取數(shù)據(jù)如圖4-2:</p><p><b>  圖4-2</b></p><p>  3)、按鍵掃描如圖4-3:</p><p><b>  圖 4-3</b></p><p><b> 

49、 結(jié)論:</b></p><p>  通過這次的設(shè)計(jì),讓我知道了很多有用的東西,首先是人機(jī)界面的運(yùn)用,按鍵的輸入,對(duì)參數(shù)的設(shè)定,再由液晶顯示出來,很方便,也很直觀,對(duì)調(diào)試的實(shí)現(xiàn)很有用。還有就是讓我首次接觸了時(shí)鐘芯片DS1302 也是很方便實(shí)用,只需要在初始化后,再不停的取數(shù)據(jù)就可以用了,而且誤差很小,有閏年的補(bǔ)償,對(duì)每月的自動(dòng)調(diào)整,耗電量也很小,相當(dāng)經(jīng)濟(jì)實(shí)惠。</p><p>

50、  在軟件設(shè)計(jì)的過程中,利用了Keil這個(gè)軟件在程序錄入和調(diào)試的時(shí)候的優(yōu)越性,讓我能夠在編寫軟件的時(shí)候很方便的發(fā)現(xiàn)軟件中的錯(cuò)誤,現(xiàn)在已經(jīng)能夠使用Keil對(duì)所設(shè)計(jì)的程序進(jìn)行調(diào)試。對(duì)于PROTEUS這款軟件,也能熟練掌握電路設(shè)計(jì)仿真。</p><p><b>  致謝:</b></p><p>  經(jīng)過這幾個(gè)月的時(shí)間,畢業(yè)設(shè)計(jì)都按照預(yù)期完成,由于本人的知識(shí)水平有限,論文和

51、設(shè)計(jì)中有遺漏和缺陷的地方懇請(qǐng)指正。</p><p>  感謝我的xx老師給了我很大的幫助,在他悉心的指導(dǎo)和嚴(yán)格的要求下,作品和論文順利完成。論文從選題和最終完成,凝結(jié)著導(dǎo)師的辛勤的汗水,他不辭勞苦的教導(dǎo)、嚴(yán)謹(jǐn)?shù)淖黠L(fēng)使我終生受益。在此畢業(yè)設(shè)計(jì)完成之際,謹(jǐn)向?qū)熀退袔椭^我的老師致以崇高的敬意和衷心的感謝。</p><p>  還有感謝家人、朋友還有宿舍里所有的室友,是他們給我創(chuàng)造了良好的學(xué)

52、習(xí)氛圍,在學(xué)習(xí)和生活中給了我支持和幫助。在以后的學(xué)習(xí)生活中我會(huì)時(shí)時(shí)敦促自己更加努力,不辜負(fù)師長、親人、朋友對(duì)我的期望。</p><p><b>  參考文獻(xiàn)</b></p><p>  [1] 趙長德.微型計(jì)算機(jī)原理與接口技術(shù)[M].北京:機(jī)械工業(yè)出版社,1999:98-350.</p><p>  [2] 蘇平.單片機(jī)的原理與接口技術(shù)[M].

53、北京:電子工業(yè)出版社,2006:1-113.</p><p>  [3] 王忠民.微型計(jì)算機(jī)原理[M].西安:西安科技大學(xué)出版社,2003:15-55.</p><p>  [4] 胡戴明.計(jì)算機(jī)組成原理[M].北京:經(jīng)濟(jì)科學(xué)出版社,2005:43-56.</p><p>  [5] 紀(jì)宗南.單片機(jī)外圍器件使用手冊(cè)[M].北京:北京航空航天大學(xué)出版社,622-655

54、.</p><p>  [6] 周雪.模擬電子技術(shù)[M]西安: 西安電子科技大學(xué)出版社,2005:81-95.</p><p>  [7] 左金生.電子與模擬電子技術(shù)[M].北京:電子工業(yè)出版社,2004:105-131.</p><p>  [8] 尹勇.單片機(jī)開發(fā)環(huán)境μVision2的開發(fā)指南[M]. 北京:北京航空航天大學(xué)出版社,2004:173-199.&l

55、t;/p><p>  [9] 張斌武.單片機(jī)系統(tǒng)Proteus設(shè)計(jì)與仿真[M]. 北京:電子工業(yè)出版社,2005:52-89.</p><p><b>  附件:</b></p><p>  //12864 +1302</p><p>  #include<reg52.h></p><p>

56、;  #define uchar unsigned char</p><p>  #define uint unsigned int</p><p>  #include 'gnl.h'</p><p>  sbit rs=P1^7;</p><p>  sbit rw=P1^6;</p><p>  

57、sbit e=P1^5;</p><p>  sbit ce=P3^5;</p><p>  sbit sclk=P3^7;</p><p>  sbit io=P3^6;</p><p>  sbit down=P1^1;</p><p>  sbit set=P1^2;</p><p>  

58、sbit sure=P1^3;</p><p>  sbit up=P1^4;</p><p>  uchar fgf,second,minute,hour,hour1,minute1,week,day,month,data1,data2,data3,data4,data5,key3,key4,t0,t,t1;</p><p>  uint year,b;</

59、p><p>  uchar week0, day0;</p><p>  uchar table3[]={'0','1','2','3','4','5','6','7','8','9'};</p><p>  u

60、char WeekTab[] = { </p><p>  (3 << 5) + 31,</p><p>  (6 << 5) + 29,</p><p>  (0 << 5) + 31,</p><p>  (3 << 5) + 30,</p><p>  (5

61、<< 5) + 31,</p><p>  (1 << 5) + 30,</p><p>  (3 << 5) + 31,</p><p>  (6 << 5) + 31,</p><p>  (1 << 5) + 30,</p><p>  (4 <&

62、lt; 5) + 31,</p><p>  (0 << 5) + 30,</p><p>  (2 << 5) + 31 </p><p><b>  }; </b></p><p><b>  //延時(shí)</b></p><p>  void

63、delay(uchar z)</p><p>  {uchar x,y;</p><p>  for(x=100;x>1;x--)</p><p>  for(y=z;y>1;y--);</p><p><b>  }</b></p><p><b>  //1302

64、寫</b></p><p>  void write1302(uchar dat)</p><p>  { uchar j;</p><p><b>  sclk=0;</b></p><p><b>  io=0;</b></p><p><b>

65、  delay(1);</b></p><p>  for(j=0;j<8;j++)</p><p><b>  {</b></p><p>  io=dat&0x01;</p><p><b>  delay(2);</b></p><p><

66、;b>  sclk=1;</b></p><p><b>  delay(2);</b></p><p><b>  sclk=0;</b></p><p><b>  dat>>=1;</b></p><p><b>  delay(2

67、);</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  //讀11302</b></p><p>  uchar read1302(void)</p><p><b>

68、;  { </b></p><p>  uchar i,dat;</p><p><b>  delay(1);</b></p><p>  for(i=0;i<8;i++)</p><p><b>  {</b></p><p><b>  da

69、t>>=1;</b></p><p><b>  if(io==1)</b></p><p>  {dat|=0x80; }</p><p><b>  sclk=1;</b></p><p><b>  delay(2);</b></p>

70、<p><b>  sclk=0;</b></p><p><b>  delay(2);</b></p><p><b>  }</b></p><p>  return dat;</p><p><b>  }</b></p>

71、<p>  //1302寫雙字節(jié)</p><p>  void writeset1302(uchar dat1,uchar dat2)</p><p><b>  { ce=1;</b></p><p>  write1302(dat1);</p><p>  write1302(dat2);</p&

72、gt;<p><b>  ce=0;</b></p><p><b>  }</b></p><p>  //1302讀雙字節(jié)</p><p>  uchar readset1302(uchar dat1 )</p><p><b>  {</b></p&g

73、t;<p><b>  ce=1;</b></p><p>  write1302(dat1);</p><p>  dat1=read1302();</p><p><b>  ce=0;</b></p><p>  return dat1;</p><p>

74、<b>  }</b></p><p><b>  //1302初始化</b></p><p>  void init_1302(void)</p><p><b>  {</b></p><p>  uchar flag;</p><p>  fla

75、g=readset1302(0x80);</p><p>  if(flag&0x80)</p><p><b>  {</b></p><p>  writeset1302(0x8E,0x00);</p><p>  writeset1302(0x80,((second/10)<<4|(second

76、%10)));</p><p>  writeset1302(0x82,((minute/10)<<4|(minute%10)));</p><p>  writeset1302(0x84,((hour/10)<<4|(hour%10)));</p><p>  writeset1302(0x8a,week);</p><

77、p>  writeset1302(0x86,((day/10)<<4|(day%10)));</p><p>  writeset1302(0x88,((month/10)<<4|(month%10)));</p><p>  writeset1302(0x8C,((year/10)<<4|(year%10)));</p><p

78、>  writeset1302(0x90,0xa5);</p><p>  writeset1302(0x8E,0x80);</p><p><b>  }</b></p><p><b>  }</b></p><p>  //12864 模塊</p><p>  v

79、oid lcd_writecom(uchar com)</p><p><b>  { e=0;</b></p><p><b>  rs=0;</b></p><p><b>  rw=0;</b></p><p><b>  P2=com;</b>&

80、lt;/p><p><b>  delay(2);</b></p><p><b>  e=1;</b></p><p><b>  delay(2);</b></p><p><b>  e=0;}</b></p><p>  voi

81、d lcd_writedate(uchar dat)</p><p><b>  {e=0;</b></p><p><b>  rs=1;</b></p><p><b>  rw=0;</b></p><p><b>  P2=dat;</b><

82、;/p><p><b>  delay(2);</b></p><p><b>  e=1;</b></p><p><b>  delay(2);</b></p><p><b>  e=0;}</b></p><p>  void

83、init(void) //12864 初始化</p><p><b>  {</b></p><p>  delay(100);</p><p>  lcd_writecom(0x30); //功能設(shè)置</p><p><b>  delay(5);</b&

84、gt;</p><p>  lcd_writecom(0x30);</p><p><b>  delay(5);</b></p><p>  lcd_writecom(0xc);</p><p><b>  delay(5);</b></p><p>  lcd_write

85、com(0x03);</p><p><b>  delay(5);</b></p><p>  lcd_writecom(0x01); </p><p><b>  delay(5);</b></p><p>  lcd_writecom(0x06); </p><p>&

86、lt;b>  delay(5);</b></p><p><b>  }</b></p><p>  void display3(uint b) //顯示 單漢字 年月日</p><p><b>  { </b></p><p><b>  uchar b

87、1;</b></p><p><b>  uchar b2;</b></p><p>  b1=(b&0xff00)>>8;</p><p>  b2=b&0xff;</p><p>  lcd_writedate(b1);</p><p>  lcd_wr

88、itedate(b2); </p><p><b>  delay(2);</b></p><p><b>  }</b></p><p><b>  //1302取數(shù)</b></p><p>  void display1(void)</p><p>

89、<b>  { </b></p><p>  uchar read;</p><p>  read=readset1302(0x81);</p><p><b>  delay(1);</b></p><p>  second=((read&0x70)>>4)*10+(read

90、&0x0f);</p><p>  read=readset1302(0x83);</p><p><b>  delay(1);</b></p><p>  minute=((read&0x70)>>4)*10+(read&0x0f);</p><p>  read=readset1

91、302(0x85);</p><p><b>  delay(1);</b></p><p>  hour=((read&0x70)>>4)*10+(read&0x0f);</p><p>  read=readset1302(0x87);</p><p><b>  delay(1

92、);</b></p><p>  day=((read&0x70)>>4)*10+(read&0x0f);</p><p>  week=readset1302(0x8b);</p><p><b>  delay(1);</b></p><p>  read=readset130

93、2(0x89);</p><p><b>  delay(1);</b></p><p>  month=((read&0x70)>>4)*10+(read&0x0f);</p><p>  read=readset1302(0x8d);</p><p><b>  delay(1)

94、;</b></p><p>  year=((read&0xf0)>>4)*10+(read&0x0f);</p><p>  year=(2000+year);</p><p><b>  delay(1);</b></p><p><b>  }</b>

95、</p><p>  void display2(void) //顯示子程序</p><p>  {//年月日</p><p>  lcd_writecom(0x80);</p><p>  lcd_writedate(table3[year/1000]);</p><p><

96、;b>  delay(1);</b></p><p>  lcd_writedate(table3[(year%1000)/100]);</p><p><b>  delay(1);</b></p><p>  lcd_writedate(table3[((year%1000)%100)/10]);</p>&

97、lt;p><b>  delay(1);</b></p><p>  lcd_writedate(table3[year%10]);</p><p><b>  delay(1);</b></p><p>  display3(0xC4EA);</p><p><b>  delay

98、(1);</b></p><p>  lcd_writedate(table3[month/10]);</p><p><b>  delay(1);</b></p><p>  lcd_writedate(table3[month%10]);</p><p><b>  delay(1);<

99、/b></p><p>  display3(0xD4c2);</p><p><b>  delay(1);</b></p><p>  lcd_writedate(table3[day/10]);</p><p><b>  delay(1);</b></p><p&g

100、t;  lcd_writedate(table3[day%10] );</p><p>  display3(0xc8d5);</p><p><b>  //時(shí)分秒</b></p><p>  lcd_writecom(0x88);</p><p><b>  delay(1);</b></

101、p><p>  display3(0xd6dc);</p><p><b>  delay(1);</b></p><p>  lcd_writedate(table3[week] );</p><p><b>  delay(1);</b></p><p>  lcd_writ

102、edate(fgf );</p><p><b>  delay(1);</b></p><p>  lcd_writedate(table3[hour/10]);</p><p><b>  delay(1);</b></p><p>  lcd_writedate(table3[hour%10]

103、);</p><p><b>  delay(1);</b></p><p>  display3(0xcab1);</p><p>  delay(1); </p><p>  lcd_writedate(table3[minute/10]);</p><p><b>  delay

104、(1);</b></p><p>  lcd_writedate(table3[minute%10]);</p><p><b>  delay(1);</b></p><p>  display3(0xb7d6);</p><p>  delay(1); </p><p>  lc

105、d_writedate(table3[second/10]);</p><p><b>  delay(1);</b></p><p>  lcd_writedate(table3[second%10]);</p><p><b>  delay(1);</b></p><p>  display3

106、(0xc3eb);</p><p><b>  delay(1);</b></p><p>  lcd_writecom(0x90);</p><p><b>  delay(1);</b></p><p>  display3(0xc5a9);</p><p><b&

107、gt;  delay(1);</b></p><p>  display3(0xc0fa);</p><p><b>  delay(1);</b></p><p><b>  }</b></p><p><b>  //鬧鐘設(shè)定</b></p>&l

108、t;p>  void clock_set(void)</p><p>  {switch(data4){</p><p>  case 0:if(sure==0){while(sure==0);delay(1);data4++;if(data4==3) data4=0;} if(up==0){while(up==0);delay(1);hour1++;} </p>

109、<p>  if(down==0){while(down==0);delay(1);hour1--;} if(hour1==24) hour1=0; if(hour1==255) hour1=23;</p><p>  delay(1); lcd_writecom(0xf);lcd_writecom(0x98);delay(65);lcd_writecom(0xc);break; //鬧

110、鐘時(shí)設(shè)定</p><p>  case 1:if(sure==0){while(sure==0);delay(1);data4++;if(data4>=3) data4=0;}if(up==0){while(up==0);delay(1);minute1++;}</p><p>  if(down==0){while(down==0);delay(1);minute1--;}; i

111、f(minute1==60) minute1=0; if(minute1==255) minute1=59;</p><p>  lcd_writecom(0xf);lcd_writecom(0x9A);delay(65);lcd_writecom(0xc);break;//鬧鐘分設(shè)定 </p><p>  default : if(sure==0){while(

112、sure==0);delay(1);data4++;if(data4>=3) data4=0;} if(up==0){while(up==0);delay(1);key3++;if(key3==2)key3=0;}</p><p>  if(down==0){while(down==0);delay(1);key3++;if(key3==2)key3=0;}; </p><p>

113、;  lcd_writecom(0xf);lcd_writecom(0x9c);delay(65);lcd_writecom(0xc); //鬧鐘開關(guān)設(shè)定</p><p><b>  } </b></p><p>  {lcd_writecom(0x98);delay(1);lcd_writedate(table3[hour1/10]);

114、delay(1); lcd_writedate(table3[hour1%10]);delay(1);display3(0xcab1);</p><p>  lcd_writecom(0x9a);delay(1);lcd_writedate(table3[minute1/10]);delay(1);lcd_writedate(table3[minute1%10]);delay(1);</p>&l

115、t;p>  display3(0xb7d6);delay(1);</p><p>  if(key3==0){lcd_writecom(0x9c);delay(1);display3(0xbfaa);delay(1);}else</p><p>  {lcd_writecom(0x9c);delay(1);display3(0xb9d8);delay(1); } }&

116、lt;/p><p><b>  }</b></p><p>  void clock_out(void) //鬧鐘輸出</p><p>  {if(key3==0)</p><p>  { lcd_writecom(0x87);delay(1); lcd_writedate(0x2);<

117、;/p><p>  if(hour==hour1)</p><p>  if(minute==minute1)</p><p><b>  P1=0;</b></p><p>  if(minute==(minute+1))</p><p><b>  P1=1;</b><

118、;/p><p><b>  }}</b></p><p>  void set_time(void) //時(shí)間調(diào)整子程序</p><p><b>  {</b></p><p>  if(data3==6){data3=0; }</p><p> 

119、 switch(data3)</p><p><b>  {</b></p><p>  case 0:{data2=1;if(up==0) {while(up==0);delay(1);year++;}if(down==0){while(down==0);delay(1);year--;}; if(year==2100) year=2001;if(year==200

120、0) year=2099;</p><p>  if(sure==0){while(sure==0);delay(1);data3++;}lcd_writecom(0xf);lcd_writecom(0x81);delay(55);lcd_writecom(0xc);}break;//年調(diào)</p><p>  case 1: {data2=1;if(up==0){while(up

121、==0);month++;}if(down==0){while(down==0);month--;}; if(month==13) month=1; if(month==0) month=12;</p><p>  if(sure==0){while(sure==0);data3++;};lcd_writecom(0xf);lcd_writecom(0x83);delay(55);lcd_writecom(0xc

122、);}break;//月調(diào)</p><p>  case 2: {data2=1;if(up==0){while(up==0);day++;}if(down==0){while(down==0);day--;};if(day==32) day=1;if(day==0) day=31;</p><p>  if(sure==0){while(sure==0);data3++;}

123、;lcd_writecom(0xf);lcd_writecom(0x85);delay(55);lcd_writecom(0xc);}break;//日調(diào)</p><p>  case 3:{data2=1;if(up==0){while(up==0);hour++;}if(down==0){while(down==0);hour--;};if(hour==24) hour=0;if(hour==

124、255) hour=23;</p><p>  if(sure==0){while(sure==0);data3++;};lcd_writecom(0xf);lcd_writecom(0x88);delay(55);lcd_writecom(0xc);}break;//時(shí)調(diào)</p><p>  case 4:{data2=1;if(up==0){while(up==0);minu

125、te++;}if(down==0){while(down==0);minute--;}; if(minute==60) minute=0;if(minute==255) minute=59;</p><p>  if(sure==0){while(sure==0);data3++;};lcd_writecom(0xf);lcd_writecom(0x8A);delay(55);lcd_writecom(0xc);

溫馨提示

  • 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)論