① 单片机音乐代码问题
由于声音是由震动发出,所以每个音符都有其固定的频率,“频率HZ”就是指每个音符的频率,而如果要让机器准确表达这个频率,就要在单片机的晶振下取固定的值,即用定时器来循环一定的次数,“6MHZ”就是指单片机的晶振为6MHz的时候发出制定频率所需要的循环次数,“十六进制值”就是由前面十进制转化而来,因为机器不能识别十进制数,因此应用的时候要转换成十六进制或二进制。
具体应用的时候,将你所需要的音符的十六进制值送入定时器,将扬声器所接的口置1,即可发出制定的音符。
如果想做一首歌的话可先将音符的十六进制值做成一个TABLE,然后通过MOV DPTR,#TABLE,将整个表送入定时器,这样就可以按照表中音符的顺序发出一段音乐。
② 单片机播放音乐的代码是怎么来的什么软件可以把音乐转成代码(本身不懂音乐,)
给我你的邮箱,我发给你相关的资料。至于有什么软件我也不知道,自己可以学会的,
③ 谁能给我几首51单片机流行歌曲 的源代码!
<!--[if !supportLists]-->2. <!--[endif]-->程序代码:(以下代码奏出八月桂花香这首曲子) ORG 0000H LJMP START ORG 000BH INC 20H ;中断服务,中断计数器加1 MOV TH0, #0DBH MOV TL0, #0FFH ;11.0592M晶振,形成10毫秒中断 RETISTART: MOV SP, #50H MOV TH0, #0DBH MOV TL0, #0FFH MOV TMOD, #01H MOV IE, #82HMUSIC0: NOP MOV DPTR, #DAT ;表头地址送DPTR MOV 20H, #00H ;中断计数器清0MUSIC1: NOP CLR A ;A清零 MOVC A, @A+DPTR ;查表取代码 JZ END0 ;是00H,则结束 CJNE A, #0FFH, MUSIC5 ;如果不是休止符,往下执行,;以R6作为音符频率控制,唱R7节拍那么久。 LJMP MUSIC3MUSIC5: NOP MOV R6, A ;R6=18H音符的频率 INC DPTR ;DPTR加1 MOV A, #0 MOVC A, @A+DPTR ;取节拍代码送R7 MOV R7,A ;R7=30H音符发音的时间 SETB TR0 ;启动计数MUSIC2: NOP CPL P3.2 ;P3.2是音乐输出引脚 MOV A, R6 MOV R3, A ;R3=R6=18H LCALL DEL MOV A, R7 CJNE A, 20H, MUSIC2 ;中断计数器(20H)=R7否?;不等,则继续循环 MOV 20H, #00H ;等于,则取下一代码 INC DPTR LJMP MUSIC1MUSIC3: NOP ;休止100毫秒 CLR TR0 MOV R2, #0DH ;R2=13MUSIC4: NOP MOV R3, #0FFH ;R3=255 LCALL DEL DJNZ R2, MUSIC4 INC DPTR LJMP MUSIC1END0: NOP MOV R2, #0FFH ;歌曲结束,延时1秒后继续MUSIC6: MOV R3, #00H LCALL DEL DJNZ R2, MUSIC6 LJMP MUSIC0DEL: NOPDEL3: MOV R4, #02H DEL4: NOP DJNZ R4, DEL4 NOP DJNZ R3, DEL3 RET NOPDAT:DB 18H, 30H, 1CH, 10H, 20H, 40H, 1CH, 10HDB 18H, 10H, 20H, 10H, 1CH, 10H, 18H, 40HDB 1CH, 20H, 20H, 20H, 1CH, 20H, 18H, 20HDB 20H, 80H, 0FFH, 20H,30H, 1CH, 10H, 18HDB 20H, 15H, 20H, 1CH, 20H, 20H, 20H, 26HDB 40H, 20H, 20H, 2BH, 20H, 26H, 20H, 20HDB 20H, 30H, 80H, 0FFH,20H, 20H, 1CH, 10HDB 18H, 10H, 20H, 20H, 26H, 20H, 2BH, 20HDB 30H, 20H, 2BH, 40H, 20H, 20H, 1CH, 10HDB 18H, 10H, 20H, 20H, 26H, 20H, 2BH, 20HDB 30H, 20H, 2BH, 40H, 20H, 30H, 1CH, 10HDB 18H, 20H, 15H, 20H, 1CH, 20H, 20H, 20HDB 26H, 40H, 20H, 20H, 2BH, 20H, 26H, 20HDB 20H, 20H, 30H, 80H, 20H, 30H, 1CH, 10HDB 20H, 10H, 1CH, 10H, 20H, 20H, 26H, 20HDB 2BH, 20H, 30H, 20H, 2BH, 40H, 20H, 15HDB 1FH, 05H, 20H, 10H, 1CH, 10H, 20H, 20HDB 26H, 20H, 2BH, 20H, 30H, 20H, 2BH, 40HDB 20H, 30H, 1CH, 10H, 18H, 20H, 15H, 20HDB 1CH, 20H, 20H, 20H, 26H, 40H, 20H, 20HDB 2BH, 20H, 26H, 20H, 20H, 20H, 30H, 30HDB 20H, 30H, 1CH, 10H, 18H, 40H, 1CH, 20HDB 20H, 20H, 26H, 40H, 13H, 60H, 18H, 20HDB 15H, 40H, 13H, 40H, 18H, 80H, 00HEND
④ 能提供几首单片机的歌曲代码用蜂鸣器唱的
#include <reg52.h>
#include <intrins.h>
//本例采用89C52, 晶振为11.0592MHZ
//关于如何编制音乐代码, 其实十分简单,各位可以看以下代码.
//频率常数即音乐术语中的音调,而节拍常数即音乐术语中的多少拍;
//所以拿出谱子, 试探编吧!
sbit out=P2^3;
unsigned char n=0; //n为节拍常数变量
unsigned char code music_tab[] ={
0x18, 0x30, 0x1C , 0x10, //格式为: 频率常数, 节拍常数, 频率常数, 节拍常数,
0x20, 0x40, 0x1C , 0x10,
0x18, 0x10, 0x20 , 0x10,
0x1C, 0x10, 0x18 , 0x40,
0x1C, 0x20, 0x20 , 0x20,
0x1C, 0x20, 0x18 , 0x20,
0x20, 0x80, 0xFF , 0x20,
0x30, 0x1C, 0x10 , 0x18,
0x20, 0x15, 0x20 , 0x1C,
0x20, 0x20, 0x20 , 0x26,
0x40, 0x20, 0x20 , 0x2B,
0x20, 0x26, 0x20 , 0x20,
0x20, 0x30, 0x80 , 0xFF,
0x20, 0x20, 0x1C , 0x10,
0x18, 0x10, 0x20 , 0x20,
0x26, 0x20, 0x2B , 0x20,
0x30, 0x20, 0x2B , 0x40,
0x20, 0x20, 0x1C , 0x10,
0x18, 0x10, 0x20 , 0x20,
0x26, 0x20, 0x2B , 0x20,
0x30, 0x20, 0x2B , 0x40,
0x20, 0x30, 0x1C , 0x10,
0x18, 0x20, 0x15 , 0x20,
0x1C, 0x20, 0x20 , 0x20,
0x26, 0x40, 0x20 , 0x20,
0x2B, 0x20, 0x26 , 0x20,
0x20, 0x20, 0x30 , 0x80,
0x20, 0x30, 0x1C , 0x10,
0x20, 0x10, 0x1C , 0x10,
0x20, 0x20, 0x26 , 0x20,
0x2B, 0x20, 0x30 , 0x20,
0x2B, 0x40, 0x20 , 0x15,
0x1F, 0x05, 0x20 , 0x10,
0x1C, 0x10, 0x20 , 0x20,
0x26, 0x20, 0x2B , 0x20,
0x30, 0x20, 0x2B , 0x40,
0x20, 0x30, 0x1C , 0x10,
0x18, 0x20, 0x15 , 0x20,
0x1C, 0x20, 0x20 , 0x20,
0x26, 0x40, 0x20 , 0x20,
0x2B, 0x20, 0x26 , 0x20,
0x20, 0x20, 0x30 , 0x30,
0x20, 0x30, 0x1C , 0x10,
0x18, 0x40, 0x1C , 0x20,
0x20, 0x20, 0x26 , 0x40,
0x13, 0x60, 0x18 , 0x20,
0x15, 0x40, 0x13 , 0x40,
0x18, 0x80, 0x00
};
void int0() interrupt 1 //采用中断0 控制节拍
{ TH0=0xd8;
TL0=0xef;
n--;
}
void delay (unsigned char m) //控制频率延时
{
unsigned i=3*m;
while(--i);
}
void delayms(unsigned char a) //豪秒延时子程序
{
while(--a); //采用while(--a) 不要采用while(a--); 各位可编译一下看看汇编结果就知道了!
}
void main()
{ unsigned char p,m; //m为频率常数变量
unsigned char i=0;
TMOD&=0x0f;
TMOD|=0x01;
TH0=0xd8;TL0=0xef;
IE=0x82;
play:
while(1)
{
a: p=music_tab[i];
if(p==0x00) { i=0, delayms(1000); goto play;} //如果碰到结束符,延时1秒,回到开始再来一遍
else if(p==0xff) { i=i+1;delayms(100),TR0=0; goto a;} //若碰到休止符,延时100ms,继续取下一音符
else {m=music_tab[i++], n=music_tab[i++];} //取频率常数 和 节拍常数
TR0=1; //开定时器1
while(n!=0) out=~out,delay(m); //等待节拍完成, 通过P1口输出音频(可多声道哦!)
TR0=0; //关定时器1
}
}
⑤ 哪里有单片机音乐代码下载
用51的话就是靠定时器延时产生的音乐,其实也是单片机的运行程序。我有几个但这贴不上来
发了3个注意查收~
⑥ 单片机歌曲代码
#include "reg51.h"
#define uint unsigned int
#define uchar unsigned char
uchar * TABLE ;
code uint TABLE1 [15]={64260,64400,64524,64580,
64684,64777,64820,64898,
64968,65030,65058,65110,
65157,65178,65217};
code uchar SONG [ ]={
//1. 迟来的爱
};
code uchar SONG1 [ ]={
//2.两只蝴蝶
};
code uchar SONG3 [ ]={
//4.一个师傅三个徒弟
};
uchar hjsz;
uchar ljsz;
uchar jpm;
uchar yfm;
uchar t0 =0;
uint i=0;
sbit Speaker =P1^0;
uint k;
void Delay1()
{
for ( k=0;k<20000;k++);
}
void Lignt( )
{ uchar t;
for(t=0;t<10;t++)
{
P2=0xff;
Delay1();
P2=0x00;
Delay1();
}
}
void Lignt1( )
{
P2=0xaa;
Delay1();
P2=0x55;
Delay1();
}
void Delay(uchar t0)//延时
{
while(t0--) //决定节拍
Lignt1();
}
void Delay2(uchar w0)//延时
{
while(w0--) //决定节拍
Lignt();
}
void T0Int() interrupt 1//TIMER0
{
TL0 = ljsz;
TH0 = hjsz;
Speaker=!Speaker;
}
void ExtInt0() interrupt 0//INT0
{
if(t0>10)
t0=0;
i=0; // 全局变量,指向歌谱的第1个
switch(t0++)
{
case 0 : TABLE=SONG;break; //选择第1首
case 1 : TABLE=SONG1;break;//选择第2首
case 2 : TABLE=SONG2;break;//选择第3首
case 3 : TABLE=SONG3;break;//选择第4首
case 4 : TABLE=SONG4;break;//选择第5首
case 5 : TABLE=SONG5;break;//选择第6首
case 6 : TABLE=SONG6;break;//选择第7首
case 7 : TABLE=SONG7;break;//选择第8首
case 8 : TABLE=SONG8;break;//选择第9首
case 9 : TABLE=SONG9;break;//选择第10首
}
}
void songsing()//发音程序
{
i=0;
while(TABLE[i])
{
jpm=TABLE[i]&0x0f; //节拍值
yfm=(TABLE[i]>>0x04)&0x0f;//简谱值
if(yfm) //简谱为1,取计数值
{
yfm=yfm-1;
hjsz=(uchar)(TABLE1[yfm]>>0x08);//取计数值高字节
TH0 = hjsz;
ljsz=(uchar)(TABLE1[yfm]); //取计数值低字节
TL0 = ljsz;
TR0 = 1; //启动TIMER0
}
else TR0 = 0; //简谱为0,不发音
Delay(jpm); //节拍延时
i++;
}
}
void main(void)
{
TMOD =0X01;//设TIMER0在MODE1
TCON =0X01;//外部中断INT0,下降沿触发
IE =0x83;//开中断(INT0,TIMER0)
IP =0x00;//设置中断优先级
TABLE=SONG0;
while(1)
{
Lignt( );
songsing();//调用发音程序
TR0 = 0;//停止TIMER0
Delay2(1);
TABLE=SONG0;// 更改歌曲0
songsing();
}
}
⑦ 求单片机 音乐播放的c代码
代码的格式,是由编程者设计的,并没有统一的规范。
下面的链接可供参考。
http://hi..com/%d7%f6%b6%f8%c2%db%b5%c0/blog/item/88bfff323ec42ef21b4cff09.html
⑧ 单片机音乐代码代表什么意思啊
一般来说呢,想要改变蜂鸣器的发声呢是靠频率的,而改变频率在单片机里面很多时候是用定时器来改变的,你上面那些,应该是就用来改变频率的,通过改变频率,蜂鸣器的声音就改变了
⑨ 单片机音乐程序代码
T0H EQU30H
T0LEQU31H
ORG0000H
LJMPMAIN
ORG000BH
LJMPT0ISR
ORG0030H
MAIN:
MOVSP,#5FH
MOVTMOD,#01H
SETBET0
SETBEA
LOOP:
MOVDPTR,#FREQ
MOVA,P2 ;控制高中低音区
MOVR1,#0
ANLA,#03H
JBACC.0,LOOP01
MOVR1,#14
SJMPLOOP0
LOOP01:
JBACC.1,LOOP0
MOVR1,#28
LOOP0:
JBP0.0,LOOP1 ;控制音频1234567
MOVA,R1
MOVCA,@A+DPTR
MOVT0H,A
INCDPTR
MOVA,R1
MOVCA,@A+DPTR
MOVT0L,A
LJMPLOOP
LOOP1:
JBP0.1,LOOP2
MOVA,R1
ADDA,#2
MOVCA,@A+DPTR
MOVT0H,A
INCDPTR
MOVA,R1
ADDA,#2
MOVCA,@A+DPTR
MOVT0L,A
LJMPLOOP
LOOP2:
JBP0.2,LOOP3
MOVA,R1
ADDA,#4
MOVCA,@A+DPTR
MOVT0H,A
INCDPTR
MOVA,R1
ADDA,#4
MOVCA,@A+DPTR
MOVT0L,A
LJMPLOOP
LOOP3:
JBP0.3,LOOP4
MOVA,R1
ADDA,#6
MOVCA,@A+DPTR
MOVT0H,A
INCDPTR
MOVA,R1
ADDA,#6
MOVCA,@A+DPTR
MOVT0L,A
LJMPLOOP
LOOP4:
JBP0.4,LOOP5
MOVA,R1
ADDA,#8
MOVCA,@A+DPTR
MOVT0H,A
INCDPTR
MOVA,R1
ADDA,#8
MOVCA,@A+DPTR
MOVT0L,A
LJMPLOOP
LOOP5:
JBP0.5,LOOP6
MOVA,R1
ADDA,#10
MOVCA,@A+DPTR
MOVT0H,A
INCDPTR
MOVA,R1
ADDA,#10
MOVCA,@A+DPTR
MOVT0L,A
LJMPLOOP
LOOP6:
JBP0.6,LOOP7
MOVA,R1
ADDA,#12
MOVCA,@A+DPTR
MOVT0H,A
INCDPTR
MOVA,R1
ADDA,#12
MOVCA,@A+DPTR
MOVT0L,A
LJMPLOOP
LOOP7:
CLRTR0
LJMPLOOP
;-----------------------------
T0ISR:
CLRTR0
MOVTH0,T0H
MOVTL0,T0L
SETBTR0
CPLP3.0
RETI
;-----------------------------
FREQ:
DB0F2H,03DH ;低音1
DB0F3H,0BDH ;低音2
DB0F5H,014H ;低音3
DB0F5H,0B1H ;低音4
DB0F6H,0D0H ;低音5
DB0F7H,0D1H ;低音6
DB0F8H,0B5H ;低音7
DB0F9H,01EH ;中音1
DB0F9H,0DEH ;中音2
DB0FAH,08AH ;中音3
DB0FAH,0D8H ;中音4
DB0FBH,068H ;中音5
DB0FBH,0E8H ;中音6
DB0FCH,05AH ;中音7
DB0FCH,08FH ;高音1
DB0FCH,0EFH ;高音2
DB0FDH,045H ;高音3
DB0FDH,06CH ;高音4
DB0FDH,0B4H ;高音5
DB0FDH,0F4H ;高音6
DB0FEH,029H ;高音7
;-----------------------------
END