找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4313|回复: 2
收起左侧

无源蜂鸣器歌曲演奏

[复制链接]
ID:73477 发表于 2015-2-10 00:32 | 显示全部楼层 |阅读模式
//此程序在硬件上调试通过//本程序的单片机晶振采用11.0592M
#include <reg51.h>
sbit      speaker=P1^2;  
unsigned char timer0h,timer0l,time;
// 音阶频率表

code unsigned int  OctaveFreTab[]={// ffff-921600/f
//      do(1)    re(2)               m(3)            fa(4)                so(5)          la(6)          si(7)
// 低 262Hz      294        330        349             392            440       494
// 中_524Hz     587        659        698             784           880       988
// 高_1046Hz  1175      1318       1397           1568        1760      1976
//超高2092Hz  2351                 2636       2794        3136       3520      3952
262,  294,  330, 349, 392,440,494,
524,  587,  659, 698, 784,880,988,
1046, 1175, 1318,1397,1568,1760,1976,
2092, 2351, 2636,2794,3136,3520,3952,

};


        //世上只有妈妈好数据表
code unsigned char sszymmh[]={        6,2,3,      5,2,1,      3,2,2, 5,2,2, 1,3,2, 6,2,1, 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,      3,2,1, 2,2,4, 2,2,3, 3,2,1, 5,2,2,
                                      5,2,1,      6,2,1,      3,2,2, 2,2,2, 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
                                      };   
void delay(unsigned char t)                //
   {
   unsigned char t1;
   unsigned long t2;
   for(t1=0;t1<t;t1++)
   {
    for(t2=0;t2<8000;t2++)
       {
        ;
        }
   }
   TR0=0;
}
void t0int() interrupt 1
{
TR0=0;
speaker=!speaker;
TH0=timer0h;
TL0=timer0l;
TR0=1;
}
void song()
{
TH0=timer0h;
TL0=timer0l;
TR0=1;
delay(time);                       
}

void main(void)
{
void delay(unsigned char t)                //
   {
   unsigned char t1;
   unsigned long t2;
   for(t1=0;t1<t;t1++)
   {
    for(t2=0;t2<8000;t2++)
       {
        ;
        }
   }
   TR0=0;
}
void t0int() interrupt 1
{
TR0=0;
speaker=!speaker;
TH0=timer0h;
TL0=timer0l;
TR0=1;
}
void song()
{
TH0=timer0h;
TL0=timer0l;
TR0=1;
delay(time);                       
}

void main(void)
{
unsigned char k,i;
unsigned int  f_temp;
TMOD=1; //置CT0定时工作方式1
EA=1;
ET0=1;//IE=0x82 //CPU开中断,CT0开中断
while(1)
      {
       i=0;  
       while(i<100){         //音乐数组长度 ,唱完从头再来        
       k=sszymmh[i]+7*sszymmh[i+1]-1;
       f_temp =  921600/OctaveFreTab[k];
       f_temp  = 0xffff- f_temp  ;
       timer0h=f_temp  >>8;
       timer0l=f_temp&0xff;
       time=sszymmh[i+2];
       i=i+3;
       song();
           P3++;
        }
      }
  }



回复

使用道具 举报

ID:204652 发表于 2017-5-25 11:28 | 显示全部楼层
有图吗
回复

使用道具 举报

ID:454125 发表于 2018-12-25 10:14 | 显示全部楼层
可以播放其他音乐么
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表