标题: 单片机电子琴代码 8个按键控制8个音符 实现简单音乐播放 [打印本页]

作者: 圣诞节拉斯    时间: 2017-2-24 15:48
标题: 单片机电子琴代码 8个按键控制8个音符 实现简单音乐播放
8个按键控制8个音符  实现简单音乐播放
  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.                   函数声明
  20. ------------------------------------------------*/
  21. void Init_Timer0(void);//定时器初始化
  22. /*------------------------------------------------
  23.                     主函数
  24. ------------------------------------------------*/
  25. void main (void)
  26. {
  27. unsigned char num;                  

  28. Init_Timer0();    //初始化定时器0,主要用于数码管动态扫描
  29. SPK=0;            //在未按键时,喇叭低电平,防止长期高电平损坏喇叭
  30. while (1)         //主循环
  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. }
复制代码



作者: 朝闻道夕死可矣    时间: 2018-7-17 20:09
烧写程序后
蜂鸣器不响啊




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1