版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 課程名稱:現(xiàn)代電子技術(shù)綜合實(shí)驗(yàn) </p><p> 實(shí)驗(yàn)名稱:簡(jiǎn)易電子琴 </p><p> 學(xué)生姓名: </p><p> 班級(jí): 08通信B班 </p><p> 學(xué)號(hào): &
2、lt;/p><p> 實(shí)驗(yàn)地點(diǎn): </p><p> 實(shí)驗(yàn)學(xué)時(shí): </p><p><b> 摘 要</b></p><p> 當(dāng)前市場(chǎng)上的玩具市場(chǎng)需求量大,其中電子琴就是一個(gè)很好的應(yīng)用,本設(shè)計(jì)的主要任務(wù)是要實(shí)現(xiàn)以單片機(jī)STC89C51RC為控制核
3、心的簡(jiǎn)單音樂(lè)發(fā)生器。本系統(tǒng)由51系列單片機(jī)STC89C51RC,矩陣鍵盤(pán)、LED數(shù)碼管、揚(yáng)聲器組成,可通過(guò)按壓不同的按鍵控制不同音符的播放和顯示。</p><p> 關(guān)鍵詞:51單片機(jī);電子琴;行列鍵盤(pán);定時(shí)/計(jì)數(shù)器</p><p><b> 目錄</b></p><p> 1 項(xiàng)目的主要任務(wù)4</p><p>
4、 2 總體設(shè)計(jì)方案5\</p><p> 2.1 控制模塊選擇方案5</p><p> 3.1 按鍵選擇方案5</p><p><b> 3 硬件設(shè)計(jì)6</b></p><p> 3.1 SST89E58單片機(jī)簡(jiǎn)介6</p><p> 3.2系統(tǒng)工作原理8</p>
5、;<p> 3.3系統(tǒng)硬件總體設(shè)計(jì)9</p><p> 3.4 LED顯示模塊 10</p><p> 3.5揚(yáng)聲器模塊 10</p><p> 3.6按鍵模塊 10</p><p><b> 4 軟件設(shè)計(jì)12</b></p><p> 4.1 顯示模塊12&
6、lt;/p><p> 4.2 按鍵模塊12</p><p><b> 5 系統(tǒng)調(diào)試14</b></p><p><b> 6 設(shè)計(jì)總結(jié)15</b></p><p> 附錄1 實(shí)物圖16</p><p> 附錄2 C51源程序清單17</p>&l
7、t;p> 參考文獻(xiàn)錯(cuò)誤!未定義書(shū)簽。</p><p><b> 1、項(xiàng)目主要任務(wù)</b></p><p> 1.1 課程設(shè)計(jì)的目的</p><p> 鞏固和運(yùn)用所學(xué)課程,理論聯(lián)系實(shí)際,提高分析、解決計(jì)算機(jī)技術(shù)實(shí)際問(wèn)題的獨(dú)立工作能力,通過(guò)對(duì)一個(gè)簡(jiǎn)易的八音符電子琴的設(shè)計(jì),進(jìn)一步加深對(duì)計(jì)算機(jī)原理以及數(shù)字電路應(yīng)用技術(shù)方面的了解與認(rèn)識(shí),進(jìn)
8、一步熟悉數(shù)字電路系統(tǒng)設(shè)計(jì)、制作與調(diào)試的方法和步驟。鞏固所學(xué)課堂知識(shí),理論聯(lián)系實(shí)際,提高分析、解決計(jì)算機(jī)技術(shù)實(shí)際問(wèn)題的獨(dú)立工作能力。為了進(jìn)一步了解計(jì)算機(jī)組成原理與系統(tǒng)結(jié)構(gòu),用C語(yǔ)言去控制將會(huì)使我們對(duì)本專業(yè)知識(shí)可以更好地掌握。</p><p> 1.2 課程設(shè)計(jì)的內(nèi)容</p><p> ?。?)設(shè)計(jì)一個(gè)簡(jiǎn)易的八音符電子琴,它可通過(guò)按鍵輸入來(lái)控制音響。</p><p>
9、 (2)演奏時(shí)可以選擇是手動(dòng)演奏(由鍵盤(pán)輸入)還是自動(dòng)演奏已存入的樂(lè)曲。</p><p> ?。?)能夠自動(dòng)演奏多首樂(lè)曲,且每首樂(lè)曲可重復(fù)演奏。</p><p><b> 2、總體設(shè)計(jì)方案</b></p><p> 2.1 控制模塊選擇方案</p><p> 由于STC89C51單片機(jī)性價(jià)比較高,并完全滿足本設(shè)計(jì)
10、作品智能化的要求,所以采用STC89C51單片機(jī)進(jìn)行控制。</p><p> 2.2 按鍵選擇方案</p><p> 傳統(tǒng)電子琴可以用鍵盤(pán)上的“1”到“A”鍵演奏從低SO到高DO等11音。該設(shè)計(jì)有13個(gè)按鈕矩陣,設(shè)計(jì)成21個(gè)音,比傳統(tǒng)音階范圍大,彈奏效果好。</p><p> 該設(shè)計(jì)要實(shí)現(xiàn)一種由單片機(jī)控制的電子琴,具有4X4行列式鍵盤(pán),并根據(jù)按鍵通過(guò)揚(yáng)聲器將音
11、樂(lè)播放出來(lái)。所以本系統(tǒng)由以51單片機(jī)為主控核心,和矩陣鍵盤(pán)、揚(yáng)聲器、LED顯示管模塊一起組合而成。具體如圖2.1。</p><p> 圖2.1 系統(tǒng)總體框圖流程圖</p><p><b> 3、硬件設(shè)計(jì)</b></p><p> 3.1 STC89C51RC單片機(jī)簡(jiǎn)介</p><p> STC89C51RC是
12、一種高性能低功耗的采用CMOS工藝制造的8位微控制器,它提供下列標(biāo)準(zhǔn)特征:4K字節(jié)的程序存儲(chǔ)器,128字節(jié)的RAM,32條I/O線,2個(gè)16位定時(shí)器/計(jì)數(shù)器, 一個(gè)5中斷源兩個(gè)優(yōu)先級(jí)的中斷結(jié)構(gòu),一個(gè)雙工的串行口, 片上震蕩器和時(shí)鐘電路。</p><p><b> 引腳說(shuō)明:</b></p><p><b> ·VCC:電源電壓</b&g
13、t;</p><p><b> ·GND:地</b></p><p> ·P0口:P0口是一組8位漏極開(kāi)路型雙向I/O口,作為輸出口用時(shí),每個(gè)引腳能驅(qū)動(dòng)8個(gè)TTL邏輯門(mén)電路。當(dāng)對(duì)0端口寫(xiě)入1時(shí),可以作為高阻抗輸入端使用。</p><p> 當(dāng)P0口訪問(wèn)外部程序存儲(chǔ)器或數(shù)據(jù)存儲(chǔ)器時(shí),它還可設(shè)定成地址數(shù)據(jù)總線復(fù)用的形式。在
14、這種模式下,P0口具有內(nèi)部上拉電阻。</p><p> 在EPROM編程時(shí),P0口接收指令字節(jié),同時(shí)輸出指令字節(jié)在程序校驗(yàn)時(shí)。程序校驗(yàn)時(shí)需要外接上拉電阻。</p><p> ·P1口:P1口是一帶有內(nèi)部上拉電阻的8位雙向I/O口。P1口的輸出緩沖能接受或輸出4個(gè)TTL邏輯門(mén)電路。當(dāng)對(duì)P1口寫(xiě)1時(shí),它們被內(nèi)部的上拉電阻拉升為高電平,此時(shí)可以作為輸入端使用。當(dāng)作為輸入端使用時(shí),P
15、1口因?yàn)閮?nèi)部存在上拉電阻,所以當(dāng)外部被拉低時(shí)會(huì)輸出一個(gè)低電流(IIL)。</p><p> ·P2口:P2是一帶有內(nèi)部上拉電阻的8位雙向的I/O端口。P2口的輸出緩沖能驅(qū)動(dòng)4個(gè)TTL邏輯門(mén)電路。當(dāng)向P2口寫(xiě)1時(shí),通過(guò)內(nèi)部上拉電阻把端口拉到高電平,此時(shí)可以用作輸入口。作為輸入口,因?yàn)閮?nèi)部存在上拉電阻,某個(gè)引腳被外部信號(hào)拉低時(shí)會(huì)輸出電流(IIL)。</p><p> P2口在訪問(wèn)
16、外部程序存儲(chǔ)器或16位地址的外部數(shù)據(jù)存儲(chǔ)器(例如MOVX @ DPTR)時(shí),P2口送出高8位地址數(shù)據(jù)。在這種情況下,P2口使用強(qiáng)大的內(nèi)部上拉電阻功能當(dāng)輸出1時(shí)。當(dāng)利用8位地址線訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí)(例MOVX @R1),P2口輸出特殊功能寄存器的內(nèi)容。</p><p> 當(dāng)EPROM編程或校驗(yàn)時(shí),P2口同時(shí)接收高8位地址和一些控制信號(hào)。</p><p> ·P3口:P3是一帶
17、有內(nèi)部上拉電阻的8位雙向的I/O端口。P3口的輸出緩沖能驅(qū)動(dòng)4個(gè)TTL邏輯門(mén)電路。當(dāng)向P3口寫(xiě)1時(shí),通過(guò)內(nèi)部上拉電阻把端口拉到高電平,此時(shí)可以用作輸入口。作為輸入口,因?yàn)閮?nèi)部存在上拉電阻,某個(gè)引腳被外部信號(hào)拉低時(shí)會(huì)輸出電流(IIL)。</p><p> P3口同時(shí)具有STC89C51RC的多種特殊功能,具體如表1所示。</p><p> 表3-1 P3口的第二功能</p>
18、<p> ·RST:復(fù)位輸入。當(dāng)振蕩器工作時(shí),RST引腳出現(xiàn)兩個(gè)機(jī)器周期的高電平將使單片機(jī)復(fù)位。</p><p> ·ALE/:當(dāng)訪問(wèn)外部存儲(chǔ)器時(shí),地址鎖存允許是一輸出脈沖,用以鎖存地址的低8位字節(jié)。當(dāng)在Flash編程時(shí)還可以作為編程脈沖輸出()。</p><p> 一般情況下,ALE是以晶振頻率的1/6輸出,可以用作外部時(shí)鐘或定時(shí)目的。但也要注意,
19、每當(dāng)訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí)將跳過(guò)一個(gè)ALE脈沖。</p><p> ·:程序存儲(chǔ)允許時(shí)外部程序存儲(chǔ)器的讀選通信號(hào)。/VPP:外部訪問(wèn)允許。為了使單片機(jī)能夠有效的傳送外部數(shù)據(jù)存儲(chǔ)器從0000H到FFFH單元的指令,必須同GND相連接。需要主要的是,如果加密位1被編程,復(fù)位時(shí)EA端會(huì)自動(dòng)內(nèi)部鎖存。</p><p> 當(dāng)執(zhí)行內(nèi)部編程指令時(shí),應(yīng)該接到VCC端。</p>&
20、lt;p> ·XTAL1:振蕩器反相放大器以及內(nèi)部時(shí)鐘電路的輸入端。</p><p> ·XTAL2:振蕩器反相放大器的輸出端。</p><p><b> 3.2系統(tǒng)工作原理</b></p><p> 本系統(tǒng)掃描鍵盤(pán)矩陣、顯示按鍵、揚(yáng)聲器發(fā)出對(duì)應(yīng)音符。</p><p> 4*4行列式鍵
21、盤(pán)識(shí)別及顯示原理如下:</p><p> 組成鍵盤(pán)的按鍵有機(jī)械式、電容式、導(dǎo)電橡膠式、薄膜式多種,但不管什么形式,其作用都是一個(gè)使電路接通與斷開(kāi)的開(kāi)關(guān)。目前微機(jī)系統(tǒng)中使用的鍵盤(pán)按其功能不同,通??煞譃榫幋a鍵盤(pán)和非編碼鍵盤(pán)兩種基本類型。</p><p> 編碼鍵盤(pán):鍵盤(pán)本身帶有實(shí)現(xiàn)接口主要功能所需的硬件電路。不僅能自動(dòng)檢測(cè)被按下的鍵,并完成去抖動(dòng)、防串鍵等功能,而且能提供與被按鍵功能對(duì)應(yīng)
22、的鍵碼(如ASCII碼)送往CPU。所以,編碼鍵盤(pán)接口簡(jiǎn)單、使用方便。但由于硬件電路較復(fù)雜,因而價(jià)格較貴。</p><p> 非編碼鍵盤(pán):鍵盤(pán)只簡(jiǎn)單地提供按鍵開(kāi)關(guān)的行列矩陣。有關(guān)按鍵的識(shí)別、鍵碼的確定與輸入、去抖動(dòng)等功能均由軟件完成。目前微機(jī)系統(tǒng)中,一般為了降低成本大多數(shù)采用非編碼鍵盤(pán)。</p><p> 鍵盤(pán)接口必須具有去抖動(dòng)、防串鍵、按鍵識(shí)別和鍵碼產(chǎn)生4個(gè)基本功能。</p&g
23、t;<p> ?。?)去抖動(dòng):每個(gè)按鍵在按下或松開(kāi)時(shí),都會(huì)產(chǎn)生短時(shí)間的抖動(dòng)。抖動(dòng)的持續(xù)時(shí)間與鍵的質(zhì)量相關(guān),一般為5—20mm。所謂抖動(dòng)是指在識(shí)別被按鍵是必須避開(kāi)抖動(dòng)狀態(tài),只有處在穩(wěn)定接通或穩(wěn)定斷開(kāi)狀態(tài)才能保證識(shí)別正確無(wú)誤。去抖問(wèn)題可通過(guò)軟件延時(shí)或硬件電路解決。</p><p> ?。?)防串鍵:防串鍵是為了解決多個(gè)鍵同時(shí)按下或者前一按鍵沒(méi)有釋放又有新的按鍵按下時(shí)產(chǎn)生的問(wèn)題。常用的方法有雙鍵鎖定和N鍵
24、輪回兩種方法。雙鍵鎖定,是當(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)鍵的鍵碼。</p><p> ?。?)被按鍵識(shí)別:如何識(shí)別被按鍵是接口解決的主要問(wèn)題,一般可通過(guò)軟硬結(jié)合的方法完成。常用的方法有行掃描法和線反轉(zhuǎn)法兩種。行掃描法的基本思想是,由程序?qū)︽I盤(pán)逐行掃描,通過(guò)檢測(cè)到的列輸出狀態(tài)來(lái)確定閉合鍵,為此,需要設(shè)
25、置入口、輸出口一個(gè),該方法在微機(jī)系統(tǒng)中被廣泛使用。線反轉(zhuǎn)法的基本思想是通過(guò)行列顛倒兩次掃描來(lái)識(shí)別閉合鍵,為此需要提供兩個(gè)可編程的雙向輸</p><p><b> 入/輸出端口。</b></p><p> (4)鍵碼產(chǎn)生:為了從鍵的行列坐標(biāo)編碼得到反映鍵功能的鍵碼,一般在內(nèi)存區(qū)中建立一個(gè)鍵盤(pán)編碼表,通過(guò)查表獲得被按鍵的鍵碼。</p><p>
26、 總體電路具體流程圖如圖:</p><p> 3.3系統(tǒng)硬件總體設(shè)計(jì)</p><p> 本系統(tǒng)由鍵盤(pán)矩陣、LED顯示管、揚(yáng)聲器這幾個(gè)部分組成,LED顯示管顯示當(dāng)前按鍵,揚(yáng)聲器發(fā)出對(duì)應(yīng)音符。硬件總體設(shè)計(jì)圖如下:</p><p> 圖3.3 系統(tǒng)硬件總體設(shè)計(jì)圖</p><p> 3.4 LED顯示模塊</p><p
27、> LED顯示模塊的接口電路如圖3.4所示。圖中,數(shù)碼管采用共陽(yáng)結(jié)構(gòu),為節(jié)省單片機(jī)口線,采用動(dòng)態(tài)掃描顯示。PNP型三極管Q1~Q4實(shí)現(xiàn)數(shù)碼管驅(qū)動(dòng)。</p><p> 圖3.4 LED顯示模塊接口電路</p><p><b> 3.5 揚(yáng)聲器模塊</b></p><p> 矩陣掃描揚(yáng)聲器發(fā)出對(duì)應(yīng)音符模塊如下:</p>
28、<p> 圖3.5 揚(yáng)聲器模塊</p><p><b> 3.6 按鍵模塊</b></p><p> 對(duì)鍵盤(pán)掃描電路的掃描方式有行掃描法和線反轉(zhuǎn)法,在此次程序編寫(xiě)中,采用行掃描法,通過(guò)掃描口線電平信息給單片機(jī),經(jīng)處理程序,判斷出是哪個(gè)按鍵按下,并送主程序調(diào)子程序以實(shí)現(xiàn)不同功能。</p><p><b> 4、軟件
29、設(shè)計(jì)</b></p><p><b> 4.1 顯示模塊</b></p><p> 七段LED顯示器內(nèi)部由七個(gè)條形發(fā)光二極管和一個(gè)小圓點(diǎn)發(fā)光二極管組成,根據(jù)各管的極管的接線形式,可分成共陰極型和共陽(yáng)極型。LED數(shù)碼管的g-a七個(gè)發(fā)光二極管因加正電壓而發(fā)亮,因加零電壓而不以發(fā)亮,不同亮暗的組合就能形成不同的字形,這種組合稱之為字形碼。</p>
30、<p> 本系統(tǒng)按鍵顯示模塊軟件流程圖如圖4.1:</p><p><b> 4.2 按鍵模塊</b></p><p> 一首音樂(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),因此,
31、我們只要把一首歌曲的音階對(duì)應(yīng)頻率關(guān)系正確即可。</p><p> 利用AT89C51的內(nèi)部定時(shí)器使其工作計(jì)數(shù)器模式(MODE1)下,改變計(jì)數(shù)值TH0及TL0以產(chǎn)生不同頻率的方法產(chǎn)生不同音階,例如,頻率為523Hz,其周期T=1/523=1912μs,因此只要令計(jì)數(shù)器計(jì)時(shí)956μs/1μs=956,每計(jì)數(shù)956次時(shí)將I/O反相,就可得到中音DO(523Hz)。</p><p> 計(jì)數(shù)脈沖
32、值與頻率的關(guān)系式:</p><p><b> N=fi÷2÷fr</b></p><p> 上式中,N是計(jì)數(shù)值;fi是機(jī)器頻率(晶體振蕩器為12MHz時(shí),其頻率為1MHz);fr是想要產(chǎn)生的頻率。</p><p> 其計(jì)數(shù)初值T的求法如下:</p><p> T=65536-N=65536-f
33、i÷2÷fr</p><p> 例如:設(shè)K=65536,fi=1MHz,求低音DO(261Hz)、中音DO(523Hz)、高音DO(1046Hz)的計(jì)數(shù)值。</p><p> T=65536-N=65536-fi÷2÷fr=65536-1000000÷2÷fr=65536-500000/fr</p><p&
34、gt; 低音DO的T=65536-500000/262=63627</p><p> 中音DO的T=65536-500000/523=64580</p><p> 高音DO的T=65536-500000/1046=65059</p><p> 本系統(tǒng)按鍵發(fā)出對(duì)應(yīng)音符模塊軟件流程圖如圖4.2:</p><p><b> 5、
35、系統(tǒng)調(diào)試</b></p><p> 調(diào)試是電路與系統(tǒng)設(shè)計(jì)中的重要環(huán)節(jié),通過(guò)調(diào)試,逐步排除電路連接、元件裝配、程序運(yùn)行過(guò)程中可能存在的各種故障,使系統(tǒng)在滿足功能要求的前提下穩(wěn)定、可靠地工作。</p><p> 焊好電路板后先用萬(wàn)用表檢測(cè)是否存在短路故障,有的話一定要找到短路點(diǎn),否則,一旦通電,極有可能損壞電源或電路板。在沒(méi)有短路存在的情況下,初次上電也一定要細(xì)心,不要接反電源
36、極性,否則很容易燒壞芯片。</p><p> 電路板除短路或斷路外還可能存在其它故障,如元器件老化失效或管腳接錯(cuò)等,為了驗(yàn)證電路板硬件的正確性,可先編寫(xiě)一些針對(duì)硬件各單元的基本測(cè)試程序,經(jīng)編譯、連接、轉(zhuǎn)換后下載到單片機(jī)運(yùn)行,發(fā)現(xiàn)硬件故障要及時(shí)排除,直到各部分硬件都能獨(dú)立正常工作。</p><p><b> 6、設(shè)計(jì)總結(jié)</b></p><p&g
37、t; 單片機(jī)作為我們的主要專業(yè)課之一,雖然在開(kāi)學(xué)初我對(duì)這門(mén)課并沒(méi)有太大興趣,覺(jué)得那些程序枯燥乏味,但在這次課程設(shè)計(jì)后我發(fā)現(xiàn)自己在一點(diǎn)一滴的努力中對(duì)單片機(jī)的興趣也在逐漸增加。在課堂上我們掌握的僅僅是理論上的知識(shí),但此次的課程設(shè)計(jì)鍛煉了我們的實(shí)踐能力,讓我們學(xué)會(huì)如何把學(xué)到的專業(yè)理論知識(shí)運(yùn)用到實(shí)踐中去。</p><p> 整個(gè)設(shè)計(jì)過(guò)程中,不僅鞏固了書(shū)本知識(shí),更學(xué)到了許多平時(shí)不會(huì)去注意的知識(shí),這是在設(shè)計(jì)過(guò)程中遇到問(wèn)題
38、而查閱大量資料去解決才能獲得的。</p><p> 同時(shí),課程設(shè)計(jì)還鍛煉了我們的思維能力。要做好一個(gè)設(shè)計(jì),必須在設(shè)計(jì)之前先根據(jù)要設(shè)計(jì)的內(nèi)容選取合適的單片機(jī)和設(shè)計(jì)方案,對(duì)所用單片機(jī)的內(nèi)部結(jié)構(gòu)有一個(gè)系統(tǒng)的了解;要有一個(gè)清晰的思路和一個(gè)完整的軟件流程圖;在設(shè)計(jì)程序時(shí),一次就想設(shè)計(jì)好是不現(xiàn)實(shí)的,必須經(jīng)過(guò)反復(fù)的改進(jìn)和完善,不僅能實(shí)現(xiàn)應(yīng)有的功能,并能完整的展現(xiàn)出自己的思路;碰到問(wèn)題時(shí)不要著急,這正是一個(gè)學(xué)習(xí)分析的好機(jī)會(huì),解
39、決過(guò)后之后就不會(huì)困于相同的問(wèn)題了。</p><p> 另外,同學(xué)間的交流也能讓我們吸收不同的思維,互幫互助。還要感謝指導(dǎo)老師在我們遇到困難時(shí)給予我們的建議與幫助。</p><p> 課程設(shè)計(jì)雖然結(jié)束了,但是從中學(xué)到的知識(shí)卻會(huì)讓我受益終生。發(fā)現(xiàn)、提出、分析、解決問(wèn)題和實(shí)踐能力的提高都將益于今后的學(xué)習(xí)工作。</p><p><b> 附錄1實(shí)物圖<
40、/b></p><p> 附錄2 C51源程序清單</p><p> #include<reg51.h></p><p> #include<SoundPlay.h></p><p> #include<intrins.h></p><p> #define uch
41、ar unsigned char</p><p> #define uint unsigned int</p><p><b> //共陽(yáng)數(shù)碼管編碼</b></p><p> uchar code DSY_Table[] =</p><p> { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x
42、82,0xf8,0x80, //0,1,2,3,4,5,6,7,8</p><p> 0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xBF}; //9,A,B,C,D,E,F,-</p><p> //各音符應(yīng)對(duì)的延時(shí)</p><p> uint code Tone_Delay_Table[] =</p>&
43、lt;p> {64580,64684,64777,64820, //中1DO,中2RE,中3ME,中4FA</p><p> 64898,64968,65030,63628, //中5SO,中6LA,中7SI,低1DO</p><p> 64021,64260,64524, //低3ME,低5SO,低7SI</p><p> 6
44、5058,65110,65157,65178, //高1DO,高2RE,高3ME,高4FA</p><p> 65217,65252,65283,63835, //高5SO,高6LA,高7SI,低2RE</p><p> 64103,64400,64524}; //低4FA,低6LA,低7SI0</p><p> uchar code l
45、ed99[22][4] ={{0xf9,0xBF,0xBF,0xBF},</p><p> {0xa4,0xBF,0xBF,0xBF},</p><p> {0xb0,0xBF,0xBF,0xBF},</p><p> {0x99,0xBF,0xBF,0xBF},</p><p> {0x92,0xBF,0xBF,0xBF},<
46、;/p><p> {0x82,0xBF,0xBF,0xBF},</p><p> {0xf8,0xBF,0xBF,0xBF},</p><p> {0xf9,0xF7,0xF7,0xF7},</p><p> {0xb0,0xF7,0xF7,0xF7},</p><p> {0x92,0xF7,0xF7,0xF7
47、},</p><p> {0xf8,0xF7,0xF7,0xF7},</p><p> {0xf9,0xFE,0xFE,0xFE},</p><p> {0xa4,0xFE,0xFE,0xFE},</p><p> {0xb0,0xFE,0xFE,0xFE},</p><p> {0x99,0xFE,0xFE
48、,0xFE},</p><p> {0x92,0xFE,0xFE,0xFE},</p><p> {0x82,0xFE,0xFE,0xFE},</p><p> {0xf8,0xFE,0xFE,0xFE},</p><p> {0xa4,0xF7,0xF7,0xF7},</p><p> {0x99,0xF7
49、,0xF7,0xF7},</p><p> {0x82,0xF7,0xF7,0xF7},</p><p> {0xf8,0xF7,0xF7,0xF7}</p><p><b> };</b></p><p> unsigned char code Music_Girl[]={ 0x17,0x02, 0x17,0x
50、03, 0x18,0x03, 0x19,0x02, 0x15,0x03,</p><p> 0x16,0x03, 0x17,0x03, 0x17,0x03, 0x17,0x03, 0x18,0x03,</p><p> 0x19,0x02, 0x16,0x03, 0x17,0x03, 0x18,0x02, 0x18,0x03,</p><p> 0x17,0x
51、03, 0x15,0x02, 0x18,0x03, 0x17,0x03, 0x18,0x02,</p><p> 0x10,0x03, 0x15,0x03, 0x16,0x02, 0x15,0x03, 0x16,0x03,</p><p> 0x17,0x02, 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x1A,0x03,</p><p&g
52、t; 0x1B,0x03, 0x1F,0x03, 0x1F,0x03, 0x17,0x03, 0x18,0x03,</p><p> 0x19,0x02, 0x16,0x03, 0x17,0x03, 0x18,0x03, 0x17,0x03,</p><p> 0x18,0x03, 0x1F,0x03, 0x1F,0x02, 0x16,0x03, 0x17,0x03,</p&g
53、t;<p> 0x18,0x03, 0x17,0x03, 0x18,0x03, 0x20,0x03, 0x20,0x02,</p><p> 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x20,0x03, 0x21,0x03,</p><p> 0x20,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x1F,0x
54、03,</p><p> 0x1B,0x03, 0x19,0x03, 0x19,0x03, 0x15,0x03, 0x1A,0x66,</p><p> 0x1A,0x03, 0x19,0x03, 0x15,0x03, 0x15,0x03, 0x17,0x03,</p><p> 0x16,0x66, 0x17,0x04, 0x18,0x04, 0x18,0x
55、03, 0x19,0x03,</p><p> 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x20,0x03, 0x21,0x03,</p><p> 0x20,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66, 0x1F,0x03,</p><p> 0x1B,0x03, 0x19,0x03, 0x19,0x
56、03, 0x15,0x03, 0x1A,0x66,</p><p> 0x1A,0x03, 0x19,0x03, 0x19,0x03, 0x1F,0x03, 0x1B,0x03,</p><p> 0x1F,0x00, 0x1A,0x03, 0x1A,0x03, 0x1A,0x03, 0x1B,0x03,</p><p> 0x1B,0x03, 0x1A,0x
57、03, 0x19,0x03, 0x19,0x02, 0x17,0x03,</p><p> 0x15,0x17, 0x15,0x03, 0x16,0x03, 0x17,0x03, 0x18,0x03,</p><p> 0x17,0x04, 0x18,0x0E, 0x18,0x03, 0x17,0x04, 0x18,0x0E,</p><p> 0x18,0x
58、66, 0x17,0x03, 0x18,0x03, 0x17,0x03, 0x18,0x03,</p><p> 0x20,0x03, 0x20,0x02, 0x1F,0x03, 0x1B,0x03, 0x1F,0x66,</p><p> 0x20,0x03, 0x21,0x03, 0x20,0x03, 0x1F,0x03, 0x1B,0x03,</p><p&g
59、t; 0x1F,0x66, 0x1F,0x04, 0x1B,0x0E, 0x1B,0x03, 0x19,0x03,</p><p> 0x19,0x03, 0x15,0x03, 0x1A,0x66, 0x1A,0x03, 0x19,0x03,</p><p> 0x15,0x03, 0x15,0x03, 0x17,0x03, 0x16,0x66, 0x17,0x04,</p&g
60、t;<p> 0x18,0x04, 0x18,0x03, 0x19,0x03, 0x1F,0x03, 0x1B,0x03,</p><p> 0x1F,0x66, 0x20,0x03, 0x21,0x03, 0x20,0x03, 0x1F,0x03,</p><p> 0x1B,0x03, 0x1F,0x66, 0x1F,0x03, 0x1B,0x03, 0x19,0x
61、03,</p><p> 0x19,0x03, 0x15,0x03, 0x1A,0x66, 0x1A,0x03, 0x19,0x03,</p><p> 0x19,0x03, 0x1F,0x03, 0x1B,0x03, 0x1F,0x00, 0x18,0x02,</p><p> 0x18,0x03, 0x1A,0x03, 0x19,0x0D, 0x15,0x
62、03, 0x15,0x02,</p><p> 0x18,0x66, 0x16,0x02, 0x17,0x02, 0x15,0x00, 0x00,0x00};</p><p> unsigned char code Music_Same[]={ 0x0F,0x01, 0x15,0x02, 0x16,0x02, 0x17,0x66, 0x18,0x03,</p><p
63、> 0x17,0x02, 0x15,0x02, 0x16,0x01, 0x15,0x02, 0x10,0x02,</p><p> 0x15,0x00, 0x0F,0x01, 0x15,0x02, 0x16,0x02, 0x17,0x02,</p><p> 0x17,0x03, 0x18,0x03, 0x19,0x02, 0x15,0x02, 0x18,0x66,</p
64、><p> 0x17,0x03, 0x19,0x02, 0x16,0x03, 0x17,0x03, 0x16,0x00,</p><p> 0x17,0x01, 0x19,0x02, 0x1B,0x02, 0x1B,0x70, 0x1A,0x03,</p><p> 0x1A,0x01, 0x19,0x02, 0x19,0x03, 0x1A,0x03, 0x1B,
65、0x02,</p><p> 0x1A,0x0D, 0x19,0x03, 0x17,0x00, 0x18,0x66, 0x18,0x03,</p><p> 0x19,0x02, 0x1A,0x02, 0x19,0x0C, 0x18,0x0D, 0x17,0x03,</p><p> 0x16,0x01, 0x11,0x02, 0x11,0x03, 0x10,
66、0x03, 0x0F,0x0C,</p><p> 0x10,0x02, 0x15,0x00, 0x1F,0x01, 0x1A,0x01, 0x18,0x66,</p><p> 0x19,0x03, 0x1A,0x01, 0x1B,0x02, 0x1B,0x03, 0x1B,0x03,</p><p> 0x1B,0x0C, 0x1A,0x0D, 0x19,
67、0x03, 0x17,0x00, 0x1F,0x01,</p><p> 0x1A,0x01, 0x18,0x66, 0x19,0x03, 0x1A,0x01, 0x10,0x02,</p><p> 0x10,0x03, 0x10,0x03, 0x1A,0x0C, 0x18,0x0D, 0x17,0x03,</p><p> 0x16,0x00, 0x0F,
68、0x01, 0x15,0x02, 0x16,0x02, 0x17,0x70,</p><p> 0x18,0x03, 0x17,0x02, 0x15,0x03, 0x15,0x03, 0x16,0x66,</p><p> 0x16,0x03, 0x16,0x02, 0x16,0x03, 0x15,0x03, 0x10,0x02,</p><p> 0x10,
69、0x01, 0x11,0x01, 0x11,0x66, 0x10,0x03, 0x0F,0x0C,</p><p> 0x1A,0x02, 0x19,0x02, 0x16,0x03, 0x16,0x03, 0x18,0x66,</p><p> 0x18,0x03, 0x18,0x02, 0x17,0x03, 0x16,0x03, 0x19,0x00,</p><p
70、> 0x00,0x00 };</p><p> unsigned char code Music_love[]={ 0x19,0x03, 0x19,0x03, 0x19,0x03, 0x19,0x04, 0x19,0x0E,</p><p> 0x19,0x04, 0x19,0x0E, 0x1A,0x03, 0x19,0x7A, 0x20,0x03,</p>&l
71、t;p> 0x20,0x04, 0x1B,0x0E, 0x1B,0x03, 0x19,0x03, 0x1F,0x0E,</p><p> 0x1F,0x7A, 0x15,0x04, 0x1F,0x03, 0x1F,0x04, 0x19,0x0E,</p><p> 0x19,0x0E, 0x17,0x03, 0x1A,0x0E, 0x1A,0x15, 0x19,0x03,<
72、;/p><p> 0x19,0x03, 0x19,0x03, 0x19,0x03, 0x19,0x03, 0x1A,0x04,</p><p> 0x19,0x0E, 0x1A,0x0E, 0x19,0x7B, 0x19,0x04, 0x20,0x03,</p><p> 0x20,0x04, 0x1B,0x0E, 0x1B,0x04, 0x19,0x03, 0x
73、1F,0x0E,</p><p> 0x1F,0x7A, 0x15,0x04, 0x1F,0x03, 0x1F,0x04, 0x19,0x0E,</p><p> 0x19,0x04, 0x17,0x03, 0x1A,0x0E, 0x1A,0x15, 0x1A,0x03,</p><p> 0x1A,0x04, 0x1A,0x0E, 0x1A,0x03, 0x
74、1A,0x04, 0x1B,0x0E,</p><p> 0x1B,0x04, 0x1F,0x03, 0x1F,0x0E, 0x1F,0x03, 0x1B,0x03,</p><p> 0x1A,0x04, 0x19,0x04, 0x1A,0x03, 0x1A,0x15, 0x1B,0x03,</p><p> 0x1B,0x04, 0x21,0x0E, 0x
75、21,0x67, 0x1B,0x04, 0x1A,0x67,</p><p> 0x19,0x04, 0x1A,0x04, 0x1B,0x7B, 0x1F,0x0E, 0x1B,0x15,</p><p> 0x1A,0x03, 0x1A,0x03, 0x1A,0x03, 0x1A,0x04, 0x1B,0x0E,</p><p> 0x1B,0x04, 0x
76、1F,0x03, 0x1F,0x0E, 0x1F,0x03, 0x1B,0x03,</p><p> 0x1A,0x04, 0x19,0x04, 0x1A,0x0D, 0x1A,0x15, 0x1B,0x03,</p><p> 0x1B,0x04, 0x21,0x0D, 0x21,0x67, 0x1B,0x04, 0x1A,0x0E,</p><p> 0x
77、1A,0x67, 0x19,0x04, 0x1A,0x04, 0x1F,0x7B, 0x1F,0x0E,</p><p> 0x21,0x0D, 0x20,0x01, 0x21,0x01, 0x23,0x01, 0x1F,0x00,</p><p> 0x21,0x03, 0x22,0x03, 0x23,0x03, 0x24,0x0D, 0x24,0x03,</p>&l
78、t;p> 0x23,0x03, 0x1F,0x0D, 0x1F,0x0D, 0x1F,0x17, 0x1A,0x03,</p><p> 0x1F,0x03, 0x24,0x03, 0x21,0x03, 0x21,0x16, 0x1A,0x0D,</p><p> 0x1F,0x0D, 0x1B,0x03, 0x1B,0x16, 0x21,0x01, 0x23,0x01,<
79、;/p><p> 0x1F,0x00, 0x21,0x03, 0x22,0x03, 0x23,0x03, 0x24,0x0D,</p><p> 0x24,0x04, 0x23,0x04, 0x1F,0x0D, 0x1F,0x0D, 0x21,0x0D,</p><p> 0x20,0x03, 0x1F,0x0D, 0x20,0x03, 0x1F,0x00, 0x
80、00,0x00 };</p><p> sbit BEEP = P3^7; //蜂鳴器</p><p> uchar keys=0x8;</p><p> uint i,led;// 聲明按鈕及播放譜變量 </p><p> uchar KeyNo; </p><p> uchar fl
81、ag=0; </p><p> uchar flag1=0; //按鍵序號(hào)</p><p> uchar flag2=0;</p><p> //--------------------------------------------------------------------------------</p><
82、;p><b> //延時(shí)</b></p><p> //--------------------------------------------------------------------------------</p><p> void DelayMS(uchar x)</p><p><b> {</b&
83、gt;</p><p><b> uchar i;</b></p><p> while( x--) for(i =0;i< 120;i++);</p><p><b> }</b></p><p> //----------------------------------------
84、----------------------------------------</p><p> //按鍵矩陣掃描子程序</p><p> //--------------------------------------------------------------------------------</p><p> void Keys_Scan()&l
85、t;/p><p><b> {</b></p><p> uchar Tmp,k;</p><p> //高四位置 0,放入四行</p><p> P1 = 0x0F;</p><p> if(P1!=0x0F)</p><p><b> {</b&
86、gt;</p><p> DelayMS(20);</p><p><b> };</b></p><p> //按鍵后00001111將變成0000XXXX,x中1個(gè)為0,3個(gè)仍為1</p><p> //下面的異或操作會(huì)把3個(gè)1變成0,唯一的0變成1</p><p> Tmp = P
87、1 ^ 0x0F;</p><p> //判斷按鍵發(fā)生于0~3列中的哪一列</p><p> switch (Tmp)</p><p><b> {</b></p><p> case 1 :k=3; break;</p><p> case 2 :k=2; break;</p
88、><p> case 4 :k=1; break;</p><p> case 8 :k=0; break;</p><p> default:return;//無(wú)鍵按下</p><p><b> }</b></p><p> //低四位置0,放入四列</p><p&
89、gt; P1 = 0xF0;</p><p> DelayMS(2);</p><p> //按鍵后11110000將變成XXXX0000,x中1個(gè)為0,3個(gè)仍為1</p><p> //下面的表達(dá)式會(huì)將高四位移至低四位,并將其中唯一的0變?yōu)?,其余為0</p><p> Tmp = (P1>>4) ^ 0x0F;<
90、;/p><p> //對(duì)0~3行分別附加起始值0,4,8,12</p><p> switch (Tmp)</p><p><b> {</b></p><p> case 1 :k+=0; break;</p><p> case 2 :k+=4; break;</p>
91、<p> case 4 :k+=8; break;</p><p> case 8 :k+=12; break;</p><p> default:return;</p><p><b> }</b></p><p><b> KeyNo= k;</b></p&g
92、t;<p><b> }</b></p><p> //--------------------------------------------------------------------------------------</p><p> //定時(shí)器0中斷程序,不同頻率的聲音由該中斷產(chǎn)生</p><p> //--
93、------------------------------------------------------------------------------------</p><p> void Play_Tone() interrupt 3</p><p><b> {</b></p><p> TH1 = Tone_Delay_Ta
94、ble[ KeyNo]/256;</p><p> TL1 = Tone_Delay_Table[ KeyNo]%256;</p><p> BEEP= ~BEEP;</p><p><b> }</b></p><p> //-------------------------------------------
95、----------------------------------------------------</p><p><b> //主程序</b></p><p> //-----------------------------------------------------------------------------------------------&
96、lt;/p><p> void main()</p><p><b> {</b></p><p> TMOD=0x11;</p><p><b> IE=0x8A;</b></p><p><b> P2=0x77;</b></p>
97、<p><b> while(1)</b></p><p><b> {</b></p><p><b> P1=0xF0;</b></p><p> while(P1==0xF0)</p><p><b> {</b></p&
98、gt;<p> for(i=0;i<4;i++)</p><p><b> {</b></p><p> P2=_crol_(P2,1);</p><p> P0=led99[led][i];</p><p> DelayMS(1);</p><p>&l
99、t;b> };</b></p><p><b> }; </b></p><p> Keys_Scan();</p><p> ET1 = 1;</p><p> if(KeyNo==11)</p><p><b> { </b>&l
100、t;/p><p><b> flag=1;</b></p><p><b> };</b></p><p> if(KeyNo==12)</p><p><b> { </b></p><p><b> flag1=1;</b&g
101、t;</p><p> keys=_crol_(keys,1);</p><p><b> };</b></p><p> if(KeyNo==13)</p><p><b> { </b></p><p><b> flag2=1;</b>
102、</p><p><b> P1=0xF0;</b></p><p> while(P1!=0xF0);</p><p><b> };</b></p><p> if(flag2==1)</p><p><b> {</b></p>
103、;<p> keys=_crol_(keys,1);</p><p><b> flag2=0;</b></p><p><b> KeyNo=0;</b></p><p><b> };</b></p><p> if(flag==1) </p&
104、gt;<p><b> {</b></p><p><b> P1=0xBF;</b></p><p> while(P1==0xBE);</p><p><b> P1=0x8F;</b></p><p> if(P1!=0x8F)</p>
105、<p><b> { </b></p><p> if(KeyNo!=12)</p><p><b> {</b></p><p> KeyNo=KeyNo+11;</p><p> led=KeyNo;</p><p><b> TR1
106、=1; </b></p><p> DelayMS(255);</p><p> DelayMS(50);</p><p><b> TR1=0;</b></p><p> KeyNo=KeyNo-11;</p><p><b> flag=0;</b>
107、</p><p><b> BEEP=1;</b></p><p><b> }</b></p><p><b> } </b></p><p><b> }</b></p><p> if((flag+flag1)==
108、0)</p><p><b> { </b></p><p><b> P1=0x8F;</b></p><p> if(P1!=0x8F)</p><p><b> { </b></p><p> // Keys_Scan();<
109、/p><p> //P0=DSY_Table[KeyNo];</p><p> led=KeyNo;</p><p><b> TR1=1; </b></p><p> DelayMS(255);</p><p> DelayMS(4);</p><p><b&
110、gt; TR1=0;</b></p><p><b> BEEP=1;</b></p><p><b> P1=0xF0;</b></p><p> while(P1!=0xF0); //wait key released</p><p><b> } &
111、lt;/b></p><p><b> }</b></p><p> if(flag1==1)</p><p><b> {</b></p><p> switch (keys) // 判讀 </p><p> {case 0x01: I
112、nitialSound();Play(Music_Canon,2,2,192); break;//按下S1,播放第一首歌 </p><p> case 0x02: InitialSound();Play(Music_Same,4,2,260); break;//按下S2,播放第二首歌 </p><p> case 0x04: InitialSound();Play(Music_Two
113、,4,2,260); break;//按下S3,播放第三首歌 </p><p> case 0x08: InitialSound();Play(Music_love,4,2,260); break;//按下S4,播放第四首歌 </p><p><b> } </b></p><p><b> BEEP=1;</b&g
114、t;</p><p><b> flag1=0;</b></p><p><b> KeyNo=1;</b></p><p><b> TR1=0;</b></p><p><b> }</b></p><p><b&
115、gt; }</b></p><p><b> }</b></p><p><b> 參考文獻(xiàn)</b></p><p> [1]李鴻等.單片機(jī)原理及應(yīng)用[M].湖南大學(xué)出版社,2005.</p><p> [2]何立民.單片機(jī)高級(jí)教程--應(yīng)用與設(shè)計(jì)[M].北京航空航天大學(xué)出版社,
116、2000,8.</p><p> [3]戴佳.51單片機(jī)C語(yǔ)言應(yīng)用程序設(shè)計(jì)實(shí)例精講[M].北京:電子工業(yè)出版社,2006.</p><p> [4]于京.51系列單片機(jī)C程序設(shè)計(jì)與應(yīng)用案例[M].北京:中國(guó)電力出版社,2006.</p><p> [5]孫育才.ATMEL新型AT89S52系列單片機(jī)及其應(yīng)用[M].北京:清華大學(xué)出版社,2005.</p&
溫馨提示
- 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ù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 簡(jiǎn)易電子琴課程設(shè)計(jì)
- 簡(jiǎn)易電子琴課程設(shè)計(jì)
- 簡(jiǎn)易電子琴課程設(shè)計(jì)
- 課程設(shè)計(jì)報(bào)告--- 簡(jiǎn)易電子琴
- 微機(jī)原理課程設(shè)計(jì)--設(shè)計(jì)簡(jiǎn)易電子琴
- 課程設(shè)計(jì)---簡(jiǎn)易電子琴設(shè)計(jì)與制作
- 單片機(jī)課程設(shè)計(jì)簡(jiǎn)易電子琴
- 電子電路cad課程設(shè)計(jì)--簡(jiǎn)易電子琴
- 簡(jiǎn)易電子琴單片機(jī)課程設(shè)計(jì)
- 簡(jiǎn)易電子琴單片機(jī)課程設(shè)計(jì)
- 模電課程設(shè)計(jì)——簡(jiǎn)易電子琴制作
- 單片機(jī)課程設(shè)計(jì)簡(jiǎn)易電子琴
- 單片機(jī)課程設(shè)計(jì)——簡(jiǎn)易電子琴
- 單片機(jī)課程設(shè)計(jì)---簡(jiǎn)易電子琴
- 簡(jiǎn)易電子琴單片機(jī)課程設(shè)計(jì)
- fpga課程設(shè)計(jì)報(bào)告--簡(jiǎn)易電子琴的設(shè)計(jì)
- 課程設(shè)計(jì)----簡(jiǎn)易單片機(jī)電子琴設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--簡(jiǎn)易電子琴設(shè)計(jì)
- 模擬電子技術(shù)課程設(shè)計(jì)——簡(jiǎn)易電子琴
- 電子琴課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論