畢業設計(論文)數字鐘的設計與實現_第1頁
畢業設計(論文)數字鐘的設計與實現_第2頁
畢業設計(論文)數字鐘的設計與實現_第3頁
畢業設計(論文)數字鐘的設計與實現_第4頁
畢業設計(論文)數字鐘的設計與實現_第5頁
已閱讀5頁,還剩25頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、目 錄 摘摘 要要 .1 第一章第一章 系統概述系統概述 .2 1.1引言.2 1.2單片機 at89c51 介紹.2 1.2.1組成.2 1.2.2主要特性:.3 1.2.3管腳說明.3 1.3時鐘芯片 ds1302.5 1.3.1芯片簡介.5 1.3.2ds1302ds1302 的結構及引腳說明.5 1.3.3地址/命令字節和寄存器格式定義.6 1.3.4讀寫操作時序.6 第二章第二章 系統設計系統設計 .8 2.1 開發目的.8 2.2 題目分析.8 2.3 設計思想.8 第三章第三章 設計流程圖設計流程圖 .9 3.1 硬件設計.9 3.1.1 顯示電路的設計.9 3.1.2 顯示驅動

2、電路的設計.10 3.1.3 電源電路的設計.10 3.1.4 復位及晶體振蕩電路.10 3.1.5 鍵盤電路.10 3.1.6 整點報時和鬧鐘電路.10 3.1.7 看門狗電路.10 3.2 軟件設計.11 3.2.1 系統流程圖.11 3.2.2 日期程序設計.11 3.2.3 時間調整程序設計.12 第四章第四章 原程序代碼原程序代碼 .15 第五章第五章 課程設計結果總結:課程設計結果總結: .26 第六章第六章 參考資料及參考文獻:參考資料及參考文獻: .26 附錄:總設計電路圖附錄:總設計電路圖 .27 摘 要 本電子鐘以 at89c51 單片機為核心,通過軟硬件相結合的方法,控制

3、 led 數碼管輸出,可以顯示年、月、日、時、分、秒、星期,同時還具有整點 語音報時及定時鬧鐘的功能。系統內置了時鐘芯片 ds1302,保證了在斷電后計 時不受影響。該電子鐘硬件電路簡單,時間調整方便,軟件設計靈活、可靠, 加入了“看門狗”電路,增強了系統的抗干擾能力。 關鍵詞 at89c51,ds1302, “看門狗” abstract this electronic clock is based on mcu at89c51, it controls led to display year, month, day, hour, minute, second and week through

4、 software and hardware method, it can also give the correct time and alarm. the system have a clock chip ds1302 which assure the system will not influenced after power is cut off. the hardware circuit is simple, time modulation is convenient, software design is vivid and credibility. watch dog circu

5、it strengthen the anti- interference ability of the system. keywords at89c51,ds1302,“watch dog” 第一章 系統概述 1.1引言 數字鐘是一種應用廣泛的日常計時工具,廣泛用于家庭居室、辦公室、 大廳、會議室、車站、廣場等場所。led 數字顯示的時鐘清晰直觀、走時 準確、在夜間也可以顯示而且成本低廉。該設計以 51 單片機為核心,充分 利用單片機的資源,加上時鐘模塊、顯示模塊和鍵盤接口三大塊外圍電路, 再配合軟件程序的設計,增強了整體系統的穩定性。該數字鐘實現了顯示 年、月、日、時、分、秒、星期的功能,而

6、且調節十分方便,時鐘芯片的 使用保證了系統在斷電時能繼續工作,音樂芯片的使用使系統具有整點語 音報時和鬧鐘的功能。 1.2單片機 at89c51 介紹 at89c51 是美國 atmel 公司生產的低電壓,高性能 cmos 8 位單片 機,片內含 4k 字節的可反復擦寫的 flash 只讀程序存儲器和 128 字節的隨 機存取數據存儲器(ram) ,器件采用 atmel 公司的高密度、非易失性存 儲技術產生,兼容標準 mcs-51 指令系統,片內置通用 8 位中央處理器 (cpu)和 flash 存儲單元,功能強大,由于將多功能 8 位 cpu 和 flash 存 儲器組合在單個芯片中,atm

7、el 的 at89c51 是一種高效微控制器,為很 多嵌入式控制系統提供了一種靈活性高且價廉的方案。其總線型 dip40 引 腳封裝圖如圖 11 所示。 圖 11 總線型引腳封裝圖 1.2.1 組成 (1) cpu 系統 8 位 cpu,含布爾處理器 時鐘電路 總線控制邏輯 (2) 存儲器系統 4k 字節的程序存儲器(可外擴至 64k) 128 字節的數據存儲器(可再外擴 64k) 特殊功能寄存器 sfr (3) i/o 口和其它功能單元 4 個并行 i/o 口 2 個 16 位定時/計數器 1 個全雙工異步串行口 中斷系統(5 個中斷源、2 個優先級) 1.2.2 主要特性: 與 mcs-5

8、1 產品指令系統完全兼容 4k 字節可重復擦寫 flash 存儲器 1000 次擦寫周期,數據保留時間為 10 年 三級程序存儲器鎖定 1288 位內部 ram 32 可編程 i/o 線 兩個 16 位定時器/計數器 6 個中斷源 可編程串行通道 低功耗的閑置和掉電模式 全靜態工作方式:024mhz 1.2.3 管腳說明 vcc:供電電壓 gnd:接地 p0 口:p0 口為一個 8 位漏級開路型雙向 i/o 口,也即地址/數據總線復 用口。作為輸出口每腳可吸收 8 個 ttl 門電路。當 p1 口的管腳第一次 寫 1 時,被定義為高阻抗輸入。p0 能夠用于外部程序數據存儲器,它 可以被定義為數

9、據/地址的第八位。在 fiash 編程時,p0 口作為原碼 輸入口,當 fiash 進行校驗時,p0 輸出原碼,此時 p0 外部必須被拉 高。 p1 口:p1 口是一個內部提供上拉電阻的 8 位雙向 i/o 口,p1 口緩沖器 能接收輸出 4 個 ttl 門電路。p1 口管腳寫入“1”后,被內部上拉為 高,可用作輸入,p1 口被外部下拉為低電平時,將輸出電流,這是由 于內部上拉的緣故。在 flash 編程和校驗時,p1 口作為第八位地址接 收。 p2 口:p2 口為一個內部上拉電阻的 8 位雙向 i/o 口,p2 口緩沖器可接 收,輸出 4 個 ttl 門電流,當 p2 口被寫“1”時,其管腳

10、被內部上拉 電阻拉高,且作為輸入。并因此作為輸入時,p2 口的管腳被外部拉低, 將輸出電流。這是由于內部上拉的緣故。p2 口當用于外部程序存儲器 或 16 位地址外部數據存儲器進行存取時,p2 口輸出地址的高八位。在 給出地址“1”時,它利用內部上拉優勢,當對外部八位地址數據存儲 器進行讀寫時,p2 口輸出其特殊功能寄存器的內容。p2 口在 flash 編程和校驗時接收高八位地址信號和控制信號。 p3 口:p3 口管腳是 8 個帶內部上拉電阻的雙向 i/o 口,可接收輸出 4 個 ttl 門電流。當 p3 口寫入“1”后,它們被內部上拉為高電平,并用作輸入。作為輸 入,由于外部下拉為低電平,p

11、3 口將輸出電流(ill)這是由于上拉的緣故。 p3 口也可作為 at89c51 的一些特殊功能口,如表 11 所示。p3 口同時為閃 爍編程和編程校驗接收一些控制信號。 端口引腳第二功能 p3.0rxd(串行輸入口) p3.1txd(串行輸出口) p3.2(外中斷 0) rd p3.3(外中斷 1) int1 p3.4t0(定時/計數器 0) p3.5t1(定時/計數器 1) p3.6(外部數據存儲器寫選通) wr p3.7(外部數據存儲器讀選通) rd 表 11 at89c51 特殊功能口 rst:復位輸入。當振蕩器復位器件時,要保持 rst 腳兩個機器周期 的高電平時間。 ale/:當訪

12、問外部存儲器時,地址鎖存允許的輸出電平用于鎖存 prog 地址的地位字節。在 flash 編程期間,此引腳用于輸入編程脈沖。在 平時,ale 端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻 率的 1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注 意的是:每當用作外部數據存儲器時,將跳過一個 ale 脈沖。如想禁 止 ale 的輸出可在 sfr8eh 地址上置 0。此時, ale 只有在執行 movx,movc 指令是 ale 才起作用。另外,該引腳被略微拉高。如 果微處理器在外部執行狀態 ale 禁止,置位無效。 :外部程序存儲器的選通信號。在由外部程序存儲器取指期間, pse

13、n 每個機器周期兩次/psen 有效。但在訪問外部數據存儲器時,這兩次有 效的/psen 信號將不出現。 /vpp:當保持低電平時,則在此期間外部程序存儲器(0000h- eaea ffffh) ,不管是否有內部程序存儲器。注意加密方式 1 時,將內部 ea 鎖定為 reset;當端保持高電平時,此間內部程序存儲器。在 ea flash 編程期間,此引腳也用于施加 12v 編程電源(vpp) 。 xtal1:反向振蕩放大器的輸入及內部時鐘工作電路的輸入。 xtal2:來自反向振蕩器的輸出。 1.3時鐘芯片 ds1302 1.3.1 芯片簡介 ds1302 是美國 dallas 公司開發的串行實

14、時時鐘/日歷芯片。它可以產生 秒、分、時、日、月、星期及年等七個時標,并能夠進行閏年調整,日歷有效 至 2100 年。芯片具有主工作電源掉電情況下的時鐘保護電路和備份電源自動切換 控制電路。片內具有 31 個字節靜態 ram,可用來保存重要數據。該芯片采用 串行 i/o 接口方式。另外,在讀寫時鐘或 ram 數據時,可采用單字節或多字 節(串模式)方式傳送數據。它可在低功率情況下工作,在小于 1mw 時也可保持 數據和時鐘信息。由于具備體積小、功耗低、接口容易、占用 cpu i/o 口線少、 遇閏年自動修正,該芯片被廣泛應用于智能化儀儀表中。 ds1302 與單片機之 間能簡單地采用同步串行的

15、方式進行通信,僅需用到三條口線:res,i/o 數據 線和 sclk 串行時鐘 ds1302 的特征如下: 31 字節帶后備電池的 ram 用于數據存儲 串行 i/o 口,管腳數量少 寬范圍工作電壓:2055v 工作電壓 2.0v 時,電流小于 300na 讀寫時鐘或 ram 數據時有兩種傳送方式:單字節傳送和突發模式 傳送 8 腳 dip 封裝或其他可選封裝方式 簡單的 3 線接口 與 ttl 兼容(vcc=5v) 可選工業級溫度范圍:40+85 與 ds1202 兼容 1.3.2 ds1302ds1302 的結構及引腳說明 ds1302 內部主要包括實時時鐘(real time clock

16、)、輸入移位寄存器 (input shiifi registers)、31 字節靜態 ram、電源控制部分 (powercontrol)、命令控制邏輯( command and control logic )、 振蕩器和分頻器( oscillator and divider)等部分。ds1302 具有 8 腳 dip 和 soic 封裝形式,其引腳排列如圖 12 所示。 圖 12 ds1302 引腳圖 其中 1 腳 vcc2 和 8 腳 vccl 為電源電壓引腳,單電源供電時接 vcc 1 腳, 雙電源供電時,主工作電源接 vcc2 腳,備份電源接 vcc 1 腳,備份電源可采用 鎘一鎳充電電

17、池,也可用 1 微法以上的大容量電容代替。芯片具有可編程選擇 的對備份電池進行微電流充電的功能,有效延長了備份電池的使用壽命。若啟 用芯片內部的微電流充電器,則在主工作電源正常工作時,由主工作電源向充 電電池充電。備份電池電壓應略低于主工作電源電壓,在系統掉電的情況下, 則由備份電池向系統供電,以保證時鐘正常運行,并保持時鐘/日歷信息和 31 個字節靜態 ram 中的重要數據信息不丟失;2 腳 x1 和 3 腳 x2 為 32.768khz 晶振引腳;5 腳 rst 為復位端,若其被置為低電平,則中止所有數據傳送,i/o 腳變為高阻態,系統復位;6 腳 i/o 為數據輸人/輸出端;7 腳 sc

18、lk 為串行時 鐘輸入端,所有地址 l 命令字節和數據字節都是在時鐘 sclk 的同步控制下從 u0 腳串行輸入輸 出的。ds1302 通過 sclk、i/o、三根線與外部進行同步串行通信。 rst 1.3.3 地址/命令字節和寄存器格式定義 在數據傳送時,首先向 ds1302 寫人地址/命令字節,該字節提供地址和命 令信息,然后輸人或輸出數據。地址/命令字節格式如圖 13 所示。 1 ram cka4a3a2a1a0 ram k 圖 13 ds1302 的地址/命令字節格式 b7 為數據傳送標志位,要完成數據傳送,b7 必須為邏輯“1” ,否則不能 向 ds1302 進行寫操作。b6 為 r

19、am 和時鐘寄存器選擇位,若為邏輯“0” ,表 明系 統要對時鐘寄存器進行讀寫操作;b6 為邏輯“1” ,表明系統要對 ram 進行讀 寫操作。b1b5 確定要進行讀寫操作的寄存器地址,當 b1b5 均為“1”時, 選中多字節串模式傳送方式,則時鐘/日歷數據或者 ram 數據以多字節串模式 進行傳送。i/o 為讀寫操作選擇位,若為邏輯“0”時,表明將進行寫操作,即 向 ds1302 輸入數據;b0 為邏輯“1”時,則表明將進行讀操作,即從 ds1302 輸出數據。ds1302 片內有 7 個時鐘舊歷時標寄存器,以壓縮 bcd 碼格式存放 時鐘舊歷數據。秒寄存器的最高位 b7 是時鐘停止標志,當

20、該位為“1”時,時 鐘晶振停止運行;當該位為“0”時,時鐘開始運行。小時寄存器的最高位 b7 是 12/24 小時方式選擇位,當為“0”時,選擇 24 小時方式;當為“1”時,選 擇 12 小時方式,該寄存器的 bs 是上/下午標志位,bs 為“0”表示上午,bs 為“1”表示下午。ds1302 片內還有控制寄存器,微電流充電寄存器,串模式 控制寄存器。控制寄存器的最高位 b7 是寫保護位,在向時鐘寄存器或 ram 中 寫人數據之前,b7 必須為“0” ,如為“1” ,則禁止對 ds1302 進行任何寫操作, 該寄存器中 b0b6 始終被置為“0” 。微電流寄存器控制 ds1302 的微電流充

21、 電功能,其中微電流充電選擇位 b4b7 控制微電流充電器的選擇,為防止誤操 作,只有 1010 格式才能夠使充電器工作。ds1302 在上電時,微電流充電器不 被使能,只有在軟件程序中對其進行選擇。二極管選擇位 b2b3 和電阻選擇 位 b0b1 分別選擇連在 vccl 和 vcc2 之間充電通道上的二極管和電阻的數目。 1.3.4 讀寫操作時序 在數據傳送時,首先傳送地址/命令字節,確定下一步將要執行讀操作還是 寫操作;將要訪問的是時鐘寄存器還是 ram 存儲器及其地址;采用單字節傳 送方式還是多字節(串模式)傳送方式。在向 ds1302 寫入地址/命令字節之后傳 送讀寫操作數據。單字節傳

22、送方式讀寫操作時序如圖 14 所示。在數據傳送時, 先將復位端 rst 置為高電平,此時 sclk 必須為低電平。然后,在第一組 8 個 sclk 串行時鐘周期的上升沿,依次將地址/命令字節的 8 比特串入移位寄存 器。若系統要對 ds1302 進行寫操作,則把地址/命令字節寫人移位寄存器之后, 數據字節在下一組 8 個 sclk 串行時鐘周期的上升沿輸人 ds1302;若系統要對 ds1302 進行讀操作,則把地址/命令字節寫入移位寄存器之后,數據字節在下 一組 8 個 sclk 串行時鐘周期的下降沿從 ds1302 輸出。任何字節均從低位 b0 開始依次輸入或輸出。 圖 14 數據傳送時序

23、 第二章 系統設計 2.1 開發目的 數字鐘是一種應用廣泛的日常計時工具,但大多數在斷電后都需要重新 調整時間與日期、走時誤差較大,而且附加的功能不完善。該設計克服了一 般數字鐘斷電停止計時、走時誤差較大的缺點,具有精度高、斷電繼續計時、 抗干擾能力強、調試方便等特點,而且加入了鬧鐘和語音報時功能。 2.2 題目分析 本設計要求用 51 系列單片機制作一個電子鐘,實現顯示年、月、日、時、 分、秒和星期的功能,同時要有斷電繼續計時和調節日期的功能。我們可以使 用 led 數碼管作為顯示電路,利用單片機來控制其顯示;采用時鐘芯片來保證 斷電繼續計時的功能;利用鍵盤電路實現對日期和時間的調節。 2.

24、3 設計思想 本系統由單片機、顯示電路、時鐘電路、鍵盤電路、鬧鐘和定點報時電路、 電源電路組成。核心器件選擇 atmel 公司的 at89c51 單片機,顯示電路由 15 個 led 數碼管組成,時鐘芯片選擇高性能的 ds12887,該設計在基本要求的基 礎上增加了鬧鐘和整點報時功能。 第三章 設計流程圖 3.1 硬件設計 3.1.1 顯示電路的設計 顯示部分采用普通的共陽極數碼管顯示,采用動態掃描,以減少硬件電路。 該設計共采用 15 個數碼管,由于一次掃描 15 個數碼管會出現閃爍情況,所以 設計時分為三排同時掃描。第一排使用 4 個數碼管,分別顯示千年、百年、十 年、年、年,第二排使用

25、4 個數碼管,分別顯示十月、月、十日、日,第三排 使用 7 個數碼管,分別顯示星期以及十時、時、十分、分、十秒、秒。顯示時 采用串行口輸出段碼,用 2 片 74ls164 來驅動 3 排數碼管,這樣一次掃描只需 7ms,肉眼根本看不出來閃爍。 74ls164 內部為 8 個 d 觸發器,用以實現數據的串行移位,其特性見表 31,管腳圖如圖 31 所示。 操作模式輸 入輸 出 復位mrabq0q1q7 l lq0q6 hlllq0q6 hlhlq0q6 hhllq0q6 移 位 hhhhq0q6 表 31 74ls164 特性表 圖 31 74ls164 管腳圖 單片機以串行口方式 0(移位寄存

26、器方式)輸出數據,2 片 74ls164 作為 2 排共陽極數碼管的串/并轉換顯示接口。74ls164 為 ttl 單向 8 位移位寄存器, 可實現串行輸入,并行輸出。其中 a、b(第 1、2 腳)為串行數據輸入端,2 個 引腳按邏輯“與”運算規律輸入信號,共一個輸入信號時可并接,共同作為輸 入腳。cp(第 8 腳)為時鐘輸入端,可連接到串行口的 txd 端。每一個時鐘信號 的上升沿加到 cp 端時,移位寄存器移一位。8 個時鐘脈沖過后,8 位二進制數 全部移入 74ls164 中。mr 腳(第 9 腳)為復位端,當該腳為低電平時,移位寄 存器各位復 0;只有當它為高電平時,時鐘脈沖才起作用。

27、q0q7(第 36 和 1013 引腳)并行輸出端分別接數碼管的 ha(因為串行口從低位開始傳送) 各段對應的引腳上。在給出了 8 個脈沖后,最先進入 74ls164 的第 1 個字節數 據到達了最高位。再來 1 個脈沖,第 1 個脈沖就會從最高位移出,進入下個 74ls164 的第一位。2 片 74ls164 首尾相串,而時鐘端則連在一起。這樣,當輸 入 8 個脈沖時,從單片機 rxd 端輸出的第 1 字節數據就進入了第 1 片 74ls164 中,而當第 2 個 8 個脈沖到來后,第 1 字節數據就進入第 2 片 74ls164,而隨 后的第 2 字節的數據則進入了第一片 74ls164

28、中,這就實現了數據在 74ls164 中的串入并出。 3.1.2 顯示驅動電路的設計 驅動電路采用具有大電流驅動能力的集成 7 個達林頓管的驅動芯片 uln2003 作為核心器件。uln2003 是 7 個共發射極達林頓驅動器,最大工作電壓 可達到 50v,每極最大輸出電流可達到 500ma。電路由兩片移位寄存器 74ls164,兩片 uln2003 和 14 個限流電阻構成。74ls164 將從 at89c51 串行口 獲得的數據并行輸出。采用 7 段顯示,所以 74ls164 的 q0 管腳懸空,第一片 74ls164 的 q7 腳作為第二片的輸入。uln2003 將 74ls164 的輸

29、出作為輸入驅動 輸出。 3.1.3 電源電路的設計 220v 交流電壓經過變壓器降壓后次級輸出 10v 左右交流電,經橋式整流、 濾波及三端穩壓后輸出 5v 直流電壓。若選用的 led 顯示 2 英寸左右,變壓器功 率應考慮 5w;若選用的 led 顯示尺寸小于 0.8 英寸,可不考慮驅動與緩沖器, 顯示程序稍加調整,并調整 p0 口的上拉電阻就可滿足顯示亮度。 3.1.4 復位及晶體振蕩電路 采用上電復位電路,由一只 10f 電解電容與一只 10k 電阻組成,同時反 向接一只保護二極管。兩只 30pf 電容與一只 12mhz 晶體組成振蕩電路。 3.1.5 鍵盤電路 鍵盤用于校正時間,選用普

30、通的按鍵,有功能鍵、增 1 鍵、減 1 鍵和確認 鍵共四個鍵。按鍵通過 p3 口的低四位接入,當有鍵按下時輸入端為低電平,無 鍵按下時為高電平,單片機的輸入電流要求較小,取電阻為 10k。 3.1.6 整點報時和鬧鐘電路 音樂報時電路中.選用兩只不同音樂的 hl9300e 音樂集成片,分別用于整點 從音樂報時和定時鬧鐘音樂報時。p1.3 接整點從報時音樂集成片的觸發控制端。 p1.5 經 9015 三極管控制繼電器,當 p1.5 為低電平時接通定時鬧鐘音樂片的電 源及觸發控制端,同時切斷整點從報時音樂集成片的電源,使定時鬧鐘設定為 整點且定時時間到時只發出鬧鐘音樂聲。以避免兩個音樂集成片同時產

31、生音樂 聲而互相干擾。at 89051 的+5v 電源與 gnd 之間需加一個 470 f 的電解電容 以防止繼電器觸點吸合時造成系統復位。音樂集成片的輸出接蜂鳴器或揚聲器, 鬧鐘定時時間到時可山按鍵清除報時音樂聲。 3.1.7 看門狗電路 使用 cd4060 組成看門狗電路。cd4060 為 14 位二進制串行計數/分頻/振蕩 器。選 r1130k、c1100pf 時,振蕩頻率經內部 14 級二分頻后,從 q14 端 可輸出約 2hz 的頻率信號。r2 為偏置電阻。正常情況下 8051 每隔一段時間 t1 就將 cd4060 復位一次。一旦由于某種原因導致 cpu 失控,cd4060 不能及

32、時被 復位,經過時間 t2(t2t1)就從 q14 端輸出高電平,立即將 8051 復位,把 cpu“拉回”到正常運行狀態;然后 cpu 又將 cd4060 復位,使用 q14 恢復成低 電平。r3 與 c2 組成微分電路,可將 p3.5 口輸出的復位電平變成復位脈沖。 3.2 軟件設計 3.2.1 系統流程圖 開始 初始化 參數設置 調用鍵盤設 置子程序 調用顯示 子程序 調用控制 子程序 3.2.2 日期程序設計 時鐘芯片選用 ds1302,我們只需從 ds1302 各寄存器中讀出年、月、日、 星期、小時、分、秒這些數據,再處理即可。在首次對 ds1302 進行操作之前, 必須對它進行初始

33、化,然后從 ds1302 中讀出數據,再經過處理后,送給顯示緩 沖單元。程序流程見圖 32。 開始 初始化1302 1302開始振蕩 從1302中讀出年、周、 月、日、時、分、秒 讀出的數據都為bcd 碼,將其高低位分離, 送顯示緩沖單元 圖 32 日期程序流程圖 3.2.3 時間調整程序設計 調整時間用 4 個調整按鈕,k1 作為移位控制用,k2 和 k3 分別作為加和減 用,分別定義為控制按鈕加按鈕減按鈕,k4 鍵按下時顯示鬧鐘定時時間。在調 整時間過程中,要調整的位與別的位應該有區別,所以增加了閃爍功能,即調 整的位一直在閃爍,直到調整下一位。閃爍原理就是,讓要調整的一位每隔一 定時間熄

34、滅一次,比如說 50ms。利用定時器計時,當達到 50ms 溢出時,就送 給該位熄滅符,在下一次溢出時,再送正常顯示的值,不斷交替,直到調整該 位結束。此時送正常顯示值給該位,再進入下一位調整閃爍程序。時間調整程 序流程圖如圖 33 所示,其中 k2、k3 鍵的調整流程圖如圖 34 所示。 初始化,時 鐘顯示 k1鍵是否按下 對時鐘進行對時,每按一 次調整的位跟著變化,分 別調整年、月、日、星 期、時、分 進行鬧鐘調整 k4是否按下 k4是否按下 顯示鬧鐘 定時時間 結束 是 否 是 否 是 否 圖 33 時間調整程序流程圖 控制鍵有效,進入年調整程序 等待按鍵程序 加鍵有效減鍵有效 年加1年

35、減1 控制鍵有效,進入日調整程序 控制鍵有效,進入小時調整程序 加鍵有效 等待按鍵程序 減鍵有效 減鍵有效 年加1 年加1 年減1 年減1 等待按鍵程序 加鍵有效 控制鍵有效,進入月調整程序 等待按鍵程序 加鍵有效減鍵有效 年加1年減1 控制鍵有效,進入星期調整程序 控制鍵有效,進入分調整程序 加鍵有效 等待按鍵程序 減鍵有效 減鍵有效 年加1 年加1 年減1 年減1 等待按鍵程序 加鍵有效 控制鍵有效,跳出時間調 整程序,進入主循環程序 圖 34 k2、k3 鍵實現加、減功能流程圖 第四章 原程序代碼 sclk equ p3.2 io equ p3,3 rst equ p3.4 year d

36、ata 66h month data 65h week data 64h day data 63h hour data 62h minute data 61h second data 60h ds1302_addr data 32h ds1302_data data 31h org 0000h ajmp start org 0003h reti org 000bh reti org 0013h reti org 001bh ljmp intt1 org 0023h reti org 002bh reti 主程序主程序 start: setb ea ;串行輸出,方式 0 mov scon,#00

37、h ;記數器 1,方式 1 mov tmod,#10h mov tl1,#00h mov th1,#00h mov ds1302_addr,#8eh mov ds1302_data,00h ;允許寫 1302 lcall write mov ds1302_addr,#90h mov ds1302_data,#0a6h ;1302 充電,充電電流 1.1ma lcall write main1: mov ds1302_addr,#8dh ;讀出年 lcall read mov year,ds1302_data mov ds1302_addr,#8bh ;出星期 lcall read mov we

38、ek,ds1302_data mov ds1302_addr,#89h ;讀出月 lcall read mov month,ds1302_data mov ds1302_addr,#87h ;讀出日 lcall read mov day,ds1302_data mov ds1302_addr,#85h ;讀出小時 lcall read mov hour,ds1302_data mov ds1302_addr,#83h ;讀出分 lcall read mov mintue,ds1302_data mov ds1302_addr,#81h ;讀出秒 lcall read mov second,ds

39、1302_data mov r0,year ;年分離,送顯示緩存 lcall divide mov 7bh,r1 mov 4bh,r1 mov 7ch,r2 mov 4ch,r2 mov 78h,week mov 48h,week mov r0,month ;月分離,送顯示緩存 lcall divide mov 79h,r1 mov 49h,r1 mov 7ah,r2 mov 4ah,r2 mov r0,day ;日分離,送顯示緩存 lcall divide mov 76h,r1 mov 46h,r1 mov 77h,r2 mov 47h,r2 mov r0,hour ;小時分離,送顯示緩存

40、lcall divide mov 74h,r1 mov 44h,r1 mov 75h,r2 mov 45h,r2 mov r0,minute ;分分離,送顯示緩存 lcall divide mov 72h,r1 mov 42h,r1 mov 73h,r2 mov 43h,r2 mov r0,second ;秒分離,送顯示緩存 lcall divide mov 70h,r1 mov 40h,r1 mov 71h,r2 mov 41h,r2 日期設置程序日期設置程序: : setg: setb tr1 setb et1 clr 08h clr 09h clr 0ah clr 0bh clr 0ch

41、 clr 0dh clr 0eh clr 0fh mov ds1302_addr,#8eh mov ds1302_data,#00h ;允許寫 1302 lcall write mov ds1302_addr,#80h mov ds1302_data,#80h ;1302 停止振蕩 lcall write gwait: lcall display jnb p1.1,gwait setg1: lcall display jnb p1.1,setg2 jnb p1.2,gaddyear ajmp setg1 gaddyear: mov r7,66h lcall add1 mov 66h,a ;年加

42、 1 cjne a,#51h,gaddyear1 mov 66h,#01h gaddyear1: mov ds1302_addr,#8ch ;年送入 1302 mov ds1302_data,66h lcall write mov r0,66h lcall divide ;年分離送顯示緩存 mov 4bh,r1 mov 7bh,r1 mov 4ch,r2 mov 7ch,r2 waitt1: lcall display jnb p1.2,waitt1 ajmp setg1 setg2: setb 0ah ;調月時閃標志 gwait2: lcall display jnb p1.1,gwait2

43、 setg3: lcall display jnb p1.1,setg4 jnb p1.2,gaddmonth ajmp setg3 gaddmonth: mov r7,65h ;月加 1 lcall add1 mov 65h,a cjne a,#13h,gaddmonth1 mov 65h,#01h gaddmonth1: mov ds1302_addr,#88h ;月值送入 1302 mov ds1302_data,65h lcall write mov r0,65h lcall divide ;月分離送顯示緩存 mov 79h,r1 mov 49h,r1 mov 7ah,r2 mov 4

44、ah,r2 waitt2: lcall display jnb p1.2,waitt2 ajmp setg3 setg4: setb 0bh ;調日時閃標志 gwait4: lcall display jnb p1.1,gwait4 setg5: lcall display jnb p1.1,setg6 jnb p1.2,gadday ajmp setg5 gaddday: mov r7,63h ;日加 1 lcall add1 mov 63h,a cjne a,#32h,gaddday1 mov 63h,#01h gaddday1: mov ds1302_addr,#86h ;日值送入 13

45、02 mov ds1302_data,63h lcall write mov r0,63h lcall divide ;日分離送顯示緩存 mov 76h,r1 mov 46h,r1 mov 77h,r2 mov 47h,r2 waitt3: lcall display jnb p1.2,waitt3 ajmp setg5 setg6: setb 0ch ;調星期時閃標志 gwait6: lcall display jnb p1.1,gwait6 setg7: lcall display jnb p1.1,setg8 jnb p1.2,gaddweek ajmp setg7 gaddweek:

46、mov r7,64h ;星期加 1 lcall add1 mov 64h,a cjne a,#08h,gadddweek1 mov 64h,#01h gaddweek1: mov ds1302_addr,#8ah mov ds1302_data,64h ;星期值送入 1302 lcall write mov r0,64h lcall divide ;星期值分離送顯示緩 存 mov 48h,r1 mov 78h,r1 waitt4: lcall display jnb p1.2,waitt4 ajmp setg7 setg8: setb 0dh ;調小時時閃標志 gwait8: lcall di

47、splay jnb p1.1,gwait8 setg9: lcall display jnb p1.1,setg10 jnb p1.2,gaddhour ajmp setg9 gaddhour: mov r7,62h ;小時加 1 lcall add1 mov 62h,a cjne a,#24h,gadddhour1 mov 62h,#00h gaddhour1: mov ds1302_addr,#84h ;小時值送入 1302 mov ds1302_data,62h lcall write mov r0,62h lcall divide ;小時值分離送顯示緩存 mov 74h,r1 mov

48、44h,r1 mov 75h,r2 mov 45h,r2 waitt5: lcall display jnb p1.2,waitt5 ajmp setg9 setg10: setb 0eh ;調分時候閃標志 gwait10: lcall display jnb p1.1,gwait10 setg11: lcall display jnb p1.1,setgout jnb p1.2,gaddminute ajmp setg11 gaddminute: mov r7,61h ;分加 1 lcall add1 mov 61h,a cjne a,#60h,gaddminute1 mov 62h,#00

49、h gaddminute1: mov ds1302_addr,#82h ;分值送入 1302 mov ds1302_data,61h lcall write mov r0,61h lcall divide ;分值分離送顯示緩存 mov 72h,r1 mov 42h,r1 mov 73h,r2 mov 43h,r2 waitt6: lcall display jnb p1.2,waitt6 ajmp setg11 setgout: lcall display jnb p1.1,setgout lcall gengxian mov ds1302_addr,#80h mov ds1302_data,

50、#00h ;1302 晶振開始震蕩 lcall write mov ds1302_addr,#8eh mov ds1302_data,#80h ;禁止寫入 1302 lcall write clr 08h clr 09h clr 0ah clr 0bh clr 0ch clr 0dh clr 0eh clr 0fh clr et1 ;關閃中斷 clr tr1 ljmp main1 閃動調時程序閃動調時程序 intt1: push acc push psw gflash: cpl 0fh jb ofh,gflash1 mov 7ch,4ch ;全部顯示 mov 7bh,4bh mov 7ah,4

51、ah mov 79h,49h mov 78h,48h mov 77h,47h mov 76h,46h mov 75h,45h mov 74h,44h mov 73h,43h mov 72h,42h mov 71h,41h mov 70h,40h gflashout: pop psw pop acc reti gflash1: jb 0ah,gflash2 ;調年閃 mov 7ch,#0ah mov 7bh,#0ah ajmp gflashout gflash2: jb 0bh,gflash3 ;調月閃 mov 7ah,#0ah mov 79h,#0ah ajmp gflashout gflas

52、h3: jb 0ah,gflash4 ;調日閃 mov 77h,#0ah mov 76h,#0ah ajmp gflashout gflash4: jb 0ah,gflash5 ;調星期閃 mov 78h,#0ah ajmp gflashout gflash5: jb 0ah,gflash6 ;調小時閃 mov 75h,#0ah mov 74h,#0ah ajmp gflashout gflash6: mov 73h,#0ah ;調分閃 mov 72h,#0ah ajmp gflashout 加加 1 1 程序程序 add1: mov a,r7 add a,#01h da a ret 分離程序

53、分離程序 divide: mov a,r0 anl a,#0fh mov r1,a mov a,r0 swap a anl a,#0fh mov r2,a ret 寫寫 13021302 程序程序 write: clr sclk nop setb rst nop mov a, ds1302_addr mov r4,#8 write1: rrc a ;送地址給 1302 nop nop clr sclk nop nop nop mov io,c nop nop nop setb sclk nop nop djnz r4,write1 clr sclk nop mov a, ds1302_data

54、 mov r4,#8 write2: rrc a ;送數據給 1302 nop clr sclk nop nop mov io,c nop nop nop setb sclk nop nop djnz r4,write2 clr sclk ret 讀讀 13021302 程序程序 read: clr sclk nop nop setb rst nop mov a, ds1302_addr mov r4,#8 read1: rrc a ;送地址給 1302 nop mov io,c nop nop nop setb sclk nop nop nop clr sclk nop nop djnz r

55、4,read1 mov r4,#8 read2: clr sclk nop ;從 1302 中讀出數據 nop nop mov io,c nop nop nop nop nop rrc a nop nop nop nop setb sclk nop djnz r4,read2 mov ds1302_data,a clr rst ret bcdbcd 碼轉換為十進制程序碼轉換為十進制程序 bcd_10: mov a,r0 anl a,#0fh mov r1,a ;高位10,加低位 mov a,r0 swap a anl a,#0fh mov b,#10 mul ab add a,r1 mov r

56、0,a ret 十進制轉換成十進制轉換成 bcdbcd 碼程序碼程序 d_bcd: mov a, r0 mov b, #10 div ab swap a orl a, b ret 顯示程序顯示程序 display: mov 7eh,#02h mov 7dh,#00h mov r0h,#76h mov r1h,#70h mov r2h,79h mov r3h,#79h mov r5h,#0fehh play1: mov a, #0ffh mov p2,a mov a,r0 mov dptr,#tab1 movc a,a+dptr mov sbuf,a ;送第 1 字節 jnb t1,$ clr

57、ti mov a,r1 mov dptr, #tab1 movc a,a+dptr mov sbuf,a ;送第 2 字節 jnb ti,$ clr ti mov a,r2 mov dptr,#tab1 movc a,a+dptr mov sbuf,a ;送第 3 字節 jnb ti,$ clr ti inc ro inc r1 inc r3 mov a,r3 setb psw.4 ;選 2 組寄存器 mov r0,a mov a, r0 clr psw.4 mov r2,a mov a,r0 cjne a,#78h,play2 mov r0,#50h play2: cjne a,#54h,p

58、lay3 mov r0,#78h play3: mov a,r5 mov p2,a lcall dl1ms mov a,r5 jnb acc,6,playout rl a mov r5,a ljmp play1 playout: setb p2.6 ret dl1ms: mov r6,#14h dl1: mov r7, #19h dl2: djnz r7,dl2 djnz r6,dl1 ret 第五章 課程設計結果總結: 通過這次課程設計接觸了大量的資料和一些編程方法,學了不少新的東西, 加深了對單片機進一步的認識,而且結合自己所學的知識一點一滴完成了對電 子萬年歷的設計。 其中我覺得時鐘芯片

59、 ds1302 的正確使用是電子時鐘日歷系統成敗的關鍵, 只有對它的讀寫時序深刻了解后,才能做出一個性能穩定的電子萬年歷。系統 合理地選擇時間日期修改功能、鬧鈴設置和整點報時的實現方案,是簡化程序 設計的關鍵。硬件電路設計中要注意解決好單片機 i/0 口的驅動能力。 第六章 參考資料及參考文獻: 1李朝青. 單片機原理與控制技術 北京航空航天大學出版社.2001 2李光飛,樓然苗,胡加文. 單片機課程設計實例指導 北京航空航天 大學出版社.2004 3李全利, 遲榮強. 單片機原理及接口技術 高等教育出版社.2004 附錄:總設計電路圖附錄:總設計電路圖 p1.0/t2 1 p1.1/t2ex

60、 2 p1.2/eci 3 p1.3/cex0 4 p1.4/cex1 5 p1.5/cex2 6 p1.6/cex3 7 p1.7/cex4 8 rst 9 p3.0/rxd 10 p3.1/txd 11 p3.2/int0 12 p3.3/int1 13 p3.4/t0 14 p3.5/t1 15 p3.6/wr 16 p3.7/rd 17 xtal2 18 xtal1 19 vss 20 p2.0/a8 21 p2.1/a9 22 p2.2/a10 23 p2.3/a11 24 p2.4/a12 25 p2.5/a13 26 p2.6/a14 27 p2.7/a15 28 psen 29

溫馨提示

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

評論

0/150

提交評論