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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機音樂播放

[復制鏈接]
跳轉到指定樓層
樓主
ID:169534 發表于 2020-7-6 14:15 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. #include<reg52.h>        //包含頭文件,一般情況不需要改動?
  2.                          //頭文件包含特殊功能寄存器的定義
  3. /*------------------------------------------------
  4.                  硬件端口定義
  5. ------------------------------------------------*/
  6. sbit      SPK=P1^2;  //定義音樂輸出端口

  7. unsigned char Timer0_H,Timer0_L,Time;
  8.                          //世上只有媽媽好數據表
  9. code unsigned char MUSIC[]={          6,2,3,      5,2,1,      3,2,2,    5,2,2,    1,3,2,    6,2,1,    5,2,1,
  10.                                       6,2,4,      3,2,2,      5,2,1,    6,2,1,           5,2,2,         3,2,2,           1,2,1,
  11.                                       6,1,1,      5,2,1,      3,2,1,         2,2,4,           2,2,3,         3,2,1,    5,2,2,
  12.                                       5,2,1,      6,2,1,      3,2,2,         2,2,2,    1,2,4,         5,2,3,           3,2,1,
  13.                                       2,2,1,      1,2,1,      6,1,1,         1,2,1,           5,1,6,         0,0,0
  14.                                       };
  15.                          // 音階頻率表 高八位
  16. code unsigned char FREQH[]={
  17.                                 0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,
  18.                                 0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC, //1,2,3,4,5,6,7,8,i
  19.                                 0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,
  20.                                 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,
  21.                                } ;
  22.                          // 音階頻率表 低八位
  23. code unsigned char FREQL[]={
  24.                                  0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,
  25.                                  0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F, //1,2,3,4,5,6,7,8,i
  26.                                  0xEE,0x44, 0x6B,0xB4,0xF4,0x2D,
  27.                                  0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,
  28.                                 };
  29. /*------------------------------------------------
  30. uS延時函數,含有輸入參數 unsigned char t,無返回值
  31. unsigned char 是定義無符號字符變量,其值的范圍是
  32. 0~255 這里使用晶振12M,精確延時請使用匯編,大致延時
  33. 長度如下 T=tx2+5 uS
  34. ------------------------------------------------*/
  35. void DelayUs2x(unsigned char t)
  36. {   
  37. while(--t);
  38. }
  39. /*------------------------------------------------
  40. mS延時函數,含有輸入參數 unsigned char t,無返回值
  41. unsigned char 是定義無符號字符變量,其值的范圍是
  42. 0~255 這里使用晶振12M,精確延時請使用匯編
  43. ------------------------------------------------*/
  44. void DelayMs(unsigned char t)
  45. {
  46.      
  47. while(t--)
  48. {
  49.      //大致延時1mS
  50.      DelayUs2x(245);
  51.          DelayUs2x(245);
  52. }
  53. }
  54. /*------------------------------------------------
  55.                 節拍延時函數
  56. 各調1/4節拍時間:
  57. 調4/4  125ms
  58. 調2/4  250ms
  59. 調3/4  187ms
  60. ------------------------------------------------*/
  61. void delay(unsigned char t)
  62. {
  63.     unsigned char i;
  64.         for(i=0;i<t;i++)
  65.             DelayMs(250);
  66.     TR0=0;
  67. }
  68. /*------------------------------------------------
  69.                定時器0中斷
  70. ------------------------------------------------*/
  71. void TIM0_ISR() interrupt 1
  72. {
  73. TR0=0;      
  74. SPK=!SPK;
  75. TH0=Timer0_H;
  76. TL0=Timer0_L;
  77. TR0=1;
  78. }
  79. /*------------------------------------------------
  80.                 歌曲處理函數
  81. ------------------------------------------------*/
  82. void Song()
  83. {
  84. TH0=Timer0_H;//賦值定時器時間,決定頻率
  85. TL0=Timer0_L;
  86. TR0=1;       //打開定時器
  87. delay(Time); //延時所需要的節拍                     
  88. }
  89. /*------------------------------------------------
  90.                 主函數
  91. ------------------------------------------------*/
  92. void main(void)
  93. {
  94. unsigned char k,i;
  95. TMOD|=0x01; //置定時器0工作方式1
  96. EA=1;       //打開全局中斷
  97. ET0=1;      //打開定時0中斷
  98. while(1)
  99.       {
  100.        i=0;  
  101.        while(i<100)
  102.                 {         //音樂數組長度 ,唱完從頭再來        
  103.             k=MUSIC[i]+7*MUSIC[i+1]-1;//去音符振蕩頻率所需數據
  104.             Timer0_H=FREQH[k];
  105.             Timer0_L=FREQL[k];
  106.             Time=MUSIC[i+2];          //節拍時長
  107.             i=i+3;
  108.             Song();
  109.            }
  110.        }
  111.   }
復制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:771982 發表于 2020-8-17 11:38 | 只看該作者
親測可以,感謝樓主!!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 黄瓜av | 一级片网站视频 | 久久6视频| 日韩中文字幕av | 99亚洲国产精品 | 欧美一区二区三区久久精品视 | 精品亚洲永久免费精品 | 亚洲国产中文字幕 | 免费一区二区三区 | 中文字幕在线第一页 | 午夜影院在线观看 | 日韩欧美三级在线 | 亚洲区一区二 | 久久成人久久 | 国产精品毛片一区二区在线看 | 五月天国产在线 | 日韩中文一区 | 国产成人99久久亚洲综合精品 | 精品视频一区二区三区 | 亚洲国产乱码 | tube国产 | a免费视频 | 久久久久久久夜 | www.亚洲一区 | 成人精品一区二区三区中文字幕 | 一级毛片视频 | 中文字幕av在线 | 久综合| 成人中文字幕在线观看 | 成人免费视频网站在线观看 | 国产高清免费视频 | 天天拍天天插 | 亚洲精品欧洲 | 亚洲一区二区三区在线观看免费 | 成人羞羞国产免费视频 | 一区二区久久 | 欧美黑人国产人伦爽爽爽 | 日韩免费一级 | 日韩免费毛片视频 | 欧美三区在线观看 | 欧美精品久久久 |