久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 21187|回復(fù): 28
打印 上一主題 下一主題
收起左側(cè)

基于STC單片機(jī)的觸摸式電鋼琴制作

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
觸摸式電鋼琴

       這個(gè)世界上有很多讓人上癮的事情,除了抽煙,喝酒這些壞毛病外,其實(shí)往51黑論壇發(fā)稿也是會(huì)上癮的。這不,我又急著來向大家展示我的作品~~話入正題,單片機(jī)制作無非聲、光、動(dòng)、傳感,這次就來做點(diǎn)跟聲音有關(guān)的吧。這次帶來的是一款觸摸式電鋼琴,細(xì)心的網(wǎng)友可能會(huì)注意到,我用的是電鋼琴而不是電子琴,這兩者有區(qū)別么?我的回答是肯定的,因?yàn)檫@正是本作品的亮點(diǎn)所在。單片機(jī)演奏音樂大家肯定都不會(huì)陌生,用單片機(jī)內(nèi)部的定時(shí)器,送入不同的頻率,每一個(gè)頻率對(duì)應(yīng)著一個(gè)音調(diào),然后按照事先編排好的順序驅(qū)動(dòng)蜂鳴器發(fā)聲,就可以演奏出音樂了。至于電子琴只需要把不同的頻率映射到對(duì)應(yīng)按鍵上即可。之所以說是電子琴,是因?yàn)檫@種方法只能演奏出單調(diào)的方波音頻。想不想讓聲音不再單調(diào),而是發(fā)出動(dòng)聽的鋼琴音色呢?如果想的話,請(qǐng)拿出你的熱情并且打開你的烙鐵的開關(guān),跟我一起往下制作吧!
          名稱        說明       數(shù)量

        STC12C5A60S2    單片機(jī)主控     1片

        40腳芯片座    與單片機(jī)配套使用   1片

         LM386L       功放芯片       1片

       220uf電解電容  功放芯片配套使用    1個(gè)

       10uf電解電容   功放芯片配套使用     1個(gè)

        萬用電路板      大一點(diǎn)的     1張

          LED      任何你喜歡的顏色    1個(gè)

        耳機(jī)插座       3.5毫米       1個(gè)

         蜂鳴器      功放喇叭        1個(gè)

         排針         4PIN         1個(gè)

        長(zhǎng)條貼紙    打印好琴鍵的圖案     1張

         釘書針     作為觸摸點(diǎn)使用     72個(gè)

        免刮漆包線     飛線連接       1卷

        撥動(dòng)開關(guān)    耳機(jī)/功放輸出切換    1個(gè)

        0.1uf瓷片電容    電源濾波        1個(gè)

       制作所需的元器件如上表所示,本著精簡(jiǎn)制作的原則,用到的都是很普通的元器件,數(shù)量也很少,所以硬件制作的難度不是很大。連接部分則是過錫走線加飛線,烙鐵溫度在350度左右即可。電路圖如下所示,值得說明的一點(diǎn)是,圖中的矩陣觸摸按鍵這里只畫出了一組,其實(shí)有三組,共起來的一端分別與  P0.0、   P2.2、P2.1連接。剩下部分的電路都很明了,有創(chuàng)造力的朋友看電路圖自行發(fā)揮就好,新手可以參考下我的布局。

先把打印好的琴鍵圖片裁好,用雙面膠貼在洞洞板上。(如圖1、2、3 )








       怎么樣,是不是很有電鋼琴的樣子?什么?你說觸摸按鍵在哪里?別著急,讓我請(qǐng)出下面這位特別來賓——釘書針。為了整個(gè)制作的美觀跟手感,觸摸點(diǎn)的選取費(fèi)了我很大的心思,試了很多種導(dǎo)體都無法達(dá)到滿意的效果,直到有一天無意中把釘書針掉在了洞洞板上,發(fā)現(xiàn)它那細(xì)長(zhǎng)又導(dǎo)電的身體,長(zhǎng)度剛剛好可以插進(jìn)洞洞板,才有了這個(gè)有趣的設(shè)計(jì)。如圖4、5所示,按照琴鍵的位置插好釘書針并在背面壓緊。




       以此類推,完成36個(gè)鍵不會(huì)想你想象的那么枯燥,美妙的琴聲在等著你。之后用雙面膠把揚(yáng)聲器粘在板子正面,并完成揚(yáng)聲器導(dǎo)線、單片機(jī)、下載口、撥動(dòng)開關(guān)、耳機(jī)插座、LED、功放芯片以及電解電容的焊接。焊接好的樣子如圖6所示。




       接下來是觸摸按鍵矩陣后與單片機(jī)的連接了,我的方法是過錫加飛線。先把單片機(jī)正下方的一組矩陣按鍵與兩邊矩陣共起來的部分過錫連接到I/O口上(如圖7),

然后用免刮漆包線把兩側(cè)矩陣要與I/O連接的地方向中間過錫部分連接(如圖8)

       按道理制作到這里硬件的部分就大功告成了,但是在后期測(cè)試的過程中,總會(huì)有上電時(shí)亂響的問題。仔細(xì)思考后發(fā)現(xiàn)問題所在:因?yàn)橛|摸按鍵是基于增強(qiáng)型51單片機(jī)的I/O口高阻狀態(tài)(下文會(huì)詳細(xì)介紹),這種狀態(tài)對(duì)電流的波動(dòng)很敏感,會(huì)受到電源雜波的干擾。所以在正極跟地之間加了一個(gè)104電容,效果有很大好轉(zhuǎn)。順便一提,使用電池供電效果最好。到此就剩下載程序了,在最下方可以下載到源程序跟編譯好的HEX文件,然后用STC-ISP軟件下載到單片機(jī)里。注意,如果單片機(jī)是新的或者上一次使用連接了晶振的話,要先連接好晶振才能下載進(jìn)程序。軟件設(shè)置如圖9。

到此,制作的部分全部完成了。


       如果我現(xiàn)在結(jié)尾,肯定有人說我不地道,因?yàn)榇蠹易钕肼牭能浖砦疫沒有說明。別急,聽我娓娓道來。先說觸摸吧,前面提到I/O口的高阻狀態(tài),說到了在這種狀態(tài)下I/O口對(duì)電流很敏感,那是不是只要接觸I/O口,就能用人體的生物電完成觸摸了?哎,好事多磨,雖然它很敏感,但是生物電的強(qiáng)度還是不能穩(wěn)定的被感應(yīng)。怎么辦呢?冷靜下來想一想,只要再叫一個(gè)強(qiáng)推狀態(tài)的I/O口來幫忙就好辦了,所謂強(qiáng)推狀態(tài),就是比普通準(zhǔn)雙向I/O口上拉能力強(qiáng)很多的一種狀態(tài)。這樣,在我們同時(shí)觸碰這兩個(gè)I/O時(shí),強(qiáng)推I/O口的電流就通過皮膚流入高阻狀態(tài)的I/O口,從而讀到電平變化,從而實(shí)現(xiàn)觸摸操作。這么好用的功能怎么設(shè)置呢,請(qǐng)看我從STC數(shù)據(jù)手冊(cè)里截下來的設(shè)置方法。


如圖所示,當(dāng)我們用C語言設(shè)置I/O狀態(tài)時(shí),只需向P*M1 P*M0賦值(0x開頭的十六進(jìn)制格式)即可,如圖10

       接下來到了發(fā)音部分,說到這里要感謝杜洋老師,因?yàn)檫@里的原理跟程序參考了他的SPEAKER32語音盒子。兩者同樣都是用電腦把要播放的音頻先在電腦上用專業(yè)的音頻軟件轉(zhuǎn)換成ASCII Test數(shù)據(jù),稍加改造變成數(shù)組后放入單片機(jī)60K的ROM里,配合PWM解碼程序,一個(gè)在你進(jìn)門時(shí)甜美的說出“你好,歡迎光臨”,一個(gè)則是在你觸摸琴鍵后發(fā)出鋼琴的音色。專業(yè)的音頻軟件有很多,我用的是一款名為“Adobe Audition 3.0”的軟件,簡(jiǎn)潔的界面,強(qiáng)大的功能,都是我選擇它的原因。接下來是使用方法,準(zhǔn)備好從網(wǎng)上下載到的音頻,你可以用鼠標(biāo)拖入音軌中,也可以對(duì)著一條空音軌點(diǎn)擊“右鍵→插入→音頻”來把你的音頻放入音軌中。這時(shí)音軌可能沒有緊貼前端,這樣會(huì)制造出一段空白音頻,這部分不但影響正常工作還很占空間,用右鍵點(diǎn)住它向前拖動(dòng),直到與前端緊貼。如圖11

       之后雙擊音頻,進(jìn)入編輯模式。在這個(gè)模式下我們要做的是刪除空白跟擴(kuò)大音量。向上滾動(dòng)滑輪讓時(shí)間間隔變小,前端的空白就會(huì)變得明顯,去除它的原因跟上面一樣。我們用左鍵框選出空白部分,然后點(diǎn)擊“右鍵→剪切”來刪除空白。如圖12

       隨后按Ctrl+A全選波形,點(diǎn)擊左邊效果欄里的放大,調(diào)整好合適的放大倍數(shù)后點(diǎn)擊確認(rèn)以完成放大操作。如圖13

       然后點(diǎn)擊左上角的“文件→另存為”,這時(shí)會(huì)彈出一個(gè)選擇格式跟保存路徑的窗口,下方的保存類型我們選擇“ACW波形(*.wav)”,然后點(diǎn)擊下方的選項(xiàng),濾波器處改為“PCM”,屬性處改為“8.000kHz,8位,單聲道”,然后“確定→保存”如果彈出窗口點(diǎn)擊確定即可。如圖14


        這樣就把音頻轉(zhuǎn)成了8位單聲道,為后面的音頻表做好準(zhǔn)備。接下來軟件會(huì)自動(dòng)載入剛剛保存的音頻,再點(diǎn)擊左上角的“文件→另存為”在彈出的窗口里選擇“ASCII 文本數(shù)據(jù)(*.txt)”然后點(diǎn)擊下方的選項(xiàng),把兩個(gè)勾選框的對(duì)鉤都點(diǎn)掉,再點(diǎn)擊“確定→保存”就完成了ASCII Test數(shù)據(jù)的轉(zhuǎn)換。如圖15

       這樣重復(fù)36此之后,我們就得到了36個(gè)音調(diào)的8位音頻數(shù)據(jù)了。打開電鋼琴的工程文件,在程序的C語言文件下方有36個(gè)用音調(diào)名命名的數(shù)據(jù)表文件。這時(shí)只要把剛剛生成的數(shù)據(jù)復(fù)制到對(duì)應(yīng)數(shù)據(jù)表中就大功告成了,不過要注意開始處數(shù)組的定義跟每個(gè)數(shù)據(jù)后的逗號(hào),編譯器可不會(huì)被你的急切所打動(dòng)。我這里只是拋磚引玉,感興趣的話可以在網(wǎng)上找到更多樂器的音色,讓它變得更好玩,更強(qiáng)大。在茶余飯后悄悄的拿出它,為家人彈奏一曲。簡(jiǎn)單的兒歌,或者經(jīng)典的旋律,不管你音樂水平的高低,總能在家人歡樂的笑聲中感受到電子制作帶給你的幸福!




小橙出品,必屬精品。
請(qǐng)大家多多支持宅曉橙!

單片機(jī)源程序:

  1. #define SPEED         72//語速(在12MHz時(shí)設(shè)置為70最佳,值越小語速越快)
  2. #define X2                 2 //音頻播放倍速(默認(rèn)值2,增加/減少時(shí)音頻速度整倍加/減)
  3. #define A_DA         1600 //音頻數(shù)據(jù)字節(jié)的數(shù)量,即音頻文件的行數(shù)。最大值不得大于65535        我的音頻是1600
  4. //(如果有較長(zhǎng)的音頻需要播放可以分段處理,每段字節(jié)數(shù)不大于65535)//
  5. #define DL_F         1 //音頻播放前的延時(shí)(單位:mS)。最大值不得大于65535
  6. #define DL_A         1 //音頻播放后的延時(shí)(單位:mS)。最大值不得大于65535

  7. /*********************************************************************************************/

  8. #include<STC12C5A60S2.H> //頭文件
  9. sbit PWM  = P1 ^ 3;//音頻輸出接口(只適用PWM接口)
  10. sbit LED  = P3 ^ 6;//狀態(tài)指示LED燈 正極
  11. sbit LEDG  = P3 ^ 7;//狀態(tài)指示LED燈 負(fù)極
  12. unsigned char code  wav1[];//音頻數(shù)據(jù)表聲明                 
  13. unsigned char code  wav2[];
  14. unsigned char code  wav3[];
  15. unsigned char code  wav4[];
  16. unsigned char code  wav5[];
  17. unsigned char code  wav6[];
  18. unsigned char code  wav7[];
  19. unsigned char code  wav8[];
  20. unsigned char code  wav9[];
  21. unsigned char code wav10[];
  22. unsigned char code wav11[];
  23. unsigned char code wav12[];
  24. unsigned char code wav13[];
  25. unsigned char code wav14[];
  26. unsigned char code wav15[];
  27. unsigned char code wav16[];
  28. unsigned char code wav17[];
  29. unsigned char code wav18[];
  30. unsigned char code wav19[];
  31. unsigned char code wav20[];
  32. unsigned char code wav21[];
  33. unsigned char code wav22[];
  34. unsigned char code wav23[];
  35. unsigned char code wav24[];
  36. unsigned char code wav25[];
  37. unsigned char code wav26[];
  38. unsigned char code wav27[];
  39. unsigned char code wav28[];
  40. unsigned char code wav29[];
  41. unsigned char code wav30[];
  42. unsigned char code wav31[];
  43. unsigned char code wav32[];
  44. unsigned char code wav33[];
  45. unsigned char code wav34[];
  46. unsigned char code wav35[];
  47. unsigned char code wav36[];
  48. sbit  TUI1  =  P2 ^ 1 ;
  49. sbit  TUI2  =  P2 ^ 2 ;
  50. sbit  TUI3  =  P0 ^ 0 ;
  51. sbit  KEY1  =  P2 ^ 3 ;
  52. sbit  KEY2  =  P2 ^ 4 ;
  53. sbit  KEY3  =  P2 ^ 5 ;
  54. sbit  KEY4  =  P2 ^ 6 ;
  55. sbit  KEY5  =  P2 ^ 7 ;
  56. sbit  KEY6  =  P0 ^ 7 ;
  57. sbit  KEY7  =  P0 ^ 6 ;
  58. sbit  KEY8  =  P0 ^ 5 ;
  59. sbit  KEY9  =  P0 ^ 4 ;
  60. sbit  KEY10 =  P0 ^ 3 ;
  61. sbit  KEY11 =  P0 ^ 2 ;
  62. sbit  KEY12 =  P0 ^ 1 ;

  63. unsigned char         xiang           ;
  64. /***********************************************************************/
  65. void DELAY_MS (unsigned int a){//毫秒級(jí)CPU延時(shí)函數(shù)
  66.         unsigned int i;
  67.         while( --a != 0){
  68.                 for(i = 0; i < 600; i++);
  69.         }
  70. }  
  71. /*********************************************************************************************/
  72. void DELAY_NS (unsigned char a){//用于音頻延時(shí)
  73.         unsigned int i;
  74.         while( --a != 0){
  75.                 for(i = 0; i < SPEED; i++);
  76.         }
  77. }  
  78. /**********************************************************************************************/
  79. void PWM_init (void){//PWM初始化函數(shù)
  80.         CMOD=0x02; //設(shè)置PCA定時(shí)器
  81.          CL=0x00;
  82.          CH=0x00;
  83.         CCAPM0=0x42; //PWM0設(shè)置PCA工作方式為PWM方式(0100 0010)
  84.          CCAP0L=0x00; //設(shè)置PWM0初始值與CCAP0H相同
  85.          CCAP0H=0x00; // PWM0初始時(shí)為0
  86.          CR=1; //啟動(dòng)PCA定時(shí)器
  87. }  
  88. /**********************************************************************************************/
  89. void PWM0_set (unsigned char a){//PWM0占空比設(shè)置函數(shù)
  90.         CCAP0L= a; //設(shè)置值直接寫入CCAP0L
  91.          CCAP0H= a; //設(shè)置值直接寫入CCAP0H
  92. }  

  93. /**********************************************************************************************/
  94. void SP1 (void){//音頻播放函數(shù)
  95.         unsigned int a;
  96.     LEDG = 0;//LED燈開
  97.         DELAY_MS (DL_F);//播放前延時(shí)
  98.         for(a=0;a<A_DA;a++){ //音頻播放數(shù)據(jù)長(zhǎng)度
  99.                
  100.                 DELAY_NS (X2);//播放數(shù)據(jù)間隔,即可調(diào)整音頻速度和音調(diào)
  101.                 if(xiang == 1) {
  102.                 PWM0_set(wav1[a]);}
  103.                 if(xiang == 2) {
  104.                 PWM0_set(wav2[a]);}
  105.                 if(xiang == 3) {
  106.                 PWM0_set(wav3[a]);}
  107.                 if(xiang == 4) {
  108.                 PWM0_set(wav4[a]);}
  109.                 if(xiang == 5) {
  110.                 PWM0_set(wav5[a]);}
  111.                 if(xiang == 6) {
  112.                 PWM0_set(wav6[a]);}
  113.                 if(xiang == 7) {
  114.                 PWM0_set(wav7[a]);}
  115.                 if(xiang == 8) {
  116.                 PWM0_set(wav8[a]);}
  117.                 if(xiang == 9) {
  118.                 PWM0_set(wav9[a]);}
  119.                 if(xiang ==10) {
  120.                 PWM0_set(wav10[a]);}
  121.                 if(xiang ==11) {
  122.                 PWM0_set(wav11[a]);}
  123.                 if(xiang ==12) {
  124.                 PWM0_set(wav12[a]);}
  125.                 if(xiang ==13) {
  126.                 PWM0_set(wav13[a]);}
  127.                 if(xiang ==14) {
  128.                 PWM0_set(wav14[a]);}
  129.                 if(xiang ==15) {
  130.                 PWM0_set(wav15[a]);}
  131.                 if(xiang ==16) {
  132.                 PWM0_set(wav16[a]);}
  133.                 if(xiang ==17) {
  134.                 PWM0_set(wav17[a]);}
  135.                 if(xiang ==18) {
  136.                 PWM0_set(wav18[a]);}
  137.                 if(xiang ==19) {
  138.                 PWM0_set(wav19[a]);}
  139.                 if(xiang ==20) {
  140.                 PWM0_set(wav20[a]);}
  141.                 if(xiang ==21) {
  142.                 PWM0_set(wav21[a]);}
  143.                 if(xiang ==22) {
  144.                 PWM0_set(wav22[a]);}
  145.                 if(xiang ==23) {
  146.                 PWM0_set(wav23[a]);}
  147.                 if(xiang ==24) {
  148.                 PWM0_set(wav24[a]);}
  149.                 if(xiang ==25) {
  150.                 PWM0_set(wav25[a]);}
  151.                 if(xiang ==26) {
  152.                 PWM0_set(wav26[a]);}
  153.                 if(xiang ==27) {
  154.                 PWM0_set(wav27[a]);}
  155.                 if(xiang ==28) {
  156.                 PWM0_set(wav28[a]);}
  157.                 if(xiang ==29) {
  158.                 PWM0_set(wav29[a]);}
  159.                 if(xiang ==30) {
  160.                 PWM0_set(wav30[a]);}
  161.                 if(xiang ==31) {
  162.                 PWM0_set(wav31[a]);}
  163.                 if(xiang ==32) {
  164.                 PWM0_set(wav32[a]);}
  165.                 if(xiang ==33) {
  166.                 PWM0_set(wav33[a]);}
  167.                 if(xiang ==34) {
  168.                 PWM0_set(wav34[a]);}
  169.                 if(xiang ==35) {
  170.                 PWM0_set(wav35[a]);}
  171.                 if(xiang ==36) {
  172.                 PWM0_set(wav36[a]);}

  173.         
  174.         }
  175.         
  176.         xiang = 0;
  177.     DELAY_MS (DL_A);//播放后延時(shí)
  178.         LEDG=1;//LED燈關(guān)
  179.         PWM0_set(0); //設(shè)置PWM占空比

  180.         PWM = 0;//PWM關(guān)閉前清0
  181. }   
  182. /**********************************************************************************************/
  183. void main (void){//主函數(shù)
  184.     P0M1 = 0xFE;// (11111110)*P0.0(低音)P2.2(中音)P2.1(高音)強(qiáng)推
  185.         P0M0 = 0x01;// (00000001)*P2.3 P2.4 P2.5 P2.6 P2.7 P0.7  
  186.         P2M1 = 0xF8;// (11111000)*P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 高阻
  187.         P2M0 = 0x06;// (00000110)

  188.         PWM0_set(128);//設(shè)置PWM到中間值,即音頻波形的基礎(chǔ)電平。
  189.         CR=1; //啟動(dòng)PCA定時(shí)器
  190.         P3M0 = 0xFF;//狀態(tài)指示LED接口強(qiáng)推設(shè)置
  191.         PWM = 0;//PWM啟動(dòng)前準(zhǔn)備
  192.         PWM_init(); //PWM初始化
  193.          while(1){
  194.    TUI1 = 1;         
  195.              if(KEY1||KEY2||KEY3||KEY4||KEY5||KEY6||KEY7||KEY8||KEY9||KEY10||KEY11||KEY12 == 1){
  196.                    DELAY_MS (20);
  197.                        if(KEY1 == 1){xiang = 1 ;SP1();while(KEY1  == 1);}
  198.                              if(KEY2 == 1){xiang = 2 ;SP1();while(KEY2  == 1);}
  199.                            if(KEY3 == 1){xiang = 3 ;SP1();while(KEY3  == 1);}

  200. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼


程序以及HEX文件:
PIANO.zip (556.77 KB, 下載次數(shù): 201)



評(píng)分

參與人數(shù) 3黑幣 +19 收起 理由
鯨橙 + 2
練氏 + 12
jianwei + 5 很給力!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏22 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:231071 發(fā)表于 2017-10-27 12:17 | 只看該作者
我要學(xué)
回復(fù)

使用道具 舉報(bào)

板凳
ID:232585 發(fā)表于 2017-10-31 17:14 | 只看該作者
只能說樓主很牛B,需要膜拜
回復(fù)

使用道具 舉報(bào)

地板
ID:248323 發(fā)表于 2017-11-11 13:02 | 只看該作者
膜拜大佬
回復(fù)

使用道具 舉報(bào)

5#
ID:163950 發(fā)表于 2017-11-25 08:37 | 只看該作者
看起來不錯(cuò)啊!
回復(fù)

使用道具 舉報(bào)

6#
ID:238726 發(fā)表于 2017-11-25 11:37 | 只看該作者
這個(gè)感覺好難
回復(fù)

使用道具 舉報(bào)

7#
ID:249545 發(fā)表于 2017-11-25 20:51 | 只看該作者
老師對(duì)音樂真的是熱愛,連鋼琴都想到DIY.
回復(fù)

使用道具 舉報(bào)

8#
ID:217947 發(fā)表于 2018-1-6 14:59 | 只看該作者
學(xué)習(xí)學(xué)習(xí),
回復(fù)

使用道具 舉報(bào)

9#
ID:125648 發(fā)表于 2018-1-8 10:16 | 只看該作者
您好,請(qǐng)問,我在keil里無法生成.hex文件,在您的提供的壓縮包里也沒有看到.hex文件,我剛觸單片機(jī),請(qǐng)麻煩您能給我一份.hex文件吧,謝謝1580808688@qq.com
回復(fù)

使用道具 舉報(bào)

10#
ID:125648 發(fā)表于 2018-1-8 10:19 | 只看該作者
您好,請(qǐng)問,我在keil里無法生成.hex文件,在您的提供的壓縮包里也沒有看到.hex文件,我剛觸單片機(jī),請(qǐng)麻煩您能給我一份.hex文件吧,謝謝1580808688@qq.com
回復(fù)

使用道具 舉報(bào)

11#
ID:104477 發(fā)表于 2018-3-15 18:25 來自手機(jī) | 只看該作者
可以擴(kuò)展到88個(gè)鍵盤嗎
回復(fù)

使用道具 舉報(bào)

12#
ID:292689 發(fā)表于 2018-3-16 16:16 | 只看該作者
不錯(cuò)不錯(cuò)
回復(fù)

使用道具 舉報(bào)

13#
ID:303961 發(fā)表于 2018-4-8 20:33 | 只看該作者
謝謝 我要學(xué)
回復(fù)

使用道具 舉報(bào)

14#
ID:187056 發(fā)表于 2018-11-30 13:10 | 只看該作者
看起來不錯(cuò)啊!
回復(fù)

使用道具 舉報(bào)

15#
ID:302325 發(fā)表于 2018-11-30 13:19 | 只看該作者
不得不說   這是一個(gè)相當(dāng)完美的設(shè)計(jì)            
回復(fù)

使用道具 舉報(bào)

16#
ID:146045 發(fā)表于 2018-11-30 14:16 來自手機(jī) | 只看該作者
硬件做得不錯(cuò)
回復(fù)

使用道具 舉報(bào)

17#
ID:326450 發(fā)表于 2018-11-30 16:07 | 只看該作者
感謝樓主的分享
回復(fù)

使用道具 舉報(bào)

18#
ID:440205 發(fā)表于 2018-12-6 10:40 | 只看該作者
為什么會(huì)提示這個(gè)啊?PIANO.c(221): error C202: 'KEY1': undefined identifier 好像所有定義都找不到
回復(fù)

使用道具 舉報(bào)

19#
ID:384554 發(fā)表于 2018-12-6 14:44 | 只看該作者
我早三個(gè)月在別的論壇找到了一模一樣的帖子,不知道是不是樓主本人發(fā)的,然后內(nèi)容和文件一模一樣,然后我問了有沒有hex文件,也沒理我,芯片都買了,一直不知道怎么弄,(有熱心的貼友給我導(dǎo)出了hex文件,但是超過60K肯定放不進(jìn)去)我想問下有人按這個(gè)教程做出來了嗎?
回復(fù)

使用道具 舉報(bào)

20#
ID:382826 發(fā)表于 2018-12-9 18:14 | 只看該作者
厲害
回復(fù)

使用道具 舉報(bào)

21#
ID:399179 發(fā)表于 2019-4-10 11:03 來自手機(jī) | 只看該作者
下載了,編譯后108處警告,怎么回事?也不發(fā)聲
回復(fù)

使用道具 舉報(bào)

22#
ID:604009 發(fā)表于 2019-8-26 19:15 | 只看該作者
不知道文件大小如何還有需不需要調(diào)用啊
回復(fù)

使用道具 舉報(bào)

23#
ID:649923 發(fā)表于 2019-11-26 14:33 | 只看該作者
學(xué)習(xí)了,不錯(cuò)的教程
回復(fù)

使用道具 舉報(bào)

24#
ID:399179 發(fā)表于 2020-3-3 22:18 來自手機(jī) | 只看該作者
這個(gè)有人做成功了嗎?
回復(fù)

使用道具 舉報(bào)

25#
ID:407089 發(fā)表于 2020-3-4 11:14 | 只看該作者
挺好!留個(gè)記號(hào)。
回復(fù)

使用道具 舉報(bào)

26#
ID:561633 發(fā)表于 2020-6-28 22:32 來自手機(jī) | 只看該作者
請(qǐng)問有人做出來了嗎。我按這種寫的聲音不正確。
回復(fù)

使用道具 舉報(bào)

27#
ID:561633 發(fā)表于 2020-6-29 18:12 | 只看該作者
請(qǐng)問有沒有61鍵的音效的ASCII Test數(shù)據(jù)啊。自己轉(zhuǎn)換的沒有up主轉(zhuǎn)換出來的聲音好聽
回復(fù)

使用道具 舉報(bào)

28#
ID:774631 發(fā)表于 2020-7-1 08:49 | 只看該作者
還能DIY鋼琴,長(zhǎng)見識(shí)了。謝謝分享
回復(fù)

使用道具 舉報(bào)

29#
ID:976767 發(fā)表于 2021-12-15 15:03 | 只看該作者
終于找到了。。。之前一直搜電子琴加音色,原來在這里,淚目.......
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日韩在线免费看 | 日韩精品久久久 | 色婷婷久久 | 伊人成人免费视频 | 国产一区二区毛片 | 99热这里有精品 | 中文字幕精品一区二区三区精品 | 亚洲性人人天天夜夜摸 | 欧美精品区 | 欧美色专区| 四虎成人精品永久免费av九九 | 精品国产乱码久久久久久蜜臀 | 国产精品国产成人国产三级 | 操久久 | 天天舔天天 | 波多野结衣精品 | 国产精品久久久久久影院8一贰佰 | 欧美一区二区视频 | 日日夜夜免费精品视频 | 久久精品成人热国产成 | 国产精品久久7777777 | 久久精品久久久久久 | 欧州一区二区三区 | 国产精品一二三区 | 精品二区视频 | 欧美日韩精品亚洲 | 国产日韩欧美在线 | 在线免费观看一区二区 | 成人欧美一区二区三区黑人孕妇 | 国产精品成人一区二区 | 久久天天躁狠狠躁夜夜躁2014 | www.久久99| 特黄色毛片 | 91av在线免费 | 91免费版在线观看 | 日韩一区二区视频 | 91精品国产92 | 精品久久中文字幕 | 日韩一区二区av | 久久久久国产精品一区 | 国产精品福利视频 |