基于單片機(jī)及DS1302的LED電子鐘設(shè)計——軟件部分_第1頁
基于單片機(jī)及DS1302的LED電子鐘設(shè)計——軟件部分_第2頁
基于單片機(jī)及DS1302的LED電子鐘設(shè)計——軟件部分_第3頁
基于單片機(jī)及DS1302的LED電子鐘設(shè)計——軟件部分_第4頁
基于單片機(jī)及DS1302的LED電子鐘設(shè)計——軟件部分_第5頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、基于單片機(jī)及ds1302的led電子鐘設(shè)計軟件部分摘要 現(xiàn)代社會的快節(jié)奏生活要求人們對時間的掌握越來越精確,隨著計算機(jī)在社會領(lǐng)域的滲透和大規(guī)模集成電路的發(fā)展,單片機(jī)的應(yīng)用正在逐步地深入,電子鐘也逐漸取代傳統(tǒng)鐘表被廣泛應(yīng)用于生活和工作中。電子時鐘主要是利用電子技術(shù)將時鐘電子化、數(shù)字化,擁有時間精確、體積小、界面友好、可擴(kuò)展性能強(qiáng)等特點。本設(shè)計以at89c52芯片作為核心,8位led數(shù)碼管顯示和ds1302時鐘芯片主要組成來實現(xiàn)電子鐘的基本功能,并分析了相應(yīng)軟件的設(shè)計要點,包括軟件設(shè)計流程、仿真與調(diào)試。關(guān)鍵詞 電子鐘;單片機(jī);ds1302abstract nowadays people need

2、more accurate time to keep up with the high pace of life. with computers in the infiltration and the development of large-scale integrated circuits,scm application is steadily deepening, while electronic clock is widely used in our life and work taking place of traditional one. the electronic clock

3、mainly uses the electronic technology to make the clock computerized and digitized, with features of accurate time、small size、a friendly user interface and strong expansibility.this design mainly consists of the core chip of at89s52, 8 light emitting diodes and the clock chip ds1302 to achieve the b

4、asic function of the electronic clock, and also analyses the key designing of the corresponding software including software design flow, emulation and debuggingkey words electronic clock; single chip microcomputer; ds1302目錄1.前 言12.系統(tǒng)核心芯片介紹22.1 單片機(jī)at89s2簡介22.1.1 芯片主要性能22.1.2 芯片引腳功能22.2 時鐘芯片ds1302簡介42

5、.2.1 主要功能42.2.2 內(nèi)部結(jié)構(gòu)及引腳功能52.2.3 工作原理62.2.4 控制字節(jié)及寄存器62.2.5 數(shù)據(jù)的傳送73.電子鐘軟件設(shè)計93.1 系統(tǒng)結(jié)構(gòu)圖及總流程圖93.2 主程序模塊103.2.1 初始化模塊103.2.2 ds1302讀寫模塊113.2.3 顯示模塊133.2.4 蜂鳴模塊143.2.5 主程序流程圖163.3 中斷調(diào)整模塊173.3.1 時間中斷模塊173.3.2 鬧鐘調(diào)整模塊194調(diào)試結(jié)果分析及解決方案205總結(jié)22致謝23參考文獻(xiàn)24附錄一 硬件仿真原理圖25附錄二 軟件匯編程序2621.前 言電子鐘已成為人們?nèi)粘I钪械谋匦杵?,廣泛應(yīng)用于家庭、車站、辦公

6、室等場所。鐘表數(shù)字化給人們生產(chǎn)生活帶來了極大地方便而且大大地擴(kuò)展了鐘表原先的報時功能諸如定時自動報警、按時自動打鈴、時間程序自動控制、通斷動力設(shè)備、甚至各種定時電氣的自動啟用,因此研究數(shù)字鐘及擴(kuò)大其應(yīng)用有著非?,F(xiàn)實的意義。數(shù)字電子鐘設(shè)計與制作可采用數(shù)字電路實現(xiàn),也可以采用單片機(jī)來完成。若用數(shù)字電路完成,所設(shè)計的電路相當(dāng)復(fù)雜,大概需要十幾片數(shù)字集成塊,其功能也主要依賴于數(shù)字電路的各功能模塊的組合來實現(xiàn),焊接的過程比較復(fù)雜,成本也非常高。若用單片機(jī)來設(shè)計制作完成,由于其功能的實現(xiàn)主要通過軟件編程來完成,那么就降低了硬件電路的復(fù)雜性,而且其成本也有所降低。截止今日,單片機(jī)應(yīng)用技術(shù)飛速發(fā)展,縱觀現(xiàn)在各

7、個領(lǐng)域,從導(dǎo)彈的導(dǎo)航裝置,到飛機(jī)上各種儀表的控制,從計算機(jī)的網(wǎng)絡(luò)通訊與數(shù)據(jù)傳輸,到工業(yè)自動化過程的實時控制和數(shù)據(jù)處理,以及我們生活中廣泛使用的各種智能ic卡、電子寵物等,這些都離不開單片機(jī)。單片機(jī)即單片微型計算機(jī)(single-chip microcomputer ),是集cpu ,ram ,rom ,定時,計數(shù)和多種接口于一體的微控制器。它體積小,成本低,功能強(qiáng),廣泛應(yīng)用于智能產(chǎn)業(yè)和工業(yè)自動化上。同時,若采用單片機(jī)計時,一方面需要采用計數(shù)器,占用硬件資源,另一方面需要設(shè)置中斷、查詢等,同樣耗費單片機(jī)的資源,而且,某些測控系統(tǒng)可能不允許。但是,如果在系統(tǒng)中采用時鐘芯片,則能很好地解決這個問題。

8、現(xiàn)在流行的串行時鐘電路很多,如ds1302、ds1307、pcf8485等。這些電路的接口簡單、價格低廉、使用方便,被廣泛地采用。美國dallas公司生產(chǎn)的串行實時時鐘芯片 ds1302是一種具有涓細(xì)電流充電能力的實時時鐘芯片,采用普通32.768khz晶振,具有實時時鐘和 31 字節(jié)的靜態(tài)ram。主要特點是采用串行數(shù)據(jù)傳輸,可方便地與單片機(jī)接口,可為掉電保護(hù)電源提供可編程的充電功能,并且可以關(guān)閉充電功能。本設(shè)計要求利用51單片機(jī)和ds1302設(shè)計制作一個led電子鐘,用8個led顯示時間,當(dāng)按下相應(yīng)按鍵時,修改當(dāng)前時間或鬧鈴時間,若當(dāng)前時間與鬧鈴時間相同,蜂鳴器發(fā)音1分鐘。2.系統(tǒng)核心芯片介

9、紹2.1 單片機(jī)at89s2簡介2.1.1 芯片主要性能at89s52是一個低功耗,高性能cmos 8位單片機(jī),片內(nèi)含8k bytes isp(in-system programmable)的可反復(fù)擦寫1000次的flash只讀程序存儲器,器件采用atmel公司的高密度、非易失性存儲技術(shù)制造,兼容標(biāo)準(zhǔn) mcs-51指令系統(tǒng)及80c51引腳結(jié)構(gòu),芯片內(nèi)集成了通用8位中央處理器和isp flash存儲單元,功能強(qiáng)大的微型計算機(jī)的at89s52可為許多嵌入式控制應(yīng)用系統(tǒng)提供高性價比的解決方案。at89s52具有如下特點:40個引腳,8k bytes flash片內(nèi)程序存儲器,256 bytes的隨機(jī)

10、存取數(shù)據(jù)存儲器(ram),32個外部雙向輸入/輸出(i/o)口,5個中斷優(yōu)先級2層中斷嵌套中斷,2個16位可編程定時計數(shù)器,2個全雙工串行通信口,看門狗(wdt)電路,片內(nèi)時鐘振蕩器。另外,at89s52 可降至0hz 靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式。空閑模式下,cpu 停止工作,允許ram、定時器/計數(shù)器、串口、中斷繼續(xù)工作。掉電保護(hù)方式下,ram內(nèi)容被保存,振蕩器被凍結(jié), 單片機(jī)一切工作停止,直到下一個中斷或硬件復(fù)位為止。2.1.2 芯片引腳功能at89s52芯片dip雙列直插式封裝引腳如圖2-1所示。圖2-1 at89s52引腳排列p0 口:p0口是一個8位漏極開路的雙向i/o

11、口。作為輸出口,每位能驅(qū)動8個ttl邏輯電平。對p0端口寫“1”時,引腳用作高阻抗輸入。當(dāng)訪問外部程序和數(shù)據(jù)存儲器時,p0口也被作為低8位地址/數(shù)據(jù)復(fù)用。在這種模式下,p0具有內(nèi)部上拉電阻。 p1 口:p1 口是一個具有內(nèi)部上拉電阻的8 位雙向i/o 口,p1 輸出緩沖器能驅(qū)動4 個 ttl 邏輯電平。對p1 端口寫“1”時,內(nèi)部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(iil)。 引腳口第二功能如下: p1.0/t2(定時器/計數(shù)器t2的外部計數(shù)輸入),時鐘輸出 p1.1/t2ex(定時器/計數(shù)器t2的捕捉/重載觸發(fā)信號和方向

12、控制) p1.5/mosi(在系統(tǒng)編程用) p1.6/miso(在系統(tǒng)編程用) p1.7/sck(在系統(tǒng)編程用) p2 口:p2口是一個具有內(nèi)部上拉電阻的8 位雙向i/o 口,p2 輸出緩沖器能驅(qū)動4 個ttl邏輯電平。對p2 端口寫“1”時,內(nèi)部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(iil)。 在訪問外部程序存儲器或用16位地址讀取外部數(shù)據(jù)存儲器(例如執(zhí)行movx dptr)時,p2 口送出高八位地址。在這種應(yīng)用中,p2 口使用很強(qiáng)的內(nèi)部上拉發(fā)送1。在使用8位地址(如movx ri)訪問外部數(shù)據(jù)存儲器時,p2口輸出p2鎖存

13、器的內(nèi)容。 p3 口:p3 口是一個具有內(nèi)部上拉電阻的8 位雙向i/o 口,p2 輸出緩沖器能驅(qū)動4 個ttl邏輯電平。對p3 端口寫“1”時,內(nèi)部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(iil)。 p3口亦作為at89s52特殊功能(第二功能)使用。 引腳口第二功能如下:p3.0/rxd(串行輸入口)p3.1/txd(串行輸出口)p3.2/into(外中斷0)p3.3/int1(外中斷1)p3.4/to(定時/計數(shù)器0)p3.5/t1(定時/計數(shù)器1)p3.6/wr(外部數(shù)據(jù)存儲器寫選通)p3.7/rd(外部數(shù)據(jù)存儲器讀選通

14、)此外,p3口還接收一些用于flash閃存編程和程序校驗的控制信號。rst復(fù)位輸入。當(dāng)振蕩器工作時,rst引腳出現(xiàn)兩個機(jī)器周期以上高電平將是單片機(jī)復(fù)位。ale/prog當(dāng)訪問外部程序存儲器或數(shù)據(jù)存儲器時,ale(地址鎖存允許)輸出脈沖用于鎖存地址的低8位字節(jié)。一般情況下,ale仍以時鐘振蕩頻率的1/6輸出固定的脈沖信號,因此它可對外輸出時鐘或用于定時目的。要注意的是:每當(dāng)訪問外部數(shù)據(jù)存儲器時將跳過一個ale脈沖。如有必要,可通過對特殊功能寄存器(sfr)區(qū)中的8eh單元的d0位置位,可禁止ale操作。該位置位后,只有一條movx和movc指令才能將ale激活。此外,該引腳會被微弱拉高,單片機(jī)執(zhí)

15、行外部程序時,應(yīng)設(shè)置ale禁止位無效。psen程序儲存允許(psen)輸出是外部程序存儲器的讀選通信號,當(dāng)at89c52由外部程序存儲器取指令(或數(shù)據(jù))時,每個機(jī)器周期兩次psen有效,即輸出兩個脈沖,在此期間,當(dāng)訪問外部數(shù)據(jù)存儲器,將跳過兩次psen信號。ea/vpp外部訪問允許,欲使cpu僅訪問外部程序存儲器(地址為0000h-ffffh),ea端必須保持低電平(接地)。需注意的是:如果加密位lb1被編程,復(fù)位時內(nèi)部會鎖存ea端狀態(tài)。如ea端為高電平(接vcc端),cpu則執(zhí)行內(nèi)部程序存儲器的指令。2.2 時鐘芯片ds1302簡介2.2.1 主要功能ds1302芯片是美國dallas公司推

16、出的低功耗實時時鐘芯片,它工作電壓為2.5v5.5v,采用串行通信方式,只需3條線便可以和單片機(jī)進(jìn)行同步通信,并可采用突發(fā)方式一次傳送多個字節(jié)的時鐘信號或ram數(shù)據(jù)。ds1302內(nèi)部有一個318的用于臨時性存放數(shù)據(jù)的ram寄存器??稍黾酉到y(tǒng)的ram。ds1302的時鐘校準(zhǔn)比較容易,若采用專用的晶體振蕩器,幾乎無須調(diào)整即可以達(dá)到國家要求的時鐘誤差標(biāo)準(zhǔn)。ds1302是ds1202的升級產(chǎn)品,與ds1202兼容,但增加了主電源/后背電源雙電源引腳,同時提供了對后背電源進(jìn)行涓細(xì)電流充電的能力,這樣避免了由于突然停電而造成時鐘停止,因此它非常適合于長時間無人職守的監(jiān)測控制系統(tǒng)或需經(jīng)常記錄某些具有特殊意義

17、的數(shù)據(jù)及對應(yīng)時間的場合。ds1302提供秒、分、時、日、星期、月、年的信息,每月的天數(shù)和閏年的天數(shù)可自動調(diào)整,并可通過am/pm 指示決定采用24 或12 小時格式。2.2.2 內(nèi)部結(jié)構(gòu)及引腳功能ds1302內(nèi)部主要包括實時時鐘(real time clock)、輸入移位寄存器(input shift registers)、31字節(jié)靜態(tài)ram、電源控制部分(power control)、命令控制邏輯(command and control logic)、振蕩器和分頻器(oscillator and divider)等部分。ds1302內(nèi)部結(jié)構(gòu)如圖2-2所示。圖2-2 ds1302內(nèi)部結(jié)構(gòu)ds1

18、302具有8腳dip引腳排列如圖2-3所示。圖2-3 ds1302引腳排列vcc1:后備電源,在主電源關(guān)閉的情況下,也能保持時鐘的連續(xù)運行;當(dāng)vcc2大于vcc10.2v時,vcc2給ds1302供電。vcc2:主電源,當(dāng)vcc2小于vcc1時,ds1302由vcc1供電。x1、x2:振蕩源,外接32.768khz晶振。gnd:接地端sclk:串行時鐘輸入端i/o:串行數(shù)據(jù)輸入輸出端(雙向)。rst:復(fù)位/片選線,通過把rst輸入驅(qū)動置高電平來啟動所有的數(shù)據(jù)傳送。rst輸入有兩種功能:首先,rst接通控制邏輯,允許地址/命令序列送入移位寄存器;其次,rst提供終止單字節(jié)或多字節(jié)數(shù)據(jù)的傳送手段。

19、2.2.3 工作原理ds1302工作時為了對任何數(shù)據(jù)傳送進(jìn)行初始化,需要將復(fù)位腳(rst)置為高電平且將8位地址和命令信息裝入移位寄存器。數(shù)據(jù)在時鐘(sclk)的上升沿串行輸入,前8位指定訪問地址。命令字裝入移位寄存器后,在之后的時鐘周期,讀操作時輸出數(shù)據(jù),寫操作時輸入數(shù)據(jù)。時鐘脈沖的個數(shù)在單字節(jié)方式下為8+8(8位地址+8位數(shù)據(jù)),在多字節(jié)方式下最多可達(dá)8+248。2.2.4 控制字節(jié)及寄存器ds1302的一次數(shù)據(jù)傳送是從發(fā)送控制字節(jié)開始的??刂谱止?jié)的最高有效位(位7)必須是邏輯1,如果該位為0,則無法把數(shù)據(jù)寫入到ds1302中;位6表示要讀寫的數(shù)據(jù)類型,為0表示存取日歷時鐘數(shù)據(jù),為1表示存

20、取 ram數(shù)據(jù);位5至位1指示要操作單元的地址;最低有效位(位 0)表示命令類型,為0表示要進(jìn)行寫操作,為 1 表示要進(jìn)行讀操作??刂谱止?jié)總是從最低位開始輸出。其控制字節(jié)格式如圖2-4所示。圖2-4 控制字節(jié)格式對ds1302的操作就是對其內(nèi)部寄存器的操作,ds1302內(nèi)部共有12個寄存器,其中有7個寄存器與日歷、時鐘有關(guān),存放的數(shù)據(jù)位為bcd碼形式。表2-1 ds1302的日歷時鐘寄存器及控制字此外 ,還有控制寄存器、充電寄存器、時鐘突發(fā)寄存器及與ram相關(guān)的寄存器等。時鐘突發(fā)寄存器可一次性順序讀寫除充電寄存器外的所有寄存器內(nèi)容。ds1302與ram相關(guān)的寄存器分為兩類,一類是單個ram單元

21、,共31個,每個單元組態(tài)為一個8位的字節(jié),其命令控制字為c0hfdh,其中奇數(shù)為讀操作,偶數(shù)為寫操作;另一類為突發(fā)方式下的ram寄存器,此方式下可一次性讀寫所有的ram的31個字節(jié),命令控制字為feh(寫)、(讀) 。2.2.5 數(shù)據(jù)的傳送向 ds1302 寫入數(shù)據(jù)時,數(shù)據(jù)在控制字節(jié)輸入后的下一個 sclk周期的上升沿被寫入,多余的 sclk將被忽略。數(shù)據(jù)寫入時從低位(位0)開始;同樣,從ds1302 讀取數(shù)據(jù)時,數(shù)據(jù)在緊跟控制字節(jié)后的下一個 sclk的下降沿讀出,讀出數(shù)據(jù)時也是從低位(0位)到高位(7 位),只要rst保持高電平,額外的 sclk將導(dǎo)致數(shù)據(jù)字節(jié)的持續(xù)讀出,這個特性用于實現(xiàn)該芯

22、片的突發(fā)讀模式。對ds1302 的每一次讀寫需 16個時鐘脈沖,前 8 個脈沖輸入操作地址和讀寫命令,后8個脈沖寫入或讀出數(shù)據(jù)。數(shù)據(jù)傳送時序如圖2-5。圖2-5 數(shù)據(jù)讀寫時序圖3.電子鐘軟件設(shè)計3.1 系統(tǒng)結(jié)構(gòu)圖及總流程圖根據(jù)軟件功能要求,將系統(tǒng)軟件劃分為若干個相對獨立的部分,設(shè)計出合理的總體結(jié)構(gòu):時鐘顯示是一個循環(huán)過程,系統(tǒng)以單片機(jī)at89s52為主控制器,不斷讀取實時時鐘芯片ds1302提供的時間送led顯示,時間采用24小時模式;當(dāng)達(dá)到鬧鐘所設(shè)定時間時,控制蜂鳴器發(fā)聲一分鐘;當(dāng)需要調(diào)整時間或鬧鐘時,按下相應(yīng)按鍵進(jìn)入中斷處理。整個系統(tǒng)的電源可由電池提供或者用usb電源線由電腦提供。系統(tǒng)總體

23、結(jié)構(gòu)如圖3-1所示。單片機(jī)at89s52數(shù)碼管顯示實時時鐘芯片ds1302電源電路蜂鳴電 路時 間鬧 鐘設(shè) 置電 路圖3-1 系統(tǒng)總體結(jié)構(gòu)由于匯編語言產(chǎn)生的目標(biāo)程序簡短,占用存儲空間小,執(zhí)行快,能充分發(fā)揮計算機(jī)的硬件功能,因此根據(jù)系統(tǒng)總體結(jié)構(gòu)確定總流程圖后,用匯編語言編寫程序?qū)崿F(xiàn)各模塊功能。總流程圖如圖3-2所示。初始化模塊ds1302讀寫模塊顯示模塊蜂鳴模塊int0中斷模塊:時間調(diào)整int1中斷模塊:鬧鐘調(diào)整圖3-2 系統(tǒng)總流程圖3.2 主程序模塊主程序模塊包括初始化模塊、ds1302讀寫模塊、顯示模塊和蜂鳴模塊。3.2.1 初始化模塊初始化模塊包括了存儲資源的分配、各標(biāo)志位的賦值、中斷的狀

24、態(tài)設(shè)置以及跳轉(zhuǎn)語句。當(dāng)使用機(jī)器匯編時,必須為匯編程序提供一些信息,這些控制匯編的指令稱為偽指令,也包括在初始化模塊里。初始化模塊流程圖如3-3所示。開始資源分配(偽指令equ及bit)時間、鬧鐘和標(biāo)志位賦值設(shè)置中斷方式,中斷允許跳轉(zhuǎn)指令圖3-3 初始化模塊流程圖在此模塊,須定義好單片機(jī)與ds1302的串行通信接口以及調(diào)整時間或鬧鐘時的按鍵端口,如下:p0 數(shù)碼管段碼輸入p2 數(shù)碼管位數(shù)選擇p1.0 ds時鐘控制總線slckp1.1 ds數(shù)據(jù)傳送總線i/op1.2 ds復(fù)位總線rstp1.3 位選擇鍵,按下選擇要調(diào)整的位置p1.4 up,按此鍵調(diào)整時參數(shù)加p1.5 dw,按此鍵調(diào)整時參數(shù)減p1.

25、6 ok,按此鍵完成調(diào)整,退出中斷p1.7 no,按此鍵退出中斷,取消調(diào)整p3.2 time,按下時進(jìn)入時間設(shè)置模式p3.3 clc,按下時進(jìn)入鬧鐘設(shè)置模式由于ds1302第一次初始化寫入數(shù)據(jù)后在主電源關(guān)閉的情況下也能保持時鐘的連續(xù)運行,寫入程序主要在調(diào)整時間或鬧鐘時用到,因此在下一個ds讀寫模塊才詳細(xì)介紹。3.2.2 ds1302讀寫模塊ds1302 內(nèi)有2 類寄存器,一類用于存放時鐘/日歷數(shù)據(jù),另一類是靜態(tài) ram。與外界數(shù)據(jù)的交換可分為單字節(jié)傳送和多字節(jié)傳送2 種方式。圖3-4為ds實時時間讀寫流程圖。多字節(jié)模式可用于時鐘/日歷或有31個十進(jìn)制地址(地址/命令位15 設(shè)為1)的 ram

26、寄存器。時鐘/日歷寄存器的931及 ram 的 31 寄存地址中無數(shù)據(jù)存儲能力。連續(xù)模式的讀或?qū)憦?0 地址的 0 位開始。當(dāng)在連續(xù)模式向時鐘寄存器寫數(shù)據(jù)時,前8 個寄存器必須按傳送數(shù)據(jù)順序?qū)?。然而,此方式寫?ram 時,不需要把傳送數(shù)據(jù)的31b都寫入。寫入的每一個字節(jié)將傳送到 ram 不管是否所有的31b 都寫入。當(dāng)時間能連續(xù)運行時,在時鐘脈沖讀的開始,當(dāng)前時間被傳送到另外一組寄存器,時間信息從這些從寄存器讀出。這免去了在讀取期間為刷新主寄存器而重讀寄存器的需求。圖3-4 實時時間讀寫流程圖要注意的是,控制寄存器的第 7 位是寫保護(hù)位。在對時鐘或 ram 讀操作之前,第7 位必須是0。當(dāng)為

27、1 時,寫保護(hù)位阻止對任何其他寄存器的寫操作。初始的上電狀態(tài)未被設(shè)置,因此,寫保護(hù)位應(yīng)該在試圖寫入器件之前清零。下面分別給出單字節(jié)和多字節(jié)兩種傳送方式下向ds寫入命令字節(jié)和顯示數(shù)據(jù)的程序例子:write_enable:mov command,#8eh ;命令字節(jié)為8emov bytecnt,#1 ;單字節(jié)傳送模式mov r0,#xmtdat ;數(shù)據(jù)地址覆給r0mov xmtdat,#00h ;數(shù)據(jù)內(nèi)容為0 寫入允許acall send_byte ;用寫入數(shù)據(jù)子程序ret ;返回調(diào)用本子程序處write_multiplebyte:mov command,#0beh ;命令字節(jié)為behmov by

28、tecnt,#8 ;多字節(jié)寫入模式此模塊為8 個mov r0,#xmtdat ;數(shù)據(jù)地址覆給r0mov xmtdat,#59h ;秒單元內(nèi)容為59hmov xmtdat+1,#59h ;分單元內(nèi)容為59hmov xmtdat+2,#13h ;時單元內(nèi)容為13hmov xmtdat+3,#21h ;日期單元內(nèi)容為21hmov xmtdat+4,#06h ;月單元內(nèi)容為06hmov xmtdat+5,#03h ;星期單元內(nèi)容為03hmov xmtdat+6,#0 ; 年單元內(nèi)容為00hmov xmtdat+7,#0 ;寫保護(hù)單元內(nèi)容為00hacall send_byte ;調(diào)用寫入數(shù)據(jù)子程序ret

29、 ;返回調(diào)用本子程序處3.2.3 顯示模塊數(shù)碼管的接口有靜態(tài)接口和動態(tài)接口兩種方式。靜態(tài)接口問固定顯示方式,無閃爍。位選線同時選通,每位的段選線分別與一個8位鎖存器輸出相連,各位互相獨立。各位顯示一經(jīng)輸出,則相應(yīng)顯示將維持不變,直至顯示下一位字符為止。靜態(tài)顯示方式有較高的亮度和簡單的軟件編程,缺點是占用口線資源太多。為避免這個缺點,本設(shè)計采用動態(tài)顯示方式,將所有位的相應(yīng)段選線并在一起,用一個接口完成字形碼的輸出(字形選擇),位選線則分時輪流選通,即另一個接口完成各數(shù)碼管的循環(huán)輪流點亮(數(shù)位選擇),利用人眼視覺的暫留現(xiàn)象獲得穩(wěn)定的視覺效果。顯示程序流程圖如圖3-5所示。開始初始化顯示參數(shù)關(guān)所有數(shù)

30、碼管顯示取顯示數(shù)據(jù)輸出段碼數(shù)據(jù)輸出位選通信號延時位選通信號移位,顯示下一位數(shù)碼管指向下一個顯示字符8位顯示完?關(guān)所有數(shù)碼管顯示,返回是否圖3-5 顯示流程圖設(shè)定8位數(shù)碼管的顯示格式為“xx-xx-xx”(時-分-秒),第六位和第三位的橫杠固定正常顯示,在修改時間或鬧鐘時,要調(diào)整的部分每兩位(十位和個位)一起閃爍顯示,因此設(shè)置了兩個標(biāo)志位mark和wink。mark:閃爍標(biāo)志,為1時允許閃爍,為0時禁止閃爍。wink:位閃爍標(biāo)志,為8時“時”閃爍,為5時“分”閃爍,為2時“秒”閃爍。要實現(xiàn)閃爍顯示,則在選擇的那位數(shù)碼管選通又熄滅后延時一小段時間,才指向下一位數(shù)碼管。3.2.4 蜂鳴模塊考慮到已使

31、用了兩個中斷來實現(xiàn)調(diào)整部分,蜂鳴模塊主要用查詢比較的方式實現(xiàn),流程圖如圖3-6所示。所用標(biāo)志位如下:beef:蜂鳴標(biāo)志圖3-6 蜂鳴模塊流程圖要令蜂鳴器蜂鳴一分鐘,若用定時器to來幫助計時,設(shè)單片機(jī)的晶振為12mhz,16位定時最大為2161s=65.536ms,計算初值令t0每50ms計滿溢出回零,另設(shè)兩個標(biāo)志位記錄對50ms計數(shù)1200次。但同時,由于在蜂鳴的時候led要同步顯示當(dāng)前時間,需要調(diào)用顯示程序,在計數(shù)1200次時,執(zhí)行調(diào)用的指令也占用了時間,這樣使得蜂鳴時間變長以及較難計算出準(zhǔn)確的定時器計算初值,所以在程序中用“分”加1的辦法通過比較來實現(xiàn)一分鐘的蜂鳴。開始ds初始化設(shè)置鬧鐘時

32、間狀態(tài)標(biāo)志位初始化置外部中斷觸發(fā)方式中斷允許從ds讀取數(shù)據(jù)調(diào)用顯示程序比較當(dāng)前時間和鬧鐘時間兩者相等?進(jìn)入蜂鳴狀態(tài)滿1分鐘?關(guān)閉蜂鳴,返回ynn3.2.5 主程序流程圖y圖3-7 主程序流程圖結(jié)合以上各模塊流程圖,設(shè)計主程序流程圖如圖3-7所示。3.3 中斷調(diào)整模塊本設(shè)計要處理的按鍵較多,主要是考慮到調(diào)整時間或鬧鐘時更人性化,方便人們的操作,因此設(shè)置了位選擇鍵、加減鍵、確認(rèn)鍵和取消鍵。如果都以查詢方式來檢測,則程序會變得繁瑣,而且出現(xiàn)誤判斷的機(jī)會較大,因此為了減少檢測的麻煩,同時也為了區(qū)別時間和鬧鐘兩個不同的調(diào)整任務(wù),設(shè)計采用了外部中斷方式來處理。該模塊流程圖如圖3-8所示。3.3.1 時間中

33、斷模塊當(dāng)外部中斷口p3.2收到下降沿信號,即時間調(diào)整鍵time按下時,程序進(jìn)入時間調(diào)整中斷,默認(rèn)從“時”開始進(jìn)行修改。時間調(diào)整模塊的重點在按鍵處理部分,本設(shè)計采用了查詢方式檢測是否有鍵按下,并消抖延時來確認(rèn)按下的是哪一個鍵。如果按下的是位選擇鍵、加鍵或減鍵,進(jìn)入相應(yīng)程序處理,子程序結(jié)束后需繼續(xù)檢測下一次是否有鍵按下;如果按下的是確認(rèn)鍵或取消鍵,則結(jié)束中斷。位選擇鍵處理:選擇要調(diào)整“時”、“分”或“秒”。初始設(shè)置從“時”開始選擇,每按下一次標(biāo)志位wink改變。按下位選擇鍵后,首先檢測wink是否為2,是則重新賦值wink為5,修改位置從“時”變?yōu)椤胺帧?;再按下一次,wink賦值為8,修改位置從“

34、分”變?yōu)椤懊搿?;第三次按下時重新賦值wink使閃爍位為“時”。加鍵處理:要調(diào)整的部分加1。由于采用24小時模式,若修改“時”,則先檢測是否為23,是則重新賦值為0,否則直接加1;若修改“分”或“秒”,先檢測是否為59,是則重新賦值為0,否則直接加1。減鍵處理:要調(diào)整的部分減1。由于采用24小時模式,若修改“時”,則先檢測是否為0,是則重新賦值為23,否則直接減1;若修改“分”或“秒”,先檢測是否為0,是則重新賦值為59,否則直接減1。確認(rèn)鍵處理:表示修改完成。把修改后的數(shù)據(jù)從暫存區(qū)送到發(fā)送數(shù)據(jù)緩沖區(qū),調(diào)用ds讀寫程序修改ds實時數(shù)據(jù)并顯示,結(jié)束中斷,返回主程序。取消鍵處理:表示取消修改。由于修

35、改的數(shù)據(jù)保存在暫存區(qū),不影響ds實時數(shù)據(jù),因此直接結(jié)束中斷,返回主程序繼續(xù)從ds讀取時間并顯示。圖3-8 中斷調(diào)整流程圖3.3.2 鬧鐘調(diào)整模塊當(dāng)外部中斷口p3.3收到下降沿信號,即鬧鐘調(diào)整鍵clc按下時,程序進(jìn)入鬧鐘調(diào)整中斷,默認(rèn)從“時”開始進(jìn)行修改。該模塊中的按鍵處理流程同時間調(diào)整模塊,但在確認(rèn)鍵和取消鍵處理時,鬧鐘數(shù)據(jù)存儲在單片機(jī)內(nèi),所以只需給該單片機(jī)存儲地址重新賦值或者保持該地址數(shù)據(jù)不變,然后結(jié)束中斷。4調(diào)試結(jié)果分析及解決方案軟件完成后,把偉福編譯后的文件通過燒錄器下載到at89s52芯片,加上電源就可以進(jìn)行調(diào)試。各程序模塊具有一定的獨立性,因此可以先調(diào)試模塊,在模塊功能都能實現(xiàn)的前提

36、下,再調(diào)試總程序,這樣能快捷地檢查判斷硬件或軟件上的問題。調(diào)試結(jié)果及解決辦法如下:1測試顯示模塊時,數(shù)碼顯示管全亮顯示“8.8.8.8.8.8.8.8.”而不是預(yù)設(shè)的初值。利用proteus軟件仿真,發(fā)現(xiàn)仿真時顯示正常,再檢查硬件,發(fā)現(xiàn)段碼位選線與p0口接線錯誤。按原理圖重新焊接后,能正常顯示。2測試ds讀寫模塊時,從led顯示表明能正確寫入與讀取當(dāng)前時間,但ds1302的工作情況不太理想,主要表現(xiàn)在實時時間稍微偏快。ds1302 時鐘的產(chǎn)生基于外接的晶體振蕩器,振蕩器的頻率為32768hz,該晶振通過引腳x1、x2 直接連接至ds1302,即ds1302 是依靠外部晶振與其內(nèi)部的電容配合來產(chǎn)

37、生時鐘脈沖,由于ds1302 在芯片本身已經(jīng)集成了6pf的電容。所以,為了獲得穩(wěn)定的可靠的時鐘,必須選用具有6pf 負(fù)載電容的晶振。然而,許多人在選用晶振時僅僅注意了晶振的額定頻率值,而忽視了晶振的負(fù)載電容大小,甚至連許多經(jīng)銷商也不能提供所售晶振的負(fù)載電容,所以即使在使用中選用了符合32768hz 的晶振,但如果該晶振的負(fù)載電容與ds1302 提供的6pf不一致時,就會影響晶振的起振或?qū)е抡袷庮l率的偏移。當(dāng)所選的晶振負(fù)載電容不是6pf 時,可以采用增加輔助電容的方法提高或降低ds1302 振蕩器的電容性負(fù)載,使之與晶體所需的電容值匹配,如果已知晶體的負(fù)載電容為ci,若ci 小于6pf,則可以增

38、加一個并聯(lián)電容cs 以產(chǎn)生所需要的總負(fù)載電容ci,即ci=6pf+cs;若ci 大于6pf,則可以在晶體的一端增加一個串聯(lián)電容cs,以產(chǎn)生所需要的負(fù)載電容ci,即1/ci=1/6pf+1/cs,通過計算即可得出應(yīng)增加的輔助電容大小。輔助電容的接法如圖4-1所示。4-1 輔助電容的接法3測試蜂鳴模塊時,沒有時間顯示,一直保持蜂鳴,不能返回主程序。重新檢查程序,再次賦值給ds1302和鬧鐘時,實物正常工作,證明現(xiàn)有程序語法和邏輯上沒有錯誤。從賦值過的數(shù)字中找規(guī)律,發(fā)現(xiàn)當(dāng)ds初值的“分”個位為9而鬧鐘的“分”為0時,蜂鳴出現(xiàn)錯誤。查閱ds的顯示有關(guān)資料,由于ds的數(shù)據(jù)是bcd碼形式讀取,因此“x9”

39、的數(shù)據(jù)加1后為“*0”;但程序所用為十六進(jìn)制,“x9”加1后為“*a”,所以當(dāng)ds剛到達(dá)鬧鐘時間準(zhǔn)備蜂鳴時,程序中用inc指令對“分”加1后只達(dá)到“*a”,與ds一分鐘后讀取到的“*0”一直不相等,程序無法向下執(zhí)行,也就是無法同步顯示當(dāng)前時間以及關(guān)閉蜂鳴。解決辦法:進(jìn)入蜂鳴狀態(tài)時,先對比是否是個位為9的數(shù)據(jù),是則按照bcd碼形式直接賦值為“*0”到暫存區(qū),再加1;否則直接用inc指令加1。不斷讀取ds“分”的數(shù)據(jù)與暫存區(qū)數(shù)據(jù)比較,相等則表示滿一分鐘,關(guān)閉蜂鳴。修改程序后該模塊運行正常。4測試調(diào)整模塊,進(jìn)入中斷時,按鍵后有時出現(xiàn)顯示錯亂,按鍵失靈,出現(xiàn)連續(xù)加減的情況。有了蜂鳴模塊的前例,增加了數(shù)

40、據(jù)個位為9時的處理程序;分析出現(xiàn)連續(xù)加減可能是因為消抖延時不夠,造成程序誤判斷為按鍵連擊,因此增大延時時間。修改程序后該模塊正常運作。5綜合總程序測試,各部分功能運作正常,達(dá)到任務(wù)要求。參考文獻(xiàn)1 向繼文,廖立新. 基于at89s51的電子鐘系統(tǒng)設(shè)計j.機(jī)電產(chǎn)品開發(fā)與創(chuàng)新, 2007-03.2 羅政球. 時鐘芯片ds1302可靠起振方法j.制作天地, 2009(6).23-24.3 張勇. 制作基于ds1302 的電子時鐘時的難點分析j. 保定師范??茖W(xué)校學(xué)報, 2004(3).30-33.4 趙亮. 實時時鐘芯片ds1302的應(yīng)用j.電子制作,2005(10).37-38.5 能昌會. 時鐘

41、芯片ds1302在單片機(jī)系統(tǒng)中的應(yīng)用j.電子制作, 2007(11).40.6 朱路,朱清慧. 連續(xù)補(bǔ)充充電實時時鐘芯片ds1302及其應(yīng)用j.現(xiàn)代電子技術(shù),2006(19).116-118.7 劉盛雄,周奇,韋云. 基于單片機(jī)的數(shù)字式電子鐘的設(shè)計與制作j.重慶工學(xué)院學(xué)報,2006.20-8.8 楊占軍. 基于ds1302的數(shù)碼管時鐘電路設(shè)計j.電子世界,2005(9).35-36.9 莊建清,徐瑋. 51單片機(jī)綜合學(xué)習(xí)系統(tǒng)_ds1302時鐘應(yīng)用篇j. 電子制作, 2008(10).25-26.10 黃明強(qiáng). ds1302在單片機(jī)系統(tǒng)中的應(yīng)用n.保定師范??茖W(xué)校學(xué)報,2004-04.11 孫楓

42、. 串行實時時鐘芯片ds1302與單片機(jī)接口技術(shù)及應(yīng)用j.鞍鋼技術(shù),2001(5).59-63.附錄一 硬件仿真原理圖附錄二 軟件匯編程序bitcnt equ 30h ; 數(shù)據(jù)位計數(shù)器 bytecnt equ 31h ; 數(shù)據(jù)字節(jié)計數(shù)器 command equ 32h ; 命令字節(jié)地址 rcvdat equ 40h ; 接收數(shù)據(jù)緩沖區(qū) xmtdat equ 50h ; 發(fā)送數(shù)據(jù)緩沖區(qū) ledbuf equ 60h ; 段碼緩沖區(qū) clcdat equ 70h ; 鬧鐘時間存儲位 have_key bit 81h ; 調(diào)整顯示暫時存儲位 setdat equ 73h ; 調(diào)整數(shù)據(jù)暫時存儲位 ma

43、rk bit 76h ; 閃爍標(biāo)志位 , 為1閃爍,為0不閃爍 wink equ 77h ; 標(biāo)識第幾位閃爍 io_data bit p1.1 ; 數(shù)據(jù)傳送總線 sclk bit p1.0 ; 時鐘控制總線 rst bit p1.2 ; 復(fù)位總線 cho bit p1.3 up bit p1.4 wn bit p1.5 ok bit p1.6 no bit p1.7 beef bit p3.6 org 0000h ajmp write_a org 0003h ljmp timeset org 0013h ljmp clcset;*; 初始設(shè)置; 初始顯示24h制,顯示時間寫入10 年6月5 日

44、星期六13 時19 分50 秒write_a: mov command,#0beh ;命令字節(jié)為beh mov bytecnt,#8 ;多字節(jié)寫入模式此模塊為8 個 mov r0,#xmtdat ;數(shù)據(jù)地址覆給r0 mov xmtdat,#50h ;秒單元內(nèi)容為55h mov xmtdat+1,#19h ;分單元內(nèi)容為59h mov xmtdat+2,#13h ;時單元內(nèi)容為13h mov xmtdat+3,#30h ;日期單元內(nèi)容為30h mov xmtdat+4,#06h ;月單元內(nèi)容為05h mov xmtdat+5,#06h ;星期單元內(nèi)容為07h mov xmtdat+6,#10h

45、;年單元內(nèi)容為10h mov xmtdat+7,#0 ;寫保護(hù)單元內(nèi)容為00h acall send_byte ;調(diào)用寫入數(shù)據(jù)子程序 mov clcdat, #00h ;鬧鐘時間的秒位 mov clcdat+1, #20h ;鬧鐘時間的分位 mov clcdat+2, #13h ;鬧鐘時間的時位 clr mark mov wink, #02h setb it0 ;下降沿有效 setb it1 setb ex0 setb ex1 setb eamain: mov p0,#00h mov p2,#00h ;清顯示 clr beef lcall read_a mov r5,#27aaa: call

46、display_led_a djnz r5,aaaask: mov a, clcdat+2 cjne a, rcvdat+2, main nop mov a, clcdat+1 cjne a, rcvdat+1, main setb beef cjne a, #59h, f_1 mov setdat+1, #00h ajmp a_w1f_1: cjne a, #49h, f_2 mov setdat+1, #50h ajmp a_w1f_2: cjne a, #39h, f_3 mov setdat+1, #40h ajmp a_w1f_3: cjne a, #29h, f_4 mov set

47、dat+1, #30h ajmp a_w1f_4: cjne a, #19h, f_5 mov setdat+1, #20h ajmp a_w1f_5: cjne a, #09h, a_w1 mov setdat+1, #10h ajmp a_w1a_w1: mov setdat+1, rcvdat+1 inc setdat+1a_w: lcall delay10ms lcall read_a lcall display_led_a mov a, rcvdat+1 cjne a, setdat+1, a_w clr beef ljmp main;*; 發(fā)送數(shù)據(jù)子程序;*send_byte: clr rst ;復(fù)位引腳為低電平所有數(shù)據(jù)傳送終止 nop clr sclk;清

溫馨提示

  • 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

提交評論