標(biāo)題: 51單片機(jī)實(shí)現(xiàn)電子琴 [打印本頁(yè)]
作者: slslhrtd 時(shí)間: 2020-6-13 11:12
標(biāo)題: 51單片機(jī)實(shí)現(xiàn)電子琴
本帖最后由 slslhrtd 于 2020-6-13 11:22 編輯
1.使用鍵盤彈奏音樂(lè),7個(gè)按鍵控制7中音符(高音)
2.單片機(jī)外接7只LED,按鍵放音的同時(shí),按下一個(gè)音律按鍵,點(diǎn)亮1只LED,同時(shí)閃爍十次后熄滅,按下另一個(gè)音律按鍵,點(diǎn)亮2只LED,同時(shí)閃爍十次后熄滅,……,按下最后一個(gè)按鍵,點(diǎn)亮7只LED,同時(shí)閃爍十次后熄滅
3.單片機(jī)每次按動(dòng)音律按鍵,除了點(diǎn)亮對(duì)應(yīng)的燈亮狀態(tài)之外,結(jié)合音律通過(guò)蜂鳴器放音,將音律發(fā)聲出來(lái)
4.單片機(jī)外接第八只按鍵,一旦按下,連續(xù)播放一小段音樂(lè)。
圖片1.png (43.39 KB, 下載次數(shù): 62)
下載附件
2020-6-13 11:21 上傳
#include <reg51.h>
sbit K1=P3^0;
sbit K2=P3^1;
sbit K3=P3^2;
sbit K4=P3^3;
sbit K5=P3^4;
sbit K6=P3^5;
sbit K7=P3^6;
sbit K8=P3^7;
sbit fengmingqi=P0^5;
unsigned char m,n,time;
unsigned char Timer0_H,Timer0_L;
code unsigned char MUSIC[]={
5,2,1, 3,2,1, 2,2,2, 2,2,4, 3,2,1, 1,2,1, 2,2,1, 3,2,4,
5,2,1, 3,2,1, 2,2,2, 2,2,2, 5,1,1, 3,2,1, 4,2,1, 3,2,4,
3,2,1, 3,2,1, 7,2,1, 3,2,1, 2,2,2, 1,2,1, 7,1,1, 1,2,1,
2,2,1, 3,2,1, 6,2,3, 6,1,1, 1,2,1, 3,2,1, 2,2,1, 6,1,1,
1,2,1, 7,1,1, 5,1,1, 6,1,6, 5,2,1, 3,2,1, 2,2,2, 2,2,1,
2,2,1, 3,2,1, 1,2,1, 2,2,1, 3,2,4, 5,2,1, 3,2,1, 2,2,2,
2,2,1, 2,2,1, 5,1,1, 3,2,1, 4,2,1, 3,2,4, 3,2,1, 3,2,1,
7,2,3, 3,2,1, 2,2,2, 1,2,1, 7,1,1, 1,2,1, 2,2,1, 3,2,1,
6,2,3, 6,1,1, 1,2,1, 3,2,1, 2,2,1, 6,1,1, 1,2,1, 7,1,2,
5,1,2, 6,1,6, 0,0,0 };
code unsigned char FREQH[]={0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8, 0xF9,
0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC,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, 0xEE,0x44,
0x6B,0xB4,0xF4,0x2D, 0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,};
void delay(unsigned char m)
{
unsigned char n;
for(m=0;m<250;m++)
for(n=0;n<250;n++);
}
void delaymss(unsigned char t)
{unsigned char t1;
unsigned long t2;
for(t1 = 0; t1 < t; t1++)
for(t2 = 0; t2 < 8000; t2++);
TR0 = 0;
}
void timer0init()
{
EA=1;
ET0=1;
TMOD=0X01;
TH0 = Timer0_H;
TL0 = Timer0_L;
}
void Song()
{
TH0=Timer0_H;
TL0=Timer0_L;
TR0=1;
delaymss(time);
}
void timer0() interrupt 1 //T0中斷程序,控制發(fā)音的音調(diào)
{
TR0 = 0;
TH0 = Timer0_H; //下次的中斷時(shí)間, 這個(gè)時(shí)間, 控制音調(diào)高低
TL0 = Timer0_L;
fengmingqi = !fengmingqi;
TR0 = 1;
}
void main()
{
unsigned char a;
P2=0xff;
P0=0x00;
while(1)
{
if(K1==0)
{
delay(246);
if(K1==0)
{
TMOD=0x01;
TR0=1;
for(m=0;m<10;m++)
for(n=0;n<10;n++)
{ TH0=0xfe;
TL0=0x21;
do{}
while(!TF0);
fengmingqi=!fengmingqi;
TF0=0;
}
for(a=0;a<10;a++)
{
P2=0x7f;
delay(0);
P2=0xff;
delay(0);
}
}
}
歡迎光臨 (http://www.torrancerestoration.com/bbs/) |
Powered by Discuz! X3.1 |