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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

AT89C52單片機Proteus仿真音樂播放器操作步驟[原創]

[復制鏈接]
跳轉到指定樓層
樓主
很多新手不知道怎么使用Proteus仿真器做一個音樂播放器,功能雖然簡單,對于新入門的人來說是無從下手,我在這里把簡單的過程及源文件發上來,供入門的朋友學習。

操作步驟:
1.創建一個新的工程
2.看圖操作添加元件


3.操作完,點連線,把接線兩端連接起來,注意,自己設定的輸入P腳,我這里采用的是P2^5


4.右鍵選擇接地


5.完成的效果
6.使用方法,雙擊芯片元件,在彈出窗體中把編譯hex文件選擇進去,點確定

7.最后可以帶上耳機,點擊左下角的播放試聽了。


仿真圖下載:
音樂仿真播放器.zip (12.96 KB, 下載次數: 47)


評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:328014 發表于 2020-12-2 17:13 | 只看該作者
下載后沒有源代碼,樓主能分享一下嗎?
回復

使用道具 舉報

板凳
ID:846386 發表于 2020-12-2 22:11 | 只看該作者
51單片機蜂鳴器演奏《學貓叫》
  1. #include <REGX52.H>
  2. #define RldTmr(fr) 65536 - (11059200 /12) / (fr << 1)
  3. #define FuDian(n) (n << 1) / 3    //附點n分音符的換算

  4. typedef unsigned char UCHAR;
  5. typedef unsigned int UINT;
  6. typedef unsigned long ULONG;

  7. sbit BUZZ = P2^5;

  8. UINT code noteFreq[] = {    //中音 1-7 和高音 1-7對應的頻率列表
  9.     523, 587, 659, 698, 784, 880, 988,
  10.     1047, 1175, 1319, 1397, 1568, 1760, 1976 ,2,494,
  11. };
  12. UINT code tmrRld[] = {      //中音 1-7 和高音 1-7對應的定時器重載值
  13.     RldTmr(523), RldTmr(587), RldTmr(659), RldTmr(698), RldTmr(784), RldTmr(880), RldTmr(988),
  14.     RldTmr(1047), RldTmr(1175), RldTmr(1319), RldTmr(1397), RldTmr(1568), RldTmr(1760), RldTmr(1976),
  15. };
  16. UCHAR code musicNote[] = {      //音名
  17.     15,15,15,8,9,
  18.         10,5,8,10,10,15,9,8,
  19.         9,12,12,12,12,15,8,7,
  20.         8,8,8,8,8,15,7,8,
  21.         7,8,7,6,5,15,5,5,
  22.         6,6,6,6,6,15,5,3,
  23.         5,3,5,9,8,15,5,
  24.         10,10,10,11,12,8,8,9,10,
  25. //         10,15,
  26. //         0,5,5,5,5,5,
  27. //         6,5,3,5,15,16,1,1,
  28. //         3,3,3,4,3,1,1,2,
  29. //         3,0,3,2,1,
  30. //         1,1,1,0,1,1,1,
  31. };
  32. UCHAR code noteDuration[] = {       //音名對應的時值,4表示4分音符,8表示8分音符,16表示16分音符
  33.         4,4,4,8,8,
  34.         8,8,8,8,8,8,8,8,
  35.         8,8,8,8,8,8,8,8,
  36.         8,8,8,8,8,8,8,8,
  37.         8,8,8,8,8,8,8,8,
  38.         8,8,8,8,8,8,8,8,
  39.         8,8,8,8,4,8,8,
  40.         8,8,8,8,8,8,16,32,32,
  41. //         FuDian(4),4,
  42. //         4,8,8,4,8,8,
  43. //         8,8,8,8,8,8,8,8,
  44. //         4,16,32,32,8,8,8,8,
  45. //         2,8,8,8,8,
  46. //         8,4,8,8,8,8,8,
  47.        
  48.        
  49. };
  50. bit enable = 1, tmrFlg = 0;
  51. UCHAR T0RH = 0XFF, T0RL = 0X00;

  52. void Delay(UINT n);
  53. void PlayMusic(UCHAR speed);    //固定標準為4分音符的速度:例如speed = 108 表示一分鐘掃過108個4分音符

  54. void main() {
  55.     EA = 1;
  56.     TMOD = 0X01;
  57.     TH0 = T0RH;
  58.     TL0 = T0RL;
  59.     ET0 = 1;
  60.     TR0 = 1;
  61.     while (1) {
  62.         PlayMusic(55);
  63.       Delay(40000u);
  64.     }
  65. }

  66. void Delay(UINT n) {
  67.     UINT i;
  68.     for (i = 0; i < n; i++) ;
  69. }

  70. void PlayMusic(UCHAR speed) {
  71.     UCHAR i;
  72.     UCHAR idx;
  73.     UINT cnt = 0;
  74.     UINT durationCnt = 0;        //當前音符的時值對應的定時器計數
  75.     UINT soundCnt = 0;                //當前音符的發聲時值對應的計數值
  76.     for (i = 0; i < sizeof (musicNote); ) {
  77.         while (!tmrFlg) ;
  78.         tmrFlg = 0;
  79.         if (cnt == 0) {
  80.             idx = musicNote[i] - 1;
  81.             T0RH = tmrRld[idx] >> 8;
  82.             T0RL = tmrRld[idx];
  83.             durationCnt = (ULONG)240 * (ULONG)noteFreq[idx] / ((ULONG)noteDuration[i] * (ULONG)speed);
  84.             soundCnt = durationCnt - (durationCnt >> 2);        //當前音符時值的前3/4發聲,后1/4靜音
  85.             enable = 1;
  86.             cnt++;
  87.         }
  88.         else {
  89.             if (cnt == durationCnt) {
  90.                 cnt = 0;
  91.                 i++;
  92.             }
  93.             else {
  94.                 cnt++;
  95.                 if (cnt == soundCnt) {
  96.                     enable = 0;
  97.                 }
  98.             }
  99.         }
  100.     }
  101. }

  102. void InterruptTmr0() interrupt 1 {
  103.     TH0 = T0RH;
  104.     TL0 = T0RL;
  105.     tmrFlg = 1;
  106.     if (enable)
  107.         BUZZ = ~BUZZ;
  108.     else
  109.         BUZZ = 1;
  110. }
復制代碼
回復

使用道具 舉報

地板
ID:846386 發表于 2020-12-2 22:11 | 只看該作者
51hei團團 發表于 2020-12-2 17:13
下載后沒有源代碼,樓主能分享一下嗎?

已經發布
回復

使用道具 舉報

5#
ID:846334 發表于 2020-12-24 16:57 | 只看該作者
要做實物的話需要些什么元件呢
回復

使用道具 舉報

6#
ID:846386 發表于 2020-12-29 23:16 | 只看該作者
如鯨向海 發表于 2020-12-24 16:57
要做實物的話需要些什么元件呢

方案一:51開發板一套,就可以直接用了
方案二:最小51系統一個+蜂鳴器一只+寫程序USB一個(有的最小系統自帶USB燒寫模塊)
方案三:自己有元件可以自己足個焊接,然后進行燒寫(比較專業,小白不建議)
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 色网站在线 | www.天天操 | 精品99久久 | 国产精品久久国产精品 | 精品欧美一区二区三区精品久久 | 91精品国产欧美一区二区成人 | 毛片一区二区三区 | 啪啪av | 亚洲 中文 欧美 日韩 在线观看 | 国产精品久久久久婷婷二区次 | 亚洲午夜在线 | 欧美精品第一区 | 精品无码久久久久久国产 | 久久中文字幕一区 | 国产精品久久久久久久免费大片 | 欧美一区二区三区在线观看视频 | 精品久久久久久久久亚洲 | 久久久91精品国产一区二区精品 | 亚洲精品乱码久久久久久久久 | 国产成人黄色 | 久久久91精品国产一区二区三区 | 一区二区不卡 | 天天干天天玩天天操 | 日韩欧美在线播放 | 精品婷婷 | 精品国产欧美一区二区 | 99免费精品 | 成人亚洲精品久久久久软件 | 日本一道本视频 | 狠狠躁夜夜躁人人爽天天高潮 | 午夜精品一区二区三区在线播放 | 国产黄色小视频在线观看 | 三级在线免费观看 | 美女在线一区二区 | 国产一区二区三区四区在线观看 | 久久精品国产一区二区三区不卡 | 91在线视频免费观看 | 成人影院一区二区三区 | 国产精品久久久久一区二区三区 | 国产精品日本一区二区在线播放 | 久久婷婷av|