

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 基于51單片機的簡易電子琴設計</p><p><b> 一、設計指標</b></p><p><b> 1.1 設計任務</b></p><p> 1.設計一個4X4的16個按鍵矩陣,并且每個鍵對應一個音,顯示對應音鍵號。</p><p> 2.用AT89C51將鍵盤
2、連接設計成為電子琴。</p><p> 3.編寫電子琴的程序,要達到可以隨意彈奏想要表達的音樂的目的。</p><p> 4.程序的分析與調試,顯示波形。</p><p><b> 1.2 設計要求</b></p><p> 1.用匯編語言編程實現(xiàn)程序設計。</p><p> 2.利用查
3、表,中斷等方式實現(xiàn)目的。</p><p> 3.系統(tǒng)的各各功能模塊要清楚,有序。</p><p> 4.程序運行時有友好的用戶界面。</p><p><b> 二、設計方框圖</b></p><p> 圖2.1 系統(tǒng)主程序流程圖</p><p><b> 圖2.2</b&
4、gt;</p><p><b> 三、元器件介紹</b></p><p> 該設計主要由以下幾個部件組成:</p><p> 1:單片機AT89C51 : </p><p> AT89C51是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲器的低電壓,高性能CMOS8位微處理器,俗稱單片機。該器件采用ATMEL高密度非易失
5、存儲器制造技術制造,與工業(yè)標準的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的AT89C51是一種高效的微控制器。</p><p> 引腳說明:P0口:P0口為一個8位雙向三態(tài)I/O口,每腳可驅動8個TTL負載。P0既可作為通用I/O口,又可作為外部擴展時的數(shù)據(jù)總線及低8位地址總線的分時復用口。</p><p> P1口:P1口是一
6、個內部提供上拉電阻的8位雙向I/O口,每個引腳可驅動4TTL負載。P1口管腳寫入1后,被內部上拉為高,可用作輸入, P1口被外部下拉為低電平時,將輸出電流,這是由于內部上拉的緣故。 </p><p> P2口:P2口為一個內部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,驅動4個TTL門電流。</p><p> P3口:P3口管腳是8個帶內部上拉電阻的雙向I/O口,可驅動4
7、個TTL負載。當P3口寫入"1"后,它們被內部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。 P3口也可作為AT89C51的一些特殊功能,管腳備選功能:P3.0 RXD(串行數(shù)據(jù)接受口) P3.1 TXD(串行數(shù)據(jù)發(fā)送口) P3.2 /INT0(外部中斷0請求輸入) P3.3 /INT1(外部中斷1請求輸入)
8、P3.4 T0(定時器/計數(shù)器0外部輸入口) P3.5 T1(定時器/計數(shù)器1外部輸入口) P3.6 /WR(外部數(shù)據(jù)存儲器RAM寫選通) P3.7 /RD(外部數(shù)據(jù)存儲器RAM讀選通) P3口同時為閃爍編程和編程校驗接收一些控制信號。</p><p> RST:復位輸入。當振蕩器復位器件時,要保持RST腳兩個機器周期的高電平時間。ALE/PROG:當訪問外部存儲器時,地址鎖
9、存允許ALE的輸出電平用于鎖存地址的地位字節(jié)。當不訪問其時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。/PSEN:外部程序存儲器ROM的選通信號。 /EA/VPP:當/EA保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內部程序存儲器。</p><p> XTAL1:反向振蕩放大器的輸入及內部時鐘工作電路的輸入。XTAL2:反向振蕩放大器的出及內部時鐘工作電
10、路的輸出。</p><p> 2:電源:電源部分有二部分組成。一部分是由220V的市電通過變壓、整流穩(wěn)壓來得到+5V電壓,維持系統(tǒng)的正常工作;另一部分是由3V的電池供電,以保證停電時正常走時。正常情況下電池是不提供電能的,以保證電池的壽命。</p><p> 3:4*4的16個按鈕矩陣。</p><p> 4:模擬示波器:模擬產生的波形。</p>
11、<p> 5:LM386音頻功率放大器,LM386是美國國家半導體公司生產的音頻功率放大器,主要應用于低電壓消費類產品。為使外圍元件最少,電壓增益內置為20。但在1腳和8腳之間增加一只外接電阻和電容,便可將電壓增益調為任意值,直至 200。輸入端以地位參考,同時輸出端被自動偏置到電源電壓的一半,在6V電源電壓下,它的靜態(tài)功耗僅為24mW,使得LM386特別適用于電池供電的場 合。 </p><p>
12、 6:74LS244鎖存器:74LS244為3態(tài)8位地址鎖存器, 地址鎖存器就是一個暫存器,它根據(jù)控制信號的狀態(tài),將總線上地址代碼暫存起來首先由CPU發(fā)出存儲器地址,同時發(fā)出允許鎖存信號ALE給鎖存器,當鎖存器接到該信號后將地址/數(shù)據(jù)總線上的地址鎖存在總線上,隨后才能傳輸數(shù)據(jù)。</p><p><b> 四、設計原理</b></p><p><b>
13、4.1 電路原理</b></p><p><b> 主要分為二個部分:</b></p><p> ?。?)4X4行列式鍵盤識別;</p><p> ?。?)音樂產生的方法;</p><p> ①一首音樂是許多不同的音階組成的,而每個音階對應著不同的頻率,這樣我們就可以利用不同</p><
14、;p> 的頻率的組合,即可構成我們所想要的音樂了,當然對于單片機來產生不同的頻率非常方便,我們可以利用單片機的定時/計數(shù)器T0來產生這樣方波頻率信號,因此,我們只要把一首歌曲的音階對應頻率關系弄正確即可。現(xiàn)在以單片機12MHZ晶振為例,列出高中低音符與單片機計數(shù)T0相關的計數(shù)值如表3.1所示.</p><p> 下面我們要為這個音符建立一個表格,有助于單片機通過查表的方式來獲得相應的數(shù)據(jù):低音0-19之
15、間,中音在20-39之間,高音在40-59之間</p><p> TABLE: DW 0,63628,63835,64021,64103,64260,64400,64524,0,0</p><p> DW 0,63731,63928,0,64185,64331,64463,0,0,0</p><p> DW 0,64580,64684,64777,64820
16、,64898,64968,65030,0,0</p><p> DW 0,64633,64732,0,64860,64934,64994,0,0,0</p><p> DW 0,65058,65110,65157,65178,65217,65252,65283,0,0</p><p> DW 0,65085,65134,0,65198,65235,65268,
17、0,0,0</p><p><b> DW 0</b></p><p> 表3.1 高中低音符與單片機計數(shù)T0相關的計數(shù)值表</p><p> ②音樂的音拍,一個節(jié)拍為單位(C調)</p><p> 對于不同的曲調我們也可以用單片機的另外一個定時/計數(shù)器來完成。</p><p> 在這
18、個程序中用到了兩個定時/計數(shù)器來完成的。其中T0用來產生音符頻率,T1</p><p><b> 用來產生音拍。</b></p><p> 各功能模塊電路的設計(用Proteus仿真)</p><p> 1、 晶體振蕩電路 2、 上電自動復位電路 </p><p
19、><b> 3、按鍵電路</b></p><p> 4、 顯示按鍵建號</p><p> 5音頻功率放大電路 6、模擬示波</p><p><b> 整體電路圖 </b></p><p> 四、電路安裝與調試過程</p&
20、gt;<p> 打開并設置MedWin</p><p> 打開MedWin→設置仿真器→設置工作目錄→設置編譯器</p><p><b> 使用MedWin</b></p><p> (1)新建項目 點擊[項目管理]—[新建項目] 命令,輸入項目名稱,點擊[確定]按鈕,出現(xiàn)“添加項目文件”對話框,輸入源代碼文件名,如DI
21、TISHIYAN.ASM,單擊[打開]按鈕,出現(xiàn)代碼窗口,即可開始編程。</p><p> (2)打開項目 點擊[項目管理]—[打開項目] 命令,點擊項目文件名(項目文件后綴為.mpf),點擊[打開]按鈕,即可打開上次保存的項目。</p><p> (3)編譯 點擊[項目管理]—[編譯/匯編]命令,啟動編譯器對源文件進行語法檢查并編譯,在消息窗口中顯示編譯結果。</p>
22、<p> (3)模擬仿真 當源程序編譯無誤后,可進行模擬仿真調試。點擊[項目管理]—[產生代碼并裝入]命令,生成.hex文件。編譯器對源程序進行重新編譯并裝入。這時,可使用[調試]菜單中的相關命令進行調試,如設置斷點、單步及全速執(zhí)行等。</p><p> (4)生成目標代碼 點擊[項目管理]—[輸出Binary文件]命令,生成BIN文件,用下載工具將其下載到實驗板的單片機中執(zhí)行。</p
23、><p> Proteus的應用</p><p> 首先安裝此軟件,然后打開,打開之后在圖形編輯窗口進行畫圖。硬件電路圖畫好之后,將剛在MedWin中已經編輯好的程序寫入單片機中(AT89C51)中,然后進行整體仿真。</p><p> 五、電路測試與使用說明</p><p><b> 硬件部分</b></p&
24、gt;<p> 按照原理圖連接電路,用PROTEUS模擬仿真測試電路,如果有問題就分塊進行測試!</p><p><b> 軟件部分</b></p><p> 如果硬件部分并無問題,那么就有可能是出現(xiàn)在軟件部分。那么就需要一一查看程序是否有誤,如若有誤將其改正并編譯并代碼,而后加載進單片機內再次運行。 </p><p>&l
25、t;b> 六、訓練總結</b></p><p> 這次我主要的設計是一個簡易電子琴,采用16個鍵分別代表16個音,通過對按鍵的隨意按擊從而產生不同的音樂,主要是通過每個按鍵所產生的頻率不同來使得發(fā)出的各個音不同,從而產生音樂 。 </p><p> 程序也實在很長,對于現(xiàn)在的我來說肯定一個人肯定很難編出這么長的程序,幸好有給與我?guī)椭耐瑢W和老師。雖然這個程序還不是
26、很簡潔,但我們可以根據(jù)每個程序的功能各不相同來使程序簡化。不過我對目前的程序已經很滿意了,但是也存在的問題:(1)功能單調 ,我們可以通過增加元件、模塊,擴展鍵盤,增加子程序程序增加其功能。 (2)程序太過冗長,我們可以用其他的方法如查詢等方法來精簡程序,加強它的可讀性。最后,通過這次的自主完成單片機的應用系統(tǒng)設計,讓我學會了如何去完成一個設計報告,讓我更進一步了解了單片機,也讓我感受到做出一個設計的開心,喜悅與擔心。相信這對以后的畢業(yè)
27、設計也會有很大的幫助。</p><p><b> 七、附錄</b></p><p><b> 程序</b></p><p> KEYBUF EQU 30H</p><p> STH0 EQU 31H</p><p> STL0 EQU 32H</p>
28、<p> TEMP EQU 33H</p><p> ORG 00H ; 開始地址</p><p> LJMP START</p><p> ORG 0BH ; T0中斷矢量地址</p><p> LJMP INT_T0 </p
29、><p> START: MOV TMOD,#01H ; 寫控制字,工作方式1</p><p> SETB ET0 ; 允許T0中斷</p><p> SETB EA ; 開放CPU中斷</p><p><b> WAIT:&l
30、t;/b></p><p> MOV P3,#0FFH ; P3口輸出</p><p> CLR P3.4 ; 清零</p><p><b> MOV A,P3</b></p><p> ANL A,#0FH
31、 ; 屏蔽高四位</p><p> XRL A,#0FH ;異或運算,高四位保留,低四位取反 </p><p> JZ NOKEY1 ; 判斷</p><p> LCALL DELY10MS</p><p><b> MOV A,P3</b></p&g
32、t;<p> ANL A,#0FH ; 屏蔽高四位</p><p> XRL A,#0FH ; 異或運算</p><p><b> JZ NOKEY1</b></p><p><b> MOV A,P3</b></p>&l
33、t;p> ANL A,#0FH ; 屏蔽高四位 </p><p> CJNE A,#0EH,NK1 ; 判斷A與#0eh是否相等,比較跳到鍵1</p><p> MOV KEYBUF,#0 ; 賦初值#0</p><p> LJMP DK1 ; 跳轉&l
34、t;/p><p> NK1: CJNE A,#0DH,NK2 ;比較跳到鍵2</p><p> MOV KEYBUF,#1 ;賦值初值#1</p><p> LJMP DK1 ;跳轉</p><p> NK2: CJNE A,#0BH,NK3
35、 ;比較跳到鍵3</p><p> MOV KEYBUF,#2 </p><p><b> LJMP DK1</b></p><p> NK3: CJNE A,#07H,NK4 ;比較跳到鍵4</p><p> MOV KEYBUF,
36、#3</p><p> LJMP DK1 ; 調用DK1</p><p> NK4: NOP ;空指令延時一個周期</p><p><b> DK1:</b></p><p> MOV A,KEYBUF</p>
37、;<p> MOV DPTR,#TABLE ; 查表 賦首地址</p><p> MOVC A,@A+DPTR ; 將查表結果送給A</p><p> MOV P0,A ;將A中數(shù)據(jù)送給P0</p><p> MOV A,KEYBUF</p>&
38、lt;p><b> MOV B,#2</b></p><p> MUL AB ;AB相乘,因為表里都是字,所以得乘2查得數(shù)據(jù)</p><p> MOV TEMP,A</p><p> MOV DPTR,#TABLE1 ; 查表一</p><p> MOVC A,@A+DPTR&
39、lt;/p><p> MOV STH0,A ;寫定時常數(shù),將數(shù)據(jù)高位送THO</p><p> MOV TH0,A ;將高位備份</p><p> INC TEMP ;移動TEMP,掃描鍵盤</p><p> MOV A,TEMP</p>
40、<p> MOVC A,@A+DPTR</p><p> MOV STL0,A ;寫定時常數(shù)</p><p><b> MOV TL0,A</b></p><p> SETB TR0 ;啟動TR0</p><p> DK1A:
41、 MOV A,P3</p><p> ANL A,#0FH ; 屏蔽高四位</p><p> XRL A,#0FH ;低四位取反</p><p> JNZ DK1A ;不為零則轉移</p><p><b> CLR TR
42、0</b></p><p> NOKEY1: ;鍵1子程序</p><p> MOV P3,#0FFH</p><p> CLR P3.5 ;清零</p><p><b> MOV A,P3</b></p
43、><p> ANL A,#0FH ; 屏蔽高四位 </p><p> XRL A,#0FH ; 異或運算</p><p> JZ NOKEY2 ; 判斷跳轉鍵2子程序</p><p> LCALL DELY10MS
44、 ;延遲10毫秒</p><p><b> MOV A,P3</b></p><p> ANL A,#0FH</p><p> XRL A,#0FH</p><p> JZ NOKEY2 ;等于零則轉移</p><p><b> M
45、OV A,P3</b></p><p> ANL A,#0FH</p><p> CJNE A,#0EH,NK5 ; 比較跳到鍵5</p><p> MOV KEYBUF,#4</p><p><b> LJMP DK2</b></p><p> NK5
46、: CJNE A,#0DH,NK6 ; 鍵5子程序</p><p> MOV KEYBUF,#5</p><p><b> LJMP DK2</b></p><p> NK6: CJNE A,#0BH,NK7</p><p> MOV KEYBUF,#6</p&
47、gt;<p><b> LJMP DK2</b></p><p> NK7: CJNE A,#07H,NK8</p><p> MOV KEYBUF,#7</p><p><b> LJMP DK2</b></p><p> NK8: NOP</p>
48、<p><b> DK2:</b></p><p> MOV A,KEYBUF</p><p> MOV DPTR,#TABLE</p><p> MOVC A,@A+DPTR</p><p><b> MOV P0,A</b></p><p> MO
49、V A,KEYBUF</p><p><b> MOV B,#2</b></p><p><b> MUL AB</b></p><p> MOV TEMP,A</p><p> MOV DPTR,#TABLE1 ; 查表掃描表一</p><
50、p> MOVC A,@A+DPTR</p><p> MOV STH0,A ;寫定時常數(shù)A</p><p><b> MOV TH0,A</b></p><p> INC TEMP ; 移動TEMP,掃描鍵盤</p><p>
51、 MOV A,TEMP</p><p> MOVC A,@A+DPTR</p><p> MOV STL0,A ;寫定時的低位</p><p><b> MOV TL0,A</b></p><p> SETB TR0 ;啟動定時<
52、;/p><p> DK2A: MOV A,P3</p><p> ANL A,#0FH</p><p> XRL A,#0FH</p><p> JNZ DK2A ;不為零則轉移</p><p><b> CLR TR0</b></p>
53、;<p><b> NOKEY2:</b></p><p> MOV P3,#0FFH</p><p><b> CLR P3.6</b></p><p><b> MOV A,P3</b></p><p> ANL A,#0FH</p>
54、<p> XRL A,#0FH</p><p><b> JZ NOKEY3</b></p><p> LCALL DELY10MS</p><p><b> MOV A,P3</b></p><p> ANL A,#0FH</p><p> XRL A
55、,#0FH</p><p> JZ NOKEY3</p><p><b> MOV A,P3</b></p><p> ANL A,#0FH</p><p> CJNE A,#0EH,NK9</p><p> MOV KEYBUF,#8</p><p> LJ
56、MP DK3 ; 調用DK3</p><p> NK9: CJNE A,#0DH,NK10</p><p> MOV KEYBUF,#9</p><p><b> LJMP DK3</b></p><p> NK10: CJNE A,#0BH,NK11<
57、/p><p> MOV KEYBUF,#10</p><p><b> LJMP DK3</b></p><p> NK11: CJNE A,#07H,NK12</p><p> MOV KEYBUF,#11</p><p><b> LJMP DK3</b>&l
58、t;/p><p> NK12: NOP</p><p><b> DK3:</b></p><p> MOV A,KEYBUF</p><p> MOV DPTR,#TABLE ; 查表</p><p> MOVC A,@A+DPTR</p>
59、<p><b> MOV P0,A</b></p><p> MOV A,KEYBUF</p><p><b> MOV B,#2</b></p><p><b> MUL AB</b></p><p> MOV TEMP,A</p><
60、p> MOV DPTR,#TABLE1 ; 查表1</p><p> MOVC A,@A+DPTR</p><p> MOV STH0,A</p><p><b> MOV TH0,A</b></p><p> INC TEMP ; 移動TEMP,
61、掃描鍵盤</p><p> MOV A,TEMP</p><p> MOVC A,@A+DPTR</p><p> MOV STL0,A</p><p><b> MOV TL0,A</b></p><p> SETB TR0 ; 啟動TR0
62、 </p><p> DK3A: MOV A,P3</p><p> ANL A,#0FH</p><p> XRL A,#0FH</p><p><b> JNZ DK3A</b></p><p><b> CLR TR0</b></p>&
63、lt;p><b> NOKEY3:</b></p><p> MOV P3,#0FFH ; P3輸出</p><p><b> CLR P3.7</b></p><p><b> MOV A,P3</b></p><p>
64、ANL A,#0FH</p><p> XRL A,#0FH</p><p> JZ NOKEY4 ;判c=0轉移,利用標志位來判斷是哪個鍵按下</p><p> LCALL DELY10MS</p><p><b> MOV A,P3</b></p><p> ANL A,#0F
65、H</p><p> XRL A,#0FH</p><p><b> JZ NOKEY4</b></p><p><b> MOV A,P3</b></p><p> ANL A,#0FH</p><p> CJNE A,#0EH,NK13</p>&
66、lt;p> MOV KEYBUF,#12</p><p> LJMP DK4 ; 調用DK4</p><p> NK13: CJNE A,#0DH,NK14</p><p> MOV KEYBUF,#13</p><p> LJMP DK4
67、 ; 調用DK4</p><p> NK14: CJNE A,#0BH,NK15</p><p> MOV KEYBUF,#14</p><p> LJMP DK4 ; 調用DK4</p><p> NK15: CJNE A,#07H,NK16</p
68、><p> MOV KEYBUF,#15</p><p><b> LJMP DK4</b></p><p> NK16: NOP</p><p><b> DK4:</b></p><p> MOV A,KEYBUF</p><p>
69、; MOV DPTR,#TABLE ; 查表</p><p> MOVC A,@A+DPTR</p><p> MOV P0,A ; P0輸出</p><p> MOV A,KEYBUF</p><p><b> MOV B,#2<
70、/b></p><p><b> MUL AB</b></p><p> MOV TEMP,A</p><p> MOV DPTR,#TABLE1 ; 查表1</p><p> MOVC A,@A+DPTR</p><p> MOV STH0,A<
71、;/p><p><b> MOV TH0,A</b></p><p> INC TEMP ;移動TEMP,掃描鍵盤 </p><p> MOV A,TEMP</p><p> MOVC A,@A+DPTR</p><p> MOV STL0
72、,A</p><p> MOV TL0,A ;寫定時的低位</p><p> SETB TR0 ;啟動T0</p><p> DK4A: MOV A,P3</p><p> ANL A,#0FH
73、 ;屏蔽高四位</p><p> XRL A,#0FH</p><p><b> JNZ DK4A</b></p><p><b> CLR TR0</b></p><p><b> NOKEY4:</b></p><p><b&
74、gt; LJMP WAIT</b></p><p> DELY10MS: </p><p> MOV R6,#10 ;設置外循環(huán)次數(shù) </p><p> D1: MOV R7,#248 ;設置內循環(huán)次數(shù) </p
75、><p><b> DJNZ R7,$</b></p><p> DJNZ R6,D1 </p><p><b> RET</b></p><p> INT_T0: ;重寫定時常數(shù)</p><p> MOV TH0
76、,STH0</p><p> MOV TL0,STL0</p><p><b> CPL P1.0</b></p><p><b> RETI</b></p><p> TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H</p><p&g
77、t; DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H</p><p> TABLE1: DW 64021,64103,64260,64400</p><p> DW 64524,64580,64684,64777</p><p> DW 64820,64898,64968,65030</p><p> DW 6
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 課程設計報告--基于51單片機的簡易電子琴設計
- 基于51單片機簡易電子琴的課程設計
- 單片機課程設計--基于51單片機的簡易電子琴
- 基于51單片機簡易電子琴設計
- 單片機課程設計簡易電子琴
- 簡易電子琴單片機課程設計
- 簡易電子琴單片機課程設計
- 單片機簡易電子琴單片機課程設計
- 簡易電子琴單片機課程設計
- 單片機課程設計簡易電子琴
- 單片機課程設計——簡易電子琴
- 單片機課程設計---簡易電子琴
- 基于單片機的簡易電子琴課程設計
- 基于單片機的簡易電子琴課程設計
- 單片機課程設計--簡易電子琴設計
- 電子琴課程設計--基于單片機的電子琴設計
- 電子琴課程設計--基于單片機的電子琴設計
- 電子琴課程設計-- 基于單片機的電子琴設計
- c51單片機課程設計——電子琴
- c51單片機課程設計——電子琴
評論
0/150
提交評論