找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 6631|回復(fù): 5
打印 上一主題 下一主題
收起左側(cè)

AT89C52單片機(jī)Proteus仿真音樂(lè)播放器操作步驟[原創(chuàng)]

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
很多新手不知道怎么使用Proteus仿真器做一個(gè)音樂(lè)播放器,功能雖然簡(jiǎn)單,對(duì)于新入門的人來(lái)說(shuō)是無(wú)從下手,我在這里把簡(jiǎn)單的過(guò)程及源文件發(fā)上來(lái),供入門的朋友學(xué)習(xí)。

操作步驟:
1.創(chuàng)建一個(gè)新的工程
2.看圖操作添加元件


3.操作完,點(diǎn)連線,把接線兩端連接起來(lái),注意,自己設(shè)定的輸入P腳,我這里采用的是P2^5


4.右鍵選擇接地


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

7.最后可以帶上耳機(jī),點(diǎn)擊左下角的播放試聽(tīng)了。


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


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

板凳
ID:846386 發(fā)表于 2020-12-2 22:11 | 只看該作者
51單片機(jī)蜂鳴器演奏《學(xué)貓叫》
  1. #include <REGX52.H>
  2. #define RldTmr(fr) 65536 - (11059200 /12) / (fr << 1)
  3. #define FuDian(n) (n << 1) / 3    //附點(diǎn)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對(duì)應(yīng)的頻率列表
  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對(duì)應(yīng)的定時(shí)器重載值
  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[] = {       //音名對(duì)應(yīng)的時(shí)值,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);    //固定標(biāo)準(zhǔn)為4分音符的速度:例如speed = 108 表示一分鐘掃過(guò)108個(gè)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;        //當(dāng)前音符的時(shí)值對(duì)應(yīng)的定時(shí)器計(jì)數(shù)
  75.     UINT soundCnt = 0;                //當(dāng)前音符的發(fā)聲時(shí)值對(duì)應(yīng)的計(jì)數(shù)值
  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);        //當(dāng)前音符時(shí)值的前3/4發(fā)聲,后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. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

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

已經(jīng)發(fā)布
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

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

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表