數(shù)字電子時鐘實驗報告.doc_第1頁
數(shù)字電子時鐘實驗報告.doc_第2頁
數(shù)字電子時鐘實驗報告.doc_第3頁
數(shù)字電子時鐘實驗報告.doc_第4頁
數(shù)字電子時鐘實驗報告.doc_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

重慶理工大學(xué)嵌入式接口技術(shù)綜合實驗報告題目: 數(shù)字時鐘程序設(shè)計 二級學(xué)院計算機科學(xué)與工程 專 業(yè)計算機科學(xué)與技術(shù)班 級37-3 學(xué)生姓名許鴻興 教 師 時 間 成 績目 錄一、實驗名稱二、實驗?zāi)康娜嶒炘O(shè)備與環(huán)境四、實驗基本原理五、實驗內(nèi)容(包括主要算法分析與流程圖)六、實驗源程序及分析七、實驗運行結(jié)果及分析八、實驗心得體會1、 實驗名稱數(shù)字時鐘程序設(shè)計2、 實驗?zāi)康氖煜纹瑱C數(shù)碼管、按鍵等的應(yīng)用,了解并掌握單片機中斷、定時的使用等。三、實驗設(shè)備與環(huán)境微機、AT 89S52單片機、Keil uVision4軟件等。4、 實驗基本原理本實驗采用的數(shù)碼管為共陽極數(shù)碼管。數(shù)碼管是一種把多個LED顯示段集成在一起的顯示設(shè)備。有兩種類型,一種是共陽型,一種是共陰型。共陽型就是把多個LED顯示段的陽極接在一起,又稱為公共端。共陰型就是把多個LED顯示段的陰極接在一起,即為公共端。陽極即為二極管的正極,又稱為正極,陰極即為二極管的負(fù)極,又稱為負(fù)極。通常的數(shù)碼管又分為8段,即8個LED顯示段,這是為工程應(yīng)用方便如設(shè)計的,分別為A、B、C、D、E、F、G、DP,其中DP是小數(shù)點位段。而多位數(shù)碼管,除某一位的公共端會連接在一起,不同位的數(shù)碼管的相同端也會連接在一起。即,所有的A段都會連在一起,其它的段也是如此,這是實際最常用的用法。數(shù)碼管顯示方法可分為靜態(tài)顯示和動態(tài)顯示兩種。動態(tài)顯示:所謂動態(tài)顯示,就是一位一位的輪流點亮各個位,對于顯示器的每一位來說,每隔一段時間點亮一次。利用人的視覺暫留功能可以看到整個顯示,但必須保證掃描速度足夠快,字符才不閃爍。顯示器的亮度既與導(dǎo)通電流有關(guān),也于點亮?xí)r間與間隔時間的比例有關(guān)。調(diào)整參數(shù)可以實現(xiàn)較高穩(wěn)定度的顯示。動態(tài)顯示節(jié)省了I/O口,降低了能耗。5、 實驗內(nèi)容(包括主要算法分析與流程圖)整個系統(tǒng)采用AT89S52作為時鐘控制芯片,利用單片機內(nèi)部的定時器計數(shù)器來實現(xiàn)的,它的處理過程如下:首先設(shè)定單片機內(nèi)部的一個定時器計數(shù)器工作于定時方式,對機器周期計數(shù)形成基準(zhǔn)時間,然后用另一個定時器計數(shù)器或軟件計數(shù)的方法對基準(zhǔn)時間計數(shù)形成秒,秒計60次形成分,分計60次形成小時,小時計24次則計滿一天,再通過判斷平年、閏年,計數(shù)相應(yīng)的月份天數(shù)以及年份天數(shù)。然后通過數(shù)碼管把它們的內(nèi)容在相應(yīng)位置顯示出來即可。數(shù)碼管顯示采用動態(tài)顯示方法,動態(tài)顯示方法線路相對簡單,但需動態(tài)掃描,掃描頻率要大于人眼視覺暫留頻率,信息看起來才穩(wěn)定。在具體處理時,定時器計數(shù)器采用中斷方式工作,對時鐘的形成在中斷服務(wù)程序中實現(xiàn)。在主程序中只需對定時器計數(shù)器初始化、調(diào)用顯示子程序和控制子程序。另外,為了使用方便,設(shè)計了簡單的按鍵,可以通過按鍵實現(xiàn)時間調(diào)整和復(fù)位。函數(shù)Jude_Show();進行時間判斷并輸出顯示。首先使用定時器0方式2進行計時,計時1S后Sec自加,Sec自加至60(60秒)后Min自加并將Sec置零,Min自加至60(60分)后Hour自加,并將Min置零,Hour自加至24(24小時)Day自加并將Hour清零。此時進行平年閏年的判斷,如果年份為閏年,則2月天數(shù)為28天,如果為平年,則2月的天數(shù)為29天,其余相同。當(dāng)天數(shù)記滿相應(yīng)的一個月后,Month自加,當(dāng)月數(shù)自加至12(12月)后,年份自加。而后刷新顯示緩存輸出顯示。主要流程圖如下:1、主流程圖:設(shè)置初值方式二動態(tài)掃描顯示 鬧鐘判斷鬧鐘2、 萬年歷:秒自加秒=60分自加分=60時自加時=24天自加平年閏年判斷天=相應(yīng)月份天數(shù)相應(yīng)月份自加年份自加月份=126、 實驗源程序及分析#includeunsigned int Year=0,Month=0,Day=0,Sec=0,Min=0,Hour=0; /初始顯示的時間unsigned int Fir_year=0,Fir_month=0,Fir_day=0,Fir_Sec=0,Fir_Min=0,Fir_Hour=0; /設(shè)置鬧鐘的時間1unsigned int Sec_year=0,Sec_month=0,Sec_day=0,Sec_Sec=0,Sec_Min=0,Sec_Hour=0; /設(shè)置鬧鐘的時間2unsigned int Thi_year=0,Thi_month=0,Thi_day=0,Thi_Sec=0,Thi_Min=0,Thi_Hour=0; /設(shè)置鬧鐘的時間3unsigned int Fou_year=0,Fou_month=0,Fou_day=0,Fou_Sec=0,Fou_Min=0,Fou_Hour=0; /設(shè)置鬧鐘的時間4unsigned int Os=0;/系統(tǒng)時鐘unsigned int shift=0xfe,pDG=0;/初始位碼以及動態(tài)掃描初值unsigned char Dis8;/緩存顯示碼sbit beep=P37;/蜂鳴器unsigned char code display = 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xBF;/0-9以及”-”段碼void First_Time() /設(shè)置初始顯示的時間Year=2016;Month=4;Day=3;Hour=12;Min=23;Sec=35;void Set_Time()Fir_year=2016; /設(shè)置鬧鐘1時間Fir_month=4;Fir_day=3;Fir_Hour=12;Fir_Min=23;Fir_Sec=40;Sec_year=2016; /設(shè)置鬧鐘2時間Sec_month=4;Sec_day=3;Sec_Hour=12;Sec_Min=23;Sec_Sec=45;Thi_year=2016; /設(shè)置鬧鐘3時間Thi_month=4;Thi_day=3;Thi_Hour=12;Thi_Min=23;Thi_Sec=50;Fou_year=2016; /設(shè)置鬧鐘4時間Fou_month=4;Fou_day=3;Fou_Hour=12;Fou_Min=23;Fou_Sec=55;void Jude_Time() /判斷時間是否到鬧鐘時間if(Year=Fir_year&Month=Fir_month&Day=Fir_day&Hour=Fir_Hour&Min=Fir_Min&Sec=Fir_Sec)beep=!beep;/蜂鳴器響3秒else if(Year=Sec_year&Month=Sec_month&Day=Sec_day&Hour=Sec_Hour&Min=Sec_Min&Sec=Sec_Sec)beep=!beep;/蜂鳴器響3秒else if(Year=Thi_year&Month=Thi_month&Day=Thi_day&Hour=Thi_Hour&Min=Thi_Min&Sec=Thi_Sec)beep=!beep;/蜂鳴器響3秒else if(Year=Fou_year&Month=Fou_month&Day=Fou_day&Hour=Fou_Hour&Min=Fou_Min&Sec=Fou_Sec)beep=!beep;/蜂鳴器響3秒void Jude_Show()/判斷顯示Sec+;if(Sec=60)Min+;Sec=0;/秒自加到60自身置零,分+1if(Min=60)Hour+;Min=0;/分自加到60自身置零,時+1if(Hour=24)Day+;if(Year%400=0)|(Year%4=0)&(Year%100!= 0)/判斷閏年if(Month=1|Month=3|Month=5|Month=7|Month=8|Month=10|Month=12)/每個有月31天的月份if(Day=31)/天數(shù)增至31,月份加1,Day置零Month+;Day=0;else if(Month=4|Month=6|Month=9|Month=11)/每個月有30天的月數(shù)if(Day=30)/天數(shù)增至30,月份加1,Day置零Month+;Day=0;else/二月if(Day=28)/天數(shù)增至28,月份加1,Day置零Month+;Day=0;if(Month=12)/月份增至12,年份自加Year+;else/平年if(Month=1|Month=3|Month=5|Month=7|Month=8|Month=10|Month=12)/每個有月31天的月份if(Day=31)/天數(shù)增至31,月份加1,Day置零Month+;Day=0;else if(Month=4|Month=6|Month=9|Month=11)/每個月有30天的月數(shù)if(Day=30)/天數(shù)增至30,月份加1,Day置零Month+;Day=0;else/二月if(Day=29)/天數(shù)增至29,月份加1,Day置零Month+;Day=0;if(Month=12)/月份增至12,年份自加Year+;/刷新顯示緩沖區(qū)Dis6=displayHour%10; /時個位顯示碼Dis7=displayHour/10;/時十位顯示碼Dis3=displayMin%10 ; /分個位顯示碼Dis4=displayMin/10;/分十位顯示碼Dis0=displaySec%10; /秒個位顯示碼Dis1=displaySec/10;/秒十位顯示碼void Task1ms()P2 = 0xff;/初始關(guān)閉顯示P0 = DispDG;/送段碼P2 = shift;/送位碼shift = (shift1)|1;/左移一位,修改位碼pDG+;if(pDG=8) /循環(huán)動態(tài)掃描pDG=0;shift = 0xfe;/位碼加至8循環(huán)至1void intt()/初始化 TMOD = 0x02; /工作方式2 TH0 = TL0 = 0x1A; /250us定時常數(shù)256-(250*11.0592/12)=25.6(D)=1A(H) TR0 = 1; /開啟Timer0中斷 ET0 = 1; /允許Timer0中斷 EA = 1; /允許總中斷void main(void) P0 = 0xff; /端口初始化 P1 = 0xff; P2 = 0xff; P3 = 0xff; intt();/初始化 Dis5=Dis2=display10;/顯示- Dis0=Dis1=Dis3=Dis4=Dis6=Dis7=display0;/顯示0 First_Time(); /設(shè)置初始時間Set_Time();/設(shè)置鬧鐘時間 while

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論