基于單片機(jī)設(shè)計(jì)的音樂播放器
《基于單片機(jī)設(shè)計(jì)的音樂播放器》由會(huì)員分享,可在線閱讀,更多相關(guān)《基于單片機(jī)設(shè)計(jì)的音樂播放器(28頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、. . 摘要 二十世紀(jì)九十年代以來,計(jì)算機(jī)、信息、電子、控制、通信等技術(shù)得到迅速發(fā)展,促使了社會(huì)生產(chǎn)力的提高,也使人們的生產(chǎn)方式和生活方式產(chǎn)生了日新月異的變化。隨著人們生活水平的提高及對(duì)音樂的喜愛,對(duì)音樂播放器的品質(zhì),功能,品種等提出了越來越多的要求,表現(xiàn)在對(duì)控制系統(tǒng)性能、可靠性等要求越來越高。而品質(zhì)的提高,功能的更新,可靠性的增強(qiáng),品種的變化無不于產(chǎn)品的核心控制部分水平的提高密不可分。家用音樂播放器產(chǎn)品及其它有關(guān)消費(fèi)電器產(chǎn)品都是一些開環(huán)或閉環(huán)控制系統(tǒng),都由核心控制部分,執(zhí)行部分與人機(jī)界面三部分組成。而最為重要的控制部分一般是由單片機(jī)來執(zhí)行完成的,這就必將導(dǎo)致和促進(jìn)單片機(jī)在音樂領(lǐng)域應(yīng)
2、用的發(fā)展?,F(xiàn)在這些由單片機(jī)實(shí)現(xiàn)的音樂播放器的功能越來越強(qiáng)、費(fèi)用越來越低。 例如,就市場(chǎng)上的mp3目前的功能越來越強(qiáng)大體積卻越來越小,價(jià)格也逐漸便宜,被大多數(shù)人所能接受。但這些音樂播放器也或多或少的存在著一些問題,解決這些問題,還除智能化的單片機(jī)莫屬。 本文是基于單片機(jī)控制的音樂播放器的設(shè)計(jì), 它可以實(shí)現(xiàn)音樂的播放,可以通過功能鍵來選擇樂曲,播放或暫停。共有K1到K3三個(gè)功能鍵,K1-K2分別播放兩首不同音樂,K3為復(fù)位鍵。主控芯片采用AT89C52,輔以必要的電路,采用C語言進(jìn)行編程,編程后利用KEIL C51來進(jìn)行編譯,再將生成的HEX文件裝入芯片中,采用proteus軟件來仿真,檢驗(yàn)功
3、能得以正常實(shí)現(xiàn)。通過燒寫不同的程序,可以實(shí)現(xiàn)多首不同音樂的更換。 關(guān)鍵詞:?jiǎn)纹瑱C(jī)AT89C52,音樂播放,proteus 目錄 摘要 2 第一章 概述 4 第二章 系統(tǒng)設(shè)計(jì) 5 A硬件設(shè)計(jì) 5 2.1硬件結(jié)構(gòu)圖 5 2.2最小系統(tǒng) 5 2.2.1單片機(jī) 5 2.2.2電源電路 6 2.2.3晶振電路 6 2.2.4復(fù)位電路 6 B軟件設(shè)計(jì) 7 2.3主程序 7 2.4子程序 8 2.4.1放音子程序 8 2.4.2延時(shí)子程序 9 2.4.3顯示子程序 10 2.4.4鍵盤子程序 11 第三章 仿真與調(diào)試 13 3.1軟件調(diào)試 13 3.2硬件
4、調(diào)試 15 第四章 操作說明 16 第五章 參考文獻(xiàn) 17 第六章 課程小結(jié) 18 第七章 附錄 19 7.1元器件清單 19 7.2原理圖 20 7.3實(shí)物 21 7.4程序 22 第一章 概述 近年來隨著計(jì)算機(jī)在社會(huì)領(lǐng)域的滲透, 單片機(jī)的應(yīng)用正在不斷地走向深入。同時(shí)帶動(dòng)傳統(tǒng)控制檢測(cè)日新月益更新。在實(shí)時(shí)檢測(cè)和自動(dòng)控制的單片機(jī)應(yīng)用系統(tǒng)中,單片機(jī)往往是作為一個(gè)核心部件來使用,智能儀器就是以單片機(jī)為核心開發(fā)的一系列產(chǎn)品。 隨著科技的發(fā)展,智能儀器和單片機(jī)被各個(gè)領(lǐng)域所重視,工業(yè)方面、冶金方面都存在著許多控制難題,為了提高工作效率這就需要智能儀器和單片機(jī)技術(shù)的快速發(fā)展。
5、為此為提高本科生的設(shè)計(jì)創(chuàng)新能力開設(shè)了智能儀器和單片機(jī)的課程設(shè)計(jì)。 本設(shè)計(jì)的目的是培養(yǎng)理論聯(lián)系實(shí)際的學(xué)習(xí)方法以及獨(dú)立解決工程實(shí)際問題的能力。主要內(nèi)容是利用89C51單片機(jī)及其他一些器件來構(gòu)成音樂播放器。從而實(shí)現(xiàn)按鍵控制播放音樂的效果 導(dǎo)彈的導(dǎo)航裝置,飛機(jī)上各種儀表的控制,計(jì)算機(jī)的網(wǎng)絡(luò)通訊與數(shù)據(jù)傳輸,工業(yè)自動(dòng)化過程的實(shí)時(shí)控制和數(shù)據(jù)處理,廣泛使用的各種智能IC卡,民用豪華轎車的安全保障系統(tǒng),錄像機(jī)、攝像機(jī)、全自動(dòng)洗衣機(jī)的控制,以及程控玩具、電子寵物等等,這些都離不開單片機(jī)。更不用說自動(dòng)控制領(lǐng)域的機(jī)器人、智能儀表、醫(yī)療器械以及各種智能機(jī)械了。 現(xiàn)在利用AT89C52系列單片機(jī)設(shè)計(jì)的音樂播放器,依據(jù)
6、單片機(jī)技術(shù)原理,通過硬件電路設(shè)計(jì)以及軟件編譯,設(shè)計(jì)出一個(gè)多功能音樂播放器。該音樂播放器主要由按鍵電路、晶振電路、復(fù)位電路以及揚(yáng)聲器組成。智能簡(jiǎn)便,方便使用,深受人們的喜愛。 第二章 系統(tǒng)設(shè)計(jì) A硬件設(shè)計(jì) 2.1硬件結(jié)構(gòu)圖 本系統(tǒng)主要由穩(wěn)壓電源、A/D轉(zhuǎn)換器、單片機(jī)、譯碼顯示等一系列電路組成,主要完成電壓顯示(0~2.55V)。其硬件結(jié)構(gòu)圖如圖2-1。 圖2-1硬件結(jié)構(gòu)圖 2.2最小系統(tǒng) 2.2.1單片機(jī) 本次設(shè)計(jì)使用的單片機(jī)芯片型號(hào)為:STC89C52 圖2-2 STC89C52管腳圖 2.2.2電源電路 集成穩(wěn)壓器7805的簡(jiǎn)介: 7805集
7、成穩(wěn)壓器是常用的固定輸出為5V電壓的集成穩(wěn)壓器。它的內(nèi)部含有過流、過熱及調(diào)整管的保護(hù)電路,采用了噪聲低,溫度漂移小的基準(zhǔn)電壓源,工作穩(wěn)定可靠,而且價(jià)格便宜。 7805集成穩(wěn)壓器為三端器件,其管腳如圖2-3所示:1腳為輸入端,2腳為接地端,3腳為輸出端,使用十分方便。 78系列的穩(wěn)壓集成塊的極限輸入電壓是36V,最低輸入電壓比輸出電壓高3-4V。還要考慮輸出與輸入間壓差帶來的功率損耗,所以一般輸入為9-15V之間。當(dāng)輸出電壓較大時(shí),7805應(yīng)配上散熱板。 直流5V電源電壓產(chǎn)生的過程: 將直流9V經(jīng)過穩(wěn)壓器使輸出電壓為直流5V。 IC采用集成穩(wěn)壓器78
8、05,C3和C4為輸入端的濾波電容,C5和C6為輸出端的濾波電容。 2.2.3晶振電路 本次設(shè)計(jì)采用的是12MHZ的晶振。 晶振電路兩只電容在20pF~100pF之間取值,其取值在60pF~70pF時(shí)振蕩器頻率穩(wěn)定性較高,按照一般經(jīng)驗(yàn),外接晶體時(shí)兩個(gè)電容的取值為30pF;外接陶瓷振蕩器是兩電容的典型值是47pF。 2.2.4復(fù)位電路 在時(shí)鐘電路工作后,只要在單片機(jī)的RST引腳上出現(xiàn)24個(gè)時(shí)鐘振蕩脈沖(2個(gè)機(jī)器周期)以上的高電平,單片機(jī)便可實(shí)現(xiàn)初始化狀態(tài)服務(wù)。為保證應(yīng)用系統(tǒng)可靠的復(fù)位在設(shè)計(jì)復(fù)位電路時(shí),通常使RST引腳保持4ms以上的高電平,只要RST保持高電平,
9、STC89C52單片機(jī)就會(huì)循環(huán)復(fù)位;當(dāng)RST從高電平變?yōu)榈碗娖綍r(shí),單片機(jī)就從0000H地址開始執(zhí)行程序,在單片機(jī)復(fù)位的有效期間,ALE、PSEN引腳輸出高電平。 B軟件設(shè)計(jì) 2.3主程序 本系統(tǒng)的主模塊程序框圖如圖3-1所示。開始系統(tǒng)初始化,判斷是否有鍵按下,當(dāng)K1鍵按下時(shí),播放第一首歌,當(dāng)K2鍵按下時(shí),播放第二首歌。K3鍵按下停止播放,并返回到系統(tǒng)初始化,再判斷是否有鍵按下。 圖2-3主程序流程圖 2.4子程序 單片機(jī)發(fā)音原理:?jiǎn)纹瑱C(jī)演奏音樂基本是單音頻率,它不包含相應(yīng)幅度的諧波頻率,也就是說不能象電子琴那樣能奏出多種音色的聲音,但一定要弄清楚兩個(gè)
10、概念即可,也就是“音調(diào)”和“節(jié)拍” 。 音調(diào):表示一個(gè)音符唱多高的頻率。 節(jié)拍:表示一個(gè)音符唱多長的時(shí)間。 2.4.1放音子程序 在音樂中所謂“音調(diào)”,其實(shí)就是我們常說的“音高”。在音樂中常把中央C上方的A音定為標(biāo)準(zhǔn)音高,其頻率f=440Hz,其余與其比較。f1和f2為兩個(gè)音符,當(dāng)這兩個(gè)音符的頻率相差一倍時(shí),也即f2=2f1時(shí),則稱f2比f1高一個(gè)倍頻程。以1—i八音區(qū)為例,12個(gè)半音是:1—#1、#1—2、2—#2、#2—3、3—4、4—#4,#4—5、5一#5、#5—6、6—#6、#6—7、7—i 。這12個(gè)音階的分度基本上是以對(duì)數(shù)關(guān)系來劃分的。如果我們只要知道了這十二個(gè)音
11、符的音高,也就是其基本音調(diào)的頻率,我們就可根據(jù)倍頻程的關(guān)系得到其他音符基本音調(diào)的頻率。 確定一個(gè)頻率所對(duì)應(yīng)的定時(shí)器的定時(shí)初值的方法: 以標(biāo)準(zhǔn)音高A為例:標(biāo)準(zhǔn)音高A的頻率f = 440 Hz,其對(duì)應(yīng)的周期為: T = 1/ f = 1/440 =2272μs。因此,需要在單片機(jī)I/O端口輸出周期為T =2272μs的方波脈沖,如圖3-2所示。 圖2-4 方波脈沖 由上圖可知,單片機(jī)上對(duì)應(yīng)蜂鳴器的I/O口來回取反的時(shí)間應(yīng)為: t = T/2 = 2272/2 = 1136μs 這個(gè)時(shí)間t也就是單片機(jī)上定時(shí)器應(yīng)有的中斷觸發(fā)時(shí)間。一般情況下,單片機(jī)奏樂時(shí),其定時(shí)器為工
12、作方式1,它以振蕩器的十二分頻信號(hào)為計(jì)數(shù)脈沖。設(shè)振蕩器頻率為f0,則定時(shí)器的予置初值由下式來確定: t = 12 *(TALL – THL)/ f0 式中TALL = 216 = 65536,THL為定時(shí)器待確定的計(jì)數(shù)初值。因此定時(shí)器的高低計(jì)數(shù)器的初值為: TH = THL / 256 = ( TALL – t* f0/12) / 256 TL = THL % 256 = ( TALL – t* f0/12) %256 將t=1136μs代入上面兩式(注意:計(jì)算時(shí)應(yīng)將時(shí)間和頻率的單位換算一致),即可求出標(biāo)準(zhǔn)音高A在單片機(jī)晶振頻率f0=12Mhz,定時(shí)器在工作方式1下的
13、定時(shí)器高低計(jì)數(shù)器的予置初值為 : TH440Hz = (65536 – 1136 * 12/12) /256 = FBH TL440Hz = (65536 – 1136 * 12/12)%256 = 90H 2.4.2延時(shí)子程序 以為例加以說明,它表示樂譜中以四分音符為節(jié)拍,每一小結(jié)有三拍。如圖3-3所示。 圖2-5 音樂節(jié)拍 其中1 、2 為一拍,3、4、5為一拍,6為一拍共三拍。1 、2的時(shí)長為四分音符的一半,即為八分音符長,3、4的時(shí)長為八分音符的一半,即為十六分音符長,5的時(shí)長為四分音符的一半,即為八分音符長,6的時(shí)長為四分音符長。那么一
14、拍到底該唱多長呢?一般說來,如果樂曲沒有特殊說明,一拍的時(shí)長大約為400—500ms 。我們以一拍的時(shí)長為400ms為例,則當(dāng)以四分音符為節(jié)拍時(shí),四分音符的時(shí)長就為400ms,八分音符的時(shí)長就為200ms,十六分音符的時(shí)長就為100ms。 通過上面關(guān)于一個(gè)音符音調(diào)和節(jié)拍的確定方法,我們就可以在單片機(jī)上實(shí)現(xiàn)演奏音樂了。具體的實(shí)現(xiàn)方法為:將樂譜中的每個(gè)音符的音調(diào)及節(jié)拍變換成相應(yīng)的音調(diào)參數(shù)和節(jié)拍參數(shù),將他們做成數(shù)據(jù)表格,存放在存儲(chǔ)器中,通過程序取出一個(gè)音符的相關(guān)參數(shù),播放該音符,該音符唱完后,接著取出下一個(gè)音符的相關(guān)參數(shù),如此直到播放完畢最后一個(gè)音符,根據(jù)需要也可循環(huán)不停地播放整個(gè)樂曲。另
15、外,對(duì)于樂曲中的休止符,一般將其音調(diào)參數(shù)設(shè)為FFH,F(xiàn)FH,其節(jié)拍參數(shù)與其他音符的節(jié)拍參數(shù)確定方法一致,樂曲結(jié)束用節(jié)拍參數(shù)為00H來表示。 下面給出部分音符(三個(gè)八度音)的頻率以及以單片機(jī)晶振頻率f0=12Mhz,定時(shí)器在工作方式1下的定時(shí)器高低計(jì)數(shù)器的予置初值,如下表3-1所示。 表2-1 音符頻率與定時(shí)器初值關(guān)系表 C調(diào) 音符 1 1# 2 2# 3 4 4# 5 5# 6 6# 7 頻率 Hz 262 277 293 311 329 349 370 392 415 440 466 494 TH/TL F88B F8F2
16、F9B7 FA14 FA66 FAB9 FB03 FB4A FB8F FBCF FBCF FC0B C調(diào) 音符 1 1# 2 2# 3 4 4# 5 5# 6 6# 7 頻率 Hz 523 553 586 621 658 697 739 783 830 879 931 987 TH/TL FC43 FC78 FCAB FCDB FD08 FD33 FD5B FD81 FDA5 FDC7 FDE7 FE05 C調(diào) 音符 1 1# 2 2# 3 4 4# 5 5# 6 6
17、# 7 頻率 Hz 1045 1106 1171 1241 1316 1393 1476 1563 1658 1755 1860 1791 TH/TL FB21 FE3C FE55 FE6D FE84 FE99 FEAD FEC0 FE02 FEE3 FEF3 FF02 表2-1音符頻率與定時(shí)器初值關(guān)系表 2.4.3顯示子程序 顯示子程序流程圖如下 圖2-6 如圖3.3所示,開始后LCD初試化并顯示主界面“music player 1.0",判鍵后取相應(yīng)樂曲編號(hào),通過編號(hào)取相應(yīng)的顯示字符并顯示
18、 2.4.4鍵盤子程序 鍵控子程序主要由播放/暫停子程序、上一曲子程序、下一曲子程序組成,分別由一個(gè)計(jì)數(shù)器中斷和兩個(gè)外部中斷實(shí)現(xiàn)。 播放/暫停子程序 播放/暫停在程序利用內(nèi)部中斷T0口。將T0口設(shè)為計(jì)數(shù)中斷并工作在方式2下。標(biāo)識(shí)符初值賦值為R1=00H,計(jì)數(shù)初值設(shè)為TH0=0FFH,TL0=0FFH。當(dāng)按鍵第一次產(chǎn)生中斷信號(hào)時(shí),播放/暫停子程序改變標(biāo)志符R1,將其賦值為01H。此時(shí)播放器由暫停狀態(tài)進(jìn)入播放狀態(tài)。當(dāng)按鍵第二次產(chǎn)生中斷信號(hào)時(shí),播放/暫停子程序判斷R1是否為02H后,將R1再次賦值為00H。此時(shí),播放器由播放狀態(tài)進(jìn)入暫停狀態(tài)。 鍵控子程序主要由播放/暫停子程
19、序、上一曲子程序、下一曲子程序組成,分別由一個(gè)計(jì)數(shù)器中斷和兩個(gè)外部中斷實(shí)現(xiàn)。 圖2-7 曲目選擇子程序 曲目選擇子程序分為上一曲子程序和下一曲子程序。上一曲和下一曲功能實(shí)現(xiàn)方式類似,分別由外部中斷和外部中斷。下面以實(shí)現(xiàn)上一曲功能為例:首先設(shè)置標(biāo)識(shí)符R7初始值為00H。當(dāng)按鍵產(chǎn)生中斷信號(hào),上一曲中斷子程序改變標(biāo)識(shí)符R7的值為01H并改變曲目R0的值。播放子程序判斷出標(biāo)識(shí)符R7改變后,先將R7賦值為00H,然后跳轉(zhuǎn)到曲目識(shí)別子程序。 圖2-8 第三章 仿真與調(diào)試 Proteus軟件是英國Labcenter electronics公司出版的EDA工具軟件(該軟件中
20、國總代理為廣州風(fēng)標(biāo)電子技術(shù)有限公司)。它不僅具有其它EDA工具軟件的仿真功能,還能仿真單片機(jī)及外圍器件。它是目前最好的仿真單片機(jī)及外圍器件的工具。雖然目前國內(nèi)推廣剛起步,但已受到單片機(jī)愛好者、從事單片機(jī)教學(xué)的教師、致力于單片機(jī)開發(fā)應(yīng)用的科技工作者的青睞。Proteus是世界上著名的EDA工具(仿真軟件),從原理圖布圖、代碼調(diào)試到單片機(jī)與外圍電路協(xié)同仿真,一鍵切換到PCB設(shè)計(jì),真正實(shí)現(xiàn)了從概念到產(chǎn)品的完整設(shè)計(jì)。是目前世界上唯一將電路仿真軟件、PCB設(shè)計(jì)軟件和虛擬模型仿真軟件三合一的設(shè)計(jì)平臺(tái),其處理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、AR
21、M、8086和MSP430等,2010年又增加了Cortex和DSP系列處理器,并持續(xù)增加其他系列處理器模型。在編譯方面,它也支持IAR、Keil和MPLAB等多種編譯器。 3.1軟件調(diào)試 仿真步驟: a正確安裝Keil和Proteus軟件。(最好在同一盤中) b在Keil工程菜單中選擇Target1屬性,在調(diào)試中使用Proteus,具體設(shè)置見圖3-1。 圖3-1 c根據(jù)硬件電路原理圖在Proteus中畫出仿真電路,如圖3-2。 圖3-2 d在Keil中將程序編譯。 集成開發(fā)環(huán)境的窗口中選擇Project →New Project命令將打開建立新工程的對(duì)話框,。
22、 在“保存在”下拉列表框中選擇新建工程將要存儲(chǔ)的文件夾名,在 “文件名”文本框中輸入工程的名稱,注意對(duì)于工程不要添加擴(kuò)展名,單擊“保存”按鈕即可完成一個(gè)工程的創(chuàng)建。選擇對(duì)話框。最后單擊“確定”按鈕即可完成芯片的選擇。 完成芯片的選擇后又回到的集成開發(fā)環(huán)境的窗口,但是這時(shí)該窗口中的工程管理窗口不再是空白,在它的文件選項(xiàng)卡中出現(xiàn)目錄列表Target 1和它的子目錄Source Group 1。 圖3-3 e將對(duì)應(yīng)的*.hex文件載入仿真電路的單片機(jī)中。3-4 圖3-4 f設(shè)置或改變輸入電壓的值如圖3-5,觀察仿真結(jié)果。 圖3-5 3.2硬件調(diào)試 調(diào)試步驟: 1.根
23、據(jù)硬件原理圖將元器件放在單片機(jī)開發(fā)板合適位置。 2.根據(jù)原理圖正確連接器件。 3.用萬用表檢測(cè)器件間是否虛焊。 4.將程序載入單片機(jī),運(yùn)行檢測(cè)。 5.若顯示結(jié)果不對(duì),再次檢查電路是否正確連接或者虛焊。 第4章 操作說明 操作說明及其各部位講解: 1.在51單片機(jī)中輸入軟件程序; 2.把單片機(jī)放入焊接的實(shí)驗(yàn)板中; 3.按下S1單片機(jī)讀入,播放第一首歌曲,同時(shí)燈亮; 4.按下S2播放第二首歌曲,同時(shí)燈亮。歌曲播放完畢燈滅。 第五章 參考文獻(xiàn) [1] 鄭毛.單片機(jī)應(yīng)用基礎(chǔ).人民郵電出版社,2006.6:21-42 [2]
24、李鄧化,彭書華,許曉飛.智能檢測(cè)技術(shù)及儀表.科學(xué)出版社,2007:194-201 [3] 戴佳. 單片機(jī)C51語言應(yīng)用程序設(shè)計(jì). 電子工業(yè)出版社, 2006.7:168-169 [4] 朱民雄.計(jì)算機(jī)語言技術(shù). 北京航空航天大學(xué)出版社,2002.1:103-105 [5] 李鴻. 單片機(jī)原理及應(yīng)用. 湖南大學(xué)出版社. 2004:8:72-73 [6] 劉建清. 單片機(jī)技術(shù). 國防工業(yè)出版社, 2006.8: 104-105 [7] 楊寧,胡學(xué)軍.單片機(jī)與控制技術(shù).北京航空航天大學(xué)出版社,2005-03:306-322 [8] 馬忠梅等.單片機(jī)C語言應(yīng)用程序設(shè)計(jì).北
25、京航空航天大學(xué)出版社,1997:201-211 [9] Kai E, Sawata S, Lkebukuro K et al. Detection of PCR product in solution using surface plasmon resonance .Analytical Chemistry, 1999.7.1 :796~800 [10] Verghese G C, Lang H, Casey L F. Analysis of instability in electrical machines .IEEE Trans on IA, 1986, 22 :853-86
26、4 . [11] Richard Blanchard, James Harden. Mosfets control more power in the same-sized package .Electronic Design, 1982, 12 :107~114 第六章 課程小結(jié) 這次課程設(shè)計(jì)是大學(xué)中學(xué)習(xí)和實(shí)踐的一個(gè)重要環(huán)節(jié)。它綜合的考察了我對(duì)過去所學(xué)的單片機(jī)以及C語言知識(shí)的運(yùn)用能力和對(duì)新知識(shí)吸收、消化能力。 在作此課程設(shè)計(jì)中遇到不少的難點(diǎn),有的原理,根本就不知道怎樣去實(shí)現(xiàn)。最后通過自己仔細(xì)查資料,慢慢就懂了。在實(shí)驗(yàn)中發(fā)現(xiàn),其實(shí)在難編寫的程序都是由一些基礎(chǔ)程序模塊構(gòu)成的,很
27、多的基礎(chǔ)模塊前人就已經(jīng)做好了,只要我們拼湊就行了,當(dāng)然拼湊的工作也不是很簡(jiǎn)單,最重要的還是要自己的基礎(chǔ)扎實(shí),同時(shí),自己的思路要非常的清晰。 現(xiàn)在電子信息技術(shù)發(fā)展迅速,我們現(xiàn)在學(xué)的東西在社會(huì)上也許已經(jīng)或即將被淘汰。因此在學(xué)校要學(xué)的不僅是書本上的東西,更重要的是自學(xué)的能力、獨(dú)立思考的能力和動(dòng)手的能力。要想在競(jìng)爭(zhēng)異常激烈的現(xiàn)代社會(huì)立足,就必須有實(shí)力。在學(xué)校的時(shí)間是最好的學(xué)習(xí)機(jī)會(huì),一定要珍惜好這有限的時(shí)間,多學(xué)知識(shí),盡量充實(shí)自己,為以后進(jìn)入社會(huì)多做準(zhǔn)備。 通過設(shè)計(jì),培養(yǎng)了我獨(dú)立思考、開拓創(chuàng)新、勇于探索的能力使我們進(jìn)一步學(xué)習(xí)與理解計(jì)算機(jī)控制系統(tǒng)的構(gòu)成原理、接口電路與應(yīng)用程序,進(jìn)一步鞏固與綜合
28、專業(yè)基礎(chǔ)知識(shí)和相關(guān)專業(yè)課程知識(shí),提高了我們運(yùn)用理論知識(shí)解決實(shí)際問題的實(shí)踐技能;培養(yǎng)獨(dú)立自主、綜合分析的思維與創(chuàng)新能力,最終使初步具有設(shè)計(jì)小型計(jì)算機(jī)控制系統(tǒng)的硬件及軟件的能力。同時(shí),通過資料搜集、方案分析、系統(tǒng)設(shè)計(jì)與報(bào)告撰寫的一系列過程,得到一次科學(xué)研究工作的初步訓(xùn)練。從而,在專業(yè)知識(shí)與研究方法方面為日后的畢業(yè)設(shè)計(jì)乃至畢業(yè)后的工作奠定良好的基礎(chǔ)。 在指導(dǎo)老師的精心指導(dǎo)下,我查閱了大量的文獻(xiàn)資料,十多天的學(xué)習(xí)、討論、設(shè)計(jì)、調(diào)試,最終完成了設(shè)計(jì)方案。通過設(shè)計(jì),我們不僅掌握了設(shè)計(jì)的基本步驟,還學(xué)會(huì)了科學(xué)系統(tǒng)的設(shè)計(jì)方法,拓寬了知識(shí)面。 第七章 附錄 7.1元器件清單 序號(hào) 名稱 型號(hào) 數(shù)
29、量 1 排阻 10k 1 2 電阻 4.7K 1 3 電解電容 10uF/25V 1 4 單片機(jī)最小系統(tǒng) STC89C52RC 1 5 按鍵 3 6 三極管 NPN 1 7 電容 30p 2 8 電容 100u 1 9 電容 100n 2 10 電容 220u 1 11 放大器 Uln2003 1 12 電池 1 13 晶振 11.0592 1 14 三端穩(wěn)壓器 7805 1 15 電池套 1 16 流水燈 8 7.2原理圖
30、
7.3實(shí)物
7.4程序
#ifndef uchar
#define uchar unsigned char
#endif
#ifndef uint
#define uint unsigned int
#endif
#include
31、extern void key_init(); //按鍵初始化
extern uchar key_scan(); //鍵值掃描
/********變量聲明**********/
//sbit led=P1^0;
/********延時(shí)子函數(shù)**********/
void Delay1ms(unsigned int count)
{
unsigned int i,j;
for(i=0;i 32、**************************************
//揮著翅膀的女孩
unsigned char code Music_Girl[]={
0x17,0x02, 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x15,0x03,
0x16,0x03, 0x17,0x03, 0x17,0x03, 0x17,0x03, 0x18,0x03,
0x19,0x02, 0x16,0x03, 0x17,0x03, 0x18,0x02, 0x18,0x03,
0x17,0x03, 0x15,0x02, 0x18,0x03, 0x17,0x03, 0 33、x18,0x02,
0x10,0x03, 0x15,0x03, 0x16,0x02, 0x15,0x03, 0x16,0x03,
0x17,0x02, 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x1A,0x03,
0x1B,0x03, 0x1F,0x03, 0x1F,0x03, 0x17,0x03, 0x18,0x03,
0x19,0x02, 0x16,0x03, 0x17,0x03, 0x18,0x03, 0x17,0x03,
0x18,0x03, 0x1F,0x03, 0x1F,0x02, 0x16,0x03, 0x17,0x03,
0x18,0x03 34、, 0x17,0x03, 0x18,0x03, 0x20,0x03, 0x20,0x02,
0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x20,0x03, 0x21,0x03,
0x20,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x1F,0x03,
0x1B,0x03, 0x19,0x03, 0x19,0x03, 0x15,0x03, 0x1A,0x66,
0x1A,0x03, 0x19,0x03, 0x15,0x03, 0x15,0x03, 0x17,0x03,
0x16,0x66, 0x17,0x04, 0x18,0x 35、04, 0x18,0x03, 0x19,0x03,
0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x20,0x03, 0x21,0x03,
0x20,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x1F,0x03,
0x1B,0x03, 0x19,0x03, 0x19,0x03, 0x15,0x03, 0x1A,0x66,
0x1A,0x03, 0x19,0x03, 0x19,0x03, 0x1F,0x03, 0x1B,0x03,
0x1F,0x00, 0x1A,0x03, 0x1A,0x03, 0x1A,0x03, 0x1B, 36、0x03,
0x1B,0x03, 0x1A,0x03, 0x19,0x03, 0x19,0x02, 0x17,0x03,
0x15,0x17, 0x15,0x03, 0x16,0x03, 0x17,0x03, 0x18,0x03,
0x17,0x04, 0x18,0x0E, 0x18,0x03, 0x17,0x04, 0x18,0x0E,
0x18,0x66, 0x17,0x03, 0x18,0x03, 0x17,0x03, 0x18,0x03,
0x20,0x03, 0x20,0x02, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66,
0x20,0x03, 0x 37、21,0x03, 0x20,0x03, 0x1F,0x03, 0x1B,0x03,
0x1F,0x66, 0x1F,0x04, 0x1B,0x0E, 0x1B,0x03, 0x19,0x03,
0x19,0x03, 0x15,0x03, 0x1A,0x66, 0x1A,0x03, 0x19,0x03,
0x15,0x03, 0x15,0x03, 0x17,0x03, 0x16,0x66, 0x17,0x04,
0x18,0x04, 0x18,0x03, 0x19,0x03, 0x1F,0x03, 0x1B,0x03,
0x1F,0x66, 0x20,0x03, 0x21,0x03, 38、0x20,0x03, 0x1F,0x03,
0x1B,0x03, 0x1F,0x66, 0x1F,0x03, 0x1B,0x03, 0x19,0x03,
0x19,0x03, 0x15,0x03, 0x1A,0x66, 0x1A,0x03, 0x19,0x03,
0x19,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x00, 0x18,0x02,
0x18,0x03, 0x1A,0x03, 0x19,0x0D, 0x15,0x03, 0x15,0x02,
0x18,0x66, 0x16,0x02, 0x17,0x02, 0x15,0x00, 0x00,0x00 39、};
//同一首歌
unsigned char code Music_Same[]={
0x0F,0x01, 0x15,0x02, 0x16,0x02, 0x17,0x66, 0x18,0x03,
0x17,0x02, 0x15,0x02, 0x16,0x01, 0x15,0x02, 0x10,0x02,
0x15,0x00, 0x0F,0x01, 0x15,0x02, 0x16,0x02, 0x17,0x02,
0x17,0x03, 0x18,0x03, 0x19,0x02, 0x15,0x02, 0x18,0x66,
0x17,0x03, 0x19,0x02, 0x16,0 40、x03, 0x17,0x03, 0x16,0x00,
0x17,0x01, 0x19,0x02, 0x1B,0x02, 0x1B,0x70, 0x1A,0x03,
0x1A,0x01, 0x19,0x02, 0x19,0x03, 0x1A,0x03, 0x1B,0x02,
0x1A,0x0D, 0x19,0x03, 0x17,0x00, 0x18,0x66, 0x18,0x03,
0x19,0x02, 0x1A,0x02, 0x19,0x0C, 0x18,0x0D, 0x17,0x03,
0x16,0x01, 0x11,0x02, 0x11,0x03, 0x10,0x03, 0x0F 41、,0x0C,
0x10,0x02, 0x15,0x00, 0x1F,0x01, 0x1A,0x01, 0x18,0x66,
0x19,0x03, 0x1A,0x01, 0x1B,0x02, 0x1B,0x03, 0x1B,0x03,
0x1B,0x0C, 0x1A,0x0D, 0x19,0x03, 0x17,0x00, 0x1F,0x01,
0x1A,0x01, 0x18,0x66, 0x19,0x03, 0x1A,0x01, 0x10,0x02,
0x10,0x03, 0x10,0x03, 0x1A,0x0C, 0x18,0x0D, 0x17,0x03,
0x16,0x00, 0 42、x0F,0x01, 0x15,0x02, 0x16,0x02, 0x17,0x70,
0x18,0x03, 0x17,0x02, 0x15,0x03, 0x15,0x03, 0x16,0x66,
0x16,0x03, 0x16,0x02, 0x16,0x03, 0x15,0x03, 0x10,0x02,
0x10,0x01, 0x11,0x01, 0x11,0x66, 0x10,0x03, 0x0F,0x0C,
0x1A,0x02, 0x19,0x02, 0x16,0x03, 0x16,0x03, 0x18,0x66,
0x18,0x03, 0x18,0x02, 0x17,0x03, 43、 0x16,0x03, 0x19,0x00,
0x00,0x00 };
//***********************************************************************************
void main()
{
// uchar key_buff;
// key_3_interrupt();
key_3int();
InitialSound();
while(1)
{
// if(key_flag==1)
// {
// uchar key_buff=0;
// key_buff=k 44、ey_scan();
// }
switch(key_value)
{
case 1:
{
// key_value=0;
ledd = 0xfe;
Play(Music_Girl,0,3,360);
Delay1ms(100);
}
break;
case 2:
{
// key_value=0;
ledd = 0xfd;
Play(Music_Same,0,3,360);
Delay1ms(100);
}
break;
case 3:
{
/ 45、/ uchar i;
// led=0;
ledd = 0xf7;
// key_value=0;
// for(i=0;i<20;i++)
// led=!led;
Delay1ms(100);
}
break;
default:
break;
}
/* if(key_value==1)
{
key_value=0;
ledd = 0xf7;
Play(Music_Girl,0,3,360);
Delay1ms(100);
}
if(key_value==2 46、)
{
key_value=0;
ledd = 0xfb;
Play(Music_Same,0,3,360);
Delay1ms(100);
}
if(key_value==3)
{
uchar i;
led=0;
ledd = 0xfe;
key_value=0;
for(i=0;i<20;i++)
led=!led;
Delay1ms(100);
}
} */
}
}
/*======================================= 47、=====================================
*******************************鍵盤部分說明***********************
============================================================================*/
#include"key_3.h"
uchar8 key_value=0;
/*========================================================================= 48、===
**函數(shù)名稱:key_3_interrupt()
**函數(shù)參數(shù):無
**返回?cái)?shù)值:
**函數(shù)功能:鍵盤中斷服務(wù)函數(shù)
**函數(shù)描述:無
============================================================================*/
void key_3_interrupt() interrupt 0
{
bit x = 0;
EX0 = 0;
key_4delay(5);
key_value = read_key();
while(x==0)
{
x = keyint;
;
49、 }
EX0 = 1;
}
/*============================================================================
**函數(shù)名稱:key_3delay(usint8 x)
**函數(shù)參數(shù):x 需延時(shí)的ms數(shù)
**返回?cái)?shù)值:無
**函數(shù)功能:鍵盤中斷服務(wù)函數(shù)
**函數(shù)描述:無
============================================================================*/
void key_3delay(usint8 x)
{
usint 50、8 i;
for(x;x>0;x--)
{
for(i=124;i>0;i--)
{
;
}
}
}
/*============================================================================
**函數(shù)名稱:read_key()
**函數(shù)參數(shù):無
**返回?cái)?shù)值:
**函數(shù)功能:鍵盤中斷服務(wù)函數(shù)
**函數(shù)描述:無
=========================================================================== 51、=*/
uchar8 read_key()
{
uchar8 key,key1;
key_port = 0xff;
key1 = key_port;
switch(key1)
{
case 0xfe:
key = 1; break;
case 0xfd:
key = 2; break;
case 0xf7:
key = 3; break;
default:
break;
}
return key;
}
/*====================================== 52、======================================
**函數(shù)名稱:key_3int()
**函數(shù)參數(shù):無
**返回?cái)?shù)值:
**函數(shù)功能:鍵盤初始化函數(shù)/模塊測(cè)試時(shí)的主函數(shù)
**函數(shù)描述:無
============================================================================*/
//void main()
void key_4int()
{
IT0 = 1; //外部中INT0中斷觸發(fā)方式設(shè)置,0:電平控制 1:脈沖觸發(fā)。
EX0 = 1; //外部 53、中斷0,允許中斷
EA = 1; //開放總中斷。
// _nop_(); //
// _nop_();
// _nop_();
// _nop_();
// _nop_();
// while(1)
// {
// ;
// }
}
頭文件
/*============================================================================
************************鍵盤部分端口及變量申明********************************
= 54、===========================================================================*/
#ifndef key_3_H
#define key_3_H
/************包含文件說明***********/
#include"reg52.h"
#include"datatypedef.h"
#include "intrins.h"
/*********外部調(diào)用函數(shù)申明**********/
extern void key_3delay(usint8 x); //延時(shí)子程序
55、extern uchar8 read_key(); //讀鍵值子函數(shù)
extern void key_4int(); //鍵盤部分初始化子函數(shù)
/*********外部使用變量申明**********/
extern uchar8 key_value; //鍵值
/*************鍵盤接口**************/
#define key_port P2 //鍵盤接口
sbit key1 = P2^0; //按鍵1 鍵值為1
sbit key2 = P2^1; //按鍵2 鍵值為2
sbit key4 = P2^2; //按鍵3 鍵值為3
sbit keyint = P3^2; //按鍵中斷接線端口
#endif
- 溫馨提示:
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ì)自己和他人造成任何形式的傷害或損失。