|
課程設(shè)計名稱:數(shù)字音樂盒
實(shí)驗(yàn)報告 課程設(shè)計名稱:數(shù)字音樂盒 課程設(shè)計單位:自動化031班 課設(shè)小組成員:杜斐斐 王薄 單片機(jī)課程設(shè)計實(shí)驗(yàn)報告 課程設(shè)計題目:數(shù)字音樂盒 課程設(shè)計要求:1.利用I/O口產(chǎn)生一定頻率的方波,驅(qū)動蜂鳴器,發(fā)出不同的音調(diào),從而演奏樂曲(最少三首樂曲,每首不少于30秒) 2.采用LCD顯示信息 3.開機(jī)時有英文歡迎提示字符,播放時顯示歌曲序號(或名稱) 4.可通過功能鍵選擇樂曲,暫停,播放。 5.選作內(nèi)容:顯示樂曲播放時間或剩余時間 硬件電路:本設(shè)計中用到了98C51單片機(jī),4*4鍵盤,蜂鳴器,16*2 LCD,七段 顯示數(shù)碼管LED。(硬件電路原理圖附于后頁) 原理說明:當(dāng)鍵盤有鍵按下時,判斷鍵值,啟動計數(shù)器T0,產(chǎn)生一定頻率的脈沖,驅(qū)動蜂鳴器,放出樂曲。同時啟動定時器T1,顯示樂曲播放的時間,并驅(qū)動LCD,顯示歌曲號及播放時間。也可在LED顯示歌曲號。 (1) 硬件電路中用P1.0~P1.7控制按鍵,其中P1.0~P1.3掃描行,P1.4~P1.7掃描列。 (2) 用P0.0~P0.7,P2.0~P2.7控制LED,其中P0.0~P0.7控制七段碼a,b,c,d,e,f,g,用P2.0~P2.7為數(shù)碼管位選信號。 (3) 用,P2.0~P2.2作為LCD的RS,R/W,E的控制信號。用P0.0~P0.7作為LCD的D0~D7的控制信號。 (4) 用P3.7口控制蜂鳴器(J2,J4斷開,J3短接)。 (5) 電路為12MHZ晶振頻率工作,起振電路中C1,C2均為30pf。 軟件設(shè)計:本程序可以實(shí)現(xiàn)課程設(shè)計的基本要求和附加功能,并可以通過按鍵播放七首歌曲。實(shí)驗(yàn)程序如下:
;****************************************** ;播放歌曲程序 ;--------------------------------------------------------------------
MAIN0: MOV TMOD,#11H MOV IE,#8aH ;MOV TH1, #3cH ;MOV TL1, #0b0H lcall ks jnz TTM12 MOV 40H,#00H ;--------------------------------------------------------- NEXT20: MOV A,40H MOV DPH,52H MOV DPL,53H MOVC A,@A+DPTR MOV R2,A JZ STOP ANL A,#0FH MOV R1,A MOV A,R2 SWAP A ANL A,#0FH JNZ SING CLR TR0 JMP W1 ;---------------------------------------------------------- SING: DEC A MOV 22H,A RL A MOV DPTR,#TABLE00 MOVC A,@A+DPTR MOV TH0,A MOV 21H,A MOV A,22H RL A INC A MOVC A,@A+DPTR MOV TL0,A MOV 20H,A SETB TR0 SETB TR1 W1: LCALL DELAY30 INC 40H LCALL KS ;------有鍵跳出 JNZ STOP LJMP NEXT20 ;----------------------------------------------------------- STOP: CLR TR0 CLR TR1 LJMP MAIN0 ;---------------------------------------------------------- TTM12: LCALL K2 MOV A,37H CJNE A,#0EH,TTM13 CLR TR1 LCALL DELAY1 TTM120: LCALL KS LCALL DELAY1 JZ TTM120 LCALL K2 MOV A,37H CJNE A,#0EH,TTM120 SETB TR1 LJMP NEXT20 TTM13: CJNE A,#0CH,TTM14 MOV A,52H INC A MOV 52H,A MOV A,53H INC A MOV 53H,A MOV A,36H INC A MOV 37H,A LJMP TTM2 TTM14: CJNE A,#0DH,TTM2 MOV A,52H DEC A MOV 52H,A MOV A,53H DEC A MOV 53H,A MOV A,36H DEC A MOV 37H,A ;------------------------------------------------------ TTM2: RET ;*************************************************** ;定時器中斷子程序0 ;***************************************************
TT0: PUSH ACC PUSH PSW MOV TL0,20H MOV TH0,21H CPL P3.7 POP PSW POP ACC RETI ;*************************************************** ;定時器中斷子程序1 ;*************************************************** T1INT: MOV TH1, #3cH MOV TL1, #0b0H
DJNZ L50MS,X4 MOV L50MS,#20
;****************---每秒種時鐘刷新秒顯示一次 SECSET: MOV A,SEC
MOV B,#10 DIV AB ADD A,#30H
MOV P0,#0CEH ;顯示秒十位 CALL ENABLE CALL WRITE2
MOV A,B ADD A,#30H MOV P0,#0CFH ;顯示秒個位 CALL ENABLE CALL WRITE2
MOV A,SEC INC A MOV SEC,A
XRL A,#60 X4: JNZ OUT
MINSET: MOV SEC,#00H ;*************************************每分鐘刷新分顯示一次 MOV A,MIN INC A MOV MIN,A
MOV B,#10 DIV AB ADD A,#30H
MOV P0,#0CBH ;顯示分十位 CALL ENABLE CALL WRITE2
MOV A,B ADD A,#30H MOV P0,#0CCH ;顯示分個位 CALL ENABLE CALL WRITE2
MOV A,MIN MOV B,#3 MUL AB
MOV B,#100 DIV AB MOV R2,A MOV A,#10 XCH A,B DIV AB
MOV A,MIN XRL A,#60 JNZ OUT HOUSET: MOV MIN,#00H ;**************************************每小時刷新小時顯示一次 MOV A,HOU MOV B,#10 DIV AB ADD A,#30H ;將BCD嗎轉(zhuǎn)化為ASIIC碼
MOV P0,#0C8H ;顯示小時十位 CALL ENABLE CALL WRITE2
MOV A,B ADD A,#30H MOV P0,#0C9H ;顯示小時個位 CALL ENABLE CALL WRITE2
MOV A,HOU INC A MOV HOU,A XRL A,#10 JNZ OUT SJMP OVERFLOW OUT: RETI ;*************************************溢出處理 OVERFLOW: MOV L50MS,#20 MOV L1MS,#00H MOV L250MS,#00H MOV SEC,#00H MOV MIN,#00H MOV HOU,#00H RETI ;-------------------------------------------------------------------- DELAY30: MOV R7,#2 W2: MOV R4,#125 W3: MOV R3,#248 DJNZ R3,$ DJNZ R4,W3 DJNZ R7,W2 DJNZ R1,DELAY30 RET ;-------------------------------------------------------------------- TABLE00: DW 64580,64684,64777,64820 DW 64898,64968,65030,64260 DW 64400,64524,65058,63835,64021 ;--------------------------------------------------------------------
|