指針式電子鐘畢業(yè)論文_第1頁
指針式電子鐘畢業(yè)論文_第2頁
指針式電子鐘畢業(yè)論文_第3頁
指針式電子鐘畢業(yè)論文_第4頁
指針式電子鐘畢業(yè)論文_第5頁
已閱讀5頁,還剩42頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、指針式電子鐘指針式電子鐘目錄目錄摘摘 要要.1 1第一章第一章 引言引言.2 21.11.1 設(shè)計任務(wù)設(shè)計任務(wù).21.21.2 設(shè)計要求設(shè)計要求.2第二章第二章 總體方案論證與設(shè)計總體方案論證與設(shè)計總體方案論證與設(shè)計總體方案論證與設(shè)計.3 3第三章第三章 系統(tǒng)硬件設(shè)置系統(tǒng)硬件設(shè)置.4 43.13.1 at89c51 單片機(jī)簡介單片機(jī)簡介.43.23.2 時鐘模塊設(shè)計時鐘模塊設(shè)計.73.2.13.2.1 ds1302ds1302 特性介紹特性介紹.73.2.23.2.2 ds1302ds1302 引腳介紹引腳介紹.73.2.33.2.3 ds1302ds1302 有關(guān)日歷,時間的寄存器有關(guān)日歷,

2、時間的寄存器.93.2.43.2.4 ds1302ds1302 與單片機(jī)接口電路與單片機(jī)接口電路.93.33.3 顯示模塊設(shè)計顯示模塊設(shè)計.103.3.13.3.1 pg12864lcdpg12864lcd 的特性介紹的特性介紹.113.3.23.3.2 lcd12864lcd12864 引腳介紹引腳介紹.123.3.33.3.3 lcd12864lcd12864 的原理簡圖的原理簡圖.133.3.43.3.4 1286412864 內(nèi)部功能器件及相關(guān)功能內(nèi)部功能器件及相關(guān)功能.133.3.53.3.5 1286412864 液晶與單片機(jī)接口電路液晶與單片機(jī)接口電路.163.43.4 設(shè)置模塊

3、設(shè)置模塊.183.53.5 振蕩電路振蕩電路.193.63.6 復(fù)位電路復(fù)位電路.20第四章第四章 系統(tǒng)軟件設(shè)計系統(tǒng)軟件設(shè)計.21214.14.1 時鐘函數(shù)模塊時鐘函數(shù)模塊.214.1.14.1.1 實現(xiàn)功能實現(xiàn)功能.224.1.24.1.2 函數(shù)設(shè)計函數(shù)設(shè)計.224.24.2 指針時鐘設(shè)計指針時鐘設(shè)計.284.2.14.2.1 實現(xiàn)功能實現(xiàn)功能.284.2.24.2.2 函數(shù)設(shè)計函數(shù)設(shè)計.284.2.34.2.3 小結(jié)小結(jié).304.34.3 顯示函數(shù)模塊顯示函數(shù)模塊.314.3.14.3.1 實現(xiàn)功能實現(xiàn)功能.314.3.24.3.2 函數(shù)設(shè)計函數(shù)設(shè)計.314.3.34.3.3 小結(jié)小結(jié).3

4、34.44.4 按鍵函數(shù)模塊按鍵函數(shù)模塊.334.4.14.4.1 實現(xiàn)功能實現(xiàn)功能.334.4.24.4.2 函數(shù)設(shè)計函數(shù)設(shè)計.334.4.34.4.3 小結(jié)小結(jié).334.54.5 主函數(shù)模塊主函數(shù)模塊.33附錄附錄 1 1 元器件表元器件表 .5252附錄附錄 2 2 仿真圖仿真圖 .5353附錄附錄 3 3 參考文獻(xiàn)參考文獻(xiàn) .5454摘摘 要要單片機(jī)就是微控制器,是面向應(yīng)用對象設(shè)計、突出控制功能的芯片。單片機(jī)接上晶振、復(fù)位電路和相應(yīng)的接口電路,裝載軟件后就可以構(gòu)成單片機(jī)應(yīng)用系統(tǒng)。本設(shè)計就是應(yīng)用單片機(jī)強(qiáng)大的控制功能制作而成的指針式電子鐘,該指針式電子鐘實現(xiàn)如下功能:液晶屏模擬表盤與時分秒

5、指針顯示當(dāng)前時鐘,k1 鍵用于選擇調(diào)節(jié)對象,k2 鍵用于調(diào)整時分秒,在按下 k4 鍵時確定調(diào)節(jié)值,時鐘繼續(xù)運行。本設(shè)計采用的是 at89c51 單片機(jī),at89c51 單片機(jī)內(nèi)部帶有定時/計數(shù)功能,此定時功能是通過對外部晶振的脈沖進(jìn)行計數(shù),從而達(dá)到計時功能,只要使用11.0592 的晶振就能實現(xiàn)零誤差的計時,因此可以利用此功能實現(xiàn)計時。芯片采用 dallas 公司的涓細(xì)充電時鐘芯片 ds1302,該芯片通過簡單的串行通信與單片機(jī)進(jìn)行通信,時鐘/日歷電路能夠?qū)崟r提供年、月、日、時分、秒信息,采用雙電源供電,當(dāng)外部電源掉電時能夠利用后備電池準(zhǔn)確計時。顯示器件采用 lcd12864 液晶,12864

6、 是一種圖形點陣液晶顯示器,它主要由行驅(qū)動器/列驅(qū)動器及 12864 全點陣液晶顯示器組成。可完成圖形顯示,也可以顯示 84 個(1616 點陣)漢字。通過此次設(shè)計能夠更加牢固的掌握單片機(jī)的應(yīng)用技術(shù),增強(qiáng)動手能力、硬件設(shè)計能力以及軟件設(shè)計能力。關(guān)鍵詞關(guān)鍵詞 單片機(jī) at89c51 單片機(jī)時鐘芯片 ds1302 lcd12864 液晶第一章第一章 引言引言本例采用 pg12864lcd 液晶作為顯示元件,液晶屏模擬表盤與時分秒指針顯示當(dāng)前時鐘。該指針式電子鐘實現(xiàn)如下功能:液晶屏模擬表盤與時分秒指針顯示當(dāng)前時鐘,k1 鍵用于選擇調(diào)節(jié)對象,k2 鍵用于調(diào)整時分秒,在按下 k4 鍵時確定調(diào)節(jié)值,時鐘繼

7、續(xù)運行。本例程序包含 main.c,lcd_12864.c,lcd_12864.h 三個文件。1.11.1 設(shè)計任務(wù)設(shè)計任務(wù)利用單片機(jī)等實現(xiàn)一個簡單的指針式電子鐘。1.21.2 設(shè)計要求設(shè)計要求a實現(xiàn)時分秒指針式顯示功能b用三個按鍵來實現(xiàn)調(diào)整時分秒的功能第二章第二章 總體方案論證與設(shè)計總體方案論證與設(shè)計總體方案論證與設(shè)計總體方案論證與設(shè)計組成框圖中包含顯示模塊,控制器,時間模塊,設(shè)置模塊。顯示模塊有l(wèi)cd12864 來控制顯示,整個代碼實現(xiàn)主要由控制器來實現(xiàn),時間模塊有ds1302 來實現(xiàn),可以顯示系統(tǒng)時間,也可自行調(diào)整,設(shè)置模塊為按鍵處理。具體模塊分析在相關(guān)的軟硬件設(shè)計中詳細(xì)介紹。本系統(tǒng)以

8、at89c51 單片機(jī)為控制核心,通過與 ds1302 信獲取實時時間,并將得到的數(shù)據(jù)通過 lcd12864 液晶顯示出來,同時通過相應(yīng)的按鍵調(diào)整相應(yīng)的值。因此本設(shè)計可分為一下模塊:顯示模塊、實時時間計算模塊、設(shè)置模塊(時間設(shè)置模塊) 。下面對各個模塊逐一進(jìn)行論證分析。第三章第三章 系統(tǒng)硬件設(shè)置系統(tǒng)硬件設(shè)置3.3.1 1 at89c51 單片機(jī)簡介單片機(jī)簡介at89c51 是一種帶 4k 字節(jié)閃爍可編程可擦除只讀存儲器(fperomflash programmable and erasable read only memory)的低電壓,高性能 cmos8 位微處理器,俗稱單片機(jī)。該器件采用

9、atmel 高密度非易失存儲器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的 mcs-51 指令集和輸出管腳相兼容。由于將多功能 8 位 cpu 和閃爍存儲器組合在單個芯片中,atmel 的 at89s51 是一種高效微控制器,為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價廉的方案。vcc:供電電壓。gnd:接地。 p0 口:p0 口為一個 8 位漏級開路雙向 i/o 口,每腳可吸收 8ttl 門電流。當(dāng)p1 口的管腳第一次寫 1 時,被定義為高阻輸入。p0 能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。在 fiash 編程時,p0 口作為原碼輸入口,當(dāng) fiash 進(jìn)行校驗時,p0 輸出原碼,此時

10、p0 外部必須被拉高。p1 口:p1 口是一個內(nèi)部提供上拉電阻的 8 位雙向 i/o 口,p1 口緩沖器能接收輸出 4ttl 門電流。p1 口管腳寫入 1 后,被內(nèi)部上拉為高,可用作輸入,p1 口被外部下拉為低電平時,將輸出電流,這是由于內(nèi)部上拉的緣故。在 flash 編程和校驗時,p1 口作為第八位地址接收。p2 口:p2 口為一個內(nèi)部上拉電阻的 8 位雙向 i/o 口,p2 口緩沖器可接收,輸出 4 個 ttl 門電流,當(dāng) p2 口被寫“1”時,其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時,p2 口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。p2 口當(dāng)用于外部程序存儲器

11、或 16 位地址外部數(shù)據(jù)存儲器進(jìn)行存取時,p2 口輸出地址的高八位。在給出地址“1”時,它利用內(nèi)部上拉優(yōu)勢,當(dāng)對外部八位地址數(shù)據(jù)存儲器進(jìn)行讀寫時,p2 口輸出其特殊功能寄存器的內(nèi)容。p2 口在 flash 編程和校驗時接收高八位地址信號和控制信號。 p3 口:p3 口管腳是 8 個帶內(nèi)部上拉電阻的雙向 i/o 口,可接收輸出 4 個ttl 門電流。當(dāng) p3 口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,p3 口將輸出電流(ill)這是由于上拉的緣故。p3 口除了作為一般的 i/o 口外,更重要的用途是他的第二功能,如下所示:p3.0 rxd(串行輸入口)p

12、3.1 txd(串行輸出口)p3.2 /int0(外部中斷 0)p3.3 /int1(外部中斷 1)p3.6/wr(外部數(shù)據(jù)寄存器寫選通)p3.7/rd(外部數(shù)據(jù)寄存器讀選通)p3 口同時為閃爍編程和編程校驗接受一些控制信號。rst:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時,要保持 rst 腳兩個機(jī)器周期的高電平時當(dāng) 8051 通電,時鐘電路開始工作,在 reset 引腳上出現(xiàn) 24 個時鐘周期以上的高電平,系統(tǒng)即初始復(fù)位。初始化后,程序計數(shù)器 pc 指向 0000h,p0-p3 輸出口全部為高電平,堆棧指鐘寫入 07h,其它專用寄存器被清“0” 。reset 由高電平下降為低電平后,系統(tǒng)即從 0000h

13、 地址開始執(zhí)行程序。然而,初始復(fù)位不改變ram(包括工作寄存器 r0-r7)的狀態(tài), 特殊功能寄存器 初始態(tài) 特殊功能寄存器 初始態(tài) acc 00h b 00h psw 00h sp 07h dph 00h th0 00h dpl 00h tl0 00h ip xxx00000b th1 00h ie 0 xx00000b tl1 00h tmod 00h tcon 00h scon xxxxxxxxb sbuf 00h p0-p3 1111111b pcon 0 xxxxxxxb 8051的初始態(tài)(表2.1)ale/prog:當(dāng)訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。

14、在 flash 編程期間,此引腳用于輸入編程脈沖。在平時,ale 端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的 1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當(dāng)用作外部數(shù)據(jù)存儲器時,將跳過一個 ale 脈沖。如想禁止 ale 的輸出可在 sfr8eh 地址上置 0。此時, ale 只有在執(zhí)行 movx,movc 指令是 ale 才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài) ale 禁止,置位無效。psen:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機(jī)器周期兩次/psen 有效。但在訪問外部數(shù)據(jù)存儲器時,這兩次有效的/psen 信

15、號將不出現(xiàn)。 ea/vpp:當(dāng)/ea 保持低電平時,則在此期間外部程序存儲器(0000h-ffffh) ,不管是否有內(nèi)部程序存儲器。注意加密方式 1 時,/ea 將內(nèi)部鎖定為 reset;當(dāng)/ea 端保持高電平時,此間內(nèi)部程序存儲器。在 flash 編程期間,此引腳也用于施加 12v 編程電源(vpp) 。 xtal1:反向振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入。 xtal2:來自反向振蕩器的輸出。振蕩器特性:xtal1 和 xtal2 分別為反向放大器的輸入和輸出。該反向放大器可以配置為片內(nèi)振蕩器。石晶振蕩和陶瓷振蕩均可采用。如采用外部時鐘源驅(qū)動器件,xtal2 應(yīng)不接。有余輸入至內(nèi)部時鐘

16、信號要通過一個二分頻觸發(fā)器,因此對外部時鐘信號的脈寬無任何要求,但必須保證脈沖的高低電平要求的寬度。3.23.2 時鐘模塊設(shè)計時鐘模塊設(shè)計實時時間計算模塊方案(1):at89c51 單片機(jī)內(nèi)部帶有定時/計數(shù)功能,此定時功能是通過對外部晶振的脈沖進(jìn)行計數(shù),從而達(dá)到計時功能,只要使用 11.0592 的晶振就能實現(xiàn)零誤差的計時,因此可以利用此功能實現(xiàn)計時,但因為只有單一的計時功能要實現(xiàn)“萬年歷”的功能需要較復(fù)雜的程序,而且如果單片機(jī)掉電無法繼續(xù)進(jìn)行計時,所以使用不便。方案(2):ds1302 是美國 dallas 公司推出的一種高性能、低功耗的實時時鐘芯片,附加 31 字節(jié)靜態(tài) ram,采用 sp

17、i 三線接口與 cpu 進(jìn)行通信,并可采用突發(fā)方式一次傳送多個字節(jié)的時鐘信號和 ram 數(shù)據(jù)。實時時鐘可提供秒、分、時、日、星期、月和年,一個月小與 31 天時可以自動調(diào)整,且具有閏年補償功能。工作電壓寬達(dá) 2.55.5v。采用雙電源供電(主電源和備用電源) ,可設(shè)置備用電源充電方式,提供了對后備電源進(jìn)行涓細(xì)電流充電的能力。利用單片機(jī)強(qiáng)大的控制功能就可實現(xiàn)實時計時的功能,而且消耗的系統(tǒng)資源少,程序簡單。綜合上述兩種方案,宜采用方案(2)實現(xiàn)實時計時功能。3.2.13.2.1 ds1302ds1302 特性介紹特性介紹ds1302 是美國 dallas 公司推出的一種高性能、低功耗的實時時鐘芯片

18、,附加 31 字節(jié)靜態(tài) ram,采用 spi 三線接口與 cpu 進(jìn)行通信,并可采用突發(fā)方式一次傳送多個字節(jié)的時鐘信號和 ram 數(shù)據(jù)。實時時鐘可提供秒、分、時、日、星期、月和年,一個月小與 31 天時可以自動調(diào)整,且具有閏年補償功能。工作電壓寬達(dá) 2.55.5v。采用雙電源供電(主電源和備用電源) ,可設(shè)置備用電源充電方式,提供了對后備電源進(jìn)行涓細(xì)電流充電的能力。利用單片機(jī)強(qiáng)大的控制功能就可實現(xiàn)實時計時的功能,而且消耗的系統(tǒng)資源少,程序簡單。ds1302 可以對年、月、日、星期、時、分、秒進(jìn)行計時,且具有閏年補償?shù)榷喾N功能 ds1302 有 12 個寄存器,其中有 7 個寄存器與日歷、時鐘相

19、關(guān),存放的數(shù)據(jù)位為 bcd 碼形式;采用單片機(jī)計時,一方面需要采用計數(shù)器,占用硬件資源,另一方面需要設(shè)置中斷、查詢等,同樣耗費單片機(jī)的資源,而采用時鐘芯片 ds1302。3.2.23.2.2 ds1302ds1302 引腳介紹引腳介紹圖 3-18 、vcc1:備用電池端;1、vcc2:5v 電源。當(dāng) vcc2vcc1+0.2v 時,由 vcc2 向 ds1302 供電,當(dāng) vcc2 vcc1 時,由 vcc1 向 ds1302 供電。7、 sclk:串行時鐘,輸入; 6、i/o:數(shù)據(jù)輸入輸出口;5、ce/rst:復(fù)位腳2 3、x1、x2 是外接晶振腳 (32.768khz 的晶振)4、地(gn

20、d)3.2.33.2.3 ds1302ds1302 有關(guān)日歷,時間的寄存器有關(guān)日歷,時間的寄存器表 3-13.2.43.2.4 ds1302ds1302 與單片機(jī)接口電路與單片機(jī)接口電路圖 3-2由于 ds1302 是依靠外部晶振與其內(nèi)部的電容配合來產(chǎn)生時鐘脈沖,因為ds1302 在芯片本身已經(jīng)集成了 6pf 電容。所以,為了獲得穩(wěn)定的可靠的時鐘,必須選用具有 6pf 負(fù)載電容的晶振。當(dāng)它工作于所要求的負(fù)載電容時,所以要選用 32768hz 的晶振。石英晶振用 12m,因為一個機(jī)器周期為 1/12 時鐘周期,所以這樣用 12m 的話,一個時鐘周期為 12us 那么定時器計一次數(shù)就是 1us 了

21、,電容范圍是在 20-40pf 之間的都行。表 3-2引腳號ds1302at89c511i/op1.02sclkp1.13rstp1.23.33.3 顯示模塊設(shè)計顯示模塊設(shè)計液晶顯示模塊方案(1):數(shù)碼管是利用發(fā)光二極管的特性組合而成數(shù)字顯示器件,通過控制相應(yīng)的二極管的狀態(tài)顯示相應(yīng)的數(shù)字。要使數(shù)碼管正常顯示就得有驅(qū)動電路驅(qū)動相應(yīng)的段碼,數(shù)碼管的現(xiàn)實方式可分為靜態(tài)顯示和動態(tài)顯示,靜態(tài)顯示方式只適合顯示單個的數(shù)字,因此本設(shè)計應(yīng)采用動態(tài)顯示方式。由于動態(tài)顯示方式利用的是人眼視覺暫留的特性,掃描的時間應(yīng)不大于 20 毫秒,占用系統(tǒng)資源大,而且顯示的個數(shù)和字型有限,在本設(shè)計中不易采用。方案(2):128

22、64 是一種圖形點陣液晶顯示器,它主要由行驅(qū)動器/列驅(qū)動器及 12864 全點陣液晶顯示器組成??赏瓿蓤D形顯示,也可以顯示 84 個(1616 點陣)漢字。該類液晶顯示模塊(即 ks0108b 及其兼容控制驅(qū)動器)的指令系統(tǒng)比較簡單,總共只有七種。關(guān)于行列和頁的解釋:從上向下共 64 行,每 8 行為一頁,共八頁,從左到右共 128 列,左半屏 0 到 63 列,右半屏 0 到 63列。顯示時,每頁以列為單位顯示。綜合比較上述兩種方案,應(yīng)采用 12864 液晶組成本設(shè)計的顯示模塊。3.3.13.3.1 pg12864lcdpg12864lcd 的特性介紹的特性介紹pg12864lcd 是像素可

23、尋址的圖形液晶顯示屏模塊芯片特性:1.工作電壓為+5v,可自帶驅(qū)動 lcd 所需的負(fù)電壓。2.全屏幕點陣,點陣數(shù)為 128 列*64 行,可顯示 8 行*4 行個(16*16 點陣)漢字,也可完成圖像,字符的顯示。3與 cpu 接口采用 5 條位控制總線和 8 位并行數(shù)據(jù)總線輸入輸出。4.內(nèi)部有顯示數(shù)據(jù)鎖存器,自帶 el 驅(qū)動。5.簡單的操作指令,顯示開關(guān)設(shè)置,顯示起始行設(shè)置,地址指針設(shè)置和數(shù)據(jù)讀/寫等指令。3.3.23.3.2 lcd12864lcd12864 引腳介紹引腳介紹表 3-3管腳號管腳名稱lever管腳功能描述1vss0電源地2vdd+5.0v電源電壓3v0-液晶顯示器驅(qū)動電壓4

24、d/i(rs)h/ld/i=“h”表示 db7db0 為顯示數(shù)據(jù)d/i=“l(fā)”表示 db7db0 為顯示指令數(shù)據(jù)5r/wh/lr/w=“h”,e=“h”數(shù)據(jù)被讀到db7db0r/w=“l(fā)”,e=“hl”數(shù)據(jù)被寫到 ir 或 dr6eh/lr/w=“l(fā)”,e 信號下降沿鎖存db7db0r/w=“h”,e=“h”ddram 數(shù)據(jù)讀到 db7db07db0h/l數(shù)據(jù)線8db1h/l數(shù)據(jù)線9db2h/l數(shù)據(jù)線10db3h/l數(shù)據(jù)線11db4h/l數(shù)據(jù)線12db5h/l數(shù)據(jù)線13db6h/l數(shù)據(jù)線14db7h/l數(shù)據(jù)線15cs1h/lh:選擇芯片(右半屏)信號16cs2h/lh:選擇芯片(左半屏)信號1

25、7reth/l復(fù)位信號,低電平復(fù)位18vout-10vlcd 驅(qū)動負(fù)電壓19led+-led 背光板電源20led-led 背光板電源3.3.33.3.3 lcd12864lcd12864 的原理簡圖的原理簡圖圖 3-3通過 db0- db7 數(shù)據(jù)線和 at89c51 連接,對應(yīng)的管腳必須有效。在顯示的時候,要通過列驅(qū)動和行驅(qū)動來控制液晶屏顯示。在各個驅(qū)動時,對應(yīng)的都有相應(yīng)的控制器來控制。顯示部分分為左右半屏,當(dāng) cs0 為有效電平時,左半屏顯示,cs1 為有效電平時,右半屏顯示。3.3.43.3.4 1286412864 內(nèi)部功能器件及相關(guān)功能內(nèi)部功能器件及相關(guān)功能1. 指令寄存器(ir)i

26、r 是用于寄存指令碼,與數(shù)據(jù)寄存器數(shù)據(jù)相對應(yīng)。當(dāng) d/i=0 時,在 e 信號下降沿的作用下,指令碼寫入 ir。2數(shù)據(jù)寄存器(dr)dr 是用于寄存數(shù)據(jù)的,與指令寄存器寄存指令相對應(yīng)。當(dāng) d/i=1 時,在下降沿作用下,圖形顯示數(shù)據(jù)寫入 dr,或在 e 信號高電平作用下由 dr 讀到db7db0 數(shù)據(jù)總線。dr 和 ddram 之間的數(shù)據(jù)傳輸是模塊內(nèi)部自動執(zhí)行的。3忙標(biāo)志:bfbf 標(biāo)志提供內(nèi)部工作情況。bf=1 表示模塊在內(nèi)部操作,此時模塊不接受外部指令和數(shù)據(jù)。bf=0 時,模塊為準(zhǔn)備狀態(tài),隨時可接受外部指令和數(shù)據(jù)。利用 status read 指令,可以將 bf 讀到 db7 總線,從檢驗

27、模塊之工作狀態(tài)。4顯示控制觸發(fā)器 dff 此觸發(fā)器是用于模塊屏幕顯示開和關(guān)的控制。dff=1 為開顯示(display off),ddram 的內(nèi)容就顯示在屏幕上,dff=0 為關(guān)顯示(display off)。ddf 的狀態(tài)是指令 display on/off 和 rst 信號控制的。5xy 地址計數(shù)器 xy 地址計數(shù)器是一個 9 位計數(shù)器。高 3 位是 x 地址計數(shù)器,低 6 位為 y 地址計數(shù)器,xy 地址計數(shù)器實際上是作為 ddram 的地址指針,x 地址計數(shù)器為ddram 的頁指針,y 地址計數(shù)器為 ddram 的 y 地址指針。x 地址計數(shù)器是沒有記數(shù)功能的,只能用指令設(shè)置。y 地

28、址計數(shù)器具有循環(huán)記數(shù)功能,各顯示數(shù)據(jù)寫入后,y 地址自動加 1,y 地址指針從 0 到 63。6顯示數(shù)據(jù) ram(ddram)ddram 是存儲圖形顯示數(shù)據(jù)的。數(shù)據(jù)為 1 表示顯示選擇,數(shù)據(jù)為 0 表示顯示非選擇。ddram 與地址和顯示位置的關(guān)系見 ddram 地址表。7z 地址計數(shù)器z 地址計數(shù)器是一個 6 位計數(shù)器,此計數(shù)器具備循環(huán)記數(shù)功能,它是用于顯示行掃描同步。當(dāng)一行掃描完成,此地址計數(shù)器自動加 1,指向下一行掃描數(shù)據(jù),rst 復(fù)位后 z 地址計數(shù)器為 0。z 地址計數(shù)器可以用指令 display start line 預(yù)置。因此,顯示屏幕的起始行就由此指令控制,即 ddram 的數(shù)

29、據(jù)從哪一行開始顯示在屏幕的第一行。此模塊的 ddram 共 64 行,屏幕可以循環(huán)滾動顯示 64 行。各功能指令分別介紹如下顯示開/關(guān)指令 r/wrsdb7 db6 db5 db4 db3db2db1 db00000111111/0當(dāng) db01 時,lcd 顯示 ram 中的內(nèi)容;db00 時,關(guān)閉顯示。2、顯示起始行(row)設(shè)置指令r/wrsdb7 db6 db5 db4 db3db2db1 db00011 顯示起始行(063)該指令設(shè)置了對應(yīng)液晶屏最上一行的顯示 ram 的行號,有規(guī)律地改變顯示起始行,可以使 lcd 實現(xiàn)顯示滾屏的效果。3、頁(page)設(shè)置指令r/wrsdb7 db6

30、 db5 db4 db3db2db1 db00010111 頁號(07)顯示 ram 共 64 行,分 8 頁,每頁 8 行。4、列地址(y address)設(shè)置指令r/wrsdb7 db6 db5 db4 db3db2db1 db00001 顯示列地址(063)設(shè)置了頁地址和列地址,就唯一確定了顯示 ram 中的一個單元,這樣 mpu 就可以用讀、寫指令讀出該單元中的內(nèi)容或向該單元寫進(jìn)一個字節(jié)數(shù)據(jù)。5、讀狀態(tài)指令r/wrsdb7 db6 db5 db4 db3db2db1 db010busy0on/offrest0000該指令用來查詢液晶顯示模塊內(nèi)部控制器的狀態(tài),各參量含義如下:busy:1

31、-內(nèi)部在工作 0-正常狀態(tài)on/off:1-顯示關(guān)閉 0-顯示打開reset:1-復(fù)位狀態(tài) 0-正常狀態(tài)在 busy 和 reset 狀態(tài)時,除讀狀態(tài)指令外,其它指令均不對液晶顯示模塊產(chǎn)生作用。在對液晶顯示模塊操作之前要查詢 busy 狀態(tài),以確定是否可以對液晶顯示模塊進(jìn)行操作。6、寫數(shù)據(jù)指令r/wrsdb7 db6 db5 db4 db3db2db1 db001寫數(shù)據(jù)讀數(shù)據(jù)指令 r/wrsdb7 db6 db5 db4 db3db2db1 db011讀顯示數(shù)據(jù) 讀、寫數(shù)據(jù)指令每執(zhí)行完一次讀、寫操作,列地址就自動增一。必須注意的是,進(jìn)行讀操作之前,必須有一次空讀操作,緊接著再讀才會讀出所要讀的

32、單元中的數(shù)據(jù)3.3.53.3.5 1286412864 液晶與單片機(jī)接口電路液晶與單片機(jī)接口電路圖 3-4表 3-4引腳號12864 引腳at89c51 引腳1數(shù)據(jù)線 db0-db7p0.0-p0.72寄存器選擇 cdp2.03寫 wrp3.64讀 rdp3.75使能端 cep2.76復(fù)位 rst低電平排阻的計算公式:上拉電源 /(硬件額定電流單片機(jī)輸出電流)一、最大值的計算原則:要保證上拉電阻明顯小于負(fù)載的阻抗,以使高電平時輸出有效。 例如:負(fù)載阻抗是 10k,供電電壓是 5v,如果要求高電平不小于 4.5v,那么,上拉電阻最大值 r 大 5-4.5)=10:5 r 大=1k 也就是最大值

33、1k, (如果超過了 1k,輸出的高電平就小于 4.5v 了) 二、最小值的計算原則:保證不超過管子的額定電流(如果不是場效應(yīng)管而是三極管也可依照飽和電流來計算) 例:管子的額定電流 150ma,放大倍數(shù) 100,基極限流電阻 10k,工作在 5v的系統(tǒng)中。那么,算法如下: ibu/r=(5-0.7)/10=0.47(ma) ic100*0.4747ma 小于額定的 150,所以可以按飽和法來算最小值。 上拉電阻最小值 r 小5v/47ma=106 歐姆 (如果小于這個電阻,管子就會過飽和而沒有意義了。如果大于這個值,管子的導(dǎo)體電阻就會變大一些,所以太高也不利于低電平的輸出)3.43.4 設(shè)置

34、模塊設(shè)置模塊設(shè)置模塊采用三個按鍵與 p3.2 經(jīng)過與門連接按鍵與單片機(jī)的接口電路圖 3-5按鍵問題:通過與門來控制,程序是中斷驅(qū)動的,其中 k1 為選擇按鍵,k2為調(diào)整按鍵,k3 是確定按鈕,實現(xiàn)時分秒的調(diào)整。相應(yīng)的引腳接到 p3.0, p3.1. p3.3 上,共同控制電子時鐘的調(diào)整。選用輕觸按鈕型號為 xdjt1102s(輕觸開關(guān)貼系列)。3.53.5 振蕩電路振蕩電路本設(shè)計 51 芯片選用內(nèi)部振蕩器方式。由于本設(shè)計的時間由內(nèi)部定時器中斷與軟件計數(shù)相結(jié)合產(chǎn)生的,所以從計算方便以及系統(tǒng)的效率上考慮,本設(shè)計選用12mhz 頻率的晶振,電路原理圖如下:圖 3-6 at89c51 的振蕩電路經(jīng)廠家

35、推薦穩(wěn)定電路的電容 c1,c2=30pf+-10p(附錄資料 at89c51.pdf 第4-32 頁) 。3.63.6 復(fù)位電路復(fù)位電路本設(shè)計使用上電復(fù)位電路。單片機(jī)晶振為 12mhz,起振時間將近 1ms,單片機(jī) 2 個機(jī)器周期的時間為 2us。單片機(jī)每次上電復(fù)位所需的最短延時應(yīng)該不小于 treset。這里,treset 等于上電延時與起振延時之和。從實際上講,延遲一個 treset 往往還不夠,不能夠保障單片機(jī)有一個良好的工作開端。復(fù)位電路把單片機(jī)鎖定在復(fù)位狀態(tài)上并且維持一個延時(記作 trst) ,以便給予電源電壓從上升到穩(wěn)定的一個等待時間;在電源電壓穩(wěn)定之后,再插入一個延時,給予時鐘振

36、蕩器從起振到穩(wěn)定的一個等待時間;在單片機(jī)開始進(jìn)入運行狀態(tài)之前,還要至少推遲 2 個機(jī)器周期的延時間。單片機(jī)是高電平的時候復(fù)位,一般是用電阻和電容組成的,電容充電的時 rst 復(fù)位端為高電平,此時單片機(jī)開始復(fù)位.電容充電完成,此時單片機(jī)復(fù)位完成。由此電容值可取 22uf,電阻值取 10k。詳細(xì)見附錄文件(電容充電時間的計算方法.pdf)圖 3-7 at89c51 上電復(fù)位電路第四章第四章 系統(tǒng)軟件設(shè)計系統(tǒng)軟件設(shè)計軟件設(shè)計是本設(shè)計的關(guān)鍵,軟件程序編寫的好壞直接影響著系統(tǒng)運行情況的良好。因本程序涉及的模塊較多,所以程序編寫也采用模塊化設(shè)計,c 語言具有編寫靈活、移植方便、便于模塊化設(shè)計的特點,所以本

37、系統(tǒng)的軟件采用 c51 編寫。程序框圖如下: 4-14.14.1 時鐘函數(shù)模塊時鐘函數(shù)模塊具體實現(xiàn)含有向 ds1302 串行寫入一字節(jié)即 write_a_byte_t0_ds1302,從ds1302 讀取一字節(jié)即 get_a_byte_from_ds1302,從 ds1302 指定位置讀數(shù)據(jù)read_data,向 ds1302 某地址寫入數(shù)據(jù) write_ds1302,設(shè)置時間 set_ds1302,從 ds1302 獲取時間(讀取當(dāng)前時間)gettime,利用這些函數(shù)來實現(xiàn)時間,最終顯示在液晶屏上,可以自行調(diào)整。你可以顯示系統(tǒng)時間,也可以顯示調(diào)整時間,具體實現(xiàn)是設(shè)置時間函數(shù)。4.1.14.1

38、.1 實現(xiàn)功能實現(xiàn)功能能夠顯示年月日時分秒和星期,完成了 24 小時和 12 小時之間的切換,并設(shè)有鬧鐘,鬧鐘存放于 eeprom 中,時間和星期以及鬧鐘均可調(diào)。其中鬧鐘掉電數(shù)據(jù)不會丟失。4.1.24.1.2 函數(shù)設(shè)計函數(shù)設(shè)計1:void write_a_byte_to_ds1302(uchar x)(1)功能向 ds1302 中寫入一字節(jié)數(shù)據(jù)。(2)依據(jù)ds1302 時序圖(詳見 sd1302 技術(shù)資料)可知,在啟動 ds1302 時每產(chǎn)生一個下降沿可向 ds1302 中寫入一位數(shù)據(jù)。(3)右圖為流程圖:2:uchar get_a_byte_from_ds1302()(1)功能從 ds130

39、2 中讀取一字節(jié)數(shù)據(jù)。(2)依據(jù)ds1302 時序圖(詳見 sd1302 技術(shù)資料)可知,在啟動 ds1302 時每產(chǎn)生一個上升沿可向 ds1302 中讀取一位數(shù)據(jù)。(3)右圖為流程圖:3:uchar read_ds1302(uchar addr)(1)功能從指定的地址中讀取一字節(jié)數(shù)據(jù)。(2)依據(jù)ds1302 時序圖(詳見 sd1302 技術(shù)資料)可知,在啟動 ds1302 時每產(chǎn)生一個下降沿可向 ds1302 中寫入一位數(shù)據(jù)。在啟動 ds1302 時每產(chǎn)生一個上升沿可向ds1302 中讀取一位數(shù)據(jù)。(3)下圖為流程圖:4:void write_ds1302(uchar addr,uchar

40、dat)(1)功能向 ds1302 指定地址中寫入一字節(jié)數(shù)據(jù)。(2)依據(jù)ds1302 時序圖(詳見 sd1302 技術(shù)資料)可知,在啟動 ds1302 時每產(chǎn)生一個下降沿可向 ds1302 中寫入一位數(shù)據(jù)。在啟動 ds1302 時每產(chǎn)生一個上升沿可向 ds1302 中讀取一位數(shù)據(jù)。(3)右圖為流程圖:5:uchar tran_input(uchar value)(1)功能輸入數(shù)據(jù)入轉(zhuǎn)換函數(shù)、將十進(jìn)制轉(zhuǎn)換成 bcd 碼(2)依據(jù)轉(zhuǎn)換公式。(3)下圖為流程圖:6:void gettime()(1)功能讀取當(dāng)前時間,并判斷當(dāng)前是 12 小時顯示還是 24 小時顯示。(2)依據(jù)通過對標(biāo)志位的判斷來確定

41、當(dāng)前為 12 小時制還是 24 小時制,如果為 12 小時時要將 ds1302 寄存器內(nèi)相應(yīng)位置 1。(3)右圖為流程圖:7:void set_ds1302()(1)功能向 ds1302 中寫入初始時間,啟動 ds1302 振蕩器,判斷上下午。(2)依據(jù)ds1302 時序圖(詳見 sd1302 技術(shù)資料) 。(3)下圖為流程圖:8:void format_datetime(uchar d,uchar *a)(1)功能將數(shù)字轉(zhuǎn)換成字符。(2)依據(jù)asii 碼表。9:uchar isleepyear(uint y)(1)功能判斷是否為閏年。(2)依據(jù)閏年的判斷方法。10:void init_ds1

42、302()(1)功能啟動 ds1302 振蕩器。(2)依據(jù)由 ds1302 的技術(shù)資料知,ds1302 的秒寄存器的最高位為振蕩器控制位,向該位置一即可啟動振蕩器。11:void ds1302_setprotect(bit flag)(1)功能ds1302 寄存器寫保護(hù)函數(shù)。(2)依據(jù)由 ds1302 的技術(shù)資料知,ds1302 的 0 x80 地址處寫一則啟動寄存器保護(hù),寫零則去除寄存器保護(hù)功能。4.24.2 指針時鐘設(shè)計指針時鐘設(shè)計4.2.14.2.1 實現(xiàn)功能實現(xiàn)功能本文件實現(xiàn)了指針時鐘的顯示,同時也實現(xiàn)了在 12864 顯示器上花點以、畫線以及花圓的功能。4.2.24.2.2 函數(shù)設(shè)計

43、函數(shù)設(shè)計1:void pixel(uchar x,uchar y,uchar mode)(1)功能從指定坐標(biāo)處繪制一個點或擦除一個點依據(jù)利用 lcd_set_xy 確定坐標(biāo),然后(2)根據(jù)點在坐標(biāo)的位置,判斷是擦除還是繪制再使用 lcd_write_byte 函數(shù)寫入數(shù)據(jù)。(3)右圖為流程圖:2: void line(uchar x1,uchar y1,uchar x2,uchar y2,bit mode)(1)功能在 lcd 上繪制一條線段(2)依據(jù)利用直線兩點式公式在直線點的軌跡上繪制/擦除點以達(dá)到繪線的目的。(3)右圖為流程圖:3:void clock_plate()(1)功能繪制一個指

44、針時鐘的圓盤(2)依據(jù)利用圓的公式找到點的軌跡,在軌跡上繪制點即可實現(xiàn)。(3)右圖為流程圖:4:void repaint_a_hand(uchar i)(1)功能根據(jù)當(dāng)前的時間繪制相對應(yīng)的指針,并擦除原狀態(tài)的指針(2)依據(jù)利用圓的弧度制與時間的相映射,時間變化弧度也隨之變化,從圓心到圓弧對應(yīng)時間的位置畫出直線就是指針。(3)下圖為流程圖:5:void display_hms_hand()(1)功能重新繪制秒、分、時針。(2)依據(jù)調(diào)用 repaint_a_hand 函數(shù)設(shè)置不同的參數(shù)即可實現(xiàn)。6:void display_clockzhizhen()(1)功能讀取時間繪制指針時鐘到 lcd 上(

45、2)依據(jù)讀取從 ds1302 得到的時間,隨時間的變化,指針也隨之變化,形成一個完整的模擬指針時鐘,另外還要判斷按鍵掃描的鍵值是否為退出鍵的鍵值,若是則返回菜單界面。(3)右圖為流程圖:4.2.34.2.3 小結(jié)小結(jié)用圓的弧度制與時間值相映射,使得圓上點的軌跡隨著時間而跳動,實現(xiàn)了指針的走動。另外讀取的時間與鬧鐘時間相比較達(dá)到實時鬧鐘報警的功能。4.34.3 顯示函數(shù)模塊顯示函數(shù)模塊檢測 lcd 是否忙 lcd_check_busy(),向 lcd 發(fā)送命令lcd_write_command,向 lcd 發(fā)送數(shù)據(jù) void lcd_write_data,初始化 12864 顯示屏 lcd_in

46、itialize,初始化 12864 顯示屏common_show (通用顯示函數(shù)) 。顯示字符和漢字的字模是用相應(yīng)的軟件導(dǎo)出的,根據(jù)液晶顯示屏的要求對應(yīng)圓盤的大小都是可以規(guī)定的。4.3.14.3.1 實現(xiàn)功能實現(xiàn)功能通過 12864 顯示指針式電子時鐘4.3.24.3.2 函數(shù)設(shè)計函數(shù)設(shè)計1:uchar lcd_write_command_p2(uchar cmd,uchar para1,uchar para2)(1)功能寫雙參的命令(2)依據(jù)通過判斷狀態(tài)位 char status_bit_01(),是讀/寫指令還是讀/寫數(shù)據(jù)2:uchar lcd_write_command_p1(ucha

47、r cmd,uchar para1)(1) 功能/寫單參數(shù)的指令(2) 依據(jù)通過判斷狀態(tài)位 char status_bit_01(),是讀/寫指令還是讀/寫數(shù)據(jù)3:uchar lcd_write_command(uchar cmd)(1)功能寫無參數(shù)指令(2)依據(jù)通過判斷狀態(tài)位 char status_bit_01(),是讀/寫指令還是讀/寫數(shù)據(jù)4:uchar lcd_write_data(uchar dat)(1)功能寫數(shù)據(jù)(2)依據(jù)通過判斷狀態(tài)位 char status_bit_03(),數(shù)據(jù)是否為自動寫狀態(tài)(3)流程圖5:void set_lcd_pos(uchar row,uchar col)reentrant(1)功能設(shè)置當(dāng)前地址(2)依據(jù)先通過調(diào)用寫雙參數(shù)命令,使 lcd 準(zhǔn)備工作,來達(dá)成我們的需要。6:void cls()(1)功能清屏(2)依據(jù)通過調(diào)用雙參數(shù)和無參數(shù)函數(shù)來設(shè)置地址指針和是否自動寫,再通過判斷狀態(tài)位 status_bit_3(),是否要寫數(shù)據(jù),然后調(diào)用lcd_write_data(),當(dāng)向 lcd 寫好后,在調(diào)用無參函數(shù)來完成自動寫結(jié)束,最后在重置地址指針。(3)流程圖7:char lcd_initialise()(1)功能lcd 的初始化(2)依據(jù)通過寫雙

溫馨提示

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

評論

0/150

提交評論