單片機設計-八音盒_第1頁
單片機設計-八音盒_第2頁
單片機設計-八音盒_第3頁
單片機設計-八音盒_第4頁
單片機設計-八音盒_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

8051八音盒課程設計任務書8051八音盒本設計利用8051單片機結合內部定時器LCD設計一個八音盒,按下單鍵可以演奏預先設置的歌曲旋律。本設計可以學習8051定時器程序設計,按鍵掃描及歌曲旋律簡單直覺式輸入法的設計方法。其基本功能為:1使用LCD顯示器來顯示目前演奏的歌曲編號;2具有16個按鍵操作來選擇演奏哪一首歌曲;3內建10首歌曲旋律,按下單鍵可以演奏歌曲;4演奏時可以按鍵中斷。程序執(zhí)行后工作指示LED閃動,表示程序開始執(zhí)行,按下單鍵0~9便可以演奏歌曲,歌曲演奏中,可以按鍵中斷。設計項目簡介設計思路:選擇8051單片機,通過T0定時中斷,并配合P3.0引腳輸出音頻頻率。P3.0引腳輸出接揚聲器。通過P3.4引腳接入中斷按鍵,進行中斷通過P0接8155外擴端口。通過8155PA口接LCD驅動電路芯片,再接顯示器。8155的PB,PC口接鍵盤,輸入歌曲號。音符產生方法:不同的音調有不同的頻率。頻率不同,音調也就不同。利用定時器,使其工作在模式1,定時中斷,然后控制P3.0引腳的輸出每次取反,就可以在P3.0的引腳輸出相應的方波頻率。改變計數(shù)初值,就改變了頻率。定時器的定時時間等于半個周期,定時時間到就輸出脈沖取反,重復此過程,就可在P3.0引腳得到一音頻的脈沖。如:中音1的頻率=523HZ,周期T=1/523=1912us;定時器的定時時間為:T/2=1912/2us=956us;計算得TH0,TL0的計數(shù)初值THTL=64580下面是個音符計數(shù)初值音符THTL音符編碼低音50F66FH1低音60F724H2低音70F81BH3中音10F88FH4中音20F95EH5中音30FA17H6中音40FA6BH7中音50FB08H8中音60FB92H9中音70FC0EHA高音10FC4BHB高音20FCAFHC高音30FD0CHD高音40FD36HE高音50FD84HF節(jié)拍產生方法:音樂中的節(jié)拍用延時時間產生。假設1/4拍執(zhí)行一次延時程序,這1/2拍就執(zhí)行兩次延時程序,所以只要求出1/4延時時間,其余的節(jié)拍就是他的倍數(shù)。為方便記譜,將節(jié)拍數(shù)也進行編碼,如下:節(jié)拍編碼節(jié)拍11/421/233/441建立曲譜編碼表:編譜用8位編碼,高4位代表音符,低4位代表節(jié)拍。如56中音5,中音6,都是1/2拍,則編碼為:82H92H電路原理圖:系統(tǒng)功能簡介:8051八音盒具有4乘4鍵盤,由于選歌旋律。有LCD顯示,顯示當前正在播放的旋律。有中斷按鍵,在單片機播放旋律時可以按中斷暫停,再選歌曲旋律。有LED指示,其隨旋律的節(jié)拍而變化。程序框圖:程序清單: ORG0000H SJMPMAIN ORG0100HMAIN:SETBEA SETBEX1 ;開外部中斷int0 MOVDPTR,#8000H MOVA,#30H MOVX@DPTR,A ;令8155a,b為輸出,c為輸入 MOVR7,#0BH ACALLSCREEN ;顯示器初始化為00DISPLAY:ACALLSCAN ;掃描鍵盤 ACALLSCREEN ;lcd顯示 CJNER7,#0FFH,NEXT ;判斷中斷是否選中曲目 SJMPDISPLAY ;沒選中,即無按鍵 NEXT:ACALLMUSIC ;選中曲目在r7中CLRR7 SJMPMAIN ;再次掃描 END ORG0200H ;scan子程序SCAN:MOVDPTR,#8002H ;dptr指向b口 MOVA,#00H MOVX@DPTR,A ;使b口輸出低電平 MOVDPTR,#8003H ;dptr指向pc口 MOVXA,@DPTR ;讀pc口狀態(tài) ANLA,#0FH ;屏蔽高4位 CJNEA,#0FH ;若有鍵按下,則keyscan SJMPEXIT ;無鍵按下,則exitKEYSCAN:ACALLDY12MS ;延時12ms去抖動 MOVR2,#0EH ;列掃描始值給r2 MOVR3,#04H ;列數(shù)4給r3 MOVR0,#00H ;列計算器清零KEYSM1:MOVA,R2 MOVDPTR,#8002H ;dptr指向pb口 MOVX@DPTR,A ;列掃描 RLA MOVR2,A ;列掃描左移一位 MOVDPTR,#8003H ;dptr指向pc口 MOVXA,@DPTR ;讀pc口行值 ANLA,#0FH ;屏蔽高4位 CJNEA,#0FH,JSADD ;若按鍵在本列,則jsadd INCR0 ;不在本列,r0加1 DJNER3,KEYSM1 ;未掃描完一遍,掃描下一列EXIT:MOVA,#0FFH ;若無按鍵按下,則a未全1 MOVR7,A SJMPDONEJSADD:JBACC.0,JSADD1 ;按鍵不在l0行,則jsdaa1 MOVA,#00H ;按鍵在l0行,行首鍵號00h送a AJMPJSADD4JSADD1:JBACC.1,JSADD2 MOVA,#04H AJMPJSADD4JSADD2:JBACC.2,JSADD3 MOVA,#08H AJMPJSADD4JSADD3:JBACC.3,JSADD4 MOVA,#0CHJSADD4:ADDA,R0 ;行首鍵號+列值送a MOVDPTR,#KEYTAB ;dptr指向鍵值表 MOVCA,@A+DPTR ;查表得鍵值送a MOVR7,ADONE:RETKEYTAB:DB01H,02H,03H,04H DB05H,06H,07H,08HDB09H,0AH,0FFH,0FFHDB0FFH,0FFH,0FFH,0FFHDY12MS:MOVR5,#18HDY12MS1:MOVR6,#0FFHDY12MS2:DJNZR6,DY12MS2DJNZR7,DY12MS1 RET ORG0300H ;screen子程序SCREEN:CJNER7,#0FFH,GO SJMPOVERGO:DECR7 MOVA,R7 MOVDPTR,#GW ;個位顯示首地址送dptr MOVCA,@A+DPTR ;查個位顯示數(shù)值 MOVDPTR,#8001H ;dptr指向pa口 MOVXDPTR,A ;顯示個位 ACALLTIME ;延時2ms MOVA,R7 MOVDPTR,#SW ;十位顯示首地址送dptr MOVCA,@A+DPTR MOVDPTR,#8001H MOVXDPTR,A ACALLTIME INCR7OVER:RETGW:DB11H,21H,31H,41H,51HDB61H,71H,81H,91H,01H,01HSW:DB02H,02H,02H,02H,02HDB02H,02H,02H,02H,12H,02HTIME:MOVR5,#04HTM2:MOVR6,#0FFHTM1:DJNZR6,TM1 DJNZT5,TM2 RET ORG0400H ;music子程序MUSIC:MOVTMOD,#01H ;設t0工作方式1 MOVIE,#82H ;開t0中斷 MOV30H,#00HNEXT0:CJNER7,#01H,Q2 ;判斷r7的值,若不是此值,則r2 MOVDPTR,#MUSIC1 ;若是此值,將相應旋律首地址送dptr AJMPR11Q2:CJNER7,#02H,Q3 MOVDPTR,#MUSIC2 AJMPR11Q3:CJNER7,#03H,Q4 MOVDPTR,#MUSIC3 AJMPR11Q4:CJNER7,#04H,Q5 MOVDPTR,#MUSIC4 AJMPR11Q5:CJNER7,#05H,Q6 MOVDPTR,#MUSIC5 AJMPR11Q6:CJNER7,#06H,Q7 MOVDPTR,#MUSIC6 AJMPR11Q7:CJNER7,#07H,Q8 MOVDPTR,#MUSIC7 AJMPR11Q8:CJNER7,#08H,Q9 MOVDPTR,#MUSIC8 AJMPR11Q9:CJNER7,#09H,Q10 MOVDPTR,#MUSIC9 AJMPR11Q10:CJNER7,#010H,Q11 MOVDPTR,#MUSIC10Q11:MOVA,30H MOVCA,@A+DPTR ;取旋律編碼 MOVR2,A CJNEA,#00H,NEXT1 CLRTR0 RETNEXT1:MOVA,R2 ANLA,#0FH ;取節(jié)拍(低4位) MOVR5,A ;取節(jié)拍時間存入r5 MOVA,R2 SWAPA ANLA,#0FH ;取音頻值(高4位) JNZA,SING ;判斷音頻值是否是0,是0則不發(fā)音 CLRTR0 SJMPD1SING:DECA MOVDPTR,#TABLEH ;定時器初值高8位首地址送dptr MOVCA,@A+DPTR ;查高8位初值 MOV21H,A ;高8位初值存(21h) MOVTH0,A ;裝高8位初值 MOVDPTR,#TABLEL ;定時器初值低8位首地址送dptr MOVCA,@A+DPTR MOV20H,A MOVTL0,A SETBET0 ;開定時器中斷 SETBTR0 ;定時器開始計時D1:LCALLDELAY CLRTR0 INC30H ;取旋律簡譜碼指針加1 SJMPNEXT0DELAY:MOVR6,#03 ;延時程序D2:MOVR4,#250D3:MOVR3,#50HD30:DJNZR3,D30 DJNZR4,D3 DJNZR6,D2 DJNZR5,DELAY CPLP3.1 RET ORG000BH LJMPTOSEV ORG0500HTOSEV:PUSHACC ;保護現(xiàn)場 PUSHPSW CLRTR0 MOVTL0,20H ;重裝計數(shù)初值 MOVTH0,21H CPLP3.0 ;將p3.0位取反輸出,產生音頻方波 POPPSW POPACC SETBTR0 RETITABLEH:DB0F6H,0F7H,0F8H,0F8HDB0F9H,0FAH,0FAH,0FBHDB0FBH,0FCH,0FCH,0FCHDB0FDH,0FDH,0FDHTABLEL:DB6FH,24H,1BH,8FHDB5EH,17H,6BH,08HDB92H,0EH,4BH,0AFHDB0CH,36H,84HMUSIC1:DB82H,01H,81H,94H,84H,0B4H,0A4H,04HDB82H,01H,81H,94H,84H,0C4H,0B4H,04HDB82H,0

溫馨提示

  • 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

提交評論