如何用单片机 唱生日快乐歌
菜鸟不懂,求大家帮忙 如何用单片机 控制唱生日快乐歌,都要哪些元件?
是用蜂鸣器有源的还是无源的 还是用什么扬声器什么的,具体怎么控制,求PCB图啊,最好 有个仿真 的 还有C程序啊,谢谢
朋友,你是想学习还是想要点资料交功课,如果是后者,建议你以后不要学习电子相关的东西,因为你的心根本不在这里;要是前者,你应该买个51开发板,然后慢慢的学习. 提示一下应该使用蜂鸣器好做一点.
是自己研究,开发板 早就买了 ,proteus 和Protel都会用,网上查资料 没有详细 的讲解,看别人能做出来,不知道咋做的,电路图程序 什么 的想学习研究下!
这是世上只有妈妈好的音乐,生日歌你自己改编下,用的蜂鸣器
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
unsigned char timer0h,timer0l,time;
//世上只有妈妈好数据表
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;
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;
while(i<100){ //音乐数组长度 ,唱完从头再来
k=sszymmh[i]+7*sszymmh[i+1]-1;
timer0h=FREQH[k];
timer0l=FREQL[k];
time=sszymmh[i+2];
i=i+3;
song();
}
}
}
佩服.
找点资料,把原理看懂吧
谢谢,但是电路图是什么样的?、我要做实物
偌大一个互联网,这点资料怎么会找不到呢,蜂鸣器要用无源蜂鸣器,要靠不同频率的信号才能驱动发声,而有缘蜂鸣器只要有电压就会发声、
这么巧,我前几个星期刚做过。我这里就有程序,在实验板上调试出来的,实物我没有做过。不过接法也应该很简单,就是P3随便找个口接蜂鸣器,如果功率不够再接个上拉。
ORG 0000H
JMP MAIN
ORG 000BH ;跳转定时器0,定时器0控制节拍
JMP SETJPJS ;跳转节拍计数中断,
ORG 001BH ;跳转定时器1,定时器1控制频率
JMP SETPLZF ;跳转到频率计数中断,在该中断中对喇叭高低电平至反
ORG 0080H
MAIN:
MOV TMOD , #00010001B
JMP RESETJS
LOOP:
MOV P3 , R7
JMP LOOP
RET
RESETJS:
;对定时器赋初值
MOV R1 , #00H
MOV R2 , #00H
MOV R3 , #00H
MOV R4 , #00H
MOV DPTR , #TAB1
MOV A , R1
MOVC A , @a + DPTR
MOV TH0 , A ;对TH0赋初值
MOV DPTR , #TAB2
MOV A , R1
MOVC A , @A + DPTR
MOV TL0 , A ;对TL0赋初值
INC R1
MOV DPTR , #TAB3
MOV A , R2
MOVC A , @A + DPTR
MOV R3 , A
INC R2 ;对R3赋初值,决定节拍的长度
MOV DPTR , #TAB4
MOV A , R4
MOVC A , @A + DPTR
MOV TH1 , A
MOV 20H , A ;对TH1赋初值
MOV DPTR , #TAB5
MOV A , R4
MOVC A , @A + DPTR
MOV TL1 , A
MOV 21H , A ;对TL1赋初值
INC R4
MOV IE , #10001010B
SETB TR0
SETB TR1
JMP LOOP
RESETJS1:
;对定时器赋初值
MOV R1 , #00H
MOV R2 , #00H
MOV R3 , #00H
MOV R4 , #00H
MOV DPTR , #TAB1
MOV A , R1
MOVC A , @A + DPTR
MOV TH0 , A ;对TH0赋初值
MOV DPTR , #TAB2
MOV A , R1
MOVC A , @A + DPTR
MOV TL0 , A ;对TL0赋初值
INC R1
MOV DPTR , #TAB3
MOV A , R2
MOVC A , @A + DPTR
MOV R3 , A
INC R2 ;对R3赋初值,决定节拍的长度
MOV DPTR , #TAB4
MOV A , R4
MOVC A , @A + DPTR
MOV TH1 , A
MOV 20H , A ;对TH1赋初值
MOV DPTR , #TAB5
MOV A , R4
MOVC A , @A + DPTR
MOV TL1 , A
MOV 21H , A ;对TL1赋初值
INC R4
RETI
SETPLZF:
MOV A , R7
CPL A
MOV R7 , A
MOV TH1 , 20H
MOV TL1 , 21H
;CPL P1.1
RETI
SETJPJS:
DJNZ R3 , SETLOOP
MOV DPTR , #TAB3
MOV A , R2
MOVC A , @A + DPTR
MOV R3 , A ;对R3赋初值,决定节拍的长度
MOV DPTR , #TAB1
MOV A , R1
MOVC A , @A + DPTR
MOV R6 , A
CJNE A , #00H , SETJS
MOV DPTR , #TAB2
MOV A , R1
MOVC A , @A + DPTR
CJNE A , #00H , SETJS
;如果节拍记录到0000H则要重头开始
JMP RESETJS1
RETI
SETJS:
MOV TH0 , R6 ;对TH0赋初值
MOV DPTR , #TAB2
MOV A , R1
MOVC A , @A + DPTR
MOV TL0 , A
INC R1 ;对TL0赋初值
MOV DPTR , #TAB3
MOV A , R2
MOVC A , @A + DPTR
MOV R3 , A
INC R2 ;对R3赋初值,决定节拍的长度
MOV DPTR , #TAB4
MOV A , R4
MOVC A , @A + DPTR
MOV TH1 , A
MOV 20H , A ;对TH1赋初值
MOV DPTR , #TAB5
MOV A , R4
MOVC A , @A + DPTR
MOV TL1 , A
MOV 21H , A
INC R4 ;对TL1赋初值
RETI
SETLOOP:
MOV DPTR , #TAB1
MOV A , R1
MOVC A , @A + DPTR
MOV TH0 , A ;对TH0赋初值
MOV DPTR , #TAB2
MOV A , R2
MOVC A , @A + DPTR
MOV TL0 , A ;对TL0赋初值
;MOV DPTR , #TAB3
;MOV A , R2
;MOVC A , @A + DPTR
;MOV R3 , A
;INC R2 ;对R3赋初值,决定节拍的长度
RETI
;祝你生日快乐歌
TAB1: DB 03CH , 03CH , 03CH , 03CH , 03CH , 03CH , 03CH ;TH0
DB 03CH , 03CH , 03CH , 03CH , 03CH , 03CH , 03CH
DB 03CH , 03CH , 03CH , 03CH , 03CH , 03CH , 03CH
DB 03CH , 03CH , 03CH , 03CH
DB 000H
TAB2: DB 0B0H , 0B0H , 0B0H , 0B0H , 0B0H , 0B0H , 0B0H ;TL0
DB 0B0H , 0B0H , 0B0H , 0B0H , 0B0H , 0B0H , 0B0H
DB 0B0H , 0B0H , 0B0H , 0B0H , 0B0H , 0B0H , 0B0H
DB 0B0H , 0B0H , 0B0H , 0B0H
DB 000H
TAB3: DB 02H , 02H , 04H , 04H , 04H , 08H , 02H
DB 02H , 04H , 04H , 04H , 08H , 02H , 02H
DB 04H , 04H , 04H , 04H , 04H , 02H , 02H
DB 04H , 04H , 04H , 08H
DB 000H
TAB4: DB 0FBH , 0FBH , 0FBH , 0FBH , 0FCH , 0FCH , 0FBH
DB 0FBH , 0FBH , 0FBH , 0FCH , 0FCH , 0FBH , 0FBH
DB 0FDH , 0FDH , 0FCH , 0FCH , 0FBH , 0FDH , 0FDH
DB 0FDH , 0FCH , 0FCH , 0FCH
TAB5: DB 004H , 004H , 090H , 004H , 044H , 00CH , 004H
DB 004H , 090H , 004H , 0ACH , 044H , 004H , 004H
DB 082H , 009H , 044H , 00CH , 090H , 084H , 084H
DB 009H , 044H , 0ACH , 044H
;1-7 , 1-7 , 1-7
;TAB1: DB 03CH , 03CH , 03CH , 03CH , 03CH , 03CH , 03CH ;TH0
; DB 03CH , 03CH , 03CH , 03CH , 03CH , 03CH , 03CH
; DB 03CH , 03CH , 03CH , 03CH , 03CH , 03CH , 03CH
; DB 000H
;TAB2: DB 0B0H , 0B0H , 0B0H , 0B0H , 0B0H , 0B0H , 0B0H ;TL0
; DB 0B0H , 0B0H , 0B0H , 0B0H , 0B0H , 0B0H , 0B0H
; DB 0B0H , 0B0H , 0B0H , 0B0H , 0B0H , 0B0H , 0B0H
; DB 000H
;TAB3: DB 014H , 014H , 014H , 014H , 014H , 014H , 014H ;TH0
; DB 014H , 014H , 014H , 014H , 014H , 014H , 014H
; DB 014H , 014H , 014H , 014H , 014H , 014H , 014H
; DB 000H
;TAB4: DB 0F8H , 0F9H , 0FAH , 0FAH , 0FBH , 0FBH , 0FCH ;TH1
; DB 0FCH , 0FCH , 0FDH , 0FDH , 0FDH , 0FDH , 0FEH
; DB 0FEH , 0FEH , 0FEH , 0FEH , 0FEH , 0FEH , 0FFH
; DB 000H
;TAB5: DB 08CH , 05CH , 015H , 067H , 004H , 090H , 00CH ;TL1
; DB 044H , 0ACH , 009H , 084H , 082H , 0C8H , 006H
; DB 021H , 056H , 085H , 09AH , 0C1H , 0E4H , 003H
; DB 000H
END
加油
就直接将蜂鸣器接到一个IO就行了?
有么有C语言的程序,
大哥,还要电路图,程序中的接口定义你都看不懂还玩?初学者表示鄙视之。
