找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7564|回復(fù): 12
收起左側(cè)

基于51單片機(jī)LCD1602音樂播放器設(shè)計(jì)(帶源碼、仿真和原理圖)

  [復(fù)制鏈接]
ID:577322 發(fā)表于 2021-7-5 20:33 | 顯示全部樓層 |閱讀模式
關(guān)于音樂播放程序的調(diào)試,我首先采用Proteus軟件來仿真,但是該仿真軟件中沒有喇叭或蜂鳴器等聲音播放工具。于是本人將圖3-4中的單片機(jī)的P1.0處接了一個(gè)示波器,想通過這樣來仿真并調(diào)試音樂播放程序,但是效果不是很理想。程序運(yùn)行的時(shí)候,能看見示波器有不同頻率的波形交替出現(xiàn),但是頻率變換得很快,無法確認(rèn)是否顯示的是所需要的頻率,并且無法辨別音頻變換的節(jié)奏是否正確。此方法并不適用。

接著,我制作了一個(gè)簡單的單片機(jī)播放器電路。即在實(shí)驗(yàn)板上焊接實(shí)驗(yàn)電路,電路由單片機(jī)89C51、按鈕外圍電路組成,并在單片機(jī)的P1.0處用三極管連接一個(gè)簡單的音頻放大器,再外接一個(gè)蜂鳴器。將程序?qū)懭雴纹瑱C(jī)中,這樣就能聽出聲音和音樂節(jié)奏是否正確。

51hei.gif
制作出來的實(shí)物圖如下:

實(shí)物圖正面

實(shí)物圖正面


仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.png

單片機(jī)源程序如下:
  1. //////////////////////////////////////////////
  2. //51單片機(jī)音樂播放器程序
  3. //共三個(gè)按鍵:上一曲、一下曲、播放\暫停
  4. //注意:按鍵必須按下約1S才有相應(yīng)動(dòng)作,播放完一首歌曲無按鍵按下時(shí)順序播放

  5. //////////////////////////////////////////////
  6. #include<REG52.H>
  7. sbit play_up=P1^3;           //上一首歌
  8. sbit play_down=P3^5;   //下一首歌
  9. sbit pause=P3^2;       //播放\暫停
  10. sbit speaker=P1^0;     //無源蜂鳴器
  11. sbit RS=P2^5;
  12. sbit RW=P2^6;
  13. sbit EN=P2^7;
  14. //////////////////////////////////////////////
  15. unsigned char timer0h,timer0l,time;//timer0h,timer0l為定時(shí)器T0的高低位初值,time為對(duì)應(yīng)的節(jié)拍時(shí)間
  16. unsigned char music_num;       //music_num為歌曲編號(hào),music_num=0表示剛開機(jī)時(shí)的狀態(tài),num是查找歌曲數(shù)據(jù)表的地址
  17. unsigned int num;
  18. unsigned char code   list[8][16]={        "Yan Hua Yi Leng ",
  19.                                                                         "   Fa Ru Xue    ",
  20.                                                                         "  Jian Dan Ai   ",
  21.                                                                         "Zhi You Mama Hao",
  22.                                                                         " Dang Ni Gu Dan ",
  23.                                                                         "XiangJian XiaoLu",
  24.                                                                         "    Song Bie    ",
  25.                                                                         "Lang Man De Shi "};
  26. signed int fre;                   //對(duì)應(yīng)頻率數(shù)據(jù)表的地址
  27. bit play_enable;                   //歌曲播放的使能標(biāo)志位,用于播放\暫停
  28. void delay(unsigned char t);           //延時(shí)子函數(shù),控制發(fā)音的時(shí)間長度
  29. void delayms(unsigned int t);           //普通延時(shí)子程序,可用于按鍵消抖
  30. void song(void);                           //演奏一個(gè)音符
  31. void music_play(void);                   //播放歌曲
  32. //////////////////////////////////////////////
  33. //每三個(gè)數(shù)字,代表一個(gè)音符
  34. //第一個(gè)數(shù)字是音符的數(shù)值1234567之一(第幾個(gè)音),代表哆來咪發(fā)...
  35. //第二個(gè)數(shù)字是0123之一,代表低音\中音\高音\超高音(第幾個(gè)八度)
  36. //第三個(gè)數(shù)字是時(shí)間長度,以半拍為單位,樂曲數(shù)據(jù)表的結(jié)尾是三個(gè)0
  37. //////////////////////////////////////////////

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

  50. //《發(fā)如雪》
  51. unsigned char code song2[]={
  52.      5,1,1, 2,2,1, 3,2,2, 2,2,1, 3,2,1, 5,2,1, 6,2,1, 5,2,3, 1,2,1, 2,2,1,
  53.          3,2,1, 6,2,1, 5,2,1, 3,2,1, 5,2,3, 5,2,1, 6,2,1, 1,3,2, 6,2,1, 5,2,1,
  54.          3,2,1, 5,2,1, 3,2,2, 1,2,1, 2,2,1, 3,2,1, 1,2,1, 6,1,1, 3,2,1, 2,2,1,
  55.          5,1,1, 2,2,1, 3,2,2, 2,2,1, 3,2,1, 5,2,1, 6,2,1, 5,2,3, 1,2,1, 2,2,1,
  56.          3,2,1, 6,2,1, 5,2,3, 5,2,1, 6,2,1, 1,3,2, 6,2,1,
  57.          5,2,1, 3,2,1, 5,2,1, 3,2,2, 5,2,1, 6,1,1, 3,2,1, 2,2,1, 1,2,1, 6,1,1,
  58.          1,2,1, 2,2,1, 2,2,1, 1,2,4, 0,0,0 };

  59. //《簡單愛》
  60. unsigned char code song3[]={
  61.      5,1,1, 1,2,1, 2,2,1, 3,2,1, 2,2,1, 3,2,1, 4,2,1, 5,2,1, 5,2,1, 5,2,1,
  62.          4,2,1, 3,2,1, 2,2,3, 5,1,1, 1,2,1, 2,2,1, 3,2,1, 4,2,1, 5,2,1, 5,2,1,
  63.          5,2,1, 6,2,1, 5,2,2, 2,2,1, 3,2,1, 1,2,2, 1,2,1, 6,1,1, 2,2,1, 2,2,1,
  64.          3,2,1, 3,2,1, 1,2,1, 5,2,1, 1,2,1, 5,2,1, 1,2,1, 7,1,1, 1,2,1, 1,2,1, 6,1,1,
  65.          2,2,1, 2,2,1, 3,2,1, 3,2,1, 5,2,1, 5,2,1,
  66.          5,2,1, 6,2,1, 5,2,2, 2,2,1, 3,2,1, 1,2,2,  
  67.          5,1,1, 1,2,1, 2,1,2, 3,2,1, 2,2,1, 3,2,1, 4,2,1, 5,2,1, 5,2,1, 5,2,1,
  68.          4,2,1, 3,2,1, 2,2,3, 5,1,1, 1,2,1, 2,2,1, 3,2,1, 2,2,1, 3,2,1, 4,2,1,
  69.          5,2,1, 5,2,1, 5,2,2, 2,2,1, 3,2,1, 1,2,2, 1,2,1, 6,1,1, 2,2,1, 2,2,1,
  70.          3,2,1, 3,2,1, 1,2,2, 5,2,1, 1,2,1, 5,2,1, 5,2,1, 7,1,1, 1,2,1, 0,0,0 };

  71. //《世上只有媽媽好》
  72. unsigned char code song4[]={
  73.      6,2,3, 5,2,1, 3,2,2, 5,2,2, 1,3,2, 6,2,1,
  74.          //6,2,3代表6,中音,3個(gè)半拍;
  75.          //5,2,1代表5,中音,1個(gè)半拍;
  76.          //3,2,2代表3,中音,2個(gè)半拍;
  77.          //5,2,2代表5,中音,2個(gè)半拍;
  78.          //1,3,2代表1,高音,2個(gè)半拍;
  79.          //...
  80.      5,2,1,6,2,4, 3,2,2, 5,2,1, 6,2,1, 5,2,2, 3,2,2, 1,2,1,6,1,1, 5,2,1,
  81.          3,2,1, 2,2,4, 2,2,3, 1,2,1, 5,2,2, 5,2,1, 6,2,1, 3,2,2, 2,2,2,
  82.          1,2,4, 5,2,3, 3,2,1,2,2,1, 1,2,1, 6,1,1, 1,2,1, 5,1,6, 0,0,0};

  83. //《當(dāng)你孤單你會(huì)想起誰》
  84. unsigned char code song5[]={
  85.      3,2,2, 3,2,1, 4,2,1, 3,2,2, 2,2,1, 1,2,1,  2,2,2, 5,2,2, 2,2,2, 2,2,3,
  86.          1,2,2, 1,2,1, 6,2,1, 1,2,2, 7,1,1, 6,1,1, 7,1,2, 3,2,2, 7,1,2, 7,1,3,
  87.          6,1,2, 2,2,1, 3,2,1, 2,2,1, 1,2,1, 6,1,2, 5,1,2, 2,2,1, 3,2,1, 2,2,1,
  88.          1,2,1, 6,1,2, 6,1,2, 2,2,1, 3,2,1, 2,2,1, 1,2,1, 6,1,1, 7,1,1, 1,2,6, 0,0,0 };

  89. //《鄉(xiāng)間小路》
  90. unsigned char code song6[]={
  91.      3,1,2, 3,1,1, 3,1,1, 6,0,1, 6,0,1, 1,1,2,
  92.      6,0,1, 5,0,1, 6,0,4, 6,0,2, 6,0,1 ,6,0,1, 6,0,2, 6,0,1, 1,1,1,
  93.      2,1,2, 2,1,1, 3,1,1, 2,1,4, 3,5,1, 3,1,1, 3,1,1, 2,1,1, 4,1,2,
  94.      4,1,2, 3,1,2, 2,1,1, 1,1,1, 2,1,4, 7,0,1, 7,0,1, 7,0,1, 6,0,1,
  95.      5,0,1, 5,0,1, 6,0,1, 7,0,1, 7,0,1, 6,0,1, 5,0,1, 6,0,4, 6,1,2,
  96.      3,1,1, 6,1,1, 7,1,1, 6,1,1, 5,1,1, 5,1,2, 5,1,1, 2,1,1, 5,1,1,
  97.      6,1,1, 5,1,1, 4,1,1, 4,1,2, 4,1,1, 3,1,1, 2,1,2, 1,1,1, 2,1,1,
  98.      3,1,1, 2,1,1, 1,1,1, 2,1,1, 3,1,4, 6,1,2, 3,1,1, 6,1,1, 7,1,1,
  99.          6,1,1, 5,1,1, 5,1,2, 2,1,1, 5,1,1, 6,1,1, 5,1,1, 4,1,1, 0,0,0};     

  100. //《送別》
  101. unsigned char code song7[]={
  102.      5,1,2, 3,1,3, 5,1,1, 1,2,3, 6,1,2, 1,2,2,
  103.      5,1,4, 5,1,2, 1,1,1, 2,1,1, 3,1,2, 2,1,1, 1,1,1, 2,1,4, 5,1,2,
  104.          3,1,1, 5,1,1, 1,2,2, 7,1,1, 6,1,2, 1,2,2, 5,1,4, 5,1,2, 2,1,1,
  105.          3,1,1, 4,1,2, 7,0,1, 1,1,4, 6,1,2, 1,2,2, 1,2,4, 7,1,2, 6,1,1,
  106.          7,1,1, 1,2,4, 6,1,1, 7,1,1, 1,2,1, 6,1,1, 6,1,1, 5,1,1, 3,1,1,
  107.          1,1,1, 2,1,8, 5,1,2, 3,1,1, 5,1,1, 1,2,2, 7,1,1, 6,1,2, 1,2,2,
  108.          5,1,4, 5,1,2, 2,1,1, 3,1,1, 4,1,2, 7,0,2, 1,1,4, 0,0,0};

  109. //《最浪漫的事》
  110. unsigned char code song8[]={
  111.      5,1,1, 6,1,1, 1,2,1, 6,1,2, 6,1,1, 5,1,1, 6,1,1, 5,1,1, 3,1,1, 5,1,5,
  112.          5,1,1, 6,1,1, 1,2,1, 6,1,2, 6,1,1, 5,1,1, 6,1,1, 5,1,1, 6,1,1, 1,1,5,
  113.          1,1,1, 2,1,1, 3,1,1, 2,1,1, 2,1,1, 2,1,1, 1,1,1, 2,1,1, 1,1,1, 6,1,1,
  114.          3,1,2, 2,1,3, 5,1,1, 6,1,1, 1,2,1, 6,1,2, 6,1,1, 5,1,1, 6,1,1, 5,1,1,
  115.          6,1,1, 1,1,5, 1,1,1, 2,1,1, 3,1,1, 4,1,2, 4,1,1, 5,1,1, 6,1,1, 6,1,1,
  116.          5,1,1, 6,1,2, 1,2,1, 6,1,3, 1,2,1, 6,1,1, 5,1,1, 5,1,4, 1,1,1, 6,1,1,
  117.          5,1,5, 5,1,1, 6,1,1, 1,2,1, 3,1,1, 2,1,1, 3,1,1, 1,1,6, 0,0,0};

  118. // 頻率-半周期數(shù)據(jù)表 高八位  共保存了四個(gè)八度的28個(gè)頻率數(shù)據(jù)
  119. unsigned char code FREQH[]={
  120.     0xF2, 0xF3, 0xF5, 0xF5, 0xF6, 0xF7, 0xF8,    //低音1234567
  121.     0xF9, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB, 0xFC, 0xFC,//1,2,3,4,5,6,7,i
  122.     0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFE,            //高音 234567
  123.     0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF};   //超高音 1234567

  124. // 頻率-半周期數(shù)據(jù)表 低八位
  125. unsigned char code FREQL[]={
  126.     0x42, 0xC1, 0x17, 0xB6, 0xD0, 0xD1, 0xB6,    //低音1234567
  127.     0x21, 0xE1, 0x8C, 0xD8, 0x68, 0xE9, 0x5B, 0x8F, //1,2,3,4,5,6,7,i
  128.     0xEE, 0x44, 0x6B, 0xB4, 0xF4, 0x2D,             //高音 234567
  129.     0x47, 0x77, 0xA2, 0xB6, 0xDA, 0xFA, 0x16};   //超高音 1234567  

  130. /*************************lcd1602程序**************************/
  131. void delay1ms(unsigned int ms)//延時(shí)1毫秒(不夠精確的)
  132. {unsigned int i,j;
  133.    for(i=0;i<ms;i++)
  134.     for(j=0;j<100;j++);
  135. }

  136. void wr_com(unsigned char com)//寫指令//
  137. {  delay1ms(1);
  138.    RS=0;
  139.    RW=0;
  140.    EN=0;
  141.    P0=com;
  142.    delay1ms(1);
  143.    EN=0;
  144.    delay1ms(1);
  145.    EN=1;
  146.   }

  147. void wr_dat(unsigned char dat)//寫數(shù)據(jù)//
  148. {  delay1ms(1);;
  149.    RS=1;
  150.    RW=1;
  151.    EN=1;
  152.    P0=dat;
  153.    delay1ms(1);
  154.    EN=0;
  155.    delay1ms(1);
  156.    EN=1;
  157. }

  158. void lcd_init()//初始化設(shè)置//
  159. {delay1ms(15);
  160. wr_com(0x01);
  161.   wr_com(0x38);delay1ms(5);
  162. wr_com(0x0c);
  163. wr_com(0x06);
  164. }
  165. void init_play()
  166. {
  167. wr_com(0x80+40+4);
  168. wr_dat('W');
  169. wr_dat('E');
  170. wr_dat('L');
  171. wr_dat('C');
  172. wr_dat('O');
  173. wr_dat('M');
  174. wr_dat('E');
  175. wr_dat('!');
  176.   
  177. }
  178. void display(unsigned char i)
  179. {
  180.    unsigned char j;
  181.    wr_com(0x80);
  182.    wr_dat(i+0x30);
  183.    wr_dat(':');
  184.    wr_com(0xc0);
  185.    for(j=0;j<16;j++)
  186.    {
  187.     wr_dat(list[i-1][j]);
  188.         }
  189. }
  190. void main(void)
  191. {
  192.         TMOD=0x11; //T0 T1 均在工作方式1
  193.         ET0=1;  //T0開中斷
  194.         EA=1;   //CPU開中斷         
  195.         lcd_init();
  196.         init_play();
  197.         while(1)
  198.         {
  199.                 music_play();        //根據(jù)當(dāng)前狀態(tài)播放相應(yīng)歌曲的某個(gè)音符

  200.                 if(!pause)                //暫停鍵處理
  201.                 {
  202.                 delayms(5);
  203.                 if(!pause)
  204.                 {
  205.                         if(music_num==0)    //music_num=0只有在剛開機(jī),且未按下暫停鍵時(shí)存在,表示剛開機(jī)時(shí)的狀態(tài),按下后從第一首開始播放
  206.                         {
  207.                                 music_num=1;    //歌曲序號(hào)置1
  208.                                 num=0;                //從頭播放
  209.                                 play_enable=1;        //允許播放
  210.                                 display(1);
  211.                                         if(play_enable)
  212.                                 {wr_com(0x86);wr_dat('P'); wr_dat('L');wr_dat('A');wr_dat('Y');wr_dat(' ');        }
  213.                         }
  214.                         else
  215.                         {
  216.                                 play_enable=~play_enable;
  217.                             speaker=1;
  218.                                 if(play_enable)
  219.                                 {wr_com(0x86);wr_dat('P'); wr_dat('L');wr_dat('A');wr_dat('Y');wr_dat(' ');        }
  220.                                 if(!play_enable)
  221.                                 {wr_com(0x86);wr_dat('P'); wr_dat('A');wr_dat('U');wr_dat('S');wr_dat('E');        }

  222.                         }
  223.                         while(!pause)         //若按著暫停鍵不放手時(shí)的處理
  224.                         {
  225.                         if(play_enable==0){}                //如果是暫停,則顯示時(shí)間不變//(暫停時(shí)play_enable==0)
  226.                         }

  227.                   }//暫停鍵處理結(jié)束
  228.         }//while結(jié)束

  229.                 if((!play_up)&&(music_num!=0)) //上一首按鍵
  230.                 {
  231.                 delayms(5);
  232.                 if((!play_up)&&(music_num!=0))
  233.                 {   speaker=1;
  234.                         music_num-=1;//歌曲編號(hào)減一
  235.                         if(music_num<=0)
  236.                         music_num=8;
  237.                         num=0;                 //從頭開始播放
  238.                                 display(music_num);
  239.                         delayms(500);//歌曲切換時(shí)延時(shí)0.5S
  240.                 }        
  241.                 }

  242.                 if((!play_down)&&(music_num!=0))
  243.                 {
  244.                 delayms(5);
  245.                 if((!play_down)&&(music_num!=0))
  246.                 {   speaker=1;
  247.                         music_num+=1;//歌曲編號(hào)加一
  248.                         if(music_num>=9)
  249.                         music_num=1;
  250.                         num=0;                  //從頭開始播放
  251.                                 display(music_num);
  252.                         delayms(500);//歌曲切換時(shí)延時(shí)0.5S
  253.                 }
  254.                 }

  255.         }
  256. }

  257. void delayms(unsigned int t)           //MS延時(shí)子程序
  258. {
  259.         unsigned int i,j;
  260.         for(i=0;i<t;i++)
  261.         {
  262.                 for(j=0;j<123;j++)
  263.                         ;
  264.         }
  265. }

  266. void delay(unsigned char t)            //延時(shí)子函數(shù),控制發(fā)音的時(shí)間長度,每個(gè)節(jié)拍0.4S
  267. {
  268.         unsigned char t1;
  269.         unsigned long t2;
  270.         for(t1=0;t1<t;t1++)               //嵌套循環(huán), 共延時(shí)t個(gè)半拍
  271.         {
  272.             for(t2=0;t2<8000;t2++) //延時(shí)期間, 可進(jìn)入T0中斷去發(fā)音
  273.         {
  274.                 ;
  275.         }
  276.         }
  277.         TR0=0;                               //關(guān)閉T0, 停止發(fā)音
  278. }

  279. void timer0(void) interrupt 2  //T0中斷程序,控制發(fā)音的音調(diào)
  280. {
  281.         speaker=!speaker;//輸出方波, 發(fā)音
  282.         TH0=timer0h;         //下次的中斷時(shí)間,這個(gè)時(shí)間控制音調(diào)高低
  283.         TL0=timer0l;
  284. }

  285. void song(void)          //演奏一個(gè)音符
  286. {
  287.         TH0=timer0h;    //控制音調(diào)
  288.         TL0=timer0l;
  289.         TR0=1;                    //啟動(dòng)T0, 由T0輸出方波發(fā)音
  290.         delay(time);    //每個(gè)音符的演奏時(shí)間
  291. }
  292. ////////////////////////////////////////////////////////////////////////////////////
  293. void music_play(void)//播放相應(yīng)歌曲的某個(gè)音符
  294. {
  295.         if((music_num==1)&&(play_enable==1))
  296.         {
  297.                 fre=song1[num]+8*song1[num+1]-1;//第i個(gè)是音符,第i+1個(gè)是第幾個(gè)八度
  298.                 timer0h=FREQH[fre];                    //從數(shù)據(jù)表中讀出頻率數(shù)值,實(shí)際上是定時(shí)的時(shí)間長度
  299.             timer0l=FREQL[fre];
  300.             time=song1[num+2];              //讀出時(shí)間長度數(shù)值
  301.             num+=3;
  302.                 if(fre<0)                //判斷歌曲的結(jié)束位,結(jié)束后轉(zhuǎn)到下一首
  303.                 {
  304.                         num=0;            //下一首從頭播放
  305.                         music_num=2;
  306.                                 display(2);
  307.             }
  308.                 song();                //發(fā)出一個(gè)音符
  309.         }
  310. ////////////////////////////////////////////////////////////////////////////////////
  311.         if((music_num==2)&&(play_enable==1))
  312.         {  
  313.                 fre=song2[num]+8*song2[num+1]-1;
  314.                 timer0h=FREQH[fre];
  315.             timer0l=FREQL[fre];
  316.             time=song2[num+2];
  317.             num+=3;
  318.                 if(fre<0)
  319.                 {
  320.                         num=0;
  321.                         music_num=3;
  322.                                 display(3);
  323.             }
  324.                 song();               
  325.         }
  326. ////////////////////////////////////////////////////////////////////////////////////
  327.                 if((music_num==3)&&(play_enable==1))
  328.         {  
  329.                 fre=song3[num]+8*song3[num+1]-1;
  330.                 timer0h=FREQH[fre];
  331.             timer0l=FREQL[fre];
  332.             time=song3[num+2];
  333.             num+=3;
  334.                 if(fre<0)
  335.                 {
  336.                         num=0;
  337.                         music_num=4;
  338.                                 display(4);
  339.             }
  340.                 song();               
  341.         }
  342. ////////////////////////////////////////////////////////////////////////////////////
  343.         if((music_num==4)&&(play_enable==1))
  344.         {
  345.                 fre=song4[num]+8*song4[num+1]-1;
  346.                 timer0h=FREQH[fre];
  347.             timer0l=FREQL[fre];
  348.             time=song4[num+2];
  349.             num+=3;
  350.                 if(fre<0)
  351.                 {
  352.                         num=0;
  353.                         music_num=5;
  354.                                 display(5);
  355.             }
  356.                 song();               
  357.         }
  358. ////////////////////////////////////////////////////////////////////////////////////
  359.         if((music_num==5)&&(play_enable==1))
  360.         {
  361.                 fre=song5[num]+8*song5[num+1]-1;
  362.                 timer0h=FREQH[fre];
  363.             timer0l=FREQL[fre];
  364.             time=song5[num+2];
  365.             num+=3;
  366.                 if(fre<0)
  367.                 {
  368.                         num=0;
  369.                         music_num=6;
  370.                                 display(6);
  371.             }
  372.                 song();               
  373.         }
  374. ////////////////////////////////////////////////////////////////////////////////////
  375.         if((music_num==6)&&(play_enable==1))
  376.         {
  377. ……………………

  378. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
注意用要用Proteus8.8,第1個(gè)按鍵長按,聲音較小要把電腦的喇叭開到大聲才能聽到
hex文件是對(duì)的 但是代碼是錯(cuò)的 求指導(dǎo)如何修改:
仿真程序.7z (193.45 KB, 下載次數(shù): 257)
音樂盒元件清單.doc (24 KB, 下載次數(shù): 68)

評(píng)分

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

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:865202 發(fā)表于 2021-10-29 13:52 | 顯示全部樓層
為啥我的不會(huì)響,顯示器都是綠色的,沒字
回復(fù)

使用道具 舉報(bào)

ID:928284 發(fā)表于 2021-10-29 20:05 | 顯示全部樓層
很強(qiáng)大的程序,希望早日能學(xué)會(huì)。
回復(fù)

使用道具 舉報(bào)

ID:836515 發(fā)表于 2021-10-31 09:05 | 顯示全部樓層
為什么不判忙?
回復(fù)

使用道具 舉報(bào)

ID:977943 發(fā)表于 2021-11-4 19:38 | 顯示全部樓層
很強(qiáng)大的程序,希望早日能學(xué)會(huì)。
回復(fù)

使用道具 舉報(bào)

ID:714092 發(fā)表于 2021-11-12 13:19 來自手機(jī) | 顯示全部樓層
請問顯示器不會(huì)不會(huì)顯示文字是什么問題啊
回復(fù)

使用道具 舉報(bào)

ID:262 發(fā)表于 2021-11-13 01:09 | 顯示全部樓層
LiYanjing 發(fā)表于 2021-10-29 13:52
為啥我的不會(huì)響,顯示器都是綠色的,沒字

我用Proteus7.5打開可以顯示啊,親測無誤,你是不是hex文件沒有選對(duì)?
回復(fù)

使用道具 舉報(bào)

ID:997893 發(fā)表于 2021-12-28 16:34 | 顯示全部樓層
為什么我的從8首歌刪減到3首歌之后就用不了了
回復(fù)

使用道具 舉報(bào)

ID:879902 發(fā)表于 2022-2-7 01:31 | 顯示全部樓層
仿真沒成功 不知道是不是我軟件版本問題
回復(fù)

使用道具 舉報(bào)

ID:1008302 發(fā)表于 2022-3-22 11:29 來自手機(jī) | 顯示全部樓層
AD原理圖中的LED燈 沒有用吧
回復(fù)

使用道具 舉報(bào)

ID:1008302 發(fā)表于 2022-4-1 15:50 來自手機(jī) | 顯示全部樓層
原理圖不能轉(zhuǎn)為pcb啊
回復(fù)

使用道具 舉報(bào)

ID:863590 發(fā)表于 2022-4-1 16:23 | 顯示全部樓層
Proteus8無法打開呢
回復(fù)

使用道具 舉報(bào)

ID:1031389 發(fā)表于 2022-5-31 22:06 | 顯示全部樓層
hex文件是對(duì)的,源碼是有錯(cuò)的
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

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