片機及DSP課程設計報告_第1頁
片機及DSP課程設計報告_第2頁
片機及DSP課程設計報告_第3頁
片機及DSP課程設計報告_第4頁
片機及DSP課程設計報告_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、一、課設目的1、通過本設計,能綜合運用單片機技術原理與應用、DSP原理與應用C語言程序設計以及數(shù)字電路、模擬電路等課程的內容,為以后從事電子產品設計、軟件編程、系統(tǒng)控制等工作奠定一定的基礎。2、學會使用KEIL C和PROTEUS等軟件,用C語言或匯編語言編寫一個較完整的實用程序,并仿真運行,保證設計的正確性。3、了解單片機接口應用開發(fā)的全過程:分析需求、設計原理圖、選用元器件、布線、編程、調試、撰寫報告等。二、課設內容 設計一個基于單片機的音樂播放器,在播放音樂的同時并能顯示播放的歌曲序號,同時可以實現(xiàn)上一曲、下一曲的轉換;在播放的同時,還能實現(xiàn)暫停開始的功能。3、 問題分析、方案的提出、設

2、計思路及原因 要想使播放器發(fā)出響聲,就得設計一個能產生聲響的程序,讓單片機輸出到揚聲器。音調的高低用音階表示,不同的音階對應不同的頻率。因此,不同頻率的方波就可以產生音階。由于頻率的倒數(shù)是周期,因此可由單片機中的定時控制方波周期,當定時器計數(shù)溢出時產生中斷。將與揚聲器連接就可得到方波的周期,從而達到了控制頻率,即音階的目的。通過TXAL1 與TXAL2輸入時鐘信號,通過p1.0p1.7輸出控制現(xiàn)實控制信號顯示,有p3.2、p3.3與p3.5分別作為上一曲、下一曲和開始暫停的控制輸入。顯示電路是一個8位共陰極LED數(shù)碼管。 單片機的P0.0-P0.7分別與數(shù)碼管的A、B、C、D、E、F、G、DP

3、相連接。晶振電路由兩個1nF的電容和一個6Mhz的晶體振蕩器組成。節(jié)點1與單片機的XTAL2相連接,節(jié)點2與單片機的XTAL1相連接,從而為單片機提供時間信號,為音樂的播放節(jié)拍控制提供基本時間單位:當晶體振蕩頻率為6.MHz,定時器工作在方式1下時,若各音階相對應的定時器計數(shù)初值為X,則可根據(jù)下式計算X:控制電路,鍵一與p3.2相連、鍵二與p3.3相連、鍵3與p3.5相連。當電鍵按下時接口接低電平,從而實現(xiàn)對音樂播放器的控制。鍵一聯(lián)通實現(xiàn)上一曲更換,鍵發(fā)聲電路由數(shù)字揚聲器連接p2.0接口實現(xiàn)音樂的輸出,由控制電路發(fā)出操作指令后,單片機調用相應程序,并將音樂信號由p2.0口輸出,通過驅動揚聲器發(fā)

4、出美妙的音樂。二聯(lián)通實現(xiàn)下一曲更換,鍵三聯(lián)通實現(xiàn)開始暫停操作。四、電路設計及功能說明,硬件原理框圖及電路圖 AT89C51是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲器的低電壓,高性能CMOS 8位微處理器,俗稱單片機??傇韴D51單片機顯示電路電源電路鍵控電路復位電路晶振電路發(fā)聲電路時鐘電路與振蕩器共同產生單片機所需的工作時鐘信號功能選擇電路實現(xiàn)播放器的功能操作顯示電路實現(xiàn)單片機的信息顯示功能開始4、 軟件部分的程序流程圖,算法和使用的編程技巧;初始化查詢歌曲曲目上一曲、下一曲數(shù)碼管顯示暫停、播放等待播放關閉顯示播放音樂判斷是否結束?否 是結束1、總體思路主程序實現(xiàn)對單片機進行初始化后,進入曲目

5、識別子程序,進行歌曲曲目判斷。確定歌曲曲目后,數(shù)碼管再進行顯示。然后,子程序對是否播放進行循環(huán)判斷,得到播放中斷的指令后再進行播放。執(zhí)行播放后,關閉數(shù)碼管顯示并調用查表子程序進行播放音樂。在播放音樂的過程中,查表子程序循環(huán)判斷音樂是否結束。當音樂結束時,程序跳轉回曲目識別子程序。5、 源程序清單OUT BIT P2.0 ;定義音頻輸出端口,p2.0N EQU 3;歌曲總數(shù)OUT_NUM EQU P1;數(shù)碼管顯視當前所放歌曲曲數(shù) ORG 0000H AJMP MAIN ORG 0003H AJMP LAST_SONG ;外部中斷0用于接上一曲歌按鍵 ORG 000BH AJMP F_T0 ;定時

6、器0用于定時,作音符發(fā)生器用 ORG 0013Hq4: AJMP NEXT_SONG ;外部中斷1接下一曲歌按鍵 ORG 001BH AJMP START_PAUSE ;定時器1用計數(shù),這里用作中斷,接開始/暫停鍵,初值為0ffH,方式2 ORG 0030HMAIN: MOV SP,#60H MOV DPTR,#TABLE ;DPRT指向每首歌曲的入口地址的地址。 MOV R0,#30H ;R0中存入數(shù)據(jù)30H,這里在以30H開始的單元存放每首歌曲的入口地址,其中30H,31H存放歌曲的節(jié)拍入口地址,32H,33H存放歌曲音符入口地址,每首歌占用四個存儲存單元。 MOV R5,#00H ;R5

7、中存放表TABLE中正在執(zhí)行操作的序號 MOV R6,#1 ;R6存放正在設置入口信息的歌曲數(shù)SET_TAB: MOV A,R5 ;設置每首歌曲的入口信息,存放在以30H開始的存儲單元中。 MOVC A,A+DPTR MOV R0,A INC R5 INC R0 MOV A,R5 MOVC A,A+DPTR MOV R0,A INC R5 INC R0 MOV A,R5 MOVC A,A+DPTR MOV R0,A INC R0 INC R5 MOV A,R5 MOVC A,A+DPTR MOV R0,A INC R0 INC R5 INC R6 ;設置完一首歌曲后,歌曲數(shù)加一 CJNE R6

8、,#N+1,SET_TAB ;是否設置完,沒有便繼續(xù),否則進行下面的操作 ;* 對中斷,計數(shù)器的相關參數(shù)進行設置 MOV TMOD, #61H ;計數(shù)器0工作方式1,計數(shù)器1工作方式2 MOV TH1,#0FFH ;給計數(shù)器1置初值0FFH,又由于是工作方式2,所以 MOV TL1,#0FFH ;計數(shù)器計數(shù)為1,相當于一外部中斷。 SETB ET1 ;允許計數(shù)器1中斷 SETB ET0 ;允許計數(shù)器具0中斷 CLR PT0 ;計數(shù)器0為低優(yōu)先級 SETB PT1 ;計數(shù)器1為高優(yōu)先級 SETB IT0 ;外部中斷0為跳沿觸發(fā) SETB PX0 ;高優(yōu)先級 SETB IT1 ;外部中斷1為跳沿觸

9、發(fā) SETB PX1 ;高優(yōu)先級 SETB EX1 ;允許外部中斷1中斷 SETB EX0 ;允許外部中斷定0中斷 SETB EA ;開中斷總開關 SETB TR1 ;定時器1開始工作,作中斷用 SETB OUT ;音頻輸出端口初始化 ;* ;設置結束 CLR F0 ;設置F0=0,用來作暫停/播放的標置位用 MOV 22H,#01H ;22H單元中存放正在播放的歌曲編號 MOV DPTR,#OUT_TAB ;將正在播放的歌曲編號送數(shù)碼管顯視 MOV A,22H MOVC A,A+DPTR MOV OUT_NUM,A MOV R7,#00H ;R7中存放歌曲總信息的入口地址 START0:MO

10、V R4,#00H ;R4存放當前正在播放歌曲的第幾個節(jié)拍數(shù) MOV R0,#30H ;30H開始的單元中存放歌曲的入口信息 MOV A,R7 ;將歌曲的節(jié)拍表的入口地址送到DPTR ADD A,R0 MOV R0,A MOV DPH,R0 INC R0 MOV DPL,R0 INC R0 MOV A,R4 INC R4 MOVC A,A+DPTR ;取出第一節(jié)拍數(shù),其實第一個節(jié)拍不是歌曲的第一個節(jié)拍,而是表示幾分音符 ;* MOV 26H,A ;將取出的音符數(shù)+節(jié)拍數(shù)保存在職26H單元中NEXT: MOV R0,#30H ;開始取出歌曲的第一個數(shù)據(jù) MOV A,R7 ADD A,R0 MOV

11、 R0,A MOV DPH,R0 INC R0 MOV DPL,R0 INC R0 MOV A,R4 INC R4 MOVC A,A+DPTR ;放在A中;* JZ END0 ;若為0,則表示為休止符,不唱,本次音符不唱, MOV R1,A ;不為0,取出節(jié)拍數(shù) ANL A,#0FH MOV R2,A MOV A,R1 SWAP A ANL A,#0FH JNZ SING ;音符不為0,唱 CLR TR0 ;為0,不唱,關頻率發(fā)生器 SJMP SING1 SING: DEC A ;開始唱,進行相應的數(shù)據(jù)處理 MOV R3,A RL A MOV DPH,R0 INC R0 MOV DPL,R0

12、INC R0 MOVC A,A+DPTR MOV 21H,A MOV TH0,A MOV A,R3 RL A INC A MOVC A,A+DPTR MOV 20H,A MOV TL0,A SETB TR0 ;開唱SING1:LCALL DELAY ;每個音符唱多久 JB F0,FOR ;是否暫停, AJMP NEXT ;沒有暫停,繼續(xù)FOR: CLR TR0 ;暫停,不唱 JB F0,$ ;等待播放 AJMP NEXT ;開始播放END0: CLR TR0 ;不唱 MOV A,22H ;唱完處理 CJNE A,#N,WW ;是不是全部歌曲都唱完 MOV 22H,#01H ;全部唱完,則從第一

13、首開始再唱 MOV R7,#00H MOV OUT_NUM,#06H ;數(shù)碼管顯視第一首歌曲編號 AJMP WWWWW: MOV A,R7 ;沒有全部唱完,唱下一首,歌曲的入口信息調整 ADD A,#4 MOV R7,A INC 22H CLR EA PUSH DPH PUSH DPL MOV A,22H MOV DPTR,#OUT_TAB MOVC A,A+DPTR MOV OUT_NUM,A ;數(shù)碼管顯視相應的歌曲編號 POP DPL POP DPHWWW: SETB EA AJMP START0 ;開始下一首的演唱F_T0: MOV TH0,21H ;定時器0置初值 MOV TL0,20

14、H CPL OUT ;頻率產生 RETINEXT_SONG: PUSH ACC ;下一曲中斷程序處理,保護現(xiàn)場 PUSH DPH PUSH DPL CLR EA ;關中斷 MOV A,22H CJNE A,#N,Q ;是最后一首嗎? MOV R7,#00H ;是最后一首,則R7指向第一首,演唱第一首 MOV 22H,#01H AJMP BACK Q: INC 22H ;不是最后一首,唱下一首,R7內容加4,歌曲數(shù)加1 MOV A,R7 ADD A,#4 MOV R7,ABACK: MOV R4,#00H ;數(shù)碼管顯視相應的歌曲編號 MOV A,22H MOV DPTR,#OUT_TAB MOV

15、C A,A+DPTR MOV OUT_NUM,A;* MOV B,R0 ;對下首要演唱的歌曲的幾分拍進行調整,同時對R0中的內容進行保護 MOV R4,#00H MOV R0,#30H MOV A,R7 ADD A,R0 MOV R0,A MOV DPH,R0 INC R0 MOV DPL,R0 INC R0 MOV A,R4 INC R4 MOVC A,A+DPTR MOV 26H,A ;結果存入26H單元中 DEC R4 MOV R0,B ;恢復R0中的內容;* POP DPL ;恢復現(xiàn)場 POP DPH POP ACC SETB EA RETI ;中斷返回LAST_SONG: PUSH

16、ACC ;上一曲中斷程序處理開始,保護現(xiàn)場 PUSH DPH PUSH DPL CLR EA ;關中斷 MOV A,22H ;曲目數(shù)送A CJNE A,#1,QQ ;是否是第一首 MOV 22H,#N ;是第一首歌曲 MOV B,#4 ;將R7指向最后一首歌曲 MOV A,#N-1 MUL AB MOV R7,A AJMP BACK2 ;處理結束QQ: DEC 22H MOV A,R7 ;R7減4 SUBB A,#4 MOV R7,ABACK2: MOV R4,#00H MOV A,22H MOV DPTR,#OUT_TAB MOVC A,A+DPTR MOV OUT_NUM,A ;數(shù)碼管顯視

17、相應歌曲的編號;* MOV B,R0;對下首要演唱的歌曲的幾分拍進行調整,同時對R0中的內容進行保護 MOV R4,#00H MOV R0,#30H MOV A,R7 ADD A,R0 MOV R0,A MOV DPH,R0 INC R0 MOV DPL,R0 INC R0 MOV A,R4 INC R4 MOVC A,A+DPTR MOV 26H,A ;結果存入26H單元中 DEC R4 MOV R0,B;R0中的內容恢復;* POP DPL ;恢復現(xiàn)場 POP DPH POP ACC SETB EA RETI ;中斷返回START_PAUSE:CPL F0 ;開始/暫停中斷處理程序,將標置

18、位取反 JB F0,RETURN ;為1返回 SETB TR0 ;為0則播放RETURN: RETI ;中斷返回DELAY: MOV 27H,26H ;音符演奏時間控制D2: MOV 28H,#125D3: MOV 29H,#248 DJNZ 29H,$ DJNZ 28H,D3 DJNZ 27H,D2 DJNZ R2,DELAY RETOUT_TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H,73H ;共陰數(shù)碼管顯視用;OUT_TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,8

19、2H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0FFH ;共陽TABLE: DW SONG1,TABLE1,SONG2,TABLE2,SONG3,TABLE3TABLE1:DW 64580,64684,64777,64820,64898,64968,65030 DW 63628,63835,64021,64103,64260,64400,64524SONG1: DB 04H ;1=C 2/4 軍港之夜DB 32H,54H,52H,32H,54H,52H,32H,12H,12H,32H,32H,54H,52H,32H,52H,52H,32H,32H,21H,

20、31H,24H,0E2H,0D1H,0E1H,0D2H,0C2H,14H,14HDB 0C2H,32H,32H,12H,21H,31H,24H,32H,34H,0D2H,0C2H,14H,14H,32H,52H,52H,32H,52H,54H,32H,34H,31H,21H,12H,24H,24HDB 34H,0E2H,0C2H,0D1H,0E1H,0D4H,12H,0E2H,32H,32H,0E2H,0D1H,0E1H,0D4H,0D2H,0E2H,32H,32H,0E2H,0E2H,0D1H,0E1H,0D4HDB 22H,0D1H,11H,0E2H,0D2H,0C4H,0C4H,32H,

21、52H,52H,32H,62H,5H,61H,54H,31H,52H,31H,12H,31H,31H,32H,54H,52H,32H,52H,52H,32HDB 32H,21H,31H,24H,0E2H,0D1H,0E1H,0D2H,0C2H,34H,34H,32H,52H,52,32H,62H,51H,61H,54H,31H,52H,31H,12H,32H,12H,32H,32H,54H,52HDB 32H,52H,52H,31H,31H,32H,21H,31H,24H,0E2H,0D1H,0E1H,0D2H,0C2H,14H,14HDB 32H,52H,52H,32H,32H,21H,31

22、H,24H,0E2H,0D1H,0E1H,0D2H,0C2H,14H,14HDB 0C2H,32H,32H,12H,21H,31H,24H,32H,34H,0D2H,0C2H,14H,14H,32H,52H,52H,32H,52H,54H,32H,34H,31H,21H,12H,24H,24HDB 34H,0E2H,0C2H,0D1H,0E1H,0D4H,12H,0E2H,32H,32H,0E2H,0D1H,0E1H,0D4H,0D2H,0E2H,32H,32H,0E2H,0E2H,0D1H,0E1H,0D4HDB 22H,0D1H,11H,0E2H,0D2H,0C4H,0C4H,32H,52

23、H,52H,32H,62H,5H,61H,54H,31H,52H,31H,12H,31H,31H,32H,54H,52H,32H,52H,52H,32HDB 32H,21H,31H,24H,0E2H,0D1H,0E1H,0D2H,0C2H,34H,34H,32H,52H,52,32H,62H,51H,61H,54H,31H,52H,31H,12H,32H,12H,32H,32H,54H,52HDB 32H,52H,52H,31H,31H,32H,21H,31H,24H,0E2H,0D1H,0E1H,0D2H,0C2H,14H,14HDB 32H,52H,52H,32H,32H,21H,31H,

24、24H,74H,0D2H,0C2H,14H,14H,14H,14HDB 00HTABLE2:DW 63835,64021,64103,64260,64400,64524,64580,64684,64777 DW 64820,64898,64968,65030,65058,65110,65157,65178SONG2: DB 02H;1=C 4/4 死了都要愛DB 04H,94HDB 0E8H,0E4H,0E4H,0E8H,0E4H,0F4H,0D4H,0C4H,0B4H,84H,84H,92H,92H,94H,92H,02HDB 0A4H,0A2H,0B2H,0B4H,0C4H,84H,82H

25、,92H,94H,0A4HDB 04H,0C2H,0C2H,0D4H,0C2H,0D2H,0D8H,0D4H,0D2H,92HDB 0E8H,0E4H,0E4H,0E8H,0E4H,0F4H,0D4H,0C4H,0B4H,84H,84H,92H,92H,94H,92H,02HDB 0A4H,0A2H,0B2H,0B4H,0C4H,0E8H,0D8HDB 0C8H,0C8H,08H,08H,78H,28H,38H,34H,24HDB 24H,64H,64H,24H,64H,72H,72H,78H,58H,54H,44H,38H,34H,14H,34H,84H,74H,74H,62H,62H,0D

26、8H,78H,28H,38H,34H,24HDB 24H,64H,64H,24H,64H,72H,72H,72H,94H,92H,94H,0A4H,58H,58H,54H,44H ;#音不準DB 58H,58H,58H,58H,0A8H,0A8H,0A4H,0B4H,0A4H,84H,0A4H,94H,98H,98H,08HDB 84H,82H,82H,82H,82H,94H,0A2H,94H,92H,82H,74H,72H,74H,72H,72H,72H,72H,92H,91H,91H,94H,54H,74H,94H;*DB 0A8H,0A4H,0A2H,0B2H,0C4H,0B4H,0A4

27、H,0A4H,0A4H,92H,92H,98H,82H,72H,78H,04H,0A4H,0A2H,0B2H,0B4H,0C4H,84H,82H,92H,94H,0A4HDB 04H,0C4H,0D4H,0C4H,0C8H,04H,94HDB 0E8H,0E4H,0E4H,0E8H,0E4H,0F4H,0D4H,0C4H,0B4H,84H,84H,92H,92H,94H,92H,02DB 0A4H,0A2H,0B2H,0B4H,0C4H,84H,82H,92H,94H,0A4H,04H,0C2H,0C2H,0D4H,0D8H,0D4H,0D2H,92HDB 0E8H,0E4H,0E4H,0E8

28、H,0E4H,0F4H,0D4H,0C4H,0B4H,84H,84H,92H,92H,94H,92H,02DB 0A4H,0A2H,0B2H,0B4H,0C4H,84H,82H,92H,94H,0A4H,04H,0C2H,0C2H,0D4H,0D8H,0D4H,0D2H,92H;*DB 0A4H,0A2H,0B2H,0B3H,0C4H,0E8H,0D8HDB 0C8H,0C8H,0C8H,08HDB 00H TABLE3: DW 64898,64968,65030,65086,65135,65158,65199,64260,64400,64524,64580,64684,64777,64862

29、 SONG3: DB 03H ;G=2/4 中華人民共和國國歌DB 04H,04H,0C2H,14H,12H,12H,12H,11H,11H,0C2H,0D1H,0E1H,14H,14H,02H,32H,12H,21H,31H,52H,51H,51H,54HDB 32H,31H,31H,12H,11H,31H,52H,51H,31H,24H,24H,24H,64H,54H,24H,34H,52H,34H,52H,32H,21H,31H,12H,11H,21H,34H,04HDB 52H,51H,0D1H,12H,12H,32H,31H,31H,52H,51H,51H,22H,22H,22H,0

30、D2H,0D1H,0D1H,24H,22H,0C2H,14H,12H,12H,34H,32H,32H,54H,54H,54H,54HDB 12H,11H,31H,52H,51H,51H,64H,54H,32H,31H,11H,52H,52H,52H,32H,02H,12H,02H,0C4H,14HDB 0A2H,0A1H,11H,52H,52H,52H,32H,02H,12H,02H,0C4H,14H,0C4H,14H,0C4H,14H,14H,04HDB 04H,04H,04H,04HDB 00HEND;七、仿真過程綜述 拿到任務書后的首先想到的是覺得這次課程設計還是比較難的,因為單片機課程

31、的學習是在很早以前了,現(xiàn)在突然要用它需要在把相關知識撿起來,這需要一定的時間;而且,這次課設還需要編程,變成一直是我的弱項。但還是要認真對待,就仔細的看了所有的設計題目,根據(jù)自己的愛好和能力,我最終選擇了播放器。 剛確定這個題目后覺得無從下手,不知道從什么開始做起。所以就在網(wǎng)上查閱了相關資料,大致瀏覽了一遍,看懂了幾分,覺得應該從學習軟件開始。因此就去圖書館借了一本相關的書,把仿真軟件學了一遍并做了幾個小例子練習了一下,就開始著手編程了。編程的過程是痛苦的,這需要很強的邏輯思維能力,這一部分只能耐心地慢慢來。經(jīng)過查閱相關資料,和各種程序的拼湊,基本的程序是出來了,放到keil里調試時錯誤很多,

32、在改錯時又查閱大量的資料,曲曲折折的把程序改正好,最終形成一個.hex的文件。接下來畫仿真圖還是比較容易的,這一部分很輕松。當把程序加載進去開始仿真時又出現(xiàn)了問題,程序是對的,原理圖是對的,可是一結合就是得不到想要的結果。在仔細研究,再加上和同學探討,原來是所選擇的元件有誤,當把所有錯誤都改正以后,在仿真時就都成功了,該有的功能都有,該出現(xiàn)的顯示也有了。 八、調試過程中的主要難點及解決思路和辦法 編程調試中,用KILL將所編好的程序匯編,發(fā)現(xiàn)有好幾處錯誤出現(xiàn),經(jīng)過仔細檢查,發(fā)現(xiàn)一些是由于所輸入的符號不是英文模式下,匯編機器無法識別,所以要將輸入錯誤的符號在引文模式下重新輸入一遍,就能改正了。 還出現(xiàn)了一類的錯誤提示是由于匯編語言語法的錯誤。比如:語句CPL

溫馨提示

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

評論

0/150

提交評論