數(shù)字時鐘設計(含完整程序)_第1頁
數(shù)字時鐘設計(含完整程序)_第2頁
數(shù)字時鐘設計(含完整程序)_第3頁
數(shù)字時鐘設計(含完整程序)_第4頁
數(shù)字時鐘設計(含完整程序)_第5頁
已閱讀5頁,還剩7頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、電子時鐘設計一、實驗目的學習8051定時器時間計時處理、按鍵掃描及LED數(shù)碼管顯示的設計方法。二、設計任務及要求利用實驗平臺上4個LED數(shù)碼管,設計帶有鬧鈴功能的數(shù)字時鐘,要求:1 .在4位數(shù)碼管上顯示當前時間,顯示格式為時時分分”;2 .由LED閃動做秒顯示;3 .利用按鍵可對時間及鬧玲進行設置,并可顯示鬧玲時間。當鬧玲時間到蜂鳴器發(fā)出聲響,按停止鍵使可使鬧玲聲停止。三、工作原理及設計思路利用單片機定時器完成計時功能,定時器0計時中斷程序每隔5ms中斷一次并當作一個計數(shù),每中斷一次計數(shù)加1,當計數(shù)200次時,則表示1s到了,秒變量加1,同理再判斷是否1min鐘到了,再判斷是否1h到了。為了將

2、時間在LED數(shù)碼管上顯示,可采用靜態(tài)顯示法和動態(tài)顯示法,由于靜態(tài)顯示法需要數(shù)據鎖存器等較多硬件,可采用動態(tài)顯示法實現(xiàn)LED顯示。鬧鈴聲由交流蜂鳴器產生,電路如右圖,當P1.7輸出不同頻率的方波,蜂鳴器便會發(fā)出不同的尸日。BuzzerPL.7Q>10K四、硬件電路設計及描述由于擴展了外部存儲器,P0口只能作地址/數(shù)據總線,P2口只能作地址總線高8位,P3.7、P3.6作為外部數(shù)據存儲器讀寫信號。P3.0、P3.1作為串行輸入、輸出接口,在仿真模式下完成與PC機的通信,故也不可用。實驗儀上單片機可用作I/O的口僅有:P1.0-P1.7,8位;P3.2、P3.3、P3.4、P3.5,4位。其中

3、:P1.0用作數(shù)據線SDA,P1.1用作時鐘信號CLK所以P1.0和P1.1應該接對應跳線的A位,即跳線的中間和下面相連。P1.3、P1.4、P1.5和P1.6是四個數(shù)碼管的位掃描線,其中P1.6對應數(shù)碼管W1,顯示小時高位;P1.5對應數(shù)碼管W2,顯示小時低位;P1.4對應數(shù)碼管W3,顯示分鐘高位;P1.3對應數(shù)碼管W4,顯示分鐘低位。P1.7連接蜂鳴器電路,輸出不同頻率的方波,使其發(fā)出不同的聲音。P1.2用來控制秒的閃爍顯示。故,P1.2也應該接對應跳線的A位。其顯示電路如下圖:串CLKP10F11P12P13P14PL5F16PITW1 W2 «3 W4P3.2、P3.3、P3

4、.4、P3.5分別連接單刀雙擲開關S1、S2、S3、S4,從而輸入高低電平。將S2S1定義為功能模式選擇開關;S3定義為分鐘數(shù)調整開關;S4定義為小時數(shù)調整開關。當S2S1=00時,顯示當前時間,不進行任何操作。當S2S1=01時,顯示當前時間,同時可進行時鐘調整,若S3=1,分鐘數(shù)持續(xù)加1,若S4=1,小時數(shù)持續(xù)加1。當S2S1=10時,顯示鬧鐘時間,同時可進行鬧鐘調整,若S3=1,分鐘數(shù)持續(xù)加1,若S4=1,小時數(shù)持續(xù)加1。當S2S1=11時,顯示當前時間,同時關閉鬧鐘。音節(jié)由不同頻率的方波產生,音節(jié)與頻率的關系如表1所示。要產生音頻方波,只要算出某一音頻的周期(1/頻率),然后將此周期除

5、以2,即為半周期的時間。利用計時器計時此半周期時間,每當計時到后就將輸出方波的I/O反相,然后重復計時此半周期時間再對I/O反相,就可在I/O腳得到此頻率的方波。在ZKS-03實驗儀上,產生方波的I/O腳選用P1.7,通過跳線選才I器JP1將單片機的P1.7與蜂鳴器的驅動電路相連。這樣P1.7輸出不同頻率的方波,蜂鳴器便會發(fā)出不同的聲音。另外,音樂的節(jié)拍是由延時實現(xiàn)的,如果1拍為0.4秒,1/4拍是0.1秒。只要設定延時時間,就可求得節(jié)拍的時間。延時作為基本延時時間,節(jié)拍值只能是它的整數(shù)倍,每個音節(jié)相應的定時器初值X可按下法計算:(1/2)*(1/f)=(12/fose)*(216-x)即x=

6、216-(fose/24f)其中f:音調頻率,當晶振fose=11.0592MHz時,音節(jié)“1”相應的定時器初值為x,則可得x=63777D=F921H其它的可同樣求得。在單片機上控制一個音符唱多長可采用循環(huán)延時的方法來實現(xiàn)。首先,我們確定一個基本時長的延時程序,比如說以十六分音符的時長為基本延時時間,那么,對于一個音符,如果它為十六分音符,則只需調用一次延時程序,如果它為八分音符,則只需調用二次延時程序,如果它為四分音符,則只需調用四次延時程序,依次類推。通過上面關于一個音符音調和節(jié)拍的確定方法,我們就可以在單片機上實現(xiàn)演奏音樂了。具體的實現(xiàn)方法為:將樂譜中的每個音符的音調及節(jié)拍變換成相應的

7、音調參數(shù)和節(jié)拍參數(shù),將他們做成數(shù)據表格,存放在存儲器中,通過程序取出一個音符的相關參數(shù),播放該音符,該音符唱完后,接著取出下一個音符的相關參數(shù);如此直到播放完畢最后一個音符,根據需要也可循環(huán)不停地播放整個樂曲。另外,對于樂曲中的休止符,一般將其音調參數(shù)設為FFH,FFH,其節(jié)拍參數(shù)與其他音符的節(jié)拍參數(shù)確定方法一致,樂曲結束用節(jié)拍參數(shù)為00H來表示。五、軟件設計流程及描述六、源程序代碼及注釋注:首先將單片機用到的主要寄存器做下說明(如下);P1.2作秒的閃爍控制位;P1.7作響鈴控制電平;P3.2、P3.3作模式選擇鍵S2、S1;P3.4作分調整鍵$3(分鐘數(shù)+1);P3.5作時調整鍵S4(小日

8、數(shù)+1);R0為計數(shù)5ms的次數(shù);R1為秒數(shù);R2為分鐘數(shù);R3為時鐘數(shù);R4在顯示程序中作為向LED傳遞數(shù)據時的左移次數(shù)標志位;R4在音樂鬧鈴程序中讀取TABLE中的數(shù)據;R5作為節(jié)拍長度;40H作顯示的分;41H作顯示的時;42H作鬧鐘的分;43H作鬧鐘的時;63H、64H存放延日程序DELAY的延時數(shù);60H、61H作定日器T1的初值。;*主程序*S1BITP3.2;定義模式選擇鍵S2、S1S2BITP3.3S3BITP3.4;定義時調整鍵S4分調整鍵S3S4BITP3.5SDABITP1.0CLKBITP1.1ORG0000HAJMPMAINORG000BH;T0的中斷服務程序的入口地

9、址AJMPTIMER;跳轉到時鐘走時中斷服務程序ORG001BH;T1的中斷服務程序的入口地址AJMPALARM_OPEN;跳轉到鬧鐘響鈴中斷服務程序ORG0030HMAIN:MOV40H,#00;顯示的分MOV41H,#00;顯示的時MOV42H,#58;鬧鐘的分MOV43H,#23;鬧鐘的時MOVR0,#00H;寄存器清零(RO為計數(shù)5ms的次數(shù),R1為秒數(shù),MOVR1,#00H;R2為分鐘數(shù),R3為時鐘數(shù))MOVR2,#00HMOVR3,#00HMOVTMOD,#11H;設直T0,T1處于工作方式1MOVTH0,#0EEH;設置定時器的初值MOVTL0,#00HSETBEA;允許總中斷S

10、EIHEI0;允許T0,T1中斷SETBET1SETBTR0;啟動T0LOOP:LCALLDISPLAY1;調用顯示程序LCALLALARM;調用鬧鈴程序LCALLMODE;調用模式判斷程序AJMPLOOP*時鐘顯示部分*DISPLAY1:MOVDPTR,#TAB1MOVA,41HMOVB,#10DIV AB LCALLDISP1CLR P1.6LCALLDELAYSETBP1.6JBP1.2,TDAJMPTD1TD:MOVA,BAJMPTD2TD1:MOV A,BADDA,#10TD2:LCALL DISP1CLR P1.5 LCALLDELAYSETBP1.5MOVA,40HMOVDIV

11、ABB,#10LCALLDISP1CLR P1.4LCALLDELAYSETBP1.4MOVA,BLCALLDISP1CLR P1.3 LCALLDELAYSETBP1.3RETDISP1:MOVCA,A+DPTR一個8位數(shù)碼管顯示字形數(shù)據MOVR4,#08HDUP1:RLC AMOVSDA,CCLR CLKSETBCLKDJNZR4,DUP1RET* ;DISPLAY2:MOV DPTR,#TAB1MOVA,43HMOV B,#10DIV ABLCALL DISP2CLR P1.6;LED1數(shù)碼管顯示數(shù)碼,即小時的高位;控制LED2數(shù)碼管的小數(shù)點"dp"閃爍;LED2數(shù)碼

12、管顯示數(shù)碼,即小時的低位;LED3數(shù)碼管顯示數(shù)碼,即分鐘的高位;LED4數(shù)碼管顯示數(shù)碼,即分鐘的低位;LED串并轉換口從P1.0接收;R4記作左循環(huán)的次數(shù);A帶進位左循環(huán)移位;上升沿觸發(fā)數(shù)據接收鬧鐘顯示部分*;LED1數(shù)碼管顯示數(shù)碼,即小時的高位LCALLDELAYSETBP1.6MOVA,BLCALLDISP2CLR P1.5LCALLDELAYSETBP1.5MOVA,42HMOVB,#10DIV AB LCALLDISP2CLR P1.4LCALLDELAYSETBP1.4MOVA,BLCALLDISP2CLR P1.3 LCALLDELAYSETBP1.3RETDISP2: MOVC

13、A,A+DPTR一個8位數(shù)碼管顯示字形數(shù)據MOVR4,#08 HDUP2:RLC AMOVSDA,CCLR CLKSETBCLKDJNZR4,DUP2RET.*;ALARM:MOVA,40HCJNEA,#00H,MUSICLJMPB2MUSIC:MOVA,43HCJNEA,41H,B1MOVA,42HCJNEA,40H,B1SETB1.7MOV70H,#00HNEXT:MOVA,70HMOVDPTR,#TABLEMOVCA,A+DPTRMOVR4,AJZEND0ANLA,#0FHMOVR5,AMOVA,R4SWAPA;LED2數(shù)碼管顯示數(shù)碼,即小時的低位;LED3數(shù)碼管顯示數(shù)碼,即分鐘的高位;

14、LED4數(shù)碼管顯示數(shù)碼,即分鐘的低位;LED串并轉換口從P1.0接收;R4記作左循環(huán)的次數(shù);A帶進位左循環(huán)移位;上升沿觸發(fā)數(shù)據接收判斷鬧鐘時間是否到來*;整點鬧鈴;音樂鬧鈴;從TABLE中讀取數(shù)據一一聲響時間;將TABLE中讀取的數(shù)據存放在R4;R5作為節(jié)拍長度ANLA,#0FHJNZSINGCLRTR1JMPD1SING:DECAMOV62H,ARLAMOVDPTR,#TABLE1;從TABLE1中讀取數(shù)據聲調MOVCA,A+DPTRMOVTH1,A;設定TH1值MOV61H,AMOVA,62HRLAINCAMOVCA,A+DPTRMOVTL1,A;設定TL1值MOV60H,AMOVTH1,

15、61HMOVTL1,60HSETBTR1D1:ACALLDELAY0;聲音延時INC70HJMPNEXTEND0:CLRTR1JMPMUSICDELAY0:MOVR7,#2;R5的值就是聲響持續(xù)時間D2:MOVR6,#214D3:MOVR4,#245DJNZR4,$DJNZR6,D3DJNZR7,D2DJNZR5,DELAY0RETB1:CLRTR1RETB2:MOV61H,#0FEHMOV60H,#033HMOVTH1,61HMOVTL1,60H方波頻率設為1KHzSETBTR1;*鬧鐘響鈴中斷服務程序*ALARM_OPEN:PUSHACCPUSHPSWMOVTH1,61HMOVTL1,60

16、HCPLP1.7POPPSWPOPACCRETI.*;時鐘走時中斷服務程序*TIMER:MOVTH0,#0ECH;重新對T0賦值,設置中斷時間為5msMOVTL0,#78HMOV40H,R2MOV41H,R3INCR0;計數(shù)5ms的次數(shù)加1CJNER0,#200,BACK;不夠200次,跳轉到BACKCPLP1.2;夠200次,P1.2翻轉控制LED閃動一下MOVR0,#00H;計數(shù)5ms的次數(shù)清0,秒數(shù)加1INCR1CJNER1,#60,BACK;不夠60秒,跳轉到BACKMOVR1,#00H;夠60秒,秒數(shù)清0,分鐘加1INCR2CJNER2,#60,BACK;夠60分鐘,跳轉到BACKM

17、OVR2,#00H;夠60分鐘,分鐘數(shù)清0,小時數(shù)加1INCR3CJNER3,#24,BACK;夠24小時,跳轉到BACKMOVR3,#00H;夠24小時,小時數(shù)清0BACK:RETI.*按鍵判斷部分*MODE:MOVA,P3;軟件消抖后再判斷LCALLDELAYCJNEA,P3,MODEANLA,#0CH;對S2、S1的值判斷CJNEA,#00H,LOP1AJMPT_BACK;模式為00,開T1中斷LOP1:CJNEA,#04H,LOP2AJMPT_CHANGE;模式為01,進行時間調整LOP2:CJNEA,#08H,LOP3AJMPA_CHANGE;模式為10,進行鬧鈴調整LOP3:AJM

18、PA_CLOSE;模式為11,關閉鬧鐘;時鐘調整.T_CHANGE:LCALLDISPLAY1LCALLDELAY1JNBS3,T_HOUR;S3為0,判斷S4T_MIN:MOVR5,40HINCR5;S3為1,分鐘數(shù)加1CJNER5,#60,LOP4MOVR5,#00HLOP4:MOV40H,R5MOVR2,40HAJMPMODET_HOURJNBS4,MODE;S4為0,跳轉至ijMODEMOVR5,41HINCR5;S4為,小時數(shù)加1CJNER5,#24,LOP5LOP5:MOVMOVMOVAJMPR5,#00H41H,R5R3,41HMODE;鬧鈴調整A_CHANGE:LCALLDIS

19、PLAY2LCALLDELAY2JNBS3,A_HOUR;S3為0,判斷S4A_MIN:MOVR5,42HINCR5;S3為1,分鐘數(shù)加1CJNER5,#60,LOP6MOVR5,#00HLOP6:MOV42H,R5AJMPMODEA_HOUR:JNBS4,MODE;S4為0,跳轉至UMODEMOVR5,43HINCR5;S4為1,小時數(shù)加1CJNER5,#24,LOP7MOVR5,#00HLOP7:MOV43H,R5AJMPMODE;返回T_BACK:SETBET1;開T1中斷RETA_CLOSE:CLRET1;關T1中斷RET;*延時程序*DELAY:MOV63H,#5H;約2.78msD

20、5:MOV64H,#0FFHDJNZ64H,$DJNZ63H,D5RET;*延時程序1*DELAY1:MOVR7,#50HD6:LCALLDISPLAY1DJNZR7,D6RET;*延時程序2*DELAY2:MOVR7,#50HD7:LCALLDISPLAY2DJNZR7,D7RET;*數(shù)碼管顯示白字形表*TAB1:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H;數(shù)字09,不帶小數(shù)點"dp"DB40H,79H,24H,30H,19H,12H,02H,78H,00H,10H;數(shù)字09,帶小數(shù)點"dp";*音樂的

21、節(jié)拍表*TABLE:DB82H,01H,81H,94H,84H,0B4H,0A4H,04HDB82H,01H,81H,94H,84H,0C4H,0B4H,04HDB82H,01H,81H,0F4H,0D4H,0B4H,0A4H,94HDB0E2H,01H,0E1H,0D4H,0B4H,0C4H,0B4H,04HDB82H,01H,81H,94H,84H,0B4H,0A4H,94HDB0E2H,01H,0E1H,0D4H,0B4H,0C4H,0B4H,04HDB82H,01H,81H,0F4H,0D4H,0B4H,0A4H,94HDB0E2H,01H,0E1H,0D4H,0B4H,0C4H,0B

22、4H,04HDB00H;*由音樂音符設置的T1計數(shù)值*TABLE1:DW64260,64440,64524,64580,64684,64777,64820,64898;音符計數(shù)值DW64968,65030,65058,65110,65157,65178,65217END七、實驗過程將P1.0、P1.1、P1.3、P1.4、P1.5、P1.6、P3.0、P3.1的跳線接相應的A位,P1.7的跳線接相應的C位,拔掉其它不用的跳線。插好電源,插好通信線,打開實驗儀電源開關,在實驗上將工作模式開關SX撥到“LOAD”一檔,按下復位開頭RESET然后啟動DPFlash,單擊“編程”,在彈出的窗口中選中“編程MON51",再按“確定”,就將程序下載到單片機的Flash中。關閉DPFlash,啟動Keil,新建一個工程,然后選擇芯片(PhilipsP80/P87C52X2)。編寫匯編語言程序,保存并添加至工程中,然后進行編譯。將實驗臺上的工作模式開關SX撥到“MON”位置,按下RESE慮位開關,設置S0、S1、S3和S4的狀態(tài),再運行程序,撥動SRS1、S3和S4對應的開頭,檢查電子時鐘功能是否完整。多次調試、修改程序,直至能正常實現(xiàn)設計的功能為止。八、實驗總結這次做的單片機實驗,有不

溫馨提示

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

評論

0/150

提交評論