實時時鐘設(shè)計報告(共15頁)_第1頁
實時時鐘設(shè)計報告(共15頁)_第2頁
實時時鐘設(shè)計報告(共15頁)_第3頁
實時時鐘設(shè)計報告(共15頁)_第4頁
實時時鐘設(shè)計報告(共15頁)_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上單片機系統(tǒng)設(shè)計(課程設(shè)計)實 驗 報 告題 目: 實時時鐘 組 號: 任課教師: 組 長: 成 員: 聯(lián)系方式: 年 月 日 目 錄一、實施方案 11.1設(shè)計要求 11.2實現(xiàn)功能 11.3設(shè)計方案 1二、 原理簡述 22.1主控模塊 2 2.2時鐘電路 3 2.3顯示電路 5 2.4鍵盤輸入電路 7 2.5蜂鳴器電路 8三、 調(diào)試過程 93.1硬件調(diào)試 93.2軟件調(diào)試 9四、 主要程序 10五、 心得體會 12 專心-專注-專業(yè)一、 實施方案1.設(shè)計要求通過對DS1302編程,實現(xiàn)實時時鐘功能,用數(shù)碼管顯示時、分,用小數(shù)點作秒閃??捎面I盤設(shè)置時間。2.實現(xiàn)功能本組

2、的課程設(shè)計成果最終將實現(xiàn)如下功能:(1)實現(xiàn)實時時鐘功能,四位數(shù)碼管前兩位顯示時、后兩位顯示分,小數(shù)點作秒閃;(2)按下S8鍵,可實現(xiàn)對小時的加1設(shè)置;(3)按下S7鍵,可實現(xiàn)對分鐘的加1設(shè)置;(4)按下S1鍵,可實現(xiàn)小時的單獨顯示;(5)實現(xiàn)整點蜂鳴器報時功能。3.設(shè)計方案根據(jù)系統(tǒng)設(shè)計的功能的要求,初步確定設(shè)計系統(tǒng)由主控模塊、時鐘電路、顯示電路、鍵盤輸入電路及蜂鳴器電路組成。電路系統(tǒng)框圖如圖1所示。時 鐘 電 路主 控 模 塊鍵盤輸入電路顯 示 電 路蜂 鳴 器 電 路圖1 系統(tǒng)設(shè)計框圖其中,主控芯片使用51系列AT89C52單片機,時鐘芯片使用DS1302,晶振為11.0592MHz,顯示

3、電路由四位共陽LED數(shù)碼管完成,鍵盤采用線性連接,使用查詢法實現(xiàn)調(diào)整功能,蜂鳴器電路由有源蜂鳴器完成。二、 原理簡述1. 主控模塊 圖2 AT89C52 管腳圖AT89C52是低功耗、高性能的CMOS8位單片機。片內(nèi)帶有8KB的Flash存儲器,且允許在系統(tǒng)內(nèi)改寫或用編程器編程。另外,AT89C52的指令系統(tǒng)和引腳與80C52完全兼容。管腳功能如下:VCC:供電電壓;GND:接地;P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。;P1口:P1口是一個內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流;P2口:P2口為一個內(nèi)部上拉電阻的8位雙向I/O

4、口,P2口緩沖器可接收,輸出4個TTL門電流,當P2口被寫“1”時,其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流;P3口:P3口管腳是8個帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入;P3口管腳功能: P3.0是RXD(串行輸入口);P3.1是TXD(串行輸出口);P3.2是/INT0(外部中斷0);P3.3是/INT1(外部中斷1);P3.4是T0(記時器0外部輸入);P3.5是T1(記時器1外部輸入);P3.6是/WR(外部數(shù)據(jù)存儲器寫選通);P3.7是/RD(外部數(shù)據(jù)存儲器

5、讀選通);P3口同時為閃爍編程和編程校驗接收一些控制信號。RST:復位輸入。當振蕩器復位器件時,要保持RST腳兩個機器周期的高電平時間。ALE/PROG:當訪問外部存儲器時,地址鎖存允許輸出電平用于鎖存地址的地位字節(jié)。/PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/PSEN有效。但在訪問外部數(shù)據(jù)存儲器時,這兩次有效的/PSEN信號將不出現(xiàn)。/EA/VPP:當/EA保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內(nèi)部程序存儲器。XTAL1:反向振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入。XTAL2:來自反向振蕩器的輸出。2. 時鐘電路

6、圖3 硬件時鐘DS1302電路DS1302 時鐘芯片包括實時時鐘/日歷和 31 字節(jié)的靜態(tài) RAM。它經(jīng)過一個簡單的串行接口與微處理器通信。實時時鐘/日歷提供秒、分、時、日、周、月和年等信息。對于小于 31 天的月和月末的日期自動進行調(diào)整,還包括閏年校正的功能。時鐘的運行可以采用 24h 或帶 AM(上午)/PM(下午)的 12h 格式。采用三線接口與 CPU 進行同步通信,并可采用突發(fā)方式一次傳送多字節(jié)的時鐘信號或RAM 數(shù)據(jù)。 DS1302 在任何數(shù)據(jù)傳送時必須先初始化,把 RST 腳置為高電平,然后把 8位地址和命令字裝入移位寄存器,數(shù)據(jù)在 SCLK 的上升沿被輸入。無論是讀周期還是寫周

7、期,開始 8 位指定 40 個寄存器中哪個被訪問到。在開始 8 個時鐘周期,把命令裝入移位寄存器之后,另外的時鐘周期在讀操作時輸出數(shù)據(jù),在寫操作時寫入數(shù)據(jù)。時鐘脈沖在單字節(jié)方式下為 8 加 8,在多字節(jié)方式下為 8加字節(jié)數(shù),最大可達 248 個字節(jié)數(shù)。如果在傳送過程中置 RST 腳為低電平,則會中止本次數(shù)據(jù)傳送,并且 I/O引腳變?yōu)楦咦钁B(tài)。相關(guān)代碼如下:/*ds1302與at89s52引腳連接*/sbit T_RST=P36; /RST腳接P36sbit T_CLK=P34; /CLK腳接P34sbit T_IO=P35; /IO腳接P35sbit ACC0=ACC0;/定義標志位sbit A

8、CC7=ACC7;/*DS1302:寫入操作(上升沿)* / void write_byte(unsigned char da) unsigned char i; ACC=da; for(i=8;i>0;i-) T_IO=ACC0;T_CLK=0;T_CLK=1;ACC=ACC>>1; /*DS1302:讀取操作(下降沿)*/unsigned char read_byte(void) unsigned char i; for(i=0;i<8;i+) ACC=ACC>>1; T_CLK = 1; T_CLK = 0; ACC7 = T_IO; return(A

9、CC);/*DS1302:寫入數(shù)據(jù)(先送地址,再寫數(shù)據(jù))*/ void write_1302(unsigned char addr,unsigned char da) T_RST=0; /停止工作 T_CLK=0; T_RST=1; /重新工作 write_byte(addr); /寫入地址 write_byte(da); T_RST=0; T_CLK=1;/*DS1302:讀取數(shù)據(jù)(先送地址,再讀數(shù)據(jù))*/unsigned char read_1302(unsigned char addr) unsigned char temp; T_RST=0; /停止工作 T_CLK=0; T_RST=

10、1; /重新工作 write_byte(addr); /寫入地址 temp=read_byte(); T_RST=0; T_CLK=1; /停止工作 return(temp);3. 顯示電路圖4 四位共陽數(shù)碼管電路顯示部分采用普通的共陽數(shù)碼管顯示,使用動態(tài)掃描,以便減少硬件電路。LED數(shù)碼管里面有8只發(fā)光二極管,與實驗板P0端口所接的二極管是相同的。分別記作abcdefgdp,其中dp為小數(shù)點,每一只發(fā)光二極管都有一根電極引到外部引腳上,而另外一只引腳就連接在一起同樣也引到外部引腳上。該數(shù)碼管為共陽極,且通過P0=P2直接把按鍵狀態(tài)給到LED上,并沒有中間變量,通過按鍵控制數(shù)碼管的各管腳的高低

11、電平接入情況。當數(shù)碼管里面的發(fā)光二極管的陽極接在一起作為公共引腳,在正常使用時此引腳接電源正極。發(fā)光二極管的陰極接低電平時,發(fā)光二極管被點亮,從而相應(yīng)的數(shù)碼段顯示數(shù)字。LED接到單片機的P0口,若為低電平,可使LED亮起。發(fā)光二極管的亮、滅由內(nèi)部程序控制,因為流水燈與數(shù)碼管同時接在P0端口,所以流水燈的8個LED發(fā)光二極管與LED數(shù)碼管亮暗相同。相關(guān)程序如下:/*定義數(shù)碼管顯示引腳*/ sbit LED_0=P14;/數(shù)碼管8個控制引腳定義sbit LED_1=P15;sbit LED_2=P10;sbit LED_3=P11;sbit LED_4=P12;sbit LED_5=P13;sbi

12、t LED_6=P16;sbit LED_7=P17;unsigned char seg=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90; /09段碼/*顯示程序*/* 動態(tài)掃描條件(單個LED在1秒內(nèi)): count >=50次 /點亮次數(shù) */* time >=2ms /持續(xù)時間 */* DS1302秒,分,時寄存器是BCD碼形式:用16求商和余進行"高4位"和"低4位"分離 */*/ void led_disp(unsigned char *poi) P0=seg*(poi+1) %

13、16; /第1個數(shù)碼管:顯示分(個位); LED_5=0; delay(3); LED_5=1; P0=seg*(poi+1) / 16; /第2個數(shù)碼管:顯示分(十位); LED_4=0; delay(3); LED_4=1; P0=seg*(poi+2) % 16-(*poi%16)%2)<<7); /第3個數(shù)碼管:顯示時(個位); LED_3=0; delay(3); LED_3=1; P0=seg*(poi+2) /16; /第4個數(shù)碼管:顯示時(十位); LED_2=0; delay(3); LED_2=1; void led_disp1(unsigned char *p

14、oi) P0=seg*(poi+2) % 16-(*poi%16)%2)<<7); /第1個數(shù)碼管:顯示時(個位); LED_5=0; delay(3); LED_5=1; P0=seg*(poi+2) /16; /第2個數(shù)碼管:顯示時(十位); LED_4=0; delay(3); LED_4=1;4. 鍵盤輸入電路圖5 8路獨立按鍵電路單片機的按鍵各自獨立,按下歸零,抬起置一。相關(guān)程序如下:sbit sw0=P27; /按鍵8sbit sw1=P26; /按鍵7sbit sw2=P20; /按鍵1 5. 蜂鳴器電路圖6 有源蜂鳴器電路蜂鳴器發(fā)聲原理是電流通過電磁線圈,使電磁線圈

15、產(chǎn)生磁場來驅(qū)動振動膜發(fā)聲的。因此需要一定的電流才能驅(qū)動它,單片機I/O口輸出的電流較小,其TTL電平基本上驅(qū)動不了蜂鳴器,因此需要增加一個電流放大的電路。程序中通過改變單片機對應(yīng)I/O口輸出波形的頻率,就可以調(diào)整控制蜂鳴器音調(diào),產(chǎn)生各種不同音色、音調(diào)的聲音。另外,改變其占空比,也可以控制蜂鳴器的聲音大小??梢杂袃煞N驅(qū)動方式,即用PNP或NPN三極管電流放大電路驅(qū)動。本電路通過一個PNP三極管9012來放大驅(qū)動蜂鳴器,當輸出高電平時,三極管Q1截止,沒有電流流過線圈,蜂鳴器不發(fā)聲;當輸出低電平時,三極管導通,這樣蜂鳴器的電流形成回路,發(fā)出聲音。因此,我們可以通過程序控制I/O口輸出的電平來使蜂鳴

16、器發(fā)出聲音和關(guān)閉,從而實現(xiàn)各種可能音響的產(chǎn)生。相關(guān)程序如下:#include <AT89X52.H> /包含頭文件sbit buz=P37;/定義蜂鳴器引腳是P33 void Delay(unsigned int i) /最常用的延時函數(shù),已經(jīng)反復使用過 while(i-);void main(void)/主函數(shù)開始for(;) /以下實現(xiàn)buzzer和relay以一定頻率改變狀態(tài)buz=0; /蜂鳴器響 繼電器開Delay(60000); /延時buz=1; /蜂鳴器不響 繼電器關(guān)Delay(60000); /延時 三、 調(diào)試過程1. 硬件調(diào)試使用烙鐵、焊錫、鑷子等工具,根據(jù)原理

17、圖,將各種電子元件正確裝配到電阻板上。焊接過程中注意電路板與原理圖連接一致,分清電解電容、二極管、芯片、排阻、蜂鳴器、單片機I/O接口等元件的引腳正反,避免虛焊、引腳短路現(xiàn)象。為了避免較低的元件焊接不便,焊接時元件需要從低往高焊,較低的元件如電阻、單排圓孔、排阻、晶振等,普通高度元件有瓷片電容、按鍵、LED、芯片座、USB頭、數(shù)碼管、柱狀晶振等,較高的元件有串口頭、排針排孔、電源頭等。完成電路板的焊接工作并檢查無誤后,借助測試程序測試電路板的好壞。在板子上正確下載DS1302實時時鐘測試程序后,經(jīng)測試電路板能夠正確完成程序的功能,說明電路板焊接正確無誤,可放心地進行下一步軟件調(diào)試。2. 軟件調(diào)

18、試DS1302實時時鐘測試程序可以完成從12:00開始計時,并在數(shù)碼管上顯示相應(yīng)時間,在此程序基礎(chǔ)上進行修改,即可完成本項目的預(yù)期功能。在完成按鍵設(shè)置時間功能時,發(fā)現(xiàn)數(shù)碼管顯示數(shù)據(jù)出現(xiàn)時而正常,時而亂碼該情況。研究程序代碼后發(fā)現(xiàn),由于DS1302中秒、分、時寄存器是BCD碼形式的,所以在進行加法運算時需要對BCD碼進行修正,當結(jié)果大于9時,要進行加6操作,另外時和分的個位滿10進一,分滿60進一歸零,時滿24歸零的判斷分支語句順序不是任意的,必須遵守一定的順序。在修改了上述錯誤后,發(fā)現(xiàn)由于按鍵消抖動不徹底,也導致了顯示時間存在一定問題。通過修改延遲時間,發(fā)現(xiàn)設(shè)置為20000時按鍵不靈活,設(shè)置為

19、15000時按鍵存在抖動。再通過一定調(diào)試后,最終將數(shù)值設(shè)置為18000。在完成整點報時功能時,會出現(xiàn)蜂鳴器鳴叫持續(xù)一分鐘的情況,這與鳴叫次數(shù)與小時相同的設(shè)計初衷違背。研究發(fā)現(xiàn)是由于蜂鳴器相關(guān)語句位置太后,其中參數(shù)的值已經(jīng)改變原有的值的原因,通過反復測試及分析,最終將蜂鳴器代碼位置放在修改進位語句后面,從而完成了蜂鳴器整點報時的功能。四、 主要程序#include <AT89X52.H>/包含頭文件*主程序*/void delaysw(unsigned int i)while(i-);void main(void)unsigned char clk_time3=0x00,0x00,0

20、x12; /秒,分,時寄存器初始值unsigned char temp=0x80; /數(shù)組序號unsigned char i; delay(300);write_1302(0x8e,0x00); /WP=0 寫操作for(i=0;i<3;i+) write_1302(temp,clk_timei); temp+=2;/delay(300);write_1302(0x8e,0x80); /WP=1 寫保護/delay(300); while(1) if(sw0=0) /按鍵8按下,時加1delaysw(18000);if(sw0=0)clk_time2=read_1302(0x85); c

21、lk_time2=clk_time2+1; dflag=1; /標志位置1 if(sw1=0) /按鍵7按下,分加1delaysw(18000);if(sw1=0)clk_time1=read_1302(0x83); clk_time1=clk_time1+1; dflag=1; /標志位置1 if(dflag=1) /標志位為1 if(clk_time1%16=10) clk_time1=clk_time1+6; /分的個位滿10,分的十位加1 if(clk_time1%96=0) clk_time1=0 ; clk_time2+=1; /分滿60歸零,時加1 if(clk_time2%16

22、=10) clk_time2=clk_time2+6; /時的個位滿10,時的十位加1 if(clk_time2%36=0) clk_time2=0 ; / 時滿24歸零 if(clk_time1=0) /整點報時 for(i=0;i<clk_time2;i+) led_disp(clk_time); buz=0; delay(60000); buz=1; delay(60000); temp=0x80; write_1302(0x8e,0x00); /WP=0 寫操作 for(i=0;i<3;i+) write_1302(temp,clk_timei); temp+=2; /de

23、lay(300); write_1302(0x8e,0x80); /WP=1 寫保護 /delay(300); dflag=0; /標志位置0 if(sw2=0) /按鍵1按下 delaysw(18000); if(sw2=0) dflag=dflag; if(dflag=0) /發(fā)送時間到數(shù)碼管顯示 led_disp(clk_time);else led_disp1(clk_time); temp=0x81; for(i=0;i<3;i+)clk_timei=read_1302(temp); /實現(xiàn)每秒讀時間temp+=2;五、 心得體會本次課程設(shè)計是對我們單片機學習的檢驗及對實際動手

24、能力的又一次提高?;仡櫞舜螁纹瑱C課程設(shè)計,真是感慨頗多。期間不僅鞏固了以前所學過的知識,還學到了很多在書本上所沒有學到過的知識。在實際設(shè)計中才發(fā)現(xiàn),書本上理論性的東西與在實際運用中的還是有一定的出入的,所以有些問題不但要深入地理解,而且要不斷地更正以前的錯誤思維。一切問題必須要靠自己一點一滴地解決,而在解決的過程當中你會發(fā)現(xiàn)自己在飛速地提升。對于單片機設(shè)計,其硬件電路是比較簡單的,只要實驗板焊接正確就問題不大了,主要的還是解決程序設(shè)計中的問題。而程序設(shè)計是一個很靈活的東西,它反映了你解決問題的邏輯思維和創(chuàng)新能力,它才是一個設(shè)計的靈魂所在。因此可以說單片機的設(shè)計是軟件和硬件的結(jié)合,二者是密不可分的。 通過這次課程

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論