找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 10902|回復: 1
打印 上一主題 下一主題
收起左側(cè)

單片機電子琴代碼 8個按鍵控制8個音符 實現(xiàn)簡單音樂播放

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:166423 發(fā)表于 2017-2-24 15:48 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
8個按鍵控制8個音符  實現(xiàn)簡單音樂播放
  1. #include<reg52.h> //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義

  2. #define KeyPort P3
  3. /*------------------------------------------------
  4.                   全局變量
  5. ------------------------------------------------*/

  6. unsigned char High,Low; //定時器預裝值的高8位和低8位

  7. sbit SPK=P1^2;          //定義喇叭接口

  8. unsigned char code freq[][2]={
  9.   0xD8,0xF7,//00440HZ 1   
  10.   0xBD,0xF8,//00494HZ 2  
  11.   0x87,0xF9,//00554HZ 3  
  12.   0xE4,0xF9,//00587HZ 4   
  13.   0x90,0xFA,//00659HZ 5     
  14.   0x29,0xFB,//00740HZ 6     
  15.   0xB1,0xFB,//00831HZ 7      
  16.   0xEF,0xFB,//00880HZ `1
  17. };
  18. /*------------------------------------------------
  19.                   函數(shù)聲明
  20. ------------------------------------------------*/
  21. void Init_Timer0(void);//定時器初始化
  22. /*------------------------------------------------
  23.                     主函數(shù)
  24. ------------------------------------------------*/
  25. void main (void)
  26. {
  27. unsigned char num;                  

  28. Init_Timer0();    //初始化定時器0,主要用于數(shù)碼管動態(tài)掃描
  29. SPK=0;            //在未按鍵時,喇叭低電平,防止長期高電平損壞喇叭
  30. while (1)         //主循環(huán)
  31.   {
  32.    switch(KeyPort)
  33.                 {
  34.                  case 0xfe:num= 1;break;
  35.                  case 0xfd:num= 2;break;
  36.                  case 0xfb:num= 3;break;
  37.                  case 0xf7:num= 4;break;
  38.                  case 0xef:num= 5;break;
  39.                  case 0xdf:num= 6;break;
  40.                  case 0xbf:num= 7;break;
  41.                  case 0x7f:num= 8;break;
  42.                  default:num= 0;break;
  43.                 }

  44.         
  45.    if(num==0)
  46.       {
  47.        TR0=0;
  48.        SPK=0;   //在未按鍵時,喇叭低電平,防止長期高電平損壞喇叭
  49.            }
  50.    else
  51.       {
  52.             High=freq[num-1][1];
  53.                    Low =freq[num-1][0];
  54.                 TR0=1;
  55.           }
  56.   }
  57. }


  58. /*------------------------------------------------
  59.                     定時器初始化子程序
  60. ------------------------------------------------*/
  61. void Init_Timer0(void)
  62. {
  63. TMOD |= 0x01;          //使用模式1,16位定時器,使用"|"符號可以在使用多個定時器時不受影響                     
  64. EA=1;            //總中斷打開
  65. ET0=1;           //定時器中斷打開
  66. //TR0=1;           //定時器開關打開
  67. }
  68. /*------------------------------------------------
  69.                  定時器中斷子程序
  70. ------------------------------------------------*/
  71. void Timer0_isr(void) interrupt 1
  72. {
  73. TH0=High;
  74. TL0=Low;

  75. SPK=!SPK;

  76. }
復制代碼


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

使用道具 舉報

沙發(fā)
ID:289506 發(fā)表于 2018-7-17 20:09 | 只看該作者
燒寫程序后
蜂鳴器不響啊
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表