2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩47頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、<p><b>  畢 業(yè) 論 文</b></p><p>  題 目 用PG12864LCD設計 </p><p>  的指針式電子鐘 </p><p>  院系名稱:信息工程系 </p>

2、;<p>  專業(yè)班級:計算機應用技術 </p><p>  2011年4月12日</p><p><b>  目錄</b></p><p><b>  摘 要1</b></p><p><b>  第一章 引言2<

3、;/b></p><p><b>  1.1設計任務2</b></p><p><b>  1.2設計要求2</b></p><p>  第二章 總體方案論證與設計3</p><p>  第三章 系統(tǒng)硬件設置4</p><p>  3.1 AT89C51單片機簡

4、介4</p><p>  3.2時鐘模塊設計7</p><p>  3.2.1 DS1302特性介紹7</p><p>  3.2.2 DS1302引腳介紹7</p><p>  3.2.3 DS1302有關日歷,時間的寄存器9</p><p>  3.2.4 DS1302與單片機接口電路9</p&g

5、t;<p>  3.3顯示模塊設計10</p><p>  3.3.1 PG12864LCD的特性介紹11</p><p>  3.3.2 LCD12864引腳介紹12</p><p>  3.3.3 LCD12864的原理簡圖13</p><p>  3.3.4 12864內(nèi)部功能器件及相關功能13</p>

6、;<p>  3.3.5 12864液晶與單片機接口電路16</p><p>  3.4 設置模塊18</p><p>  3.5 振蕩電路19</p><p>  3.6 復位電路20</p><p>  第四章 系統(tǒng)軟件設計21</p><p>  4.1 時鐘函數(shù)模塊21</p&g

7、t;<p>  4.1.1實現(xiàn)功能22</p><p>  4.1.2 函數(shù)設計22</p><p>  4.2 指針時鐘設計28</p><p>  4.2.1 實現(xiàn)功能28</p><p>  4.2.2 函數(shù)設計28</p><p>  4.2.3 小結30</p><

8、;p>  4.3 顯示函數(shù)模塊31</p><p>  4.3.1實現(xiàn)功能31</p><p>  4.3.2 函數(shù)設計31</p><p>  4.3.3 小結33</p><p>  4.4 按鍵函數(shù)模塊33</p><p>  4.4.1 實現(xiàn)功能33</p><p> 

9、 4.4.2 函數(shù)設計33</p><p>  4.4.3 小結33</p><p>  4.5 主函數(shù)模塊33</p><p>  附錄1 元器件表52</p><p>  附錄2 仿真圖53</p><p>  附錄3 參考文獻54</p><p><b>  摘 要

10、</b></p><p>  單片機就是微控制器,是面向應用對象設計、突出控制功能的芯片。單片機接上晶振、復位電路和相應的接口電路,裝載軟件后就可以構成單片機應用系統(tǒng)。本設計就是應用單片機強大的控制功能制作而成的指針式電子鐘,該指針式電子鐘實現(xiàn)如下功能:液晶屏模擬表盤與時分秒指針顯示當前時鐘,K1鍵用于選擇調(diào)節(jié)對象,K2鍵用于調(diào)整時分秒,在按下K4鍵時確定調(diào)節(jié)值,時鐘繼續(xù)運行。</p>

11、<p>  本設計采用的是AT89C51單片機,AT89C51單片機內(nèi)部帶有定時/計數(shù)功能,此定時功能是通過對外部晶振的脈沖進行計數(shù),從而達到計時功能,只要使用11.0592的晶振就能實現(xiàn)零誤差的計時,因此可以利用此功能實現(xiàn)計時。芯片采用DALLAS公司的涓細充電時鐘芯片DS1302,該芯片通過簡單的串行通信與單片機進行通信,時鐘/日歷電路能夠?qū)崟r提供年、月、日、時分、秒信息,采用雙電源供電,當外部電源掉電時能夠利用后備電池準

12、確計時。</p><p>  顯示器件采用LCD12864液晶,12864是一種圖形點陣液晶顯示器,它主要由行驅(qū)動器/列驅(qū)動器及128×64全點陣液晶顯示器組成。可完成圖形顯示,也可以顯示8×4個(16×16點陣)漢字。</p><p>  通過此次設計能夠更加牢固的掌握單片機的應用技術,增強動手能力、硬件設計能力以及軟件設計能力。</p>&l

13、t;p>  關鍵詞 單片機 AT89C51單片機</p><p>  時鐘芯片DS1302 LCD12864液晶</p><p><b>  第一章 引言</b></p><p>  本例采用PG12864LCD液晶作為顯示元件,液晶屏模擬表盤與時分秒指針顯示當前時鐘。該指針式電子鐘實現(xiàn)如下功能:液晶屏模擬表盤與時分秒指針顯示當

14、前時鐘,K1鍵用于選擇調(diào)節(jié)對象,K2鍵用于調(diào)整時分秒,在按下K4鍵時確定調(diào)節(jié)值,時鐘繼續(xù)運行。本例程序包含main.c,lcd_12864.c,lcd_12864.h三個文件。</p><p><b>  1.1設計任務</b></p><p>  利用單片機等實現(xiàn)一個簡單的指針式電子鐘。</p><p><b>  1.2設計要求&

15、lt;/b></p><p>  a.實現(xiàn)時分秒指針式顯示功能</p><p>  b.用三個按鍵來實現(xiàn)調(diào)整時分秒的功能</p><p>  第二章 總體方案論證與設計</p><p>  組成框圖中包含顯示模塊,控制器,時間模塊,設置模塊。顯示模塊有LCD12864來控制顯示,整個代碼實現(xiàn)主要由控制器來實現(xiàn),時間模塊有DS1302來實

16、現(xiàn),可以顯示系統(tǒng)時間,也可自行調(diào)整,設置模塊為按鍵處理。具體模塊分析在相關的軟硬件設計中詳細介紹。</p><p>  本系統(tǒng)以AT89C51單片機為控制核心,通過與DS1302信獲取實時時間,并將得到的數(shù)據(jù)通過LCD12864液晶顯示出來,同時通過相應的按鍵調(diào)整相應的值。因此本設計可分為一下模塊:顯示模塊、實時時間計算模塊、設置模塊(時間設置模塊)。下面對各個模塊逐一進行論證分析。</p><

17、;p>  第三章 系統(tǒng)硬件設置</p><p>  3.1 AT89C51單片機簡介</p><p>  AT89C51是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低電壓,高性能CMOS8位微處理器,俗稱單片機。該器件采用ATMEL高密度非易失存儲器制造技術制造,與工業(yè)標

18、準的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的AT89S51是一種高效微控制器,為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價廉的方案。</p><p><b>  VCC:供電電壓。</b></p><p>  GND:接地。   </p><p>  P0口

19、:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當P1口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時,P0 口作為原碼輸入口,當FIASH進行校驗時,P0輸出原碼,此時P0外部必須被拉高。</p><p>  P1口:P1口是一個內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1

20、后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗時,P1口作為第八位地址接收。</p><p>  P2口:P2口為一個內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當P2口被寫“1”時,其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當用于外

21、部程序存儲器或16位地址外部數(shù)據(jù)存儲器進行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內(nèi)部上拉優(yōu)勢,當對外部八位地址數(shù)據(jù)存儲器進行讀寫時,P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。    </p><p>  P3口:P3口管腳是8個帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當P3口寫入“1”

22、后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。</p><p>  P3口除了作為一般的I/O口外,更重要的用途是他的第二功能,如下所示:</p><p>  P3.0 RXD(串行輸入口)</p><p>  P3.1 TXD(串行輸出口)</p><p>  P3.2

23、 /INT0(外部中斷0)</p><p>  P3.3 /INT1(外部中斷1)</p><p>  P3.6/WR(外部數(shù)據(jù)寄存器寫選通)</p><p>  P3.7/RD(外部數(shù)據(jù)寄存器讀選通)</p><p>  P3口同時為閃爍編程和編程校驗接受一些控制信號。</p><p>  RST:復位輸入。當振蕩器

24、復位器件時,要保持RST腳兩個機器周期的高電平時當8051通電,時鐘電路開始工作,在RESET引腳上出現(xiàn)24個時鐘周期以上的高電平,系統(tǒng)即初始復位。初始化后,程序計數(shù)器PC指向0000H,P0-P3輸出口全部為高電平,堆棧指鐘寫入07H,其它專用寄存器被清“0”。RESET由高電平下降為低電平后,系統(tǒng)即從0000H地址開始執(zhí)行程序。然而,初始復位不改變RAM(包括工作寄存器R0-R7)的狀態(tài), </p><p>

25、  8051的初始態(tài)(表2.1)</p><p>  ALE/PROG:當訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當用作外部數(shù)據(jù)存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。

26、此時, ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。</p><p>  PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/PSEN有效。但在訪問外部數(shù)據(jù)存儲器時,這兩次有效的/PSEN信號將不出現(xiàn)。    EA/VPP:當/EA保持低電平時,則在此期間外部

27、程序存儲器(0000H-FFFFH),不管是否有內(nèi)部程序存儲器。注意加密方式1時,/EA將內(nèi)部鎖定為RESET;當/EA端保持高電平時,此間內(nèi)部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。    </p><p>  XTAL1:反向振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入。    </p>

28、<p>  XTAL2:來自反向振蕩器的輸出。</p><p>  振蕩器特性:XTAL1和XTAL2分別為反向放大器的輸入和輸出。該反向放大器可以配置為片內(nèi)振蕩器。石晶振蕩和陶瓷振蕩均可采用。如采用外部時鐘源驅(qū)動器件,XTAL2應不接。有余輸入至內(nèi)部時鐘信號要通過一個二分頻觸發(fā)器,因此對外部時鐘信號的脈寬無任何要求,但必須保證脈沖的高低電平要求的寬度。</p><p>&l

29、t;b>  3.2時鐘模塊設計</b></p><p><b>  實時時間計算模塊</b></p><p>  方案(1):AT89C51單片機內(nèi)部帶有定時/計數(shù)功能,此定時功能是通過對外部晶振的脈沖進行計數(shù),從而達到計時功能,只要使用11.0592的晶振就能實現(xiàn)零誤差的計時,因此可以利用此功能實現(xiàn)計時,但因為只有單一的計時功能要實現(xiàn)“萬年歷”的功

30、能需要較復雜的程序,而且如果單片機掉電無法繼續(xù)進行計時,所以使用不便。</p><p>  方案(2):DS1302是美國DALLAS公司推出的一種高性能、低功耗的實時時鐘芯片,附加31字節(jié)靜態(tài)RAM,采用SPI三線接口與CPU進行通信,并可采用突發(fā)方式一次傳送多個字節(jié)的時鐘信號和RAM數(shù)據(jù)。實時時鐘可提供秒、分、時、日、星期、月和年,一個月小與31天時可以自動調(diào)整,且具有閏年補償功能。工作電壓寬達2.5~5.5

31、V。采用雙電源供電(主電源和備用電源),可設置備用電源充電方式,提供了對后備電源進行涓細電流充電的能力。利用單片機強大的控制功能就可實現(xiàn)實時計時的功能,而且消耗的系統(tǒng)資源少,程序簡單。</p><p>  綜合上述兩種方案,宜采用方案(2)實現(xiàn)實時計時功能。</p><p>  3.2.1 DS1302特性介紹</p><p>  DS1302是美國DALLAS公司

32、推出的一種高性能、低功耗的實時時鐘芯片,附加31字節(jié)靜態(tài)RAM,采用SPI三線接口與CPU進行通信,并可采用突發(fā)方式一次傳送多個字節(jié)的時鐘信號和RAM數(shù)據(jù)。實時時鐘可提供秒、分、時、日、星期、月和年,一個月小與31天時可以自動調(diào)整,且具有閏年補償功能。工作電壓寬達2.5~5.5V。采用雙電源供電(主電源和備用電源),可設置備用電源充電方式,提供了對后備電源進行涓細電流充電的能力。利用單片機強大的控制功能就可實現(xiàn)實時計時的功能,而且消耗的

33、系統(tǒng)資源少,程序簡單。</p><p>  DS1302可以對年、月、日、星期、時、分、秒進行計時,且具有閏年補償?shù)榷喾N功能DS1302有12個寄存器,其中有7個寄存器與日歷、時鐘相關,存放的數(shù)據(jù)位為BCD碼形式;采用單片機計時,一方面需要采用計數(shù)器,占用硬件資源,另一方面需要設置中斷、查詢等,同樣耗費單片機的資源,而采用時鐘芯片DS1302。</p><p>  3.2.2 DS1302

34、引腳介紹</p><p><b>  圖3-1</b></p><p>  8 、Vcc1:備用電池端;</p><p>  1、Vcc2:5V電源。當Vcc2>Vcc1+0.2V時,由Vcc2向DS1302供電,當Vcc2< Vcc1時,由Vcc1向DS1302供電。</p><p>  7、 SCLK:

35、串行時鐘,輸入;  </p><p>  6、I/O:數(shù)據(jù)輸入輸出口;</p><p>  5、CE/RST:復位腳</p><p>  2 3、X1、X2 是外接晶振腳 (32.768KHZ的晶振)</p><p><b>  4、地(GND)</b></p><p>  3.2.

36、3 DS1302有關日歷,時間的寄存器</p><p><b>  表3-1</b></p><p>  3.2.4 DS1302與單片機接口電路</p><p><b>  圖3-2</b></p><p>  由于DS1302是依靠外部晶振與其內(nèi)部的電容配合來產(chǎn)生時鐘脈沖,因為DS1302在芯片

37、本身已經(jīng)集成了6pF電容。所以,為了獲得穩(wěn)定的可靠的時鐘,必須選用具有6pF負載電容的晶振。當它工作于所要求的負載電容時,所以要選用32768HZ的晶振。</p><p>  石英晶振用12M,因為一個機器周期為1/12時鐘周期,所以這樣用12M的話,一個時鐘周期為12us那么定時器計一次數(shù)就是1us了,電容范圍是在20-40pf之間的都行。表3-2</p><p><b>  

38、3.3顯示模塊設計</b></p><p><b>  液晶顯示模塊</b></p><p>  方案(1):數(shù)碼管是利用發(fā)光二極管的特性組合而成數(shù)字顯示器件,通過控制相應的二極管的狀態(tài)顯示相應的數(shù)字。要使數(shù)碼管正常顯示就得有驅(qū)動電路驅(qū)動相應的段碼,數(shù)碼管的現(xiàn)實方式可分為靜態(tài)顯示和動態(tài)顯示,靜態(tài)顯示方式只適合顯示單個的數(shù)字,因此本設計應采用動態(tài)顯示方式。由

39、于動態(tài)顯示方式利用的是人眼視覺暫留的特性,掃描的時間應不大于20毫秒,占用系統(tǒng)資源大,而且顯示的個數(shù)和字型有限,在本設計中不易采用。</p><p>  方案(2):12864是一種圖形點陣液晶顯示器,它主要由行驅(qū)動器/列驅(qū)動器及128×64全點陣液晶顯示器組成。可完成圖形顯示,也可以顯示8×4個(16×16點陣)漢字。該類液晶顯示模塊(即KS0108B及其兼容控制驅(qū)動器)的指令系統(tǒng)

40、比較簡單,總共只有七種。關于行列和頁的解釋:從上向下共64行,每8行為一頁,共八頁,從左到右共128列,左半屏0到63列,右半屏0到63列。顯示時,每頁以列為單位顯示。</p><p>  綜合比較上述兩種方案,應采用12864液晶組成本設計的顯示模塊。</p><p>  3.3.1 PG12864LCD的特性介紹</p><p>  PG12864LCD是像素可

41、尋址的圖形液晶顯示屏模塊</p><p><b>  芯片特性:</b></p><p>  1.工作電壓為+5V,可自帶驅(qū)動LCD所需的負電壓。</p><p>  2.全屏幕點陣,點陣數(shù)為128列*64行,可顯示8行*4行個(16*16點陣)漢字,也可完成圖像,字符的顯示。</p><p>  3.與CPU接口采用5

42、條位控制總線和8位并行數(shù)據(jù)總線輸入輸出。</p><p>  4.內(nèi)部有顯示數(shù)據(jù)鎖存器,自帶EL驅(qū)動。</p><p>  5.簡單的操作指令,顯示開關設置,顯示起始行設置,地址指針設置和數(shù)據(jù)讀/寫等指令。</p><p>  3.3.2 LCD12864引腳介紹</p><p><b>  表3-3</b></p

43、><p>  3.3.3 LCD12864的原理簡圖</p><p><b>  圖3-3</b></p><p>  通過DB0- DB7數(shù)據(jù)線和AT89C51連接,對應的管腳必須有效。在顯示的時候,要通過列驅(qū)動和行驅(qū)動來控制液晶屏顯示。在各個驅(qū)動時,對應的都有相應的控制器來控制。</p><p>  顯示部分分為左右半屏

44、,當CS0為有效電平時,左半屏顯示,CS1為有效電平時,右半屏顯示。</p><p>  3.3.4 12864內(nèi)部功能器件及相關功能</p><p>  1. 指令寄存器(IR)</p><p>  IR是用于寄存指令碼,與數(shù)據(jù)寄存器數(shù)據(jù)相對應。當D/I=0時,在E信號下降沿的作用下,指令碼寫入IR。</p><p>  2.數(shù)據(jù)寄存器(D

45、R)</p><p>  DR是用于寄存數(shù)據(jù)的,與指令寄存器寄存指令相對應。當D/I=1時,在下降沿作用下,圖形顯示數(shù)據(jù)寫入DR,或在E信號高電平作用下由DR讀到DB7∽DB0數(shù)據(jù)總線。DR和DDRAM之間的數(shù)據(jù)傳輸是模塊內(nèi)部自動執(zhí)行的。</p><p><b>  3.忙標志:BF</b></p><p>  BF標志提供內(nèi)部工作情況。BF=

46、1表示模塊在內(nèi)部操作,此時模塊不接受外部指令和數(shù)據(jù)。BF=0時,模塊為準備狀態(tài),隨時可接受外部指令和數(shù)據(jù)。</p><p>  利用STATUS READ指令,可以將BF讀到DB7總線,從檢驗模塊之工作狀態(tài)。</p><p>  4.顯示控制觸發(fā)器DFF</p><p>  此觸發(fā)器是用于模塊屏幕顯示開和關的控制。DFF=1為開顯示(DISPLAY OFF),DDR

47、AM的內(nèi)容就顯示在屏幕上,DFF=0為關顯示(DISPLAY OFF)。</p><p>  DDF的狀態(tài)是指令DISPLAY ON/OFF和RST信號控制的。</p><p><b>  5.XY地址計數(shù)器</b></p><p>  XY地址計數(shù)器是一個9位計數(shù)器。高3位是X地址計數(shù)器,低6位為Y地址計數(shù)器,XY地址計數(shù)器實際上是作為DDR

48、AM的地址指針,X地址計數(shù)器為DDRAM的頁指針,Y地址計數(shù)器為DDRAM的Y地址指針。</p><p>  X地址計數(shù)器是沒有記數(shù)功能的,只能用指令設置。</p><p>  Y地址計數(shù)器具有循環(huán)記數(shù)功能,各顯示數(shù)據(jù)寫入后,Y地址自動加1,Y地址指針從0到63。</p><p>  6.顯示數(shù)據(jù)RAM(DDRAM)</p><p>  DD

49、RAM是存儲圖形顯示數(shù)據(jù)的。數(shù)據(jù)為1表示顯示選擇,數(shù)據(jù)為0表示顯示非選擇。DDRAM與地址和顯示位置的關系見DDRAM地址表。</p><p><b>  7.Z地址計數(shù)器</b></p><p>  Z地址計數(shù)器是一個6位計數(shù)器,此計數(shù)器具備循環(huán)記數(shù)功能,它是用于顯示行掃描同步。當一行掃描完成,此地址計數(shù)器自動加1,指向下一行掃描數(shù)據(jù),RST復位后Z地址計數(shù)器為0。

50、</p><p>  Z地址計數(shù)器可以用指令DISPLAY START LINE預置。因此,顯示屏幕的起始行就由此指令控制,即DDRAM的數(shù)據(jù)從哪一行開始顯示在屏幕的第一行。此模塊的DDRAM共64行,屏幕可以循環(huán)滾動顯示64行。</p><p>  各功能指令分別介紹如下</p><p><b>  顯示開/關指令 </b></p>

51、;<p>  當DB0=1時,LCD顯示RAM中的內(nèi)容;DB0=0時,關閉顯示。</p><p>  2、顯示起始行(ROW)設置指令</p><p>  該指令設置了對應液晶屏最上一行的顯示RAM的行號,有規(guī)律地改變顯示起始行,可以使LCD實現(xiàn)顯示滾屏的效果。</p><p>  3、頁(PAGE)設置指令</p><p> 

52、 顯示RAM共64行,分8頁,每頁8行。</p><p>  4、列地址(Y Address)設置指令</p><p>  設置了頁地址和列地址,就唯一確定了顯示RAM中的一個單元,這樣MPU就可以</p><p>  用讀、寫指令讀出該單元中的內(nèi)容或向該單元寫進一個字節(jié)數(shù)據(jù)。</p><p><b>  5、讀狀態(tài)指令</b

53、></p><p>  該指令用來查詢液晶顯示模塊內(nèi)部控制器的狀態(tài),各參量含義如下:</p><p>  BUSY:1-內(nèi)部在工作0-正常狀態(tài)</p><p>  ON/OFF:1-顯示關閉0-顯示打開</p><p>  RESET:1-復位狀態(tài)0-正常狀態(tài)</p><p>  在BUSY和RESET狀態(tài)時,除

54、讀狀態(tài)指令外,其它指令均不對液晶顯示模塊產(chǎn)生作用。</p><p>  在對液晶顯示模塊操作之前要查詢BUSY狀態(tài),以確定是否可以對液晶顯示模塊進行操作。</p><p><b>  6、寫數(shù)據(jù)指令</b></p><p><b>  讀數(shù)據(jù)指令 </b></p><p>  讀、寫數(shù)據(jù)指令每執(zhí)行完

55、一次讀、寫操作,列地址就自動增一。必須注意的是,進行讀操作之前,必須有一次空讀操作,緊接著再讀才會讀出所要讀的單元中的數(shù)據(jù)</p><p>  3.3.5 12864液晶與單片機接口電路</p><p><b>  圖3-4</b></p><p><b>  表3-4</b></p><p>  

56、排阻的計算公式:上拉電源 /(硬件額定電流—單片機輸出電流)</p><p>  一、最大值的計算原則:要保證上拉電阻明顯小于負載的阻抗,以使高電平時輸出有效。 </p><p>  例如:負載阻抗是10K,供電電壓是5V,如果要求高電平不小于4.5V,那么,上拉電阻最大值 R大5-4.5)=10:5 </p><p><b>  R大=1K </b

57、></p><p>  也就是最大值1k,(如果超過了1k,輸出的高電平就小于4.5V了) </p><p>  二、最小值的計算原則:保證不超過管子的額定電流(如果不是場效應管而是三極管也可依照飽和電流來計算) </p><p>  例:管子的額定電流150mA,放大倍數(shù)100,基極限流電阻10k,工作在5v的系統(tǒng)中。那么,算法如下: </p>

58、<p>  Ib=U/R=(5-0.7)/10=0.47(mA) </p><p>  Ic=100*0.47=47mA 小于額定的150,所以可以按飽和法來算最小值。 </p><p><b>  上拉電阻最小值 </b></p><p>  R?。?v/47mA=106歐姆 (如果小于這個電阻,管子就會過飽和而沒有意義了。如果大

59、于這個值,管子的導體電阻就會變大一些,所以太高也不利于低電平的輸出)</p><p><b>  3.4 設置模塊</b></p><p>  設置模塊采用三個按鍵與P3.2經(jīng)過與門連接</p><p>  按鍵與單片機的接口電路</p><p><b>  圖3-5</b></p>

60、<p>  按鍵問題:通過與門來控制,程序是中斷驅(qū)動的,其中K1為選擇按鍵,K2為調(diào)整按鍵,K3是確定按鈕,實現(xiàn)時分秒的調(diào)整。相應的引腳接到P3.0, P3.1. P3.3上,共同控制電子時鐘的調(diào)整。</p><p>  選用輕觸按鈕型號為XDJT1102S(輕觸開關貼系列)。</p><p><b>  3.5 振蕩電路</b></p>&l

61、t;p>  本設計51芯片選用內(nèi)部振蕩器方式。由于本設計的時間由內(nèi)部定時器中斷與軟件計數(shù)相結合產(chǎn)生的,所以從計算方便以及系統(tǒng)的效率上考慮,本設計選用12MHz頻率的晶振,電路原理圖如下:</p><p>  圖3-6 AT89C51的振蕩電路</p><p>  經(jīng)廠家推薦穩(wěn)定電路的電容C1,C2=30pF+-10p(附錄資料AT89C51.PDF 第4-32頁)。</p>

62、;<p><b>  3.6 復位電路</b></p><p>  本設計使用上電復位電路。單片機晶振為12MHz,起振時間將近1ms,單片機2個機器周期的時間為2us。</p><p>  單片機每次上電復位所需的最短延時應該不小于treset。這里,treset等于上電延時與起振延時之和。從實際上講,延遲一個treset往往還不夠,不能夠保障單片機有

63、一個良好的工作開端。</p><p>  復位電路把單片機鎖定在復位狀態(tài)上并且維持一個延時(記作TRST),以便給予電源電壓從上升到穩(wěn)定的一個等待時間;在電源電壓穩(wěn)定之后,再插入一個延時,給予時鐘振蕩器從起振到穩(wěn)定的一個等待時間;在單片機開始進入運行狀態(tài)之前,還要至少推遲2個機器周期的延時間。單片機是高電平的時候復位,一般是用電阻和電容組成的,電容充電的時RST復位端為高電平,此時單片機開始復位..電容充電完成,

64、此時單片機復位完成。</p><p>  由此電容值可取22uf,電阻值取10KΩ。詳細見附錄文件(電容充電時間的計算方法.pdf)</p><p>  圖3-7 AT89C51上電復位電路</p><p>  第四章 系統(tǒng)軟件設計</p><p>  軟件設計是本設計的關鍵,軟件程序編寫的好壞直接影響著系統(tǒng)運行情況的良好。因本程序涉及的模塊

65、較多,所以程序編寫也采用模塊化設計,C語言具有編寫靈活、移植方便、便于模塊化設計的特點,所以本系統(tǒng)的軟件采用C51編寫。</p><p><b>  程序框圖如下:</b></p><p><b>  4-1</b></p><p>  4.1 時鐘函數(shù)模塊</p><p>  具體實現(xiàn)含有向DS1

66、302串行寫入一字節(jié)即Write_A_Byte_T0_DS1302,從DS1302讀取一字節(jié)即Get_A_Byte_FROM_DS1302,從DS1302指定位置讀數(shù)據(jù)Read_Data,向DS1302某地址寫入數(shù)據(jù)Write_DS1302,設置時間SET_DS1302,從DS1302獲取時間(讀取當前時間)GetTime,利用這些函數(shù)來實現(xiàn)時間,最終顯示在液晶屏上,可以自行調(diào)整。</p><p>  你可以顯示

67、系統(tǒng)時間,也可以顯示調(diào)整時間,具體實現(xiàn)是設置時間函數(shù)。</p><p><b>  4.1.1實現(xiàn)功能</b></p><p>  能夠顯示年月日時分秒和星期,完成了24小時和12小時之間的切換,并設有鬧鐘,鬧鐘存放于EEPROM中,時間和星期以及鬧鐘均可調(diào)。其中鬧鐘掉電數(shù)據(jù)不會丟失。</p><p>  4.1.2 函數(shù)設計</p>

68、;<p>  1:void write_a_byte_to_ds1302(uchar x)</p><p><b> ?。?)功能</b></p><p>  向DS1302中寫入一字節(jié)數(shù)據(jù)。</p><p><b>  (2)依據(jù)</b></p><p>  DS1302時序圖(詳見

69、SD1302技術資料)可知,在啟動DS1302時每產(chǎn)生一個下降沿可向DS1302中</p><p><b>  寫入一位數(shù)據(jù)。</b></p><p> ?。?)右圖為流程圖:</p><p>  2:uchar get_a_byte_from_ds1302()</p><p><b>  (1)功能</

70、b></p><p>  從DS1302中讀取一字節(jié)數(shù)據(jù)。</p><p><b> ?。?)依據(jù)</b></p><p>  DS1302時序圖(詳見SD1302技術資料)可知,在啟動DS1302時每產(chǎn)生一個上升沿可向DS1302中</p><p><b>  讀取一位數(shù)據(jù)。</b><

71、/p><p>  (3)右圖為流程圖:</p><p>  3:uchar read_ds1302(uchar addr)</p><p><b>  功能</b></p><p>  從指定的地址中讀取一字節(jié)數(shù)據(jù)。</p><p><b>  依據(jù)</b></p>

72、<p>  DS1302時序圖(詳見SD1302技術資料)可知,在啟動DS1302時每產(chǎn)生一個下降沿可向DS1302中寫入一位數(shù)據(jù)。在啟動DS1302時每產(chǎn)生一個上升沿可向DS1302中讀取一位數(shù)據(jù)。</p><p> ?。?)下圖為流程圖:</p><p>  4:void write_ds1302(uchar addr,uchar dat)</p><p

73、><b> ?。?)功能</b></p><p>  向DS1302指定地址中寫入一字節(jié)數(shù)據(jù)。</p><p><b> ?。?)依據(jù)</b></p><p>  DS1302時序圖(詳見SD1302技術資料)可知,在啟動DS1302時每產(chǎn)生一個下降沿可向DS1302中寫入一位數(shù)據(jù)。在啟動DS1302時每產(chǎn)生一個上升

74、</p><p>  沿可向DS1302中讀取一位數(shù)據(jù)。</p><p> ?。?)右圖為流程圖:</p><p>  5:uchar Tran_Input(uchar value)</p><p><b>  功能</b></p><p>  輸入數(shù)據(jù)入轉換函數(shù)、將十進制轉換成BCD碼</

75、p><p><b>  依據(jù)</b></p><p><b>  轉換公式。</b></p><p>  (3)下圖為流程圖:</p><p>  6:void Gettime()</p><p><b> ?。?)功能</b></p><

76、;p>  讀取當前時間,并判斷當前是12小時顯示還是24小時顯示。</p><p><b>  (2)依據(jù)</b></p><p>  通過對標志位的判斷來確定當前為12小時制還是24小時制,如果為12小時時要將DS1302寄存器內(nèi)相應位置1。</p><p>  (3)右圖為流程圖:</p><p>  7:vo

77、id set_ds1302()</p><p><b>  功能</b></p><p>  向DS1302中寫入初始時間,啟動DS1302振蕩器,判斷上下午。</p><p><b>  依據(jù)</b></p><p>  DS1302時序圖(詳見SD1302技術資料)。</p>&l

78、t;p><b>  下圖為流程圖:</b></p><p>  8:void format_datetime(uchar d,uchar *a)</p><p><b>  功能</b></p><p><b>  將數(shù)字轉換成字符。</b></p><p><b&

79、gt;  依據(jù)</b></p><p><b>  ASII碼表。</b></p><p>  9:uchar isleepyear(uint y)</p><p><b>  功能</b></p><p><b>  判斷是否為閏年。</b></p>

80、<p><b>  依據(jù)</b></p><p><b>  閏年的判斷方法。</b></p><p>  10:void Init_DS1302()</p><p><b>  功能</b></p><p>  啟動DS1302振蕩器。</p>&l

81、t;p><b>  依據(jù)</b></p><p>  由DS1302的技術資料知,DS1302的秒寄存器的最高位為振蕩器控制位,向該位置一即可啟動振蕩器。</p><p>  11:void DS1302_setProtect(bit flag)</p><p><b>  功能</b></p><

82、;p>  DS1302寄存器寫保護函數(shù)。</p><p><b>  依據(jù)</b></p><p>  由DS1302的技術資料知,DS1302的0x80地址處寫一則啟動寄存器保護,寫零則去除寄存器保護功能。</p><p>  4.2 指針時鐘設計</p><p>  4.2.1 實現(xiàn)功能</p>

83、<p>  本文件實現(xiàn)了指針時鐘的顯示,同時也實現(xiàn)了在12864顯示器上花點以、畫線以及花圓的功能。</p><p>  4.2.2 函數(shù)設計</p><p>  1:void Pixel(uchar x,uchar y,uchar Mode)</p><p><b> ?。?)功能</b></p><p> 

84、 從指定坐標處繪制一個點或擦除一個點</p><p><b>  依據(jù)</b></p><p>  利用LCD_set_XY確定坐標,然后(2)根據(jù)</p><p>  點在坐標的位置,判斷是擦除還是繪制再使</p><p>  用LCD_write_byte函數(shù)寫入數(shù)據(jù)。</p><p> ?。?/p>

85、3)右圖為流程圖:</p><p>  2: void Line(uchar x1,uchar y1,uchar x2,uchar y2,bit Mode)</p><p><b> ?。?)功能</b></p><p>  在lcd上繪制一條線段</p><p><b> ?。?)依據(jù)</b>&l

86、t;/p><p>  利用直線兩點式公式在直線點的軌跡上繪制/擦除點以達到繪線的目的。</p><p> ?。?)右圖為流程圖:</p><p>  3:void Clock_Plate()</p><p><b>  (1)功能</b></p><p>  繪制一個指針時鐘的圓盤</p>

87、<p><b> ?。?)依據(jù)</b></p><p>  利用圓的公式找到點的軌跡,在軌跡上繪制點即可實現(xiàn)。</p><p> ?。?)右圖為流程圖:</p><p>  4:void Repaint_A_Hand(uchar i)</p><p><b>  功能</b></

88、p><p>  根據(jù)當前的時間繪制相對應的指針,并擦除原狀態(tài)的指針</p><p><b>  依據(jù)</b></p><p>  利用圓的弧度制與時間的相映射,時間變化弧度也隨之變化,從圓心到圓弧對應時間的位置畫出直線就是指針。</p><p> ?。?)下圖為流程圖:</p><p>  5:voi

89、d Display_HMS_Hand()</p><p><b> ?。?)功能</b></p><p>  重新繪制秒、分、時針。</p><p><b> ?。?)依據(jù)</b></p><p>  調(diào)用Repaint_A_Hand函數(shù)設置不同的參數(shù)即可實現(xiàn)。</p><p&g

90、t;  6:void Display_ClockZhizhen()</p><p><b>  (1)功能</b></p><p>  讀取時間繪制指針時鐘到lcd上</p><p><b> ?。?)依據(jù)</b></p><p>  讀取從ds1302得到的時間,隨時間的變化,指針也隨之變化,形成

91、一個完整的模擬指針時鐘,另外還要判斷按鍵掃描的鍵值是否為退出鍵的鍵值,若是則返回菜單界面。</p><p> ?。?)右圖為流程圖:</p><p><b>  4.2.3 小結</b></p><p>  用圓的弧度制與時間值相映射,使得圓上點的軌跡隨著時間而跳動,實現(xiàn)了指針的走動。另外讀取的時間與鬧鐘時間相比較達到實時鬧鐘報警的功能。<

92、;/p><p>  4.3 顯示函數(shù)模塊</p><p>  檢測LCD是否忙LCD_Check_Busy(),向LCD發(fā)送命令LCD_Write_Command,向lcd發(fā)送數(shù)據(jù)void LCD_Write_Data,初始化12864顯示屏LCD_Initialize,初始化12864顯示屏Common_Show (通用顯示函數(shù))。</p><p>  顯示字符和漢字

93、的字模是用相應的軟件導出的,根據(jù)液晶顯示屏的要求對應圓盤的大小都是可以規(guī)定的。</p><p><b>  4.3.1實現(xiàn)功能</b></p><p>  通過12864顯示指針式電子時鐘</p><p>  4.3.2 函數(shù)設計</p><p>  1:uchar LCD_Write_Command_P2(uchar

94、cmd,uchar para1,uchar para2)</p><p><b> ?。?)功能</b></p><p><b>  寫雙參的命令</b></p><p><b> ?。?)依據(jù)</b></p><p>  通過判斷狀態(tài)位char Status_BIT_01()

95、,是讀/寫指令還是讀/寫數(shù)據(jù)</p><p>  2:uchar LCD_Write_Command_P1(uchar cmd,uchar para1)</p><p><b>  功能</b></p><p><b>  //寫單參數(shù)的指令</b></p><p><b>  依據(jù)<

96、;/b></p><p>  通過判斷狀態(tài)位char Status_BIT_01(),是讀/寫指令還是讀/寫數(shù)據(jù)</p><p>  3:uchar LCD_Write_Command(uchar cmd)</p><p><b> ?。?)功能</b></p><p><b>  寫無參數(shù)指令</

97、b></p><p><b> ?。?)依據(jù)</b></p><p>  通過判斷狀態(tài)位char Status_BIT_01(),是讀/寫指令還是讀/寫數(shù)據(jù)</p><p>  4:uchar LCD_Write_Data(uchar dat)</p><p><b> ?。?)功能</b>&

98、lt;/p><p><b>  寫數(shù)據(jù)</b></p><p><b> ?。?)依據(jù)</b></p><p>  通過判斷狀態(tài)位char Status_BIT_03(),數(shù)據(jù)是否為自動寫狀態(tài)</p><p><b> ?。?)流程圖</b></p><p>

99、;  5:void Set_LCD_POS(uchar row,uchar col)reentrant</p><p><b> ?。?)功能</b></p><p><b>  設置當前地址</b></p><p><b>  (2)依據(jù)</b></p><p>  先通過調(diào)

100、用寫雙參數(shù)命令,使LCD準備工作,來達成我們的需要。</p><p>  6:void cls()</p><p><b> ?。?)功能</b></p><p><b>  清屏</b></p><p><b>  (2)依據(jù)</b></p><p>

101、  通過調(diào)用雙參數(shù)和無參數(shù)函數(shù)來設置地址指針和是否自動寫,再通過判斷狀態(tài)位Status_BIT_3(),是否要寫數(shù)據(jù),然后調(diào)用LCD_Write_Data(),當向LCD寫好后,在調(diào)用無參函數(shù)來完成自動寫結束,最后在重置地址指針。</p><p><b> ?。?)流程圖</b></p><p>  7:char LCD_Initialise()</p>

102、<p><b>  (1)功能</b></p><p><b>  LCD的初始化</b></p><p><b> ?。?)依據(jù)</b></p><p>  通過寫雙參數(shù)LCD_Write_Command_P2來完成文本顯示區(qū)首地址,文本區(qū)顯示區(qū)寬度,圖形顯示區(qū)首地址,圖形顯示區(qū)寬度,寫

103、單參數(shù)函數(shù)LCD_Write_Command_P1(),無參函數(shù)實現(xiàn)光標形狀,和顯示方式設置。</p><p><b>  4.3.3 小結</b></p><p>  通過LCD想顯示,LCD是很有用的,要牢牢掌握才行。</p><p>  4.4 按鍵函數(shù)模塊</p><p>  按鍵實現(xiàn)通過中斷來進行調(diào)整,鍵盤中斷

104、(INT0)T0_INT,定時器0每秒刷新LCD顯示T0_INT。中斷時,系統(tǒng)會調(diào)用一段特定的函數(shù),即我們設置的中斷函數(shù),一般稱為中斷服務函數(shù),一般的函數(shù)的調(diào)用在程序中是固定的,二中斷服務函數(shù)的執(zhí)行完全是隨機的。</p><p>  4.4.1 實現(xiàn)功能</p><p><b>  通過按鍵調(diào)整</b></p><p>  4.4.2 函數(shù)設計

105、</p><p>  //鍵盤中斷(INT0)</p><p>  void EX_INT0()interrupt 0</p><p><b>  {</b></p><p>  if(K1==0) //選擇調(diào)整對象</p><p><b>  {</b></p>

106、;<p>  if(Adjust_Index==-1||Adjust_Index==1) Adjust_Index=3;</p><p>  Adjust_Index--;</p><p><b>  }</b></p><p><b>  else</b></p><p>  if

107、(K2==0) //調(diào)整</p><p>  Current_Time_Adjust();</p><p><b>  else</b></p><p>  if(K3==0) //確定</p><p><b>  {</b></p><p>  SET_DS1302

108、(); //將調(diào)整后的時間寫入DS1302</p><p>  Adjust_Index=-1;//操作索引重設為-1,時間繼續(xù)正常顯示</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  4.4.3 小結</b><

109、;/p><p>  通過對電子時鐘調(diào)整函數(shù)的編寫,是我認識到,不管做什么,都要有明確的思路,對于本函數(shù)來說,大部分的內(nèi)容都是相同的不同的只是標志位的賦值不同唯一,此時變成人員就要有高度清晰的思路,只要有一個賦值不對,整個函數(shù)都會受到影響,而且這種錯誤是非常不易檢查的,同樣在作別的編程的時候也是一樣,只有有了高度清晰的思路,我們在變成過程中才不會被絆倒。</p><p><b>  4

110、.5 主函數(shù)模塊</b></p><p>  主函數(shù)中具體含有顯示函數(shù)和時鐘模塊的相關部分。</p><p>  void main()</p><p><b>  {</b></p><p>  LCD_Initialise();//液晶初始化</p><p>  Set_LCD_P

111、OS(0,0); //從LCD左上角開始清屏</p><p><b>  cls();</b></p><p>  IE=0x83; //允許INT0,T0中斷</p><p><b>  IP=0x01;</b></p><p><b>  IT0=0x01;</b>

112、;</p><p>  TMOD=0x01;</p><p>  TH0=-50000/256;</p><p>  TL0=-50000%256;</p><p><b>  TR0=1;</b></p><p><b>  while(1)</b></p>

113、<p><b>  {</b></p><p>  //如果未執(zhí)行調(diào)整操作則正常讀取當前時間</p><p>  if(Adjust_Index==-1)</p><p>  GetTime();</p><p><b>  }</b></p><p><b&

114、gt;  }</b></p><p><b>  附錄 1元器件表</b></p><p><b>  附錄2 仿真圖</b></p><p><b>  附錄3 參考文獻</b></p><p>  閆玉德 俞虹 《MCS-51單片機原理與應用》 機械工業(yè)出版社&

115、lt;/p><p>  周鳴爭 錢峰,微機原理與接口技術,電子科技大學出版社,2006年</p><p>  張靖武.周靈彬.單片機原理、應用與PROTEUS仿真</p><p>  周潤景.基于PROTEUS的51單片機設計與仿真</p><p>  江志紅.51單片機技術與應用系統(tǒng)開發(fā)案例精選</p><p>  周潤

116、景.基于PROTEUS的51單片機設計與仿真</p><p>  王守中.51單片機開發(fā)入門與典型實例</p><p>  張齊.朱寧西.單片機系統(tǒng)設計與開發(fā)</p><p><b>  周立功單片機開發(fā)網(wǎng)</b></p><p>  天津銳志單片機開發(fā)網(wǎng)</p><p>  LCD12864液晶

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論