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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3071|回復: 0
打印 上一主題 下一主題
收起左側

單片機制作的簡易DIY電子琴電路圖與源碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:287622 發(fā)表于 2018-3-5 09:46 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
用單片機制作的簡易DIY電子琴,矩陣鍵盤圖片見附件,代碼附下:

  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit K1=P3^2;
  6. sbit beep=P3^7;
  7. sbit beep2=P2^7;

  8. sbit p20=P2^0;//切換音樂
  9. sbit p21=P2^1;//播放模式/鍵盤模式
  10. sbit p22=P2^2;//(錄音)

  11. uchar i,ri;
  12. uchar song_Index=0,Tone_Index=0;
  13. uchar *song_Tone,*song_Time;
  14. const LED_tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,
  15. 0x82,0xF8,0x80,0x90,0xFF};

  16. uint code Tone_tab[]={
  17. 63773,63965,64137,64215,64360,64488,64603,
  18. 64654,64751,64836,63036,63148,63212,10,65535,64892,64952};
  19. uint recordi[]={0,1,2,3,4,5,6,7};
  20. unsigned keymode[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};


  21. //矩陣式鍵盤
  22. uchar buff;
  23. void delay1ms(void){
  24. uchar i;
  25. for(i=200;i>0;i--);
  26. }

  27. void key_scan(void){
  28. uchar hang,lie;
  29. P1=0xf0;
  30. if((P1&0xf0)!=0xf0) //行碼為0,列碼為1
  31. {delay1ms();    //消抖動
  32. if((P1&0xf0)!=0xf0){//有鍵按下,列碼為0
  33. hang=0xfe;     //逐行掃描

  34. while((hang&0x08)!=0)//掃描完各行后跳出

  35. //while((hang&0x10)!=0)//4X4
  36. {
  37. P1=hang;
  38. if((P1&0xf0)!=0xf0)//本行有鍵按下

  39. {lie=(P1&0xf0)|0x0f;
  40. buff=((~hang)+(~lie));
  41. switch(buff){
  42. case 0x11:Tone_Index=0;break;
  43. case 0x21:Tone_Index=1;break;
  44. case 0x41:Tone_Index=2;break;
  45. case 0x81:Tone_Index=3;break;

  46. case 0x12:Tone_Index=4;break;
  47. case 0x22:Tone_Index=5;break;
  48. case 0x42:Tone_Index=6;break;
  49. case 0x82:Tone_Index=7;break;

  50. case 0x14:Tone_Index=8;break;
  51. case 0x24:Tone_Index=9;break;
  52. case 0x44:Tone_Index=15;break;
  53. case 0x84:Tone_Index=16;break;

  54. //case 0x18:Tone_Index=12;break;
  55. //case 0x28:Tone_Index=0;break;
  56. //case 0x48:Tone_Index=1;break;
  57. //case 0x88:Tone_Index=2;break;
  58. }
  59. }
  60. else hang=(hang<<1)|0x01;
  61. }
  62. }
  63. }
  64. }




  65. /*
  66. uint code Tone_tab[]={
  67. 62018,62401,62491,62895,63184,63441,63506,
  68. 63773,63965,64137,64215,64360,64488,64603,
  69. 64654,64751,64836,64876,64948,65012,65067,65535};

  70. uchar code song1_Tone[]={
  71. 11,9,11,14,12,14,12,11,11,7,8,9,8,7,8,
  72. 11,9,11,14,13,12,14,11,11,7,8,9,6,7,
  73. 12,14,14,13,12,13,14,12,13,14,12,12,11,10,7,8,
  74. 11,9,11,14,13,12,14,11,11,8,9,10,6,7,0xff};
  75. uchar code song1_Time[]={
  76. 4,2,2,8,4,2,2,8,4,2,2,4,2,2,12,
  77. 4,2,2,4,2,4,4,8,4,2,2,4,2,12,
  78. 4,4,8,4,2,2,8,2,2,2,2,2,2,2,2,16,
  79. 4,2,2,4,2,4,4,8,4,2,2,4,2,12,0xff};
  80. */
  81. uchar code song1_Tone[]={//兩只老虎
  82. 13,0,13,1,13,2,13,0,13,0,13,1,13,2,13,0,13,2,13,3,13,4,13,13,13,2,13,3,13,4,13,13,13,4,5,4,3,2,13,0,13,4,5,4,3,2,13,0,13,2,13,11,13,0,13,13,2,13,11,13,0,13,13,0xff};
  83. uchar code song1_Time[]={
  84. 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0xff};

  85. uchar code song2_Tone[]={//小星星
  86. 13,0,0,4,4,5,5,4,13,3,3,2,2,1,1,0,13,4,4,3,3,2,2,1,13,4,4,3,3,2,2,1,0xff};
  87. uchar code song2_Time[]={
  88. 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0xff};

  89. uchar code song3_Tone[]={//歡樂頌
  90. 13,2,2,3,4,4,3,2,1,0,0,1,2,2,1,1,13,2,2,3,4,4,3,2,1,0,0,1,2,1,13,0,0,13,1,1,2,0,1,3,2,0,1,3,2,1,0,1,12,13,0xff};
  91. uchar code song3_Time[]={
  92. 3,3,3,3,3,3,3,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0xff};

  93. uchar code song4_Tone[]={//生日快樂
  94. 13,4,4,5,13,4,13,7,13,6,13,13,4,4,5,13,4,13,8,13,7,13,13,0xff};
  95. uchar code song4_Time[]={
  96. 2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0xff};

  97. uchar code song5_Tone[]={//兩只老虎
  98. 13,0,13,1,13,2,13,0,13,0,13,1,13,2,13,0,13,2,13,3,13,4,13,13,13,2,13,3,13,4,13,13,13,4,5,4,3,2,13,0,13,4,5,4,3,2,13,0,13,2,13,11,13,0,13,13,2,13,11,13,0,13,13,0xff};
  99. uchar code song5_Time[]={
  100. 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0xff};



  101. void delayms(uint ms)
  102. {uchar a;
  103. while(ms--)
  104. {
  105. for(a=2300;a>0;a--);
  106. }
  107. }
  108. void Timer0() interrupt 1  //中斷函數
  109. {
  110. TH0=Tone_tab[Tone_Index]/256;
  111. TL0=Tone_tab[Tone_Index]%256;
  112. beep=~beep;
  113. }

  114. void select(void)
  115. {
  116. if(song_Index==0)
  117. {
  118. song_Tone=song1_Tone;
  119. song_Time=song1_Time;
  120. }
  121. if(song_Index==1)
  122. {
  123. song_Tone=song2_Tone;
  124. song_Time=song2_Time;
  125. }
  126. if(song_Index==2)
  127. {
  128. song_Tone=song3_Tone;
  129. song_Time=song3_Time;
  130. }
  131. if(song_Index==3)
  132. {
  133. song_Tone=song4_Tone;
  134. song_Time=song4_Time;
  135. }
  136. if(song_Index==4)
  137. {
  138. song_Tone=song5_Tone;
  139. song_Time=song5_Time;
  140. }
  141. }

  142. void int_init(void){
  143. TMOD=0X01;
  144. ET0=1;
  145. EX0=1;
  146. IT0=1;
  147. EA=1;
  148. TR0=0;
  149. }

  150. void display(void){
  151. delay1ms();
  152. if(P1!=0xf0) TR0=1;
  153. else TR0=0;

  154. }

  155. void recordplay(void){
  156. uint i=0;
  157. while(i<8&&p22==0){
  158. Tone_Index=recordi[i];
  159. TR0=1;
  160. delayms(150);
  161. TR0=0;
  162. i++;
  163. }
  164. }

  165. void record(void){
  166. recordi[ri]=Tone_Index;
  167. delayms(10);
  168. ri++;

  169. }


  170. void main(void)
  171. {
  172. int_init();
  173. song_Tone=song1_Tone;
  174. song_Time=song1_Time;
  175. i=0;
  176. while(1)
  177. {

  178. if(p20==0){
  179. delayms(100);
  180. song_Index++;
  181. i=0;
  182. if(song_Index==5) song_Index=0;

  183. select();
  184. }

  185. if(p21==0){

  186. if(p22==0){
  187. if(p20==1&&P1!=0xf0) record();//錄音
  188. if(p20==0) {recordplay();ri=0;}//錄音播放
  189. }

  190. key_scan();
  191. display();
  192. }

  193. else{
  194. P0=LED_tab[song_Index];
  195. TR0=1;
  196. Tone_Index=song_Tone[i];

  197. if(Tone_Index==0xff){
  198. i=0;
  199. TR0=0;}
  200. TR0=1;
  201. delayms(song_Time[Tone_Index]*60);
  202. TR0=0;
  203. i++;
  204. }
  205. }
  206. }
復制代碼


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

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久久久久久午夜片 | 九九伊人sl水蜜桃色推荐 | 一区二区在线 | 人人操日日干 | av资源在线看 | 欧美精品久久久久久久久老牛影院 | 一区二区三区国产 | 香蕉久久a毛片 | 不卡一区 | 日韩国产欧美一区 | 9191成人精品久久 | 伊人精品 | 中文字幕在线第一页 | 国产免费一区二区 | 天天弄天天操 | 国产精品99久久久久久宅男 | 特级毛片 | 亚洲精品一区二区网址 | 亚洲3级| 国产一区二区三区日韩 | 一区二区亚洲 | 91精品国产综合久久精品 | 免费网站国产 | 欧美日韩a| www.日本三级 | 日韩一区二区三区四区五区 | 亚洲精品久久久久久久久久久 | 欧美一级片免费看 | 国产一区在线免费 | 欧美一区二区三区在线观看视频 | 亚洲 中文 欧美 日韩 在线观看 | zzzwww在线看片免费 | 国产精品久久久久久中文字 | 欧美日韩国产在线观看 | av在线一区二区三区 | 欧美国产日韩一区二区三区 | 91日b| 视频一区欧美 | 亚洲第一福利视频 | 久久出精品 | 国产精品久久久久国产a级 欧美日本韩国一区二区 |