51单片机简易电子琴程序
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,
};
unsigned int code tab[]={64021,64103,64260,64400, 64524,64580,64684,64777, 64820,64898,64968,65030, 65058,65110,65157,65178};
#define uint unsigned int
uint key,i,j,time,m,k;
uchar ห้องสมุดไป่ตู้emp;
uchar STH0,STL0,STH1,STL1;
sbit sw=P2^7;
sbit speaker=P2^4;
sbit P37=P3^7;
sbit P36=P3^6;
sbit P35=P3^5;
key=8; break; case 0x0d: key=9; break; case 0x0b: key=10; break; case 0x07: key=11; break; } speaker=~speaker; STH1=tab[key]/256; STL1=tab[key]%256; TR0=1; temp=P3; temp=temp & 0x0f; while(temp!=0x0f) { temp=P3; temp=temp & 0x0f; } TR0=0; }
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,
sbit P34=P3^4;
//世上只有妈妈好数据表
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,
TR0=0; } } P3=0xff; P35=0; temp=P3; temp=temp&0x0f; if(temp!=0x0f) { for(i=50;i>0;i--)
for(j=200;j>0;j--); temp=P3; temp=temp&0x0f; if(temp!=0x0f) {
temp=P3; temp=temp&0x0f; switch(temp) { case 0x0e:
key=4; break; case 0x0d: key=5; break; case 0x0b: key=6; break; case 0x07: key=7; break; } speaker=~speaker; STH1=tab[key]/256; STL1=tab[key]%256; TR0=1; temp=P3; temp=temp & 0x0f; while(temp!=0x0f) { temp=P3; temp=temp & 0x0f; } TR0=0;
} P3=0xff; P37=0; temp=P3; temp=temp&0x0f; if(temp!=0x0f) {
for(i=50;i>0;i--) for(j=200;j>0;j--);
temp=P3; temp=temp & 0x0f; if(temp!=0x0f) {
temp=P3; temp=temp&0x0f; switch(temp) { case 0x0e:
} } P3=0xff; P36=0; temp=P3; temp=temp&0x0f; if(temp!=0x0f) {
for(i=50;i>0;i--) for(j=200;j>0;j--);
temp=P3; temp=temp&0x0f; if(temp!=0x0f) {
temp=P3; temp=temp&0x0f; switch(temp) { case 0x0e:
key=12; break; case 0x0d: key=13; break; case 0x0b: key=14; break; case 0x07: key=15; break; } speaker=~speaker; STH1=tab[key]/256; STL1=tab[key]%256; TR0=1; temp=P3; temp=temp & 0x0f; while(temp!=0x0f) { temp=P3; temp=temp & 0x0f; } TR0=0; } }
temp=P3; temp=temp&0x0f; switch(temp) { case 0x0e:
key=0; break; case 0x0d: key=1; break; case 0x0b: key=2; break; case 0x07: key=3; break; } speaker=~speaker; STH1=tab[key]/256; STL1=tab[key]%256; TR0=1; temp=P3; temp=temp & 0x0f; while(temp!=0x0f) { temp=P3; temp=temp & 0x0f; }
};
// 音阶频率表 低八位
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,
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[]={
51单片机简易电子琴程序
2009-04-16 19:59
感谢网上的诸多前辈,小弟我将这个程序写了出来。这个简易电子琴应用了4*4矩阵键盘,每
一个按键赋予了不同的音调,共计有两个八度。并预存了一首乐曲《世上只有妈妈好》。(附
有 protues 仿真图)
#include<reg51.h>
#define uchar unsigned char
} void timer0(void) interrupt 1 using 0 { if(sw==1)
{ TH0=STH1; TL0=STL1;} else { TH0=STH0; TL0=STL0;} speaker=!speaker; } 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 song() { TH0=STH0; TL0=STL0; TR0=1; delay(time); } void music(void) { m=0; time=1; sw=1; while(time&&sw==0) { if(sw) {i=0;continue;} else {
void key_music() {
P3=0xff; P34=0; temp=P3; temp=temp&0x0f; if(temp!=0x0f) {
for(i=50;i>0;i--) for(j=200;j>0;j--);
temp=P3; temp=temp&0x0f; if(temp!=0x0f) {
k=sszymmh[m]+7*sszymmh[m+1]-1; STH0=FREQH[k]; STL0=FREQL[k]; time=sszymmh[m+2]; m=m+3; song(); } } } void main() { TMOD=0x01; ET0=1; EA=1; while(1) { if(sw==1)key_music(); else music(); } }