課程設(shè)計(jì)---簡(jiǎn)易電子琴設(shè)計(jì)與制作.doc_第1頁(yè)
課程設(shè)計(jì)---簡(jiǎn)易電子琴設(shè)計(jì)與制作.doc_第2頁(yè)
課程設(shè)計(jì)---簡(jiǎn)易電子琴設(shè)計(jì)與制作.doc_第3頁(yè)
課程設(shè)計(jì)---簡(jiǎn)易電子琴設(shè)計(jì)與制作.doc_第4頁(yè)
課程設(shè)計(jì)---簡(jiǎn)易電子琴設(shè)計(jì)與制作.doc_第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余22頁(yè)可下載查看

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

簡(jiǎn)易電子琴課程設(shè)計(jì)- 27 - 課程設(shè)計(jì)實(shí)訓(xùn)報(bào)告設(shè)計(jì)題目:簡(jiǎn)易電子琴設(shè)計(jì)與制作 目 錄1.實(shí)訓(xùn)課題32.設(shè)計(jì)目的33.設(shè)計(jì)原理34.硬件電路45.軟件流程86.Proteus 仿真147.C 語(yǔ)言源程序188.元件清單259.心得體會(huì)26一設(shè)計(jì)的課題:簡(jiǎn)易電子琴的設(shè)計(jì)與制作二課程設(shè)計(jì)的目的:培養(yǎng)和鍛煉在校學(xué)生綜合應(yīng)用所學(xué)理論知識(shí)解決實(shí)際問(wèn)題能力。為了鞏固和運(yùn)用所學(xué)課程,理論聯(lián)系實(shí)際,提高分析、解決實(shí)際問(wèn)題以及團(tuán)隊(duì)的合作能力,旨培養(yǎng)在培養(yǎng)大學(xué)生理論聯(lián)系實(shí)際、敢于動(dòng)手、善于動(dòng)手和獨(dú)立自主解決設(shè)計(jì)實(shí)踐中遇到的各種問(wèn)題能力的一種較好方法。電子琴能夠彈奏出美妙的音符,對(duì)我們充滿了吸引同時(shí)也讓我們充滿了好奇,通過(guò)此次的課程設(shè)計(jì)讓我們親手來(lái)揭開(kāi)電子琴神秘的面紗。讓我們知道我們也是有能力來(lái)制作出一個(gè)簡(jiǎn)易的電子琴的。三、課程設(shè)計(jì)原理:電子琴是由4*4個(gè)組成16個(gè)按鈕矩陣,設(shè)計(jì)成16個(gè)音。然后利用三極管放大的原理使聲音變大,可通過(guò)16個(gè)按鈕組成16種不同的音節(jié)。本文的主要內(nèi)容是用AT89S51單片機(jī)為核心控制元件,設(shè)計(jì)一個(gè)電子琴。以單片機(jī)作為主控核心,與鍵盤(pán)、揚(yáng)聲器等模塊組成核心主控制模塊,在主控模塊上設(shè)有16個(gè)按鍵和揚(yáng)聲器。聲音的產(chǎn)生方法:一首音樂(lè)是許多不同的音階組成的,而每個(gè)音階對(duì)應(yīng)著不同的頻率,這樣我們就可以利用不同的頻率的組合,即可構(gòu)成我們所想要的音樂(lè)了,當(dāng)然對(duì)于單片機(jī)來(lái)產(chǎn)生不同的頻率非常方便,我們可以利用單片機(jī)的定時(shí)/計(jì)數(shù)器T0來(lái)產(chǎn)生這樣方波頻率信號(hào),因此,我們只要把一首歌曲的音階對(duì)應(yīng)頻率關(guān)系弄正確即可。四、硬件電路(一)、系統(tǒng)板硬件連線 系統(tǒng)板硬件連線如圖1-1所示,發(fā)生模塊,鍵盤(pán)模塊,及電源模塊連接如下:1.把“單片機(jī)系統(tǒng)”區(qū)域中的P2.0端口用導(dǎo)線連接到“音頻放大模塊”區(qū)域中的SPK IN端口上;2.把“單片機(jī)系統(tǒng)”區(qū)域中的P1.0P1.7端口用8芯排線連接到“4X4行列式鍵盤(pán)”區(qū)域中的C1C4R1R4端口上;3.把電源電路與揚(yáng)聲器連接,直接對(duì)揚(yáng)聲器供電。(二)、主要芯片簡(jiǎn)介1、AT89S51簡(jiǎn)介AT89S51是一個(gè)低功耗,高性能CMOS 8位單片機(jī),片內(nèi)含4k Bytes ISP(In-system programmable)的可反復(fù)擦寫(xiě)1000次的Flash只讀程序存儲(chǔ)器,器件采用ATMEL公司的高密度、非易失性存儲(chǔ)技術(shù)制造,兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng)及80C51引腳結(jié)構(gòu),芯片內(nèi)集成了通用8位中央處理器和ISP Flash存儲(chǔ)單元,功能強(qiáng)大的微型計(jì)算機(jī)的AT89S51可為許多嵌入式控制應(yīng)用系統(tǒng)提供高性價(jià)比的解決方案。 AT89S51具有如下特點(diǎn):40個(gè)引腳(如圖1-2所示),4k Bytes Flash片內(nèi)程序存儲(chǔ)器,128 bytes的隨機(jī)存取數(shù)據(jù)存儲(chǔ)器(RAM),32個(gè)外部雙向輸入/輸出(I/O)口,5個(gè)中斷優(yōu)先級(jí)2層中斷嵌套中斷,2個(gè)16位可編程定時(shí)計(jì)數(shù)器,2個(gè)全雙工串行通信口,看門(mén)狗(WDT)電路,片內(nèi)時(shí)鐘振蕩器。 此外,AT89S51設(shè)計(jì)和配置了振蕩頻率可為0Hz并可通過(guò)軟件設(shè)置省電模式。空閑模式下,CPU暫停工作,而RAM定時(shí)計(jì)數(shù)器,串行口,外中斷系統(tǒng)可繼續(xù)工作,掉電模式凍結(jié)振蕩器而保存RAM的數(shù)據(jù),停止芯片其它功能直至外中斷激活或硬件復(fù)位。同時(shí)該芯片還具有PDIP、TQFP和PLCC等三種封裝形式,以適應(yīng)不同產(chǎn)品的需求。主要功能特性兼容MCS-51指令系統(tǒng) 32個(gè)雙向I/O口 2個(gè)16位可編程定時(shí)/計(jì)數(shù) 器 全雙工UART串行中斷口線 2個(gè)外部中斷源 中斷喚醒省電模式圖1-2 引腳圖 看門(mén)狗(WDT)電路 靈活的ISP字節(jié)和分頁(yè)編程 4k可反復(fù)擦寫(xiě)ISP Flash ROM 4.5-5.5V工作電壓 時(shí)鐘頻率0-33MHz 128*8bit內(nèi)部RAM 低功耗空閑和省電模式 3級(jí)加密位 軟件設(shè)置空閑和省電功能 雙數(shù)據(jù)寄存器指針2、7805簡(jiǎn)介: 電子產(chǎn)品中,常見(jiàn)的三端穩(wěn)壓集成電路有正電壓輸出的78 系列和負(fù)電壓輸出的79系列。顧名思義,三端IC是指這種穩(wěn)壓用的集成電路,只有三條引腳輸出,分別是輸入端、接地端和輸出端。它的樣子象是普通的三極管,TO- 220 的標(biāo)準(zhǔn)封裝,也有9013樣子的TO-92封裝。 用78/79系列三端穩(wěn)壓IC來(lái)組成穩(wěn)壓電源所需的外圍元件極少,電路內(nèi)部還有過(guò)流、過(guò)熱及調(diào)整管的保護(hù)電路,使用起來(lái)可靠、方便,而且價(jià)格便宜。該系列集成穩(wěn)壓IC型號(hào)中的78或79后面的數(shù)字代表該三端集成穩(wěn)壓電路的輸出電壓,如7806表示輸出電壓為正6V,7909表示輸出電壓為負(fù)9V。 因?yàn)槿斯潭煞€(wěn)壓電路的使用方便,電子制作中經(jīng)常采用。五、軟件流程(一)、4X4行列式鍵盤(pán)識(shí)別及顯示組成鍵盤(pán)的按鍵有機(jī)械式、電容式、導(dǎo)電橡膠式、薄膜式多種,但不管什么形式,其作用都是一個(gè)使電路接通與斷開(kāi)的開(kāi)關(guān)。目前微機(jī)系統(tǒng)中使用的鍵盤(pán)按其功能不同,通常可分為編碼鍵盤(pán)和非編碼鍵盤(pán)兩種基本類型。 編碼鍵盤(pán):鍵盤(pán)本身帶有實(shí)現(xiàn)接口主要功能所需的硬件電路。不僅能自動(dòng)檢測(cè)被按下的鍵,并完成去抖動(dòng)、防串鍵等功能,而且能提供與被按鍵功能對(duì)應(yīng)的鍵碼(如ASCII碼)送往CPU。所以,編碼鍵盤(pán)接口簡(jiǎn)單、使用方便。但由于硬件電路較復(fù)雜,因而價(jià)格較貴。 非編碼鍵盤(pán):鍵盤(pán)只簡(jiǎn)單地提供按鍵開(kāi)關(guān)的行列矩陣。有關(guān)按鍵的識(shí)別、鍵碼的確定與輸入、去抖動(dòng)等功能均由軟件完成。目前微機(jī)系統(tǒng)中,一般為了降低成本大多數(shù)采用非編碼鍵盤(pán)。 鍵盤(pán)接口必須具有去抖動(dòng)、防串鍵、按鍵識(shí)別和鍵碼產(chǎn)生4個(gè)基本功能: (1)去抖動(dòng):每個(gè)按鍵在按下或松開(kāi)時(shí),都會(huì)產(chǎn)生短時(shí)間的抖動(dòng)。抖動(dòng)的持續(xù)時(shí)間與鍵的質(zhì)量相關(guān),一般為520mm。所謂抖動(dòng)是指在識(shí)別被按鍵是必須避開(kāi)抖動(dòng)狀態(tài),只有處在穩(wěn)定接通或穩(wěn)定斷開(kāi)狀態(tài)才能保證識(shí)別正確無(wú)誤。去抖問(wèn)題可通過(guò)軟件延時(shí)或硬件電路解決。 (2)防串鍵:防串鍵是為了解決多個(gè)鍵同時(shí)按下或者前一按鍵沒(méi)有釋放又有新的按鍵按下時(shí)產(chǎn)生的問(wèn)題。常用的方法有雙鍵鎖定和N鍵輪回兩種方法。雙鍵鎖定,是當(dāng)有兩個(gè)或兩個(gè)以上的按鍵按下時(shí),只把最后釋放的鍵當(dāng)作有效鍵并產(chǎn)生相應(yīng)的鍵碼。N鍵輪回,是當(dāng)檢測(cè)到有多個(gè)鍵被按下時(shí),能根據(jù)發(fā)現(xiàn)它們的順序依次產(chǎn)生相應(yīng)鍵的鍵碼。 (3)被按鍵識(shí)別:如何識(shí)別被按鍵是接口解決的主要問(wèn)題,一般可通過(guò)軟硬結(jié)合的方法完成。常用的方法有行掃描法和線反轉(zhuǎn)法兩種。行掃描法的基本思想是,由程序?qū)︽I盤(pán)逐行掃描,通過(guò)檢測(cè)到的列輸出狀態(tài)來(lái)確定閉合鍵,為此,需要設(shè)置入口、輸出口一個(gè),該方法在微機(jī)系統(tǒng)中被廣泛使用。線反轉(zhuǎn)法的基本思想是通過(guò)行列顛倒兩次掃描來(lái)識(shí)別閉合鍵,為此需要提供兩個(gè)可編程的雙向輸入/輸出端口。 (4)鍵碼產(chǎn)生:為了從鍵的行列坐標(biāo)編碼得到反映鍵功能的鍵碼,一般在內(nèi)存區(qū)中建立一個(gè)鍵盤(pán)編碼表,通過(guò)查表獲得被按鍵的鍵碼。用AT89S51的并行口P1接44矩陣鍵盤(pán),以P1.0P1.3作輸入線,以P1.4P1.7作輸出線。(二)、系統(tǒng)板上硬件連線設(shè)計(jì)1、把“單片機(jī)系統(tǒng)”區(qū)域中的P1.0P1.7端口用8芯排線連接到“4X4行列式鍵盤(pán)”區(qū)域中的C1C4R1R4端口上;2、把揚(yáng)聲器的基極輸出接單片機(jī)的P2.0端口;3、在單片機(jī)31腳和9腳接復(fù)位電路;4、在單片機(jī)19腳和18腳接12MHZ的晶體振蕩電路。(三)、程序設(shè)計(jì)內(nèi)容1、44矩陣鍵盤(pán)識(shí)別處理,每個(gè)按鍵有它的行值和列值,行值和列值的組合就是識(shí)別這個(gè)按鍵的編碼。矩陣的行線和列線分別通過(guò)兩并行接口和CPU通信。每個(gè)按鍵的狀態(tài)同樣需變成數(shù)字量“0”和“1”,開(kāi)關(guān)的一端(列線)通過(guò)電阻接VCC,而接地是通過(guò)程序輸出數(shù)字“0”實(shí)現(xiàn)的。2、鍵盤(pán)處理程序的任務(wù)是:確定有無(wú)鍵按下,判斷哪一個(gè)鍵按下,鍵的功能是什么;還要消除按鍵在閉合或斷開(kāi)時(shí)的抖動(dòng)。兩個(gè)并行口中,一個(gè)輸出掃描碼,使按鍵逐行動(dòng)態(tài)接地,另一個(gè)并行口輸入按鍵狀態(tài),由行掃描值和回饋信號(hào)共同形成鍵編碼而識(shí)別按鍵,通過(guò)軟件查表,查出該鍵的功能。電路圖如下(四)、音樂(lè)產(chǎn)生的方法一首音樂(lè)是許多不同的音階組成的,而每個(gè)音階對(duì)應(yīng)著不同的頻率,這樣我們就可以利用不同的頻率的組合,即可構(gòu)成我們所想要的音樂(lè)了,當(dāng)然對(duì)于單片機(jī)來(lái)產(chǎn)生不同的頻率非常方便,我們可以利用單片機(jī)的定時(shí)/計(jì)數(shù)器T0來(lái)產(chǎn)生這樣方波頻率信號(hào),因此,我們只要把一首歌曲的音階對(duì)應(yīng)頻率關(guān)系正確即可。若要產(chǎn)生音頻脈沖,只要算出某一音頻的周期(1/頻率),再將此周期除以2,即為半周期的時(shí)間。利用定時(shí)器計(jì)時(shí)半周期時(shí)間,每當(dāng)計(jì)時(shí)終止后就將P1.0反相,然后重復(fù)計(jì)時(shí)再反相。就可在P1.0引腳上得到此頻率的脈沖。 利用AT89S51的內(nèi)部定時(shí)器使其工作計(jì)數(shù)器模式(MODE1)下,改變計(jì)數(shù)值TH0及TL0以產(chǎn)生不同頻率的方法產(chǎn)生不同音階,例如,頻率為523Hz,其周期T1/5231912s,因此只要令計(jì)數(shù)器計(jì)時(shí)956s/1s956,每計(jì)數(shù)956次時(shí)將I/O反相,就可得到中音DO(523Hz)。計(jì)數(shù)脈沖值與頻率的關(guān)系式(如式2-1所示)是:Nfi2fr 2-1式中,N是計(jì)數(shù)值;fi是機(jī)器頻率(晶體振蕩器為12MHz時(shí),其頻率為1MHz);fr是想要產(chǎn)生的頻率。其計(jì)數(shù)初值T的求法如下:T65536N65536fi2fr T65536N65536fi2fr6553610000002fr65536500000/fr低音DO的T65536500000/26263627中音DO的T65536500000/52364580高音DO的T65536500000/104665059單片機(jī)12MHZ晶振,高中低音符與計(jì)數(shù)T0相關(guān)的計(jì)數(shù)值如表2-2所示表2-2 音符頻率表Table 2-2 notes the frequency table音符頻率(HZ)簡(jiǎn)譜碼(T值)音符頻率(HZ)簡(jiǎn)譜碼(T值)低1DO26263628# 4 FA#74064860#1DO#27763731中 5 SO78464898低2RE29463835# 5 SO#83164934#2 RE#31163928中 6 LA88064968低 3 M33064021# 693264994低 4 FA34964103中 7 SI98865030# 4 FA#37064185高 1 DO104665058低 5 SO39264260# 1 DO#110965085# 5 SO#41564331高 2 RE117565110低 6 LA44064400# 2 RE#124565134# 646664463高 3 M131865157低 7 SI49464524高 4 FA139765178中 1 DO52364580# 4 FA#148065198# 1 DO#55464633高 5 SO156865217中 2 RE58764684# 5 SO#166165235# 2 RE#62264732高 6 LA176065252中 3 M65964777# 6186565268中 4 FA69864820高 7 SI196765283我們要為這個(gè)音符建立一個(gè)表格,單片機(jī)通過(guò)查表的方式來(lái)獲得相應(yīng)的數(shù)據(jù) 低音019之間,中音在2039之間,高音在4059之間TABLE: DW 0, 63628, 63835, 64021, 64103, 64260, 64400, 64524, 0, 0DW 0, 63731, 63928, 0, 64185, 64331, 64463, 0, 0, 0DW 0, 64580, 64684, 64777, 64820, 64898, 64968, 65030, 0, 0DW 0, 64633, 64732, 0, 64860, 64934, 64994, 0, 0, 0DW 0, 65058, 65110,65157, 65178, 65217, 65252, 65283, 0, 0DW 0, 65085, 65134, 0, 65198, 65235, 65268, 0, 0, 0DW 0音樂(lè)的音拍,一個(gè)節(jié)拍為單位(C調(diào))(如表2-3所示)表2-3 曲調(diào)值表Table 2-3 Tune the value of the table曲調(diào)值DELAY曲調(diào)值DELAY調(diào)4/4125ms調(diào)4/462ms調(diào)3/4187ms調(diào)3/494ms調(diào)2/4250ms調(diào)2/4125ms對(duì)于不同的曲調(diào)我們也可以用單片機(jī)的另外一個(gè)定時(shí)/計(jì)數(shù)器來(lái)完成。琴鍵處理程序,根據(jù)檢測(cè)到得按鍵值,查詢音律表,給計(jì)時(shí)器賦值,發(fā)出相應(yīng)頻率的聲音。對(duì)音調(diào)的控制:根據(jù)不同的按鍵,對(duì)定時(shí)器T1送入不同的初值,調(diào)節(jié)T1的溢出時(shí)間,這樣就可以輸出不同音調(diào)頻率的方波。不同音調(diào)下各個(gè)音階的定時(shí)器。在這個(gè)程序中用到了兩個(gè)定時(shí)/計(jì)數(shù)器來(lái)完成的。其中T0用來(lái)產(chǎn)生音符頻率,T1用來(lái)產(chǎn)生音拍。六、proteus仿真七、程序#include /包含51單片機(jī)寄存器定義的頭文件sbit P14=P14; /將P14位定義為P1.4引腳sbit P15=P15; /將P15位定義為P1.5引腳sbit P16=P16; /將P16位定義為P1.6引腳sbit P17=P17; /將P17位定義為P1.7引腳unsigned char keyval; /定義變量?jī)?chǔ)存按鍵值sbit sound=P20; /將sound位定義為P3.7unsigned int C; /全局變量,儲(chǔ)存定時(shí)器的定時(shí)常數(shù)unsigned int f; /全局變量,儲(chǔ)存音階的頻率/以下是C調(diào)低音的音頻宏定義#define l_dao 262 /將“l(fā)_dao”宏定義為低音“1”的頻率262Hz#define l_re 286 /將“l(fā)_re”宏定義為低音“2”的頻率286Hz#define l_mi 311 /將“l(fā)_mi”宏定義為低音“3”的頻率311Hz#define l_fa 349 /將“l(fā)_fa”宏定義為低音“4”的頻率349Hz#define l_sao 392 /將“l(fā)_sao”宏定義為低音“5”的頻率392Hz#define l_la 440 /將“l(fā)_a”宏定義為低音“6”的頻率440Hz#define l_xi 494 /將“l(fā)_xi”宏定義為低音“7”的頻率494Hz /以下是C調(diào)中音的音頻宏定義#define dao 523 /將“dao”宏定義為中音“1”的頻率523Hz#define re 587 /將“re”宏定義為中音“2”的頻率587Hz#define mi 659 /將“mi”宏定義為中音“3”的頻率659Hz#define fa 698 /將“fa”宏定義為中音“4”的頻率698Hz#define sao 784 /將“sao”宏定義為中音“5”的頻率784Hz#define la 880 /將“l(fā)a”宏定義為中音“6”的頻率880Hz#define xi 987 /將“xi”宏定義為中音“7”的頻率53 /以下是C調(diào)高音的音頻宏定義#define h_dao 1046 /將“h_dao”宏定義為高音“1”的頻率1046Hz#define h_re 1174 /將“h_re”宏定義為高音“2”的頻率1174Hz#define h_mi 1318 /將“h_mi”宏定義為高音“3”的頻率1318Hz#define h_fa 1396 /將“h_fa”宏定義為高音“4”的頻率1396Hz#define h_sao 1567 /將“h_sao”宏定義為高音“5”的頻率1567Hz#define h_la 1760 /將“h_la”宏定義為高音“6”的頻率1760Hz#define h_xi 1975 /將“h_xi”宏定義為高音“7”的頻率1975Hz/*函數(shù)功能:軟件延時(shí)子程序*/ void delay20ms(void) unsigned char i,j;for(i=0;i100;i+) for(j=0;j60;j+) ; /*函數(shù)功能:節(jié)拍的延時(shí)的基本單位,延時(shí)250ms*/void delay() unsigned char i,j; for(i=0;i250;i+) for(j=0;j250;j+) ; /*函數(shù)功能:輸出音頻入口參數(shù):F*/void Output_Sound(void) C=(46083/f)*10; /計(jì)算定時(shí)常數(shù) TH0=(8192-C)/32; /可證明這是13位計(jì)數(shù)器TH0高8位的賦初值方法 TL0=(8192-C)%32; /可證明這是13位計(jì)數(shù)器TL0低5位的賦初值方法 TR0=1; /開(kāi)定時(shí)T0 delay(); /延時(shí)200ms,播放音頻 TR0=0; /關(guān)閉定時(shí)器 sound=1; /關(guān)閉蜂鳴器 keyval=0xff; /播放按鍵音頻后,將按鍵值更改,停止播放/*函數(shù)功能:主函數(shù)*/void main(void) EA=1; /開(kāi)總中斷 ET0=1; /定時(shí)器T0中斷允許ET1=1; /定時(shí)器T1中斷允許TR1=1; /定時(shí)器T1啟動(dòng),開(kāi)始鍵盤(pán)掃描 TMOD=0x10; /分別使用定時(shí)器T1的模式1,T0的模式0 TH1=(65536-500)/256; /定時(shí)器T1的高8位賦初值 TL1=(65536-500)%256; /定時(shí)器T1的高8位賦初值 while(1) /無(wú)限循環(huán) switch(keyval)case 1:f=dao; /如果第1個(gè)鍵按下,將中音1的頻率賦給fOutput_Sound(); /轉(zhuǎn)去計(jì)算定時(shí)常數(shù) break;case 2:f=l_xi;/如果第2個(gè)鍵按下,將低音7的頻率賦給fOutput_Sound(); /轉(zhuǎn)去計(jì)算定時(shí)常數(shù) break; case 3:f=l_la; /如果第3個(gè)鍵按下,將低音6的頻率賦給Output_Sound(); /轉(zhuǎn)去計(jì)算定時(shí)常數(shù) break;case 4:f=l_sao; /如果第4個(gè)鍵按下,將低音5的頻率賦給fOutput_Sound(); /轉(zhuǎn)去計(jì)算定時(shí)常數(shù) break;case 5:f=sao; /如果第5個(gè)鍵按下,將中音5的頻率賦給fOutput_Sound(); /轉(zhuǎn)去計(jì)算定時(shí)常數(shù) break;case 6:f=fa; /如果第6個(gè)鍵按下,將中音4的頻率賦給fOutput_Sound();/轉(zhuǎn)去計(jì)算定時(shí)常數(shù) break;case 7:f=mi; /如果第7個(gè)鍵按下,將中音3的頻率賦給fOutput_Sound(); /轉(zhuǎn)去計(jì)算定時(shí)常數(shù) break; case 8:f=re; /如果第8個(gè)鍵按下,將中音2的頻率賦給fOutput_Sound(); /轉(zhuǎn)去計(jì)算定時(shí)常數(shù) break;case 9:f=h_re; /如果第9個(gè)鍵按下,將高音2的頻率賦給fOutput_Sound(); /轉(zhuǎn)去計(jì)算定時(shí)常數(shù) break;case 10:f=h_dao; /如果第10個(gè)鍵按下將高音1的頻率賦給fOutput_Sound(); /轉(zhuǎn)去計(jì)算定時(shí)常數(shù) break;case 11:f=xi; /如果第11個(gè)鍵按下,將中音7的頻率賦給fOutput_Sound();/轉(zhuǎn)去計(jì)算定時(shí)常數(shù) break;case 12:f=la; /如果第12個(gè)鍵按下,將中音6的頻率賦給fOutput_Sound(); /轉(zhuǎn)去計(jì)算定時(shí)常數(shù) break; case 13:f=h_la; /如果第13個(gè)鍵按下,將高音6的頻率賦給fOutput_Sound(); /轉(zhuǎn)去計(jì)算定時(shí)常數(shù) break;case 14:f=h_sao;/如果第14個(gè)鍵按下,將高音5的頻率賦給fOutput_Sound();/轉(zhuǎn)去計(jì)算定時(shí)常數(shù) break;case 15:f=h_fa; /如果第15個(gè)鍵按下,將高音4的頻率賦給fOutput_Sound(); /轉(zhuǎn)去計(jì)算定時(shí)常數(shù) break;case 16:f=h_mi; /如果第16個(gè)鍵按下,將高音3的頻率賦給fOutput_Sound(); /轉(zhuǎn)去計(jì)算定時(shí)常數(shù) break; /*函數(shù)功能:定時(shí)器T0的中斷服務(wù)子程序,使P2.0引腳輸出音頻方波*/ void Time0_serve(void ) interrupt 1 using 1 TH0=(8192-C)/32; /可證明這是13位計(jì)數(shù)器TH0高8位的賦初值方法TL0=(8192-C)%32; /可證明這是13位計(jì)數(shù)器TL0低5位的賦初值方法 sound=!sound; /將P2.0引腳取反,輸出音頻方波 /*函數(shù)功能:定時(shí)器T1的中斷服務(wù)子程序,進(jìn)行鍵盤(pán)掃描,判斷鍵位*/ void time1_serve(void) interrupt 3 using 2 /定時(shí)器T1的中斷編號(hào)為3,使用第2組寄存器 TR1=0; /關(guān)閉定時(shí)器T0P1=0xf0; /所有行線置為低電平“0”,所有列線置為高電平“1”if(P1&0xf0)!=0xf0) /列線中有一位為低電平“0”,說(shuō)明有鍵按下 delay20ms();/延時(shí)一段時(shí)間、軟件消抖if(P1&0xf0)!=0xf0) /確實(shí)有鍵按下P1=0xfe; /第一行置為低電平“0”(P1.0輸出低電平“0”)if(P14=0) /如果檢測(cè)到接P1.4引腳的列線為低電平“0”keyval=1; /可判斷是S1鍵被按下if(P15=0) /如果檢測(cè)到接P1.5引腳的列線為低電平“0”keyval=2; /可判斷是S2鍵被按下if(P16=0) /如果檢測(cè)到接P1.6引腳的列線為低電平“0”keyval=3; /可判斷是S3鍵被按下if(P17=0) /如果檢測(cè)到接P1.7引腳的列線為低電平“0”keyval=4; /可判斷是S4鍵被按下P1=0xfd; /第二行置為低電平“0”(P1.1輸出低電平“0”)if(P14=0) /如果檢測(cè)到接P1.4引腳的列線為低電平“0”keyval=5; /可判斷是S5鍵被按下if(P15=0) /如果檢測(cè)到接P1.5引腳的列線為低電平“0”keyval=6; /可判斷是S6鍵被按下if(P16=0) /如果檢測(cè)到接P1.6引腳的列線為低電平“0”keyval=7; /可判斷是S7鍵被按下if(P17=0) /如果檢測(cè)到接P1.7引腳的列線為低電平“0”keyval=8; /可判斷是S8鍵被按下P1=0xfb; /第三行置為低電平“0”(P1.2輸出低電平“0”)if(P14=0) /如果檢測(cè)到接P1.4引腳的列線為低電平“0”keyval=9; /可判斷是S9鍵被按下if(P15=0) /如果檢測(cè)到接P1.5引腳的列線為低電平“0” keyval=10; /可判斷是S10鍵被按下if(P16=0) /如果檢測(cè)到接P1.6引腳的列線為低電平“0”keyval=11; /可判斷是S11鍵被按下if(P17=0) /如果檢測(cè)到接P1.7引腳的列線為低電平“0”keyval=12; /可判斷是S12鍵被按下P1=0xf7; /第四行置為低電平“0”(P1.3輸出低電平“0”) if(P14=0) /如果檢測(cè)到接P1.4引腳的列線為低電平“0”keyval=13; /可判斷是S13鍵被按下if(P15=0) /如果檢測(cè)到接P1.5引腳的列線為低電平“0”keyval=14; /可判斷是S14鍵被按下if(P16=0) /如果檢測(cè)到接P1.6引腳的列線為低電平“0”keyval=15; /可判斷是S15鍵被按下if(P17=0) /如果檢測(cè)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論