找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1184|回复: 0
打印 上一主题 下一主题
收起左侧

单片机音乐程序

[复制链接]
跳转到指定楼层
楼主
ID:247870 发表于 2017-11-9 20:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <reg51.h>
sbit   speaker=P2^0;   //接音频放大电路,
//sbit speaker=P3^2;
sbit    sw=P3^0;          //电后位后,sw合上后就开始放音乐,灯开始闪动,sw断开,音乐停 止,             灯也同时停止闪动
unsigned char timer0h,timer0l,time,led=1,j=0;
unsigned char   flagd=0;
//世上只有妈妈好数据表
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
}             ;
// 音阶频率表 高八位
code unsigned char FREQH[]={
0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,
0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC, //1,2,3,4,5,6,7,8,i
0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,
0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,
} ;
// 音阶频率表 低八位
code unsigned char FREQL[]={
0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,
0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F, //1,2,3,4,5,6,7,8,i
0xEE,0x44, 0x6B,0xB4,0xF4,0x2D,
0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,
};
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;
TMOD=1; //置CT0定时工作方式1
EA=1;ET0=1;//IE=0x82 //CPU开中断,CT0开中断
while(1)
{
   i=0;
   time=1;
   sw=1;                             
   while(time)
   {
    if(sw)
    {
     P1=0;i=0;continue;
    }
    if(j==8)
    {
     //led=1;
     j=0;flagd=~flagd;
     if(flagd)
     {
      led=0x80;
     }
     else
     {
      led=1;
     }
    }
    else
    {
     P1=~led;
     if(flagd)
     {
      led=led>>1;
     }
     else
     {
      led=led<<1;
     }
     j++;                                    
    }                                 
    k=sszymmh[i]+7*sszymmh[i+1]-1;
    timer0h=FREQH[k];
    timer0l=FREQL[k];
    time=sszymmh[i+2];
    i=i+3;
    song();
   }
}
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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