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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

幫我看看at89c51單片機電子琴,只能發出哆啦咪達四個音,剩下四個不發音

[復制鏈接]
跳轉到指定樓層
樓主
ID:986113 發表于 2021-11-30 19:50 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. #include<AT89X52.h>
  2. #define SPK P0_0 //定義方波輸出口
  3. #define LED P1_1
  4. #define shumaguan P0 //定義數碼管段碼輸出
  5. unsigned int tone1,tone2;
  6. /*****標準音符表*****/
  7. //用于使定時器初值變化以產生相應頻率的定時
  8. unsigned char code yinfu[]={
  9. 0xfb,0xe9, //Do
  10. 0xfc,0x5c, //Re
  11. 0xfc,0xc1, //Mi
  12. 0xfc,0xef, //Fa
  13. 0xfd,0x45, //So
  14. 0xfd,0x92, //La
  15. 0xfd,0xd0, //Si
  16. 0xfd,0xee, //Do#
  17. 0xfa,0x14, //So低
  18. 0xfa,0xb9, //La低
  19. 0xfb,0x4d, //Si低
  20. 0x00,0x00 //音符之間的間隔,只要間隔時間小于65ms時,
  21. //喇叭不會發出聲音,用作拍子之間的短暫停頓
  22. };
  23. /*****軍港之夜音調表*****/
  24. unsigned char code shengri_tone[]={9,3,3,1,2,3,2,3,3,10,9,1,2,1,3,5,5,3,6,5,3,
  25. 3,3,2,1,2,3,2,3,11,9,10,11,10,1,11,3,3,11,10,11,10,11,3,3,11,
  26. 11,10,11,10,2,10,1,11,10,9,10,9,3,5,5,3,6,5,6,5,3,5,3,1,3,3,3,5,
  27. 3,5,5,3,3,2,3,2,11,10,11,10,9,3,3,5,5,3,6,5,6,5,3,5,3,1,3,
  28. 3,5,3,5,5,3,3,3,2,3,2,11,10,11,10,9,1 //0代表不發聲,即停頓;數字即為音調
  29. };
  30. /*****軍港之夜節拍表*****/
  31. unsigned char code shengri_beat[]={24,24,24,24,12,12,48,24,48,24,24,12,12,86,24,24,24,24,24,48,24,
  32. 48,12,12,24,12,12,86,48,24,24,12,12,48,24,24,24,24,24,12,12,72,24,24,24,24,
  33. 24,12,12,48,24,12,12,24,24,12,12,86,24,24,24,24,24,12,12,48,12,24,12,24,12,12,12,48,
  34. 24,24,24,24,24,12,12,48,24,12,12,24,24,86,24,24,24,24,24,12,12,48,12,24,12,24,24,
  35. 24,72,24,24,24,12,12,24,12,12,48,24,12,12,24,24,86 //節拍,即tone表各音調的延時
  36. };
  37. /*****自動演示音調表*****/
  38. unsigned char code yanshi_tone[]={ 1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,
  39. 8,0,7,0,6,0,5,0,4,0,3,0,2,0,1,0
  40. };
  41. /*****自動演示節拍表*****/
  42. unsigned char code yanshi_beat[]={ 48,1,48,1,48,1,48,1,48,1,48,1,48,1,48,2,
  43. 48,1,48,1,48,1,48,1,48,1,48,1,48,1,48,2
  44. };
  45. /*****15ms延時子程序,用于節拍*****/
  46. void delay(void)
  47. {
  48. unsigned char n=50;
  49. while(n--)
  50. {
  51. unsigned char i;
  52. for(i=0;i<125;i++);
  53. }
  54. }
  55. /*****定時器0初始化*****/
  56. void initTimer(void)
  57. {
  58. TMOD=0x01; //定時器0,工作方式1;定時器1,工作方式1
  59. TH0=tone1;
  60. TL0=tone2;
  61. }
  62.           void timer0(void) interrupt 1
  63. {
  64. TH0=tone1;
  65. TL0=tone2;
  66. SPK=~SPK; //取反,以產生方波
  67. }
  68. /*****演奏子程序1*****/
  69. void play1(void)
  70. {
  71. unsigned char m=0;
  72. unsigned char s;
  73. unsigned char a=1;
  74. while(1)
  75. {
  76. EA=0;
  77. LED=0;
  78. a=shengri_tone[m]; //取音符
  79. s=shengri_beat[m]; //取節拍
  80. tone1=yinfu[2*a-2];
  81. tone2=yinfu[2*a-1];
  82. EA=1;
  83. while(s--)
  84. {
  85. delay();
  86. }
  87. LED=1;
  88. m++;
  89. if(m>=119) return; //數值是shengri相關表中的元素數量
  90. }
  91. }
  92. /*****演奏子程序2*****/
  93. void play2(void)
  94. {
  95. unsigned char m=0;
  96. unsigned char s;
  97. unsigned char a=1;
  98. while(1)
  99. {
  100. EA=0;
  101. LED=0;
  102. a=yanshi_tone[m];
  103. s=yanshi_beat[m];
  104. tone1=yinfu[2*a-2];
  105. tone2=yinfu[2*a-1];
  106. EA=1;
  107. while(s--)
  108. {
  109. delay();
  110. }
  111. LED=1;
  112. m++;
  113. if(m>=32) return;
  114. }
  115. }
  116. /*****按鍵檢測*****/
  117. void check_key(void)
  118. {
  119. P2=0xff;
  120. P3=0xff; //設置為輸入狀態
  121. switch(P2) //檢測按鍵,輸出數碼管、載入定時器初值、允許中斷
  122. {
  123. case 0xfe:shumaguan=0xF9;tone1=0xfb;tone2=0x90;EA=1;break;
  124. case 0xfd:shumaguan=0xA4;tone1=0xfc;tone2=0xc;EA=1;break;
  125. case 0xfb:shumaguan=0xB0;tone1=0xfc;tone2=0x7b;EA=1;break;
  126. case 0xf7:shumaguan=0x99;tone1=0xfc;tone2=0xad;EA=1;break;
  127. case 0xef:shumaguan=0x92;tone1=0xfd;tone2=0xa;EA=1;break;
  128. case 0xdf:shumaguan=0x82;tone1=0xfd;tone2=0x5d;EA=1;break;
  129. case 0xbf:shumaguan=0xF8;tone1=0xfd;tone2=0xa7;EA=1;break;
  130. case 0x7f:play1();break;
  131. default: EA=0;SPK=0;shumaguan=0xff;//如果沒有鍵按下則關閉中斷和數碼管
  132. }
  133. switch(P3)
  134. {
  135. case 0xfe:shumaguan=0x79;tone1=0xfd;tone2=0xc8;EA=1;break;
  136. case 0xfd:shumaguan=0x24;tone1=0xfe;tone2=0x6;EA=1;break;
  137. case 0xfb:shumaguan=0x30;tone1=0xfe;tone2=0x3e;EA=1;break;
  138. case 0xf7:shumaguan=0x19;tone1=0xfe;tone2=0x57;EA=1;break;
  139. case 0xef:shumaguan=0x12;tone1=0xfe;tone2=0x85;EA=1;break;
  140. case 0xdf:shumaguan=0x02;tone1=0xfe;tone2=0xaf;EA=1;break;
  141. case 0xbf:shumaguan=0x78;tone1=0xfe;tone2=0xd4;EA=1;break;
  142. case 0x7f:play2();break;
  143. default: EA=0;SPK=0;shumaguan=0xff;//如果沒有鍵按下則關閉中斷和數碼管
  144. }
  145. }
  146. /*****主程序*****/
  147. void main(void)
  148. {
  149. initTimer();
  150. // shumaguan=0xff;
  151. TR0=1;
  152. ET0=1;
  153. SPK=0;
  154. while(1)
  155. {
  156. check_key();
  157. }
  158. }
復制代碼


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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲男人天堂网 | 91极品尤物在线播放国产 | 日韩精品二区 | 亚洲成人自拍网 | 91精品国产91久久久 | 日韩视频在线观看中文字幕 | 成人网在线观看 | 台湾a级理论片在线观看 | 亚洲一区二区三区四区五区午夜 | 精品国产一区二区三区久久狼黑人 | 人人看人人搞 | 国产视频黄色 | 欧美激情亚洲 | 青青久在线视频 | 91 视频网站 | 亚洲一区 中文字幕 | 九九久久国产精品 | 中文字幕国产精品视频 | 欧美多人在线 | 99久久夜色精品国产亚洲96 | 在线伊人网 | 精品久久香蕉国产线看观看亚洲 | 欧美1页| 青青草原精品99久久精品66 | 日韩三级电影一区二区 | 男女网站视频 | 在线观看中文字幕 | 日本不卡视频在线播放 | 中文福利视频 | 欧美在线视频二区 | 久久久久久久av | 99国产精品99久久久久久 | 亚洲精品1区 | 精品美女久久久久久免费 | 在线观看视频亚洲 | 色橹橹欧美在线观看视频高清 | 亚洲精品乱码久久久久久久久 | 精品av| 91资源在线 | 免费视频久久久久 | 日韩成人在线一区 |