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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6336|回復: 2
收起左側

在proteus軟件中用51單片機實現音樂播放,音質完美

[復制鏈接]
ID:710460 發表于 2021-4-20 17:44 | 顯示全部樓層 |閱讀模式
proteus 圖紙需要用8.8版本以上,才能打開。
1.png
注意上圖的speaker的驅動電壓需要修改成1V,才能驅動。

單片機代碼如下所示:
  1. #include <reg52.h>

  2. sbit beep = P1^5;
  3. unsigned char timer0H, timer0L, time;

  4. //單片機晶振采用11.0592MHz
  5. // 頻率-半周期數據表 高八位     本軟件共保存了四個八度的28個頻率數據
  6. code unsigned char FREQH[] = {
  7.     0xF2, 0xF3, 0xF5, 0xF5, 0xF6, 0xF7, 0xF8,    //低音1234567
  8.     0xF9, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB, 0xFC, 0xFC,//1,2,3,4,5,6,7,i
  9.     0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFE,            //高音 234567
  10.     0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF};   //超高音 1234567
  11. // 頻率-半周期數據表 低八位
  12. code unsigned char FREQL[] = {
  13.     0x42, 0xC1, 0x17, 0xB6, 0xD0, 0xD1, 0xB6,    //低音1234567
  14.     0x21, 0xE1, 0x8C, 0xD8, 0x68, 0xE9, 0x5B, 0x8F, //1,2,3,4,5,6,7,i
  15.     0xEE, 0x44, 0x6B, 0xB4, 0xF4, 0x2D,             //高音 234567
  16.     0x47, 0x77, 0xA2, 0xB6, 0xDA, 0xFA, 0x16};   //超高音 1234567
  17. //數據表           
  18. code unsigned char song[] = {
  19. 5, 2, 2, 6, 2, 2, 5, 2, 2, 4, 2, 2, 3, 2, 2, 2, 2, 2, 1, 2, 6, 5, 1, 6, //我和我的祖國
  20. 1, 2, 2, 3, 2, 2, 1, 3, 2, 7, 2, 2, 6, 2, 3, 3, 2, 1, 5, 2, 12,                        //一刻也不能分割
  21. 6, 2, 2, 7, 2, 2, 6, 2, 2, 5, 2, 2, 4, 2, 2, 3, 2, 2, 2, 2, 6, 6, 1, 6,        //無論我走到哪里
  22. 7, 1, 2, 6, 1, 2, 5, 1, 2, 5, 2, 2, 1, 2, 3, 2, 2, 1, 3, 2, 12,                        //都唱出一首贊歌
  23. 5, 2, 2, 6, 2, 2, 5, 2, 2, 4, 2, 2, 3, 2, 2, 2, 2, 2, 1, 2, 6, 5, 1, 6,        //我歌唱每一座高山
  24. 1, 2, 2, 3, 2, 2, 1, 3, 2, 7, 2, 2, 2, 3, 3, 1, 3, 1, 6, 2, 12,                        //我歌唱每一條河
  25. 1, 3, 2, 7, 2, 2, 6, 2, 2, 5, 2, 6,                                                                                //裊裊炊煙
  26. 6, 2, 2, 5, 2, 2, 4, 2, 2, 3, 2, 6,                                                                                //小小村落
  27. 7, 1, 4, 6, 1, 2, 5, 1, 4, 2, 2, 2, 1, 2, 12,                                                        //路上一道轍
  28. 8, 2, 2, 2, 3, 2, 3, 3, 2, 2, 3, 2, 8, 2, 2, 6, 2, 2, 7, 2, 2, 6, 2, 3, 3, 2, 1, 5, 2, 12,//我最親愛的祖國
  29. 8, 2, 2, 2, 3, 2, 3, 3, 2, 2, 3, 2, 8, 2, 2, 6, 2, 2, 7, 2, 2, 5, 2, 3, 3, 2, 1, 6, 2, 12,//我永遠緊依著你的心窩
  30. 5, 2, 2, 4, 2, 2, 3, 2, 2, 2, 2, 6, 7, 1, 2, 6, 1, 2, 5, 1, 2, 3, 2, 6,4, 2, 6, 2, 2, 4, 1, 2, 2,1, 2, 10,//你用你那母親的脈搏和我訴說
  31. 0x00,0x00,0x00
  32. };
  33. //一個音符有三個數字。前為第幾個音、中為第幾個八度、后為時長(以半拍為單位)。
  34. //6, 2, 3 分別代表:6, 中音, 3個半拍;
  35. //5, 2, 1 分別代表:5, 中音, 1個半拍;

  36. void t0int() interrupt 1         //T0中斷程序,控制發音的音調
  37. {
  38.     TR0 = 0;                     //先關閉T0
  39.     beep = !beep;          //輸出方波, 發音
  40.     TH0 = timer0H;               //下次的中斷時間, 這個時間, 控制音調高低
  41.     TL0 = timer0L;
  42.     TR0 = 1;                     //啟動T0
  43. }

  44. void delay(unsigned char t)     //延時程序,控制發音的時間長度
  45. {
  46.     unsigned char t1;
  47.     unsigned long t2;
  48.     for(t1 = 0; t1 < t; t1++)    //雙重循環, 共延時t個半拍
  49.       for(t2 = 0; t2 < 4000; t2++); //延時期間, 可進入T0中斷去發音
  50.     TR0 = 0;                        //關閉T0, 停止發音
  51. }

  52. void sing()                      //演奏一個音符
  53. {
  54.     TH0 = timer0H;               //控制音調
  55.     TL0 = timer0L;
  56.     TR0 = 1;                     //啟動T0, 由T0輸出方波去發音
  57.     delay(time);                 //控制時間長度
  58. }

  59. void main(void)
  60. {
  61.     unsigned int k, i;
  62.     TMOD = 1;                    //置T0定時工作方式1
  63.     ET0 = 1;                     //開T0中斷
  64.     EA = 1;                      //開總中斷
  65.    while(1)
  66.         {
  67.       i = 0;
  68.       time = 1;
  69.                            while(time)
  70.                                 {
  71.                                                 k = song[i] + 7 * song[i + 1] - 1;//第i個是音符, 第i+1個是第幾個八度
  72.                                                 timer0H = FREQH[k];      //從數據表中讀出頻率數值
  73.                                                 timer0L = FREQL[k];      //實際上, 是定時的時間長度
  74.                                                 time = song[i + 2];   //讀出時間長度數值
  75.                                                 i += 3;
  76.                                           if(time!=0x00)
  77.                                                         sing();                  //發出一個音符
  78.                                                 else break;
  79.                                 }  
  80.     }  
  81. }
復制代碼
根據下圖所示簡譜,編寫的程序

我和我的祖國簡譜.jpg

評分

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

查看全部評分

回復

使用道具 舉報

ID:710460 發表于 2021-4-20 18:13 | 顯示全部樓層
忘記上傳附件了
-用蜂鳴器實現的音樂盒.7z (37.78 KB, 下載次數: 47)
回復

使用道具 舉報

ID:1088316 發表于 2023-7-13 09:19 | 顯示全部樓層
這個燒到51單片機里面不能用是為什么呀
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: jlzzjlzz欧美大全 | 欧美啪啪网站 | 熟女毛片 | 69精品久久久久久 | 成人在线视频网站 | 亚洲一二三视频 | 午夜小视频免费观看 | 久久69精品久久久久久国产越南 | 久久亚洲二区 | 三级av网址 | 最新国产精品视频 | 久久精品 | 在线观看成人免费视频 | 国产婷婷色一区二区三区 | 国产精品精品视频一区二区三区 | 在线一区| 大香网伊人| 久久一起草 | 天天夜夜操 | 精品欧美一区二区精品久久 | 久久伊人精品一区二区三区 | 99国产精品视频免费观看一公开 | 欧美淫片 | 国产精品激情在线 | 99精品在线观看 | 久久亚洲91 | 精品欧美一区二区精品久久久 | 91社区视频 | 久久久久久久一级 | 在线看av网址 | 亚洲一区二区三区在线播放 | 免费国产视频 | 亚洲国产欧美日韩 | 嫩草网| 免费观看一区二区三区毛片 | 国产日韩精品视频 | 亚洲成人中文字幕 | 在线观看国产视频 | 中文字幕视频网 | 伊人艹 | 黄色三级免费网站 |