課程設(shè)計(jì)名稱:數(shù)字音樂盒
實(shí)驗(yàn)報(bào)告 課程設(shè)計(jì)名稱:數(shù)字音樂盒 課程設(shè)計(jì)單位:自動(dòng)化031班 課設(shè)小組成員:杜斐斐 王薄 單片機(jī)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告 課程設(shè)計(jì)題目:數(shù)字音樂盒 課程設(shè)計(jì)要求:1.利用I/O口產(chǎn)生一定頻率的方波,驅(qū)動(dòng)蜂鳴器,發(fā)出不同的音調(diào),從而演奏樂曲(最少三首樂曲,每首不少于30秒) 2.采用LCD顯示信息 3.開機(jī)時(shí)有英文歡迎提示字符,播放時(shí)顯示歌曲序號(hào)(或名稱) 4.可通過功能鍵選擇樂曲,暫停,播放。 5.選作內(nèi)容:顯示樂曲播放時(shí)間或剩余時(shí)間 硬件電路:本設(shè)計(jì)中用到了98C51單片機(jī),4*4鍵盤,蜂鳴器,16*2 LCD,七段 顯示數(shù)碼管LED。(硬件電路原理圖附于后頁) 原理說明:當(dāng)鍵盤有鍵按下時(shí),判斷鍵值,啟動(dòng)計(jì)數(shù)器T0,產(chǎn)生一定頻率的脈沖,驅(qū)動(dòng)蜂鳴器,放出樂曲。同時(shí)啟動(dòng)定時(shí)器T1,顯示樂曲播放的時(shí)間,并驅(qū)動(dòng)LCD,顯示歌曲號(hào)及播放時(shí)間。也可在LED顯示歌曲號(hào)。 (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ù)碼管位選信號(hào)。 (3) 用,P2.0~P2.2作為LCD的RS,R/W,E的控制信號(hào)。用P0.0~P0.7作為LCD的D0~D7的控制信號(hào)。 (4) 用P3.7口控制蜂鳴器(J2,J4斷開,J3短接)。 (5) 電路為12MHZ晶振頻率工作,起振電路中C1,C2均為30pf。 軟件設(shè)計(jì):本程序可以實(shí)現(xiàn)課程設(shè)計(jì)的基本要求和附加功能,并可以通過按鍵播放七首歌曲。實(shí)驗(yàn)程序如下:
RS BIT P2.0 ;定義液晶顯示端口標(biāo)號(hào) RW BIT P2.1 E BIT P2.2 ;******************************************** L50MS EQU 60H L1MS EQU 61H L250MS EQU 62H SEC EQU 65H MIN EQU 64H HOU EQU 63H ;******************************************* org 0000h ljmp main ORG 000BH LJMP TT0 ORG 001BH LJMP T1INT org 1000h main: ;-----------------------;液晶初始化 MOV SP,#70H MOV P0,#01H ;清屏 CALL ENABLE MOV P0,#38H ;8位,2行顯示 lCALL ENABLE MOV P0,#0FH ;屏顯on,光標(biāo)on,閃爍on lCALL ENABLE MOV P0,#06H ;計(jì)數(shù)地址加1,顯示幕on lCALL ENABLE ;-------------------------------內(nèi)存初始化 lcall initil ;------------------------------- key1: lcall key lcall modd ljmp key1 ;---------------------鍵盤掃描 key: nop nop lcall ks jnz k1 ;有按鍵轉(zhuǎn)到K1 lcall kaiji lcall SOP
xn: ljmp key
k1: lcall modd lcall modd lcall ks jnz k2 ljmp key k2: MOV R2,#0feh ;讀鍵盤 MOV R4,#00h k3: MOV A,R2 MOV P1,A MOV A,P1
JB ACC.4,L1 ;為1跳轉(zhuǎn),第一行無按鍵 MOV a,#00h ljmp lk L1: jb acc.5,L2 MOV a,#04h ljmp lk L2: jb acc.6,L3 MOV a,#08h ljmp lk L3: jb acc.7,next1 MOV a,#0ch ;------------------------------------------------------- lk: add a,R4 push acc k4: lcall delay1 ;若同時(shí)有其他按鍵,則等待 lcall ks jnz k4 ;-------------------------------------------------------- MOV r3,#07h clr a MOV r0,#30h MOV r1,#31h mm1: MOV a,@r1 MOV @r0,a inc r0 inc r1 djnz r3,mm1 pop acc MOV @r0,a RET ;------------------------------------------------------ next1: inc R4 ;------列掃描 MOV a,R2 JNB acc.3,n2 ljmp n1 n2: ljmp key n1: rl a MOV R2,a ljmp k3 ;---------------------------------------------- ks: MOV a,#0f0h ;判斷P1口 MOV P1,a nop nop MOV a,P1 cpl a anl a,#0f0h RET ;-------------------------------------------------- DELAY1: SETB RS0 dl: MOV R5,#0ah dl2: MOV R6,#63 dl3: nop nop djnz R6,dl3 djnz R5,dl2 CLR RS0 RET ;--------------------------------------------------- ;30H-37H初值為零 ;---------------------------------------------------- initil: MOV r3,#08h MOV r0,#30h m1: MOV @r0,#00h inc r0 djnz r3,m1 RET ;---------------------------------------------------- ;顯示 ;--------------------------------------------------- modd: MOV P0,#8EH CALL ENABLE MOV A,37H MOV DPTR,#TABLE3 MOVC A,@A+DPTR CALL WRITE2 RET ;-------------------------------------------------- ;開機(jī)提示字 ;------------------------------------------------- kaiji: MOV a,37h cjne a,#0fh,DFF MOV P0,#80H ;設(shè)光標(biāo)地址 CALL ENABLE MOV DPTR,#TABLE1;寫數(shù)據(jù) CALL WRITE1 DFF: RET ;---------------------------------------------- ;按鍵值播放歌曲 ;---------------------------------------------- SOP: MOV a,37h cjne a,#01h,A11 LCALL MODD MOV 52H,#HIGH TABLE10 MOV 53H,#LOW TABLE10 LCALL INITILE2 lcall MAIN0 A11: CJNE A,#02H,A22 LCALL MODD MOV 52H,#HIGH TABLE20 MOV 53H,#LOW TABLE20 LCALL INITILE2 lcall MAIN0 A22: CJNE A,#03H,A33 LCALL MODD MOV 52H,#HIGH TABLE30 MOV 53H,#LOW TABLE30 LCALL INITILE2 lcall MAIN0 A33: CJNE A,#04H,A44 LCALL MODD MOV 52H,#HIGH TABLE40 MOV 53H,#LOW TABLE40 LCALL INITILE2 lcall MAIN0 A44: CJNE A,#05H,A55 LCALL MODD MOV 52H,#HIGH TABLE50 MOV 53H,#LOW TABLE50 LCALL INITILE2 lcall MAIN0 A55: CJNE A,#06H,A66 LCALL MODD MOV 52H,#HIGH TABLE60 MOV 53H,#LOW TABLE60 LCALL INITILE2 lcall MAIN0 A66: CJNE A,#07H,A77 LCALL MODD MOV 52H,#HIGH TABLE70 MOV 53H,#LOW TABLE70 LCALL INITILE2 lcall MAIN0 A77: CJNE A,#08H,A88 LCALL MODD MOV 52H,#HIGH TABLE80 MOV 53H,#LOW TABLE80 LCALL INITILE2 lcall MAIN0 A88: CJNE A,#09H,A99 LCALL MODD MOV 52H,#HIGH TABLE90 MOV 53H,#LOW TABLE90 LCALL INITILE2 lcall MAIN0 A99: CJNE A,#0AH,AAA LCALL MODD MOV 52H,#HIGH TABLE100 MOV 53H,#LOW TABLE100 LCALL INITILE2 lcall MAIN0 AAA: RET
|
|