《微型計(jì)算機(jī)原理與接口技術(shù)》課程設(shè)計(jì)音樂播放器課程設(shè)計(jì)
《《微型計(jì)算機(jī)原理與接口技術(shù)》課程設(shè)計(jì)音樂播放器課程設(shè)計(jì)》由會(huì)員分享,可在線閱讀,更多相關(guān)《《微型計(jì)算機(jī)原理與接口技術(shù)》課程設(shè)計(jì)音樂播放器課程設(shè)計(jì)(28頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、學(xué)號(hào)0000000 《微型計(jì)算機(jī)原理與接口技術(shù)》 課 程 設(shè) 計(jì) ( 2008級(jí)本科) 題 目:音樂播放器課程設(shè)計(jì) 系(部)院: XXXXXX學(xué)院 專 業(yè): 電氣工程及其自動(dòng)化 作者姓名: X X X 指導(dǎo)教師: XX 職稱: 教授 完成日期: 20XX 年 X 月 XX 日 微機(jī)原理與接口技術(shù)課程設(shè)計(jì)成績?cè)u(píng)定表 姓 名 XXX 學(xué) 號(hào) 0000000 專業(yè)班級(jí)
2、電氣工程及其自動(dòng)化 課程設(shè)計(jì)題目:音樂播放器課程設(shè)計(jì) 課程設(shè)計(jì)答辯或質(zhì)疑記錄: 成績?cè)u(píng)定依據(jù): 評(píng) 定 項(xiàng) 目 評(píng) 分 成 績 1.選題合理、目的明確(10分) 2.設(shè)計(jì)方案可行性、創(chuàng)新性(20分) 3.設(shè)計(jì)結(jié)果(系統(tǒng)原理圖、源程序、調(diào)試運(yùn)行結(jié)果)(30分) 4.平時(shí)成績(態(tài)度認(rèn)真、遵守紀(jì)律)(10分) 5.設(shè)計(jì)報(bào)告的規(guī)范性、參考文獻(xiàn)充分(不少于5篇)(10分) 6.答辯(20分) 總 分 最終評(píng)定成績(以優(yōu)、良、中、及格、不及格評(píng)定) 指導(dǎo)教師簽字
3、: 年 月 日 課程設(shè)計(jì)任務(wù)書 學(xué)生姓名 XXX 學(xué)號(hào) 0000000 專業(yè)方向 電氣工程及其自動(dòng)化 班級(jí) 08(X)班 題目名稱 音樂播放器設(shè)計(jì) 一、 設(shè)計(jì)內(nèi)容及技術(shù)要求: 1、 將各音樂音階和其延續(xù)時(shí)間存在數(shù)據(jù)段中,然后根據(jù)不同按鍵值選擇不同的音階和時(shí)間表,再使用計(jì)數(shù)器產(chǎn)生該音階頻率。 2、 CPU通過對(duì)定時(shí)器的通道進(jìn)行編程,使其I/O寄存器接收一個(gè)控制聲音頻率的16位計(jì)數(shù)值。 3、 當(dāng)定時(shí)器接收的計(jì)數(shù)值為533H時(shí),能產(chǎn)生896Hz的聲音,因此產(chǎn)生其他頻率的計(jì)數(shù)值就可算出來。 4、 在送出頻率計(jì)數(shù)
4、值之前,還要給方式寄存器送一個(gè)方式值,該數(shù)決定對(duì)哪一個(gè)通道編程,采用什么模式,送入通道的計(jì)數(shù)值是一字節(jié)還是兩字節(jié),是二進(jìn)制碼還是BCD碼。 5、 從定時(shí)器輸出的方波信號(hào),經(jīng)功率放大和濾波后驅(qū)動(dòng)揚(yáng)聲器。送到揚(yáng)聲器的信號(hào)還受到了從并行接口芯片8255(端口地址為61H)來的雙重控制,端口61H的最低位控制通道2的門控開斷,以產(chǎn)生特殊的音頻信號(hào)。 6、 控制揚(yáng)聲器開關(guān)的時(shí)間間隔,來控制發(fā)聲的音長了。 二、課程設(shè)計(jì)總結(jié)報(bào)告要求: 1、選用8086/8088CPU和適當(dāng)?shù)某源鎯?chǔ)器芯片、接口芯片完成相應(yīng)的功能。 2、設(shè)計(jì)鍵盤和LED完成輸入和顯示功能。 3、畫出詳細(xì)的硬件連接圖。 4、給出程
5、序設(shè)計(jì)思路、畫出各程序適當(dāng)?shù)牧鞒虉D。 5、給出RAM地址分配圖。 6、給出所有程序清單并加上必要注釋。 7、完成設(shè)計(jì)說明書(包括封面、目錄、設(shè)計(jì)任務(wù)書、硬件設(shè)計(jì)思路、硬件原理圖、軟件設(shè)計(jì)思路、程序流程框圖、程序清單、所用器件型號(hào)、總結(jié)體會(huì)、參考文獻(xiàn)等)。 三、設(shè)計(jì)進(jìn)度: 第一周 星期一上午 討論論文題目 星期一下午 查資料 星期二至星期五 完成硬件電路的基本設(shè)計(jì) 第二周 星期一至星期二 完成軟件流程圖及軟件設(shè)計(jì) 星期三至星期四 軟硬件統(tǒng)調(diào),寫說明書,畫圖 星期五 答辯 目
6、錄 第一章 課程設(shè)計(jì)的任務(wù)和目的 4 1.1 課程設(shè)計(jì)任務(wù) 4 1.2 課程設(shè)計(jì)目的 4 第二章 課程設(shè)計(jì)基礎(chǔ)知識(shí) 5 2.1 定時(shí)/計(jì)數(shù)器8253A 5 2.2 8253A內(nèi)部結(jié)構(gòu) 5 2.3 8253A外部引腳 6 2.4 計(jì)數(shù)器內(nèi)部結(jié)構(gòu) 7 2.5 8253A端口地址 7 2.6 8253A功能 8 2.7 8253A控制字 9 2.8 8253A工作方式 9 第三章 詳細(xì)設(shè)計(jì) 11 3.1 硬件設(shè)計(jì) 11 3.2 軟件設(shè)計(jì) 13 第四章 程序調(diào)試 14 第五章 試驗(yàn)結(jié)果截屏 14 第六章 總結(jié) 15
7、第七章 參考文獻(xiàn) 16 第八章 附錄 17 8.1 源代碼 17 8.2 各個(gè)音符的對(duì)應(yīng)頻率 26 27 第一章 課程設(shè)計(jì)的任務(wù)和目的 1.1 課程設(shè)計(jì)任務(wù) 本課程設(shè)計(jì)題目是:設(shè)計(jì)并實(shí)現(xiàn)一個(gè)音樂播放器。 1. 自己選用芯片和其它的硬件。 2. 自行設(shè)計(jì)電路并使用匯編語言編寫程序完成音樂播放器功能。 3. 利用8253作為音階頻率發(fā)生器,對(duì)一段音樂進(jìn)行編碼后存入音符表,程序中可調(diào)用音符表自動(dòng)播放音樂,從中了解音樂播放的原理。 4. 利用8253A和PC機(jī),設(shè)計(jì)并實(shí)現(xiàn)簡(jiǎn)易音樂播放器 5. 使用匯編語言編寫音樂播放程序。 6. 上機(jī)調(diào)試程序并聯(lián)機(jī),利用試驗(yàn)箱
8、提供的揚(yáng)聲器發(fā)聲。 7. 完成實(shí)驗(yàn)報(bào)告。 1.2課程設(shè)計(jì)目的 本課程設(shè)計(jì)注重提高學(xué)生應(yīng)用能力、創(chuàng)新能力。在掌握了基本的實(shí)驗(yàn)方法和實(shí)驗(yàn)技能且理論教學(xué)完成的基礎(chǔ)上,要求學(xué)生通過兩周的集中工作,初步鍛煉綜合運(yùn)用所學(xué)知識(shí)的能力,通過討論與合作,完成一項(xiàng)完整的設(shè)計(jì)工作。更深入的了解微機(jī)芯片的用法和程序的完成過程,調(diào)試方法及技巧。通過這個(gè)環(huán)節(jié)來加深對(duì)《微機(jī)原理與接口技術(shù)》所學(xué)內(nèi)容的理解和融會(huì)貫通。 設(shè)計(jì)音樂播放器主要目的: 通過D/A裝換器產(chǎn)生模擬信號(hào),在實(shí)驗(yàn)平臺(tái)上實(shí)現(xiàn)簡(jiǎn)易音樂播放器。 了解利用數(shù)模轉(zhuǎn)換器產(chǎn)生音樂的基本方法。 掌握定時(shí)/計(jì)數(shù)器8253A 的使用。
9、 第二章 課程設(shè)計(jì)基礎(chǔ)知識(shí) 2.1 定時(shí)/計(jì)數(shù)器8253A 在微機(jī)及控制系統(tǒng)中,經(jīng)常要用到定時(shí)信號(hào)。如系統(tǒng)的日歷時(shí)鐘,動(dòng)態(tài)存儲(chǔ)器刷新。對(duì)外部執(zhí)行機(jī)構(gòu)控制時(shí)也需要定時(shí)中斷、定時(shí)檢測(cè)、定時(shí)查詢等。定時(shí)的方法主要是兩種: 軟件定時(shí):利用指令的執(zhí)行時(shí)間設(shè)計(jì)循環(huán)程序,使CPU 執(zhí)行延遲子程 序的時(shí)間就是定時(shí)時(shí)間。缺點(diǎn):執(zhí)行延遲時(shí),CPU 一直被占用,降低了CPU 的效率。 硬件定時(shí):用計(jì)數(shù)器/定時(shí)器作為主要硬件,在軟件簡(jiǎn)單指令的控制下產(chǎn)生精確的時(shí)間 延遲。突出優(yōu)點(diǎn)為計(jì)數(shù)時(shí)不占用CPU 時(shí)間,如利用定時(shí)器/計(jì)數(shù)器產(chǎn)生中斷信號(hào),可建立多作業(yè)環(huán)境,提高了CPU 效率。 主要
10、功能: (1)每片上有3 個(gè)獨(dú)立的16 位的減計(jì)數(shù)器通道。 (2)對(duì)于每個(gè)計(jì)數(shù)器,都可以單獨(dú)作為定時(shí)器或計(jì)數(shù)器使用,并且都可以按照二進(jìn) 制或十進(jìn)制來計(jì)數(shù)。 (3)每個(gè)通道都有6 種工作方式,都可以通過程序設(shè)置或改變。 (4)每個(gè)計(jì)數(shù)器的速率可高達(dá)2MHz。最高的計(jì)數(shù)時(shí)鐘頻率為2.6MHz。 2.2 8253A內(nèi)部結(jié)構(gòu) 8253的內(nèi)部結(jié)構(gòu)如圖所示,它主要包括以下幾個(gè)主要部分: 圖2-1 8253的內(nèi)部結(jié)構(gòu) (1).?dāng)?shù)據(jù)總線緩沖器 實(shí)現(xiàn)8253與CPU數(shù)據(jù)總線連接的8位雙向三態(tài)緩沖器,用以傳送CPU向8253的控制信息、數(shù)據(jù)信息以及CPU從8253讀取的狀態(tài)信息,包
11、括某時(shí)刻的實(shí)時(shí)計(jì)數(shù)值。 (2).讀/寫控制邏輯 控制8253的片選及對(duì)內(nèi)部相關(guān)寄存器的讀/寫操作,它接收CPU發(fā)來的地址信號(hào)以實(shí)現(xiàn)片選、內(nèi)部通道選擇以及對(duì)讀/寫操作進(jìn)行控制。 (3).控制字寄存器 在8253的初始化編程時(shí),由CPU寫入控制字,以決定通道的工作方式,此寄存器只能寫入,不能讀出。 (4).計(jì)數(shù)通道0#、1#、2#: 這是三個(gè)獨(dú)立的,結(jié)構(gòu)相同的計(jì)數(shù)器/定時(shí)器通道,每一個(gè)通道包含一個(gè)16位的計(jì)數(shù)寄存器,用以存放計(jì)數(shù)初始值,一個(gè)16位的減法計(jì)數(shù)器和一個(gè)16位的鎖存器,鎖存器在計(jì)數(shù)器工作的過程中,跟隨計(jì)數(shù)值的變化,在接收到CPU發(fā)來的讀計(jì)數(shù)值命令時(shí),用以鎖存計(jì)數(shù)值,供CPU讀
12、取,讀取完畢之后,輸出鎖存器又跟隨減1計(jì)數(shù)器變化。 2.3 8253A外部引腳 8253芯片是具有24個(gè)引腳的雙列直插式集成電路芯片,其引腳分布如圖所示。8253芯片的24個(gè)引腳分為兩組,一組面向CPU,另一組面向外部設(shè)備,各個(gè)引腳及其所傳送信號(hào)的情況,介紹如下: (1).D7~D0:雙向、三態(tài)數(shù)據(jù)線引腳,與系統(tǒng)的數(shù)據(jù)線連接,傳送控制、數(shù)據(jù)及狀態(tài)信息。 (2).:來自于CPU的讀控制信號(hào)輸入引腳,低電平有效。 (3).:來自于CPU的寫控制信號(hào)輸入引腳,低電平有效。 (4).:芯片選擇信號(hào)輸入引腳,低電平有效。 圖2-1 8253的引腳 (5).A1、A0:地址信號(hào)輸入
13、引腳,用以選擇8253芯片的通道及控制字寄存器。(6).VCC及GND:+5V電源及接地引腳 (7).CLKi:i=0,1,2,第i個(gè)通道的計(jì)數(shù)脈沖輸入引腳,8253規(guī)定,加在CLK引腳的輸入時(shí)鐘信號(hào)的頻率不得高于2.6MHZ,即時(shí)鐘周期不能小于380ns。 (8).GATEi:i=0,1,2,第i個(gè)通道的門控信號(hào)輸入引腳,門控信號(hào)的作用與通道的工作方式有關(guān)。 (9).OUTi:i=0,1,2,第i個(gè)通道的定時(shí)/計(jì)數(shù)到信號(hào)輸出引腳,輸出信號(hào)的形式由通道的工作方式確定,此輸出信號(hào)可用于觸發(fā)其它電路工作,或作為向CPU發(fā)出的中斷請(qǐng)求信號(hào)。 2.4 計(jì)數(shù)器內(nèi)部結(jié)構(gòu) 每個(gè)計(jì)數(shù)器由一個(gè)16位
14、可預(yù)置的減1計(jì)數(shù)器組成,計(jì)數(shù)初值可保存在16位的鎖存器中,該鎖存器只寫不能讀。在計(jì)數(shù)器工作時(shí),初值不受影響,以便進(jìn)行重復(fù)計(jì)數(shù)。圖中每個(gè)計(jì)數(shù)器有一個(gè)時(shí)鐘輸入端CLK作為計(jì)數(shù)脈沖源, 計(jì)數(shù)方式可以是二進(jìn)制,計(jì)數(shù)范圍1~10000H,也可以是十進(jìn)制,計(jì)數(shù)范圍1~65536。門控端GATE用于控制計(jì)數(shù)開始和停止。輸出OUT端當(dāng)計(jì)數(shù)器計(jì)數(shù)值減到零時(shí),該端輸出標(biāo)志信號(hào) 。 圖2-2 計(jì)數(shù)器內(nèi)部結(jié)構(gòu) 2.5 8253A端口地址 圖2-3 8253A端口地址 2.6 8253A功能 8253 A既可作定時(shí)器又可作計(jì)數(shù)器: (1) 計(jì)數(shù): 計(jì)數(shù)器裝入初值后,當(dāng)G
15、ATE為高電平時(shí),可用外部事件作為CLK 脈沖對(duì)計(jì)數(shù)值進(jìn)行減1 計(jì)數(shù),每來一個(gè)脈沖減1,當(dāng)計(jì)數(shù)值減至0時(shí),由OUT 端輸出一個(gè)標(biāo)志信號(hào)。 (2) 定時(shí): 計(jì)數(shù)器裝入初值后,當(dāng)GATE為高電平時(shí),由CLK 脈沖觸發(fā)開始自動(dòng)計(jì)數(shù),當(dāng)計(jì)數(shù)到零時(shí),發(fā)計(jì)數(shù)結(jié)束定時(shí)信號(hào)。 除上述典型應(yīng)用外,8253A還可作頻率發(fā)生器、分頻器、實(shí)時(shí)鐘、單脈沖發(fā)生器等。 2.7 8253A控制字 圖2-4 8253A控制字 說明 : (1) 8253 A每個(gè)通道對(duì)輸入CLK按二進(jìn)制或二十進(jìn)制從預(yù)置值開始減1計(jì)數(shù),減到0時(shí)從OUT輸出一個(gè)信號(hào)。 (2) 8253 A編程時(shí)先寫控制字
16、,再寫時(shí)間常數(shù)。 2.8 8253A工作方式 (1) 方式0:計(jì)數(shù)結(jié)束產(chǎn)生中斷方式 當(dāng)寫入控制字后,OUT變?yōu)榈碗娖?,?dāng)寫入初值后立即開始計(jì)數(shù),當(dāng)計(jì)數(shù)結(jié)束時(shí),變成高電平。 (2) 方式1:可編程單次脈沖方式 當(dāng)初值裝入后且GATE由低變高時(shí),OUT變?yōu)榈碗娖?,?jì)數(shù)結(jié)束變?yōu)楦唠娖健? (3) 方式2:頻率發(fā)生器方式 當(dāng)初值裝入時(shí),OUT變?yōu)楦?;?jì)數(shù)結(jié)束,OUT變?yōu)榈?。該方式下如果?jì)數(shù)未結(jié)束,但GATE為低時(shí),立即停止計(jì)數(shù),強(qiáng)制OUT變高,當(dāng)GATE再變高時(shí),便啟動(dòng)一次新的計(jì)數(shù)周期。 (4) 方式3:方波發(fā)生器 當(dāng)裝入初值后
17、,在GATE上升沿啟動(dòng)計(jì)數(shù),OUT 輸出高電平; 當(dāng)計(jì)數(shù)完成一半時(shí),OUT輸出低電平。 圖2-5 方波圖 方式3與方式2的工作方式類似,也是在初始化完成后能重復(fù)循環(huán)計(jì)數(shù),只是輸出的波形不同。 <1> 計(jì)數(shù)過程 當(dāng)把方式3的控制字寫入控制字寄存器后,輸出端OUT變成高電平,作為初始電平。再將計(jì)數(shù)初值寫入計(jì)數(shù)初值寄存器CR中,再經(jīng)過一個(gè)時(shí)鐘周期,計(jì)數(shù)初值被移入計(jì)數(shù)執(zhí)行單元CE中,從下一個(gè)時(shí)鐘脈沖開始作減1 計(jì)數(shù),方式3的計(jì)數(shù)過程分為兩種情況: 第一種情況:計(jì)數(shù)初值為偶數(shù),當(dāng)作減1計(jì)數(shù)減到N/2時(shí),輸出端OUT端變成低電平,減到0時(shí),輸出端OUT變成高電平,并重新從初值開始新
18、的計(jì)數(shù)過程。若GATE為高電平,則一直重復(fù)同樣的計(jì)數(shù)過程??梢姡敵龆薕UT輸出連續(xù)的方波,故稱方波發(fā)生器。 第二種情況:計(jì)數(shù)初值為奇數(shù),當(dāng)作減1計(jì)數(shù)減到(N+1)/2以后,輸出端OUT變成低電平,減到0時(shí),輸出端OUT又變成高電平。并重新從初值開始新的計(jì)數(shù)過程。這時(shí)輸出端的波形為連續(xù)的近似方波。 <2>門控信號(hào)的影響 工作在方式3時(shí),門控信號(hào)GATE的功能與工作方式2一樣,即GATE 為高電平時(shí),允許計(jì)數(shù);GATE為低電平時(shí)停止計(jì)數(shù)。GATE引腳上的信號(hào)從低電平跳到高電平時(shí),將會(huì)重新把計(jì)數(shù)初值寄存器CR中的內(nèi)容移入計(jì)數(shù)執(zhí)行單元CE中,并以新裝入的值重新開始計(jì)數(shù)。 <3>新的計(jì)數(shù)初值對(duì)
19、計(jì)數(shù)過程的影響 如果在計(jì)數(shù)過程中寫入新的初值,而GATE信號(hào)一直維持高電平,則新的初值不會(huì)影響當(dāng)前的計(jì)數(shù)過程,只有在計(jì)數(shù)結(jié)束后的下一個(gè)計(jì)數(shù)周期,才按新的初值計(jì)數(shù)。若寫入新的初值后,遇到門控信號(hào)的上升沿,則結(jié)束現(xiàn)行的計(jì)數(shù)過程,從下一個(gè)時(shí)鐘脈沖下降沿開始按新的計(jì)數(shù)初值進(jìn)行計(jì)數(shù)。 可見,工作在方式3時(shí),當(dāng)計(jì)數(shù)初值為偶數(shù),OUT端輸出連續(xù)的標(biāo)準(zhǔn)方波;當(dāng)計(jì)數(shù)初值為奇數(shù),在每個(gè)計(jì)數(shù)周期內(nèi),有(N+1)/2個(gè)周期輸出高電平,(N-1)/2個(gè)時(shí)鐘周期輸出低電平,OUT端輸出連續(xù)的近似的方波。 第三章 詳細(xì)設(shè)計(jì) 3.1硬件設(shè)計(jì) 音樂播放器用到相關(guān)硬件: 1. 定時(shí)/計(jì)數(shù)器8253A 2. 模塊
20、揚(yáng)聲器和喇叭驅(qū)動(dòng) 3. 頻率發(fā)生芯片74LS393 硬件連接: ① 定時(shí)/計(jì)數(shù)器8253A芯片模塊的CLK2接時(shí)鐘頻率選擇模塊74LS393的T7端口,分頻器的頻率源為5000HZ。 ② 定時(shí)/計(jì)數(shù)器8253A芯片模塊的GATE2接+5V,提供高電平。 ③ 定時(shí)/計(jì)數(shù)器8253A芯片模塊的OUT2 接喇叭驅(qū)動(dòng)驅(qū)動(dòng)模塊的SIN 端口。 ④ 喇叭驅(qū)動(dòng)驅(qū)動(dòng)模塊的J5插座接揚(yáng)聲器的J5插座。8253A的CLK2接分頻器74LS393(右上方)的T7插孔,分頻器的頻率源為5000。 圖3-1 硬件連接框架圖 圖3-2 揚(yáng)聲器電路 圖3-3 揚(yáng)聲器J5插口 如圖
21、3-2為音響電路的控制輸入插口SIN,控制輸入信號(hào)經(jīng)放大后接喇叭。 圖3-4 74LS393引腳圖 3.2 軟件設(shè)計(jì) 圖3-7 軟件流程圖 music子程序是音樂子程序,SI指向曲中的頻率,BP指向曲中的時(shí)間節(jié)拍。從SI的指向的音節(jié)表中取一個(gè)頻率,只要不是0,即有效就再讀取時(shí)間,然后調(diào)用speaker子程序,計(jì)算計(jì)數(shù)初值送入計(jì)數(shù)器,產(chǎn)生各種頻率信號(hào),再送至揚(yáng)聲器,根據(jù)所取的時(shí)間調(diào)用若干次延時(shí)子程序。這段時(shí)間揚(yáng)聲器就發(fā)出該頻率的聲音,延時(shí)結(jié)束,再修改SI和BP,指向下一個(gè)頻率,重復(fù)上面的工作。播放兩首音樂后自動(dòng)停止。 第四章 程序
22、調(diào)試 把程序輸入PC機(jī)后,保存為.asm文件。啟用DVCC系統(tǒng): ① 建立匯編源程序. ② 建立連接。 ③ 編譯為目標(biāo)文件 ④ 調(diào)試。 ⑤ 不通過,重新修改(語句錯(cuò)誤、音調(diào)頻率不準(zhǔn)、音調(diào)節(jié)拍不符合) ⑥ 重新修改、調(diào)試。 ⑦ 正確運(yùn)行。 第5章 試驗(yàn)結(jié)果截屏: 第六章 總結(jié) 經(jīng)過這次的課程設(shè)計(jì),再一次的印證了理論來源于實(shí)踐,而實(shí)踐又能升華理論這一個(gè)觀點(diǎn)。 首先,要實(shí)現(xiàn)題目要求的功能并有所創(chuàng)新,我們必須全心地投入其中,養(yǎng)成一種敢于鉆研敢于創(chuàng)新的習(xí)慣。在把課程要求實(shí)現(xiàn)到實(shí)際中來的過程中,參考了一些程序,在研究參考程序的編寫思路的同時(shí)也從中獲得不少的啟
23、發(fā)。為了把使得程序更加完整,在了解其他人在相同課題上的思路后,更加加入自己的一些思路,進(jìn)行創(chuàng)一定的創(chuàng)新。 其次,通過課程設(shè)計(jì),讓我在掌握課本的基礎(chǔ)上,更深入的了解了各種芯片的用法和程序的完成過程,調(diào)試方法及技巧。尤其是對(duì)各種芯片在硬件與軟件相互作用下工作的狀況有了更深入的認(rèn)識(shí)。 總之,在這次的課程設(shè)計(jì)在很大程度上提升了我的動(dòng)手能力了,培養(yǎng)了自己獨(dú)立編寫匯編語言程序的能力,加深了我對(duì)理論知識(shí)的理解。 雖然這兩個(gè)星期的課程設(shè)計(jì)中,完成任務(wù)的效果和預(yù)期有的出入,雖然中間遇到了一些問題,但經(jīng)過我們的努力,還是把問題給解決了。 這次課程設(shè)計(jì)對(duì)我綜合運(yùn)用所學(xué)知識(shí)的能力的提高有不小的幫助,之前做的
24、實(shí)驗(yàn)都是很簡(jiǎn)單的編程,跟硬件結(jié)合也沒有這么復(fù)雜,實(shí)現(xiàn)的功能都比較簡(jiǎn)單,可是這次要實(shí)現(xiàn)的功能相對(duì)來說比較復(fù)雜,要求掌握的知識(shí)比較全面。 第七章 參考文獻(xiàn) 1.《微機(jī)原理與接口技術(shù)》(第二版) 人民郵電出版社 周明德主編 2.《匯編語言程序設(shè)計(jì)》 中國水利水電出版社 相偉主編 3.《DVCC系列單片機(jī)微機(jī)仿真實(shí)驗(yàn)指導(dǎo)書 啟東計(jì)算機(jī)廠有限公司著 4.《單片機(jī)接口技術(shù)》 復(fù)旦大學(xué)出版社 王修才
25、編著 5.《單片機(jī)原理及其接口技術(shù)》(第二版) 清華大學(xué)出版社 胡漢才編著 6.《單片微機(jī)原理及應(yīng)用》 機(jī)械工業(yè)出版社 丁元杰主編 7.《單片機(jī)原理及接口技術(shù)》(修訂版) 北京航空航天大學(xué)出版社 李朝青編著 8.《單片機(jī)原理及應(yīng)用》 北京希望電子出版社 成都木馬科技編著 9.《單片機(jī)原理及接口技術(shù)學(xué)習(xí)輔導(dǎo)》 電子工業(yè)出版社 朱定華編著 10.《單片微機(jī)接口與系統(tǒng)設(shè)計(jì)》 哈工大出版社 高明
26、編著 11.《微型計(jì)算機(jī)原理及應(yīng)用學(xué)習(xí)知道》 化學(xué)工業(yè)出版社 趙邦信編著 11.網(wǎng)上資料 第八章 附錄 8.1 源代碼 data segment assume ds:data msg_1 db <<---Welcome you to this OS.--->> $,0dh,0ah msg_2 db 0dh,0ah,In this OS. you can press below keys to enjoy:$ msg_3 db 0d
27、h,0ah,Super Low: q-w-e-r-t-y-u$ msg_4 db 0dh,0ah, Low: a-s-d-f-g-h-j$ msg_5 db 0dh,0ah, Mid: z-x-c-v-b-n-m$ msg_6 db 0dh,0ah, Hig: 1-2-3-4-5-6-7$ msg_7 db 0dh,0ah,Anytime you can press Esc or Enter to exit.$ msg_8 db 0dh,0ah,Whats more, you can press p to play music!$ msg_9
28、db 0dh,0ah,Please select the music(press q to exit the main menu):$ msg_10 db 0dh,0ah,1. Huaxin$ msg_11 db 0dh,0ah,2. Jingle bells$ msg_12 db 0dh,0ah,3. Happy birthday to you$ msg_13 db 0dh,0ah,4. Happy new year$ msg_21 db 0dh,0ah, $ note_t dw 131,147,165,175,196,220,247 ;重低音 dw 2
29、62,294,330,349,392,440,494 ;低音 dw 523,587,659,698,784,880,988 ;中音 dw 1046,1175,1318,1397,1568,1760,1975 ;高音 dw 0 ;休止符0 ; 1,2,3,4,5,6,7 ;從低到高 key_t db q,w,e,r,t,y,u ;重低音 db a,s,d,f,g,h,j ;低音 db z,x,c,v,b,n,m ;中音 db 1,2,3,4,5,6,7 ;高音 db 0
30、 ;休止符0 ;瑪麗有只小羊羔 music_n1 db c,x,z,x,c,c,c db x,x,x,c,c,c db c,x,z,x,c,c,z db x,x,c,x,z,0 music_d1 db 4, 4, 4, 4, 4, 4, 8 db 4, 4, 8, 4, 4, 8 db 16, 8, 4, 4, 8, 4, 4, 8, 4,
31、4 db 4, 4, 4, 4, 4, 4, 4, 2 db 4, 4, 4, 4, 16 ;鈴兒響叮當(dāng)+生日快樂+新年好 music_n2 db g,c,x,z,g,0,g,h,g,c,x,z ;鈴兒響叮當(dāng) db h,0,h,a,h,v,c,x,j,g,b,b,v,x,c,z db g,c,x,z,g,0,g,h,g,c,x,z,h,v,c,x db b,b,b,b,n
32、,b,v,x,z db c,c,c,c,c,c,c,b,z,x,c db v,v,v,v,c,c,c,x,x,z,x,b db c,c,c,c,c,c,c,b,z,x,c db v,v,v,v,c,c,b,b,v,x,z,0 db g,g,h,g,z,j ;生日快樂 db g,g,h,g,x,z db g,g,b,c,z,j,h db
33、 v,v,c,z,x,z,0 db z,z,z,g,c,c,c,z,z,c,b,b,v,c,x,x,c ;新年好 db v,v,c,x,c,z,z,c,x,g,j,x,z,0 music_d2 db 4, 4, 4, 4, 8, 4, 2, 2, 4, 4, 4, 4 db 8, 4, 2, 2, 4, 4, 4, 4, 8, 8, 4, 4, 4, 4, 8, 4 db 4, 4, 4, 4, 8,
34、 4, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4 db 4, 4, 4, 4, 4, 4, 4, 4, 16 db 4, 4, 8, 4, 4, 8, 4, 4, 4, 2, 16 db 4, 4, 8, 4, 4, 8, 4, 4, 4, 4, 8, 8 db 4, 4, 8, 4, 4, 8, 4, 4, 4, 2, 16 db 4
35、, 4, 8, 4, 4, 8, 4, 4, 4, 4, 16,32 db 4, 4, 8, 8, 8, 16 db 4, 4, 8, 8, 8, 16 db 4, 4, 8, 8, 8, 8, 8 db 4, 4, 8, 8, 8, 16, 32 db 4, 4, 8, 8, 4, 4, 8, 8, 4, 4, 8, 8, 4, 4, 16, 4, 4
36、 db 8, 8, 4, 4, 8, 8, 4, 4, 8, 8, 4, 4, 32 jiepai db ? ;節(jié)拍變量定義 speed db 2 ;播放速度控制 jiange db 1 ;音符間隔停頓時(shí)間 data ends ;數(shù)據(jù)定義段結(jié)束 ;/*-------------------------------------------------------------------------------------------*/ ;/*------------------------
37、-------------------------------------------------------------------*/ ;代碼段定義 code segment ;代碼定義段 assume cs:code ;建立代碼段寄存器尋址 ;/*-------------------------------------------------------------------------------------------*/ ;/*-------------------------------------------------
38、------------------------------------------*/ ;字符顯示 show macro str ;宏定義,輸入?yún)?shù):字符串str lea dx,str ;裝入str的有效地址 mov ah,09h ;調(diào)用中斷21,09h顯示字符串 int 21h endm ;宏定義結(jié)束 ;/*--------------------------------------------------------------------------------------
39、-----*/ ;/*-------------------------------------------------------------------------------------------*/ ;主函數(shù) main proc far ;主函數(shù)過程定義 mov ax,data ;取數(shù)據(jù)段地址 mov ds,ax ;裝載數(shù)據(jù)段寄存器ds,使之指向當(dāng)前數(shù)據(jù)段 show msg_21 show msg_1 ;調(diào)用宏,顯示字符串 show msg_2 show msg_3 show msg_4
40、show msg_5 show msg_6 show msg_7 show msg_8 show msg_21 mov bx,0 ;設(shè)定查表數(shù)組下標(biāo)初值 ;/*-------------------------------------------------------------------------------------------*/ ;/*-------------------------------------------------------------------------------------------*
41、/ ;按鍵掃描 key_scan: mov al,6 mov jiepai,al ;初始化節(jié)拍 mov bx,0000h ;初始化指針 mov ah, 00h ;利用bios的16號(hào)中斷,掃描鍵盤按鍵 int 16h ;AL中返回按鍵的ASCII碼 cmp al, 0dh ;判斷是否為Enter鍵 jz exit ;是回車鍵就退出 cmp al, 1bh ;判斷是否為Esc鍵 jz exit ;是退出鍵就退出 cmp al, p ;判斷是否為p鍵
42、 jz play ;是p鍵就play music lookup: cmp key_t[bx],al ;取出對(duì)應(yīng)頻率值 je next inc bx ;指針+1 jmp lookup next: shl bx,1 ;指針2,計(jì)算頻率表指針 mov cx,note_t[bx];取得對(duì)應(yīng)數(shù)組下標(biāo)值的頻率值 call beep ;調(diào)用固定頻率子程序 jmp key_scan ;否則繼續(xù)掃描 ;/*------------------------------------------
43、-------------------------------------------------*/ ;/*-------------------------------------------------------------------------------------------*/ exit: ;退出 mov ah,4ch ;調(diào)用中斷21,4ch退出系統(tǒng) int 21h ;/*------------------------------------------------------------------
44、-------------------------*/ ;/*-------------------------------------------------------------------------------------------*/ ;音樂播放菜單 play: show msg_9 show msg_10 show msg_11 show msg_12 show msg_13 show msg_21 input: mov ah, 00h ;利用bios的16號(hào)中斷,掃描鍵盤按鍵 int 16h
45、 ;AL中返回按鍵的ASCII碼 cmp al, q ;判斷是否為Enter鍵 jz start ;是q鍵就退到主菜單 cmp al, 1 ;判斷是否為數(shù)字1 jz next6 ;是1鍵就播放相對(duì)應(yīng)的歌曲 cmp al, 2 ;判斷是否為數(shù)字2 jz next7 ;是2鍵就播放相對(duì)應(yīng)的歌曲 jmp input ;否則繼續(xù)掃描按鍵 next6: call play_m1 next7: call play_m2 start: call main ;/*--------
46、-----------------------------------------------------------------------------------*/ ;/*-------------------------------------------------------------------------------------------*/ ;音樂播放程序1 play_m1 proc near next5: mov bx,0 next3: mov al,music_n1[bx] ;取出music頻率值 push ax
47、 mov al,music_d1[bx] ;取出music節(jié)拍 mov jiepai,al pop ax cmp al, 0 ;是否為音樂結(jié)束標(biāo)志符 je input ;是則退出play push bx ;保存bx,bx為music頻率指針 mov bx,0 look1: cmp key_t[bx],al ;查表取出對(duì)應(yīng)頻率值的指針bx je next1 ;找到就beep inc bx ;指針+1 and bx,0ffh jmp look
48、1 ;未找到則繼續(xù)查找 next1: shl bx,1 ;指針2,計(jì)算頻率表指針 mov cx,note_t[bx];取得對(duì)應(yīng)數(shù)組下標(biāo)值的頻率值 cmp cx,0 je next4 call beep ;調(diào)用固定頻率子程序 call pause ;調(diào)用停頓時(shí)間 pop bx ;獲得music指針 inc bx ;繼續(xù)取得下一個(gè)音符 jmp next3 next4: call nobeep call pause ;調(diào)用停頓時(shí)間 pop bx ;獲
49、得music指針 inc bx ;繼續(xù)取得下一個(gè)音符 jmp next3 play_m1 endp ;/*-------------------------------------------------------------------------------------------*/ ;/*-------------------------------------------------------------------------------------------*/ ;音樂播放程序2 play_m2 proc near nex5
50、: mov bx,0 nex3: mov al,music_n2[bx] ;取出music頻率值 push ax mov al,music_d2[bx] ;取出music節(jié)拍 mov jiepai,al pop ax cmp al, 0 ;是否為音樂結(jié)束標(biāo)志符 je input ;是則退出play push bx ;保存bx,bx為music頻率指針 mov bx,0 loo1: cmp key_t[bx],al ;查表取出對(duì)應(yīng)頻率值的指針bx
51、je nex1 ;找到就beep inc bx ;指針+1 and bx,0ffh jmp loo1 ;未找到則繼續(xù)查找 nex1: shl bx,1 ;指針2,計(jì)算頻率表指針 mov cx,note_t[bx];取得對(duì)應(yīng)數(shù)組下標(biāo)值的頻率值 cmp cx,0 je nex4 call beep ;調(diào)用固定頻率子程序 call pause ;調(diào)用停頓時(shí)間 pop bx ;獲得music指針 inc bx ;繼續(xù)取得下一個(gè)音符 jmp n
52、ex3 nex4: call nobeep call pause ;調(diào)用停頓時(shí)間 pop bx ;獲得music指針 inc bx ;繼續(xù)取得下一個(gè)音符 jmp nex3 play_m2 endp ;/*-------------------------------------------------------------------------------------------*/ ;/*-------------------------------------------------------------
53、------------------------------*/ main endp ;主函數(shù)過程結(jié)束 ;/*-------------------------------------------------------------------------------------------*/ ;/*-------------------------------------------------------------------------------------------*/ ;固定頻率響 beep proc near mov dx,00
54、12h mov ax,34dch div cx ;ax為所得分頻值 out 42h,al ;輸出頻率值,低8位 mov al,ah out 42h,al ;輸出頻率值,高8位 call spk_on ;開啟蜂鳴器 mov ah,00h ;取時(shí)鐘計(jì)數(shù)值 int 1ah mov al,jiepai ;18.2次為1000ms, 2次約為100ms add al,speed cbw ;al值轉(zhuǎn)為16位ax add ax,dx ;加
55、上當(dāng)前時(shí)鐘計(jì)數(shù)值,得到計(jì)數(shù)終值 mov bx,ax ;計(jì)數(shù)終值置入bx delay1: mov ah,00h int 1ah ;取時(shí)鐘計(jì)數(shù)值 cmp bx,dx ;到終值嗎? jnz delay1 ;未到,繼續(xù)延時(shí) call spk_off ;關(guān)閉蜂鳴器 ret beep endp ;/*-------------------------------------------------------------------------------------------*/ ;/*-----------
56、--------------------------------------------------------------------------------*/ ;休止符延遲時(shí)間 nobeep proc near call spk_off ;關(guān)閉蜂鳴器 mov ah,00h ;取時(shí)鐘計(jì)數(shù)值 int 1ah mov al,jiepai ;18.2次為1000ms, 2次約為100ms add al,speed cbw ;al值轉(zhuǎn)為16位ax add ax,dx ;加上
57、當(dāng)前時(shí)鐘計(jì)數(shù)值,得到計(jì)數(shù)終值 mov bx,ax ;計(jì)數(shù)終值置入bx delay2: mov ah,00h int 1ah ;取時(shí)鐘計(jì)數(shù)值 cmp bx,dx ;到終值嗎? jnz delay2 ;未到,繼續(xù)延時(shí) ret nobeep endp ;/*-------------------------------------------------------------------------------------------*/ ;/*---------------------------------
58、----------------------------------------------------------*/ ;音符間隔停頓時(shí)間 pause proc near call spk_off ;關(guān)閉蜂鳴器 mov ah,00h ;取時(shí)鐘計(jì)數(shù)值 int 1ah mov al,jiange ;18.2次為1000ms, 2次約為100ms cbw ;al值轉(zhuǎn)為16位ax add ax,dx ;加上當(dāng)前時(shí)鐘計(jì)數(shù)值,得到計(jì)數(shù)終值 mov bx,ax ;計(jì)數(shù)終值置入bx
59、 delay3: mov ah,00h int 1ah ;取時(shí)鐘計(jì)數(shù)值 cmp bx,dx ;到終值嗎? jnz delay3 ;未到,繼續(xù)延時(shí) ret pause endp ;/*-------------------------------------------------------------------------------------------*/ ;/*-----------------------------------------------------------------------------
60、--------------*/ ;開啟蜂鳴器 spk_on proc near push ax ;保存ax的值 in al,61h ;獲取61h端口的當(dāng)前值 or al,03h ;把61h端口低二位置1,即打開蜂鳴器 out 61h,al ;輸出數(shù)據(jù)到61h端口 pop ax ;恢復(fù)ax的值 ret spk_on endp ;/*-------------------------------------------------------------------------------------------
61、*/ ;/*-------------------------------------------------------------------------------------------*/ ;關(guān)閉蜂鳴器 spk_off proc near push ax ;保存ax的值 in al,61h ;獲取61h端口的當(dāng)前值 and al,0fch ;把61h端口低二位置0,即關(guān)閉蜂鳴器 out 61h,al ;輸出數(shù)據(jù)到61h端口 pop ax ;恢復(fù)ax的值 ret spk_off endp
62、 ;/*-------------------------------------------------------------------------------------------*/ ;/*-------------------------------------------------------------------------------------------*/ code ends ;代碼段結(jié)束 end main ;主程序結(jié)束 ;/*---------------------------------------------------
63、----------------------------------------*/ 8.2 各個(gè)音符的對(duì)應(yīng)頻率 音符 頻率/HZ 半周期/us 音符 頻率/HZ 半周期/us 低1DO2621908 #4FA# 7400676 #1DO#2771805中5SO7840638 低2RE2941700#5SO#8310602 #2RE#3111608中6LA8800568 低3M3301516#6LA#9320536 低4FA3491433中7SI9880506 #4FA#3701350高1DO10460478 低5SO3921276#DO#11090451 #5SO#4151205高2RE11750426 低6LA4401136#2RE#12450402 #6LA#4661072高3M13180372 低7SI4941012高4FA13970358 中1DO5230956#4FA#14800338 #1DO#5540903高5SO15680319 中2RE5780842#5S0#16610292 #2RE#6220804高6LA17600284 中3M6590759#6LA#18650268 中4FA6980716高7SI19760253
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識(shí)競(jìng)賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓(xùn)考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識(shí)測(cè)試題庫及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習(xí)題含答案
- 2煤礦安全監(jiān)測(cè)工種技術(shù)比武題庫含解析
- 1 礦山應(yīng)急救援安全知識(shí)競(jìng)賽試題
- 1 礦井泵工考試練習(xí)題含答案
- 2煤礦爆破工考試復(fù)習(xí)題含答案
- 1 各種煤礦安全考試試題含答案