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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3041|回復: 0
收起左側

基于51單片機音樂播放器程序 代碼注釋很詳細

[復制鏈接]
ID:1016796 發表于 2023-1-28 20:29 | 顯示全部樓層 |閱讀模式
基于51單片機的音樂播放器設計源程序
  1. /*
  2.         記住:三個數字一組,代表一個音符。
  3. 第一個數字是1234567之一,代表音符哆來咪發...;
  4. 第二個數字是0123之一,代表低音、中音、高音、超高音;
  5. 第三個數字是半拍的個數,代表時間長度。


  6. */


  7. #include "reg52.h"                           //頭文件調用
  8. sbit speaker = P2^5;                        //定義蜂鳴器

  9. unsigned char timer0h, timer0l; //音調高低
  10. unsigned char time;             //一個音符的時間
  11. //--------------------------------------
  12. //單片機晶振采用11.0592MHz
  13. // 頻率-半周期數據表 高八位 本軟件共保存了四個八度的28個頻率數據
  14. code unsigned char FREQH[] = {
  15. 0xF2, 0xF3, 0xF5, 0xF5, 0xF6, 0xF7, 0xF8,            //低音1234567
  16. 0xF9, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB, 0xFC, 0xFC, //1,2,3,4,5,6,7,i
  17. 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFE,                         //高音 234567
  18. 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF};                 //超高音 1234567

  19. // 頻率-半周期數據表 低八位
  20. code unsigned char FREQL[] = {
  21. 0x42, 0xC1, 0x17, 0xB6, 0xD0, 0xD1, 0xB6,                 //低音1234567
  22. 0x21, 0xE1, 0x8C, 0xD8, 0x68, 0xE9, 0x5B, 0x8F, //1,2,3,4,5,6,7,i
  23. 0xEE, 0x44, 0x6B, 0xB4, 0xF4, 0x2D,                         //高音 234567
  24. 0x47, 0x77, 0xA2, 0xB6, 0xDA, 0xFA, 0x16};                 //超高音 1234567
  25. //--------------------------------------
  26. //世上只有媽媽好數據表 要想演奏不同的樂曲, 只需要修改這個數據表
  27. code unsigned char sszymmh[] = {
  28. 6, 2, 3, 5, 2, 1, 3, 2, 2, 5, 2, 2, 1, 3, 2, 6, 2, 1, 5, 2, 1,
  29. //一個音符有三個數字。前為第幾個音、中為第幾個八度、后為時長(以半拍為單位)。
  30. //6, 2, 3 分別代表:6, 中音, 3個半拍;
  31. //5, 2, 1 分別代表:5, 中音, 1個半拍;
  32. //3, 2, 2 分別代表:3, 中音, 2個半拍;
  33. //5, 2, 2 分別代表:5, 中音, 2個半拍;
  34. //1, 3, 2 分別代表:1, 高音, 2個半拍;
  35. //
  36. 6, 2, 4, 3, 2, 2, 5, 2, 1, 6, 2, 1, 5, 2, 2, 3, 2, 2, 1, 2, 1,
  37. 6, 1, 1, 5, 2, 1, 3, 2, 1, 2, 2, 4, 2, 2, 3, 3, 2, 1, 5, 2, 2,
  38. 5, 2, 1, 6, 2, 1, 3, 2, 2, 2, 2, 2, 1, 2, 4, 5, 2, 3, 3, 2, 1,
  39. 2, 2, 1, 1, 2, 1, 6, 1, 1, 1, 2, 1, 5, 1, 6, 0, 0, 0};



  40. //《煙花易冷》
  41. unsigned char code song1[]={
  42.      5,2,1, 3,2,1, 2,2,2, 2,2,4, 3,2,1, 1,2,1, 2,2,1, 3,2,4,
  43.          5,2,1, 3,2,1, 2,2,2, 2,2,2, 5,1,1, 3,2,1, 4,2,1, 3,2,4,
  44.          3,2,1, 3,2,1, 7,2,1, 3,2,1, 2,2,2, 1,2,1, 7,1,1, 1,2,1,
  45.          2,2,1, 3,2,1, 6,2,3, 6,1,1, 1,2,1, 3,2,1, 2,2,1, 6,1,1,
  46.          1,2,1, 7,1,1, 5,1,1, 6,1,6, 5,2,1, 3,2,1, 2,2,2, 2,2,1,
  47.          2,2,1, 3,2,1, 1,2,1, 2,2,1, 3,2,4, 5,2,1, 3,2,1, 2,2,2,
  48.          2,2,1, 2,2,1, 5,1,1, 3,2,1, 4,2,1, 3,2,4, 3,2,1, 3,2,1,
  49.          7,2,3, 3,2,1, 2,2,2, 1,2,1, 7,1,1, 1,2,1, 2,2,1, 3,2,1,
  50.          6,2,3, 6,1,1, 1,2,1, 3,2,1, 2,2,1, 6,1,1, 1,2,1, 7,1,2,
  51.          5,1,2, 6,1,6, 0,0,0 };


  52. //--------------------------------------

  53. void t0int() interrupt 1         //T0中斷程序,控制發音的音調
  54. {
  55.         TR0 = 0;                                  //先關閉T0
  56.         speaker = !speaker;          //輸出方波, 發音
  57.         TH0 = timer0h;                          //下次的中斷時間, 這個時間, 控制音調高低
  58.         TL0 = timer0l;
  59.         TR0 = 1;                                  //啟動T0
  60. }
  61. //--------------------------------------
  62. void delay(unsigned char t) //延時程序,控制發音的時間長度
  63. {
  64.         unsigned char t1;
  65.         unsigned long t2;
  66.         for(t1 = 0; t1 < t; t1++) //雙重循環, 共延時t個半拍
  67.         for(t2 = 0; t2 < 8000; t2++); //延時期間, 可進入T0中斷去發音
  68.         TR0 = 0;                                                 //關閉T0, 停止發音
  69. }
  70. //--------------------------------------
  71. void song() //演奏一個音符
  72.         {
  73.         TH0 = timer0h; //控制音調
  74.         TL0 = timer0l;
  75.         TR0 = 1; //啟動T0, 由T0輸出方波去發音
  76.         delay(time); //控制時間長度
  77.         }
  78. //--------------------------------------
  79. void main(void)
  80. {
  81.         unsigned char k, i;
  82.         TMOD = 1; //置T0定時工作方式1
  83.         ET0 = 1; //開T0中斷
  84.         EA = 1; //開CPU中斷
  85.         while(1)
  86.         {
  87.                 i = 0;
  88.                 time = 1;
  89.                 while(time)
  90.                 {
  91.                         k = song1[i] + 7 * song1[i + 1] - 1;
  92.                         //第i個是音符, 第i+1個是第幾個八度
  93.                         timer0h = FREQH[k]; //從數據表中讀出頻率數值
  94.                         timer0l = FREQL[k]; //實際上, 是定時的時間長度
  95.                         time = song1[i + 2]; //讀出時間長度數值
  96.                         i += 3;
  97.                         song(); //發出一個音符
  98.                 }
  99.         }
  100. }
復制代碼
以上代碼的Keil工程下載(附件內只有代碼不含其他文件,您也可以自行復制以上代碼建立工程,這樣就不必下載了):
音樂播放器設計(新).rar (42.74 KB, 下載次數: 27)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

無效樓層,該帖已經被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕亚洲区一区二 | 国产情侣一区 | 一区中文字幕 | 国产欧美精品一区 | 欧美在线视频一区二区 | www国产成人免费观看视频,深夜成人网 | www.中文字幕 | h视频免费在线观看 | 国产一区二区黑人欧美xxxx | 特级丰满少妇一级aaaa爱毛片 | 日韩一级免费 | 国产丝袜一区二区三区免费视频 | 日韩欧美久久精品 | 涩涩视频在线播放 | 天堂中文在线观看 | 国产粉嫩尤物极品99综合精品 | 久久国产精品色av免费观看 | va精品 | 91传媒在线观看 | 国产999精品久久久久久 | 亚洲一区二区三区免费视频 | 午夜影晥 | 成人一级片在线观看 | 国产精品久久片 | 国产精品一区二区久久久久 | 9999国产精品欧美久久久久久 | 亚洲一区二区中文字幕在线观看 | 国产精品久久一区二区三区 | 日韩一区二区三区在线播放 | 日韩精品一区二区三区视频播放 | 一区二区三区国产好的精 | 国产精品中文字幕在线播放 | 色视频一区二区 | 国产精品视屏 | 国产视频久久 | 小早川怜子xxxxaⅴ在线 | 久久伊人久久 | 亚洲精品成人网 | 亚洲色图综合 | 国产精品成人一区二区三区夜夜夜 | 犬夜叉在线观看 |