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

下載本文檔

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

文檔簡介

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

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

3、1用作時鐘信號CLK,所以P1.0和P1.1應(yīng)該接對應(yīng)跳線的A位,即跳線的中間和下面相連。P1.3、P1.4、P1.5和P1.6是四個數(shù)碼管的位掃描線,其中P1.6對應(yīng)數(shù)碼管W1,顯示小時高位;P1.5對應(yīng)數(shù)碼管W2,顯示小時低位;P1.4對應(yīng)數(shù)碼管W3,顯示分鐘高位;P1.3對應(yīng)數(shù)碼管W4,顯示分鐘低位。P1.7連接蜂鳴器電路,輸出不同頻率的方波,使其發(fā)出不同的聲音。P1.2 用來控制秒的閃爍顯示。故,P1.2也應(yīng)該接對應(yīng)跳線的A位。其顯示電路如下圖:P3.2、P3.3、P3.4、P3.5分別連接單刀雙擲開關(guān)S1、S2、S3、S4,從而輸入高低電平。將S2 S1 定義為功能模式選擇開關(guān);S3

4、 定義為分鐘數(shù)調(diào)整開關(guān);S4 定義為小時數(shù)調(diào)整開關(guān)。當(dāng)S2 S1=00時,顯示當(dāng)前時間,不進(jìn)行任何操作。當(dāng)S2 S1=01時, 顯示當(dāng)前時間,同時可進(jìn)行時鐘調(diào)整,若S3=1,分鐘數(shù)持續(xù)加1,若S4=1,小時數(shù)持續(xù)加1。當(dāng)S2 S1=10時,顯示鬧鐘時間,同時可進(jìn)行鬧鐘調(diào)整,若S3=1,分鐘數(shù)持續(xù)加1,若S4=1,小時數(shù)持續(xù)加1。當(dāng)S2 S1=11 時,顯示當(dāng)前時間,同時關(guān)閉鬧鐘。音節(jié)由不同頻率的方波產(chǎn)生,音節(jié)與頻率的關(guān)系如表1所示。要產(chǎn)生音頻方波,只要算出某一音頻的周期(1/頻率),然后將此周期除以2,即為半周期的時間。利用計時器計時此半周期時間,每當(dāng)計時到后就將輸出方波的I/0反相,然后重復(fù)

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

6、相應(yīng)的定時器初值為x,則可得x=63777D=F921H 其它的可同樣求得。在單片機上控制一個音符唱多長可采用循環(huán)延時的方法來實現(xiàn)。首先,我們確定一個基本時長的延時程序,比如說以十六分音符的時長為基本延時時間,那么,對于一個音符,如果它為十六分音符,則只需調(diào)用一次延時程序,如果它為八分音符,則只需調(diào)用二次延時程序,如果它為四分音符,則只需調(diào)用四次延時程序,依次類推。 通過上面關(guān)于一個音符音調(diào)和節(jié)拍的確定方法,我們就可以在單片機上實現(xiàn)演奏音樂了。具體的實現(xiàn)方法為:將樂譜中的每個音符的音調(diào)及節(jié)拍變換成相應(yīng)的音調(diào)參數(shù)和節(jié)拍參數(shù),將他們做成數(shù)據(jù)表格,存放在存儲器中,通過程序取出一個音符的相關(guān)參數(shù),播放

7、該音符,該音符唱完后,接著取出下一個音符的相關(guān)參數(shù),如此直到播放完畢最后一個音符,根據(jù)需要也可循環(huán)不停地播放整個樂曲。另外,對于樂曲中的休止符,一般將其音調(diào)參數(shù)設(shè)為FFH,F(xiàn)FH,其節(jié)拍參數(shù)與其他音符的節(jié)拍參數(shù)確定方法一致,樂曲結(jié)束用節(jié)拍參數(shù)為00H來表示。 五、軟件設(shè)計流程及描述開始中斷返回秒數(shù)滿60?5ms中斷次數(shù)滿200?5ms中斷次數(shù)加1分鐘數(shù)清零,小時數(shù)加1秒數(shù)清零,分鐘數(shù)加1小時數(shù)清零5ms中斷次數(shù)清零,秒數(shù)加1,LED閃動一下分鐘數(shù)滿60? 小時數(shù)滿24?時鐘走時中斷服務(wù)程序六、源程序代碼及注釋注:首先將單片機用到的主要寄存器做下說明(如下);P1.2 作秒的閃爍控制位;P1.7

8、 作響鈴控制電平;P3.2、P3.3 作模式選擇鍵S2、S1;P3.4 作分調(diào)整鍵S3(分鐘數(shù)+1);P3.5 作時調(diào)整鍵S4(小時數(shù)+1);R0為計數(shù)5ms的次數(shù);R1為秒數(shù);R2為分鐘數(shù);R3為時鐘數(shù);R4 在顯示程序中作為向LED傳遞數(shù)據(jù)時的左移次數(shù)標(biāo)志位;R4 在音樂鬧鈴程序中讀取TABLE中的數(shù)據(jù);R5作為節(jié)拍長度;40H 作顯示的分;41H 作顯示的時;42H 作鬧鐘的分;43H 作鬧鐘的時;63H、64H 存放延時程序DELAY的延時數(shù);60H、61H 作定時器T1的初值。;* 主程序 *S1BITP3.2;定義模式選擇鍵S2、S1S2BITP3.3S3BITP3.4;定義時調(diào)整

9、鍵S4,分調(diào)整鍵S3S4BITP3.5SDABITP1.0CLKBITP1.1ORG 0000HAJMPMAINORG 000BH;T0的中斷服務(wù)程序的入口地址AJMPTIMER;跳轉(zhuǎn)到時鐘走時中斷服務(wù)程序ORG 001BH ;T1的中斷服務(wù)程序的入口地址AJMPALARM_OPEN ;跳轉(zhuǎn)到鬧鐘響鈴中斷服務(wù)程序ORG 0030HMAIN:MOV 40H,#00 ;顯示的分MOV 41H,#00 ;顯示的時MOV 42H,#58 ;鬧鐘的分MOV 43H,#23 ;鬧鐘的時 MOV R0,#00H ;寄存器清零(RO為計數(shù)5ms的次數(shù),R1為秒數(shù), MOV R1,#00H;R2為分鐘數(shù),R3為

10、時鐘數(shù)) MOV R2,#00H MOV R3,#00HMOV TMOD,#11H ;設(shè)置T0,T1處于工作方式1MOV TH0,#0EEH ;設(shè)置定時器的初值 MOV TL0,#00HSETB EA;允許總中斷SETBET0 ;允許T0,T1中斷 SETB ET1 SETB TR0 ;啟動T0LOOP:LCALL DISPLAY1 ;調(diào)用顯示程序 LCALL ALARM;調(diào)用鬧鈴程序 LCALL MODE ;調(diào)用模式判斷程序 AJMP LOOP;* 時鐘顯示部分 *DISPLAY1:MOV DPTR,#TAB1 MOV A,41H MOV B,#10 DIV AB LCALL DISP1 C

11、LR P1.6;LED1數(shù)碼管顯示數(shù)碼,即小時的高位 LCALL DELAY SETB P1.6 JB P1.2,TD;控制LED2數(shù)碼管的小數(shù)點"dp"閃爍AJMP TD1TD:MOV A,B AJMP TD2TD1:MOV A,B ADD A,#10TD2:LCALL DISP1;LED2數(shù)碼管顯示數(shù)碼,即小時的低位 CLR P1.5 LCALL DELAY SETB P1.5 MOV A,40H MOV B,#10 DIV AB LCALL DISP1 CLR P1.4;LED3數(shù)碼管顯示數(shù)碼,即分鐘的高位 LCALL DELAY SETB P1.4 MOV A,B

12、LCALL DISP1 CLR P1.3;LED4數(shù)碼管顯示數(shù)碼,即分鐘的低位 LCALL DELAY SETB P1.3 RETDISP1:MOVC A,A+DPTR;LED串并轉(zhuǎn)換口從P1.0接收一個8位數(shù)碼管顯示字形數(shù)據(jù) MOV R4,#08H;R4記作左循環(huán)的次數(shù)DUP1:RLC A;A帶進(jìn)位左循環(huán)移位 MOV SDA,C CLR CLK;上升沿觸發(fā)數(shù)據(jù)接收 SETB CLK DJNZ R4,DUP1 RET;* 鬧鐘顯示部分 *DISPLAY2:MOV DPTR,#TAB1MOVA,43HMOV B,#10DIV ABLCALL DISP2CLR P1.6;LED1數(shù)碼管顯示數(shù)碼,即

13、小時的高位LCALL DELAYSETB P1.6MOV A,BLCALL DISP2CLR P1.5;LED2數(shù)碼管顯示數(shù)碼,即小時的低位LCALL DELAYSETB P1.5MOV A,42HMOV B,#10DIV ABLCALL DISP2CLR P1.4;LED3數(shù)碼管顯示數(shù)碼,即分鐘的高位LCALL DELAYSETB P1.4MOV A,BLCALL DISP2CLR P1.3;LED4數(shù)碼管顯示數(shù)碼,即分鐘的低位LCALL DELAYSETB P1.3RETDISP2:MOVC A,A+DPTR;LED串并轉(zhuǎn)換口從P1.0接收一個8位數(shù)碼管顯示字形數(shù)據(jù)MOV R4,#08H;

14、R4記作左循環(huán)的次數(shù)DUP2:RLC A;A帶進(jìn)位左循環(huán)移位MOV SDA,CCLR CLK;上升沿觸發(fā)數(shù)據(jù)接收SETB CLKDJNZ R4,DUP2RET;* 判斷鬧鐘時間是否到來 *ALARM:MOV A,40HCJNE A,#00H,MUSIC;整點鬧鈴LJMPB2MUSIC:MOV A,43H CJNE A,41H,B1 MOV A,42H CJNE A,40H,B1;音樂鬧鈴SETBP1.7MOV 70H,#00HNEXT: MOV A,70H MOV DPTR,#TABLE;從TABLE中讀取數(shù)據(jù)聲響時間 MOVC A,A+DPTR MOV R4,A;將TABLE中讀取的數(shù)據(jù)存放

15、在R4 JZ END0 ANL A,#0FH MOV R5,A;R5作為節(jié)拍長度 MOV A,R4 SWAP A ANL A,#0FH JNZ SING CLR TR1 JMP D1SING: DEC A MOV 62H,A RL A MOV DPTR,#TABLE1;從TABLE1中讀取數(shù)據(jù)聲調(diào) MOVC A,A+DPTR MOV TH1,A;設(shè)定TH1值 MOV 61H,A MOV A,62H RL A INC A MOVC A,A+DPTR MOV TL1,A;設(shè)定TL1值 MOV 60H,A MOV TH1,61H MOV TL1,60H SETB TR1D1: ACALL DELAY

16、0;聲音延時 INC 70H JMP NEXTEND0: CLR TR1 JMP MUSICDELAY0: MOV R7,#2;R5的值就是聲響持續(xù)時間D2: MOV R6,#214D3: MOV R4,#245 DJNZ R4,$ DJNZ R6,D3 DJNZ R7,D2 DJNZ R5,DELAY0 RETB1:CLR TR1 RETB2: MOV 61H,#0FEH MOV 60H,#033HMOVTH1,61HMOVTL1,60H ;方波頻率設(shè)為1KHzSETB TR1;* 鬧鐘響鈴中斷服務(wù)程序 * ALARM_OPEN:PUSH ACC PUSH PSW MOV TH1,61H M

17、OV TL1,60H CPL P1.7 POP PSW POP ACC RETI;* 時鐘走時中斷服務(wù)程序 *TIMER:MOV TH0,#0ECH;重新對T0賦值,設(shè)置中斷時間為5ms MOV TL0,#78H MOV 40H,R2 MOV 41H,R3 INC R0;計數(shù)5ms的次數(shù)加1 CJNE R0,#200,BACK;不夠200次,跳轉(zhuǎn)到BACK CPL P1.2;夠200次,P1.2翻轉(zhuǎn)控制LED閃動一下 MOV R0,#00H;計數(shù)5ms的次數(shù)清0,秒數(shù)加1 INC R1 CJNE R1,#60,BACK;不夠60秒,跳轉(zhuǎn)到BACK MOV R1,#00H;夠60秒,秒數(shù)清0,分

18、鐘加1 INC R2 CJNE R2,#60,BACK;夠60分鐘,跳轉(zhuǎn)到BACK MOV R2,#00H;夠60分鐘,分鐘數(shù)清0,小時數(shù)加1 INC R3 CJNE R3,#24,BACK;夠24小時,跳轉(zhuǎn)到BACK MOVR3,#00H;夠24小時,小時數(shù)清0BACK:RETI;* 按鍵判斷部分 *MODE:MOV A,P3;軟件消抖后再判斷 LCALL DELAY CJNE A,P3,MODE ANL A,#0CH;對S2、S1的值判斷 CJNE A,#00H,LOP1 AJMP T_BACK;模式為00,開T1中斷LOP1:CJNE A,#04H,LOP2 AJMP T_CHANGE;

19、模式為01,進(jìn)行時間調(diào)整LOP2:CJNE A,#08H,LOP3 AJMP A_CHANGE;模式為10,進(jìn)行鬧鈴調(diào)整LOP3:AJMP A_CLOSE;模式為11,關(guān)閉鬧鐘;. 時鐘調(diào)整 .T_CHANGE:LCALL DISPLAY1 LCALL DELAY1 JNB S3,T_HOUR;S3為0,判斷S4T_MIN:MOV R5,40HINC R5;S3為1,分鐘數(shù)加1CJNE R5,#60,LOP4MOV R5,#00HLOP4:MOV 40H,R5 MOV R2,40H AJMPMODET_HOUR:JNB S4,MODE;S4為0,跳轉(zhuǎn)到MODE MOV R5,41H INC R

20、5;S4為,小時數(shù)加1 CJNE R5,#24,LOP5 MOV R5,#00HLOP5:MOV 41H,R5 MOV R3,41H AJMP MODE;. 鬧鈴調(diào)整 .A_CHANGE:LCALL DISPLAY2 LCALL DELAY2 JNB S3,A_HOUR;S3為0,判斷S4A_MIN:MOV R5,42H INC R5;S3為1,分鐘數(shù)加1 CJNE R5,#60,LOP6 MOV R5,#00HLOP6:MOV 42H,R5 AJMPMODEA_HOUR:JNB S4,MODE;S4為0,跳轉(zhuǎn)到MODE MOV R5,43H INC R5;S4為1,小時數(shù)加1 CJNE R5

21、,#24,LOP7 MOV R5,#00HLOP7:MOV 43H,R5 AJMP MODE;. 返回 .T_BACK:SETB ET1;開T1中斷 RETA_CLOSE:CLR ET1;關(guān)T1中斷 RET;* 延時程序 *DELAY:MOV 63H,#5H;約2.78msD5:MOV 64H,#0FFH DJNZ 64H,$ DJNZ 63H,D5 RET;* 延時程序1 *DELAY1:MOV R7,#50HD6:LCALL DISPLAY1 DJNZ R7,D6 RET;* 延時程序2 *DELAY2:MOV R7,#50HD7:LCALL DISPLAY2 DJNZ R7,D7 RET

22、;* 數(shù)碼管顯示的字形表 *TAB1:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H;數(shù)字09,不帶小數(shù)點"dp" DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,10H;數(shù)字09,帶小數(shù)點"dp"* 音樂的節(jié)拍表 *TABLE: DB 82H,01H,81H,94H,84H,0B4H,0A4H,04H DB 82H,01H,81H,94H,84H,0C4H,0B4H,04H DB 82H,01H,81H,0F4H,0D4H,0B4H,0A4H,94H DB 0E2H,01H,

23、0E1H,0D4H,0B4H,0C4H,0B4H,04H DB 82H,01H,81H,94H,84H,0B4H,0A4H,94H DB 0E2H,01H,0E1H,0D4H,0B4H,0C4H,0B4H,04H DB 82H,01H,81H,0F4H,0D4H,0B4H,0A4H,94H DB 0E2H,01H,0E1H,0D4H,0B4H,0C4H,0B4H,04H DB 00H;* 由音樂音符設(shè)置的T1計數(shù)值 *TABLE1:DW 64260,64440,64524,64580,64684,64777,64820,64898;音符計數(shù)值 DW 64968,65030,65058,6511

24、0,65157,65178,65217END七、實驗過程將P1.0、P1.1、P1.3、P1.4、P1.5、P1.6、P3.0、P3.1的跳線接相應(yīng)的A位,P1.7的跳線接相應(yīng)的C位,拔掉其它不用的跳線。插好電源,插好通信線,打開實驗儀電源開關(guān),在實驗上將工作模式開關(guān)SX撥到“LOAD”一檔,按下復(fù)位開頭RESET,然后啟動DPFlash,單擊“編程”,在彈出的窗口中選中“編程MON51”,再按“確定”,就將程序下載到單片機的Flash中。關(guān)閉DPFlash,啟動Keil,新建一個工程,然后選擇芯片(PhilipsP80/P87C52X2)。編寫匯編語言程序,保存并添加至工程中,然后進(jìn)行編譯。將實驗臺上的工作模式開關(guān)SX撥到“MON”位置,按下RESET復(fù)位開關(guān),設(shè)置S0、S1、S3和S4的狀態(tài),再運行程序,撥動S0、S1、S3和S4對應(yīng)的開頭,檢查電子時鐘功

溫馨提示

  • 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

提交評論