c51电子琴.docx

上传人:b****5 文档编号:6747672 上传时间:2023-01-09 格式:DOCX 页数:21 大小:16.20KB
下载 相关 举报
c51电子琴.docx_第1页
第1页 / 共21页
c51电子琴.docx_第2页
第2页 / 共21页
c51电子琴.docx_第3页
第3页 / 共21页
c51电子琴.docx_第4页
第4页 / 共21页
c51电子琴.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

c51电子琴.docx

《c51电子琴.docx》由会员分享,可在线阅读,更多相关《c51电子琴.docx(21页珍藏版)》请在冰豆网上搜索。

c51电子琴.docx

c51电子琴

51单片机电子琴,多按键调试可行

#defineucharunsignedchar//定义一下方便使用

#defineuintunsignedint

#defineulongunsignedlong

#include//包括一个52标准内核的头文件

charcodedx516[3]_at_0x003b;//这是为了仿真设置的

sbitspeaker=P2^0;//喇叭输出脚

sbitK0=P1^0;

sbitLED1=P0^0;

sbitLED2=P0^1;

sbitLED3=P0^2;

sbitLED4=P0^3;

sbitLED5=P0^4;

sbitLED6=P0^5;

sbitLED7=P0^6;

sbitK1=P3^1;

sbitK2=P3^2;

sbitK3=P3^3;

sbitK4=P3^4;

sbitK5=P3^5;

sbitK6=P3^6;

sbitK7=P3^7;

sbitK8=P1^1;

sbitK9=P1^2;

sbitK10=P1^3;

sbitK11=P1^4;

sbitK12=P1^5;

sbitK13=P1^6;

sbitK14=P1^7;

sbitK15=P2^1;

sbitK16=P2^2;

sbitK17=P2^3;

sbitK18=P2^4;

sbitK19=P2^5;

sbitK20=P2^6;

sbitK21=P2^7;

ucharth0_f;//在中断中装载的T0的值高8位

uchartl0_f;//在中断中装载的T0的值低8位

//T0的值,及输出频率对照表

ucharcodefreq[36*2]={

0xA9,0xEF,//00220HZ,1//0

0x93,0xF0,//00233HZ,1#//1

0x73,0xF1,//00247HZ,2//2

0x49,0xF2,//00262HZ,2#//3

0x07,0xF3,//00277HZ,3//4

0xC8,0xF3,//00294HZ,4//5

0x73,0xF4,//00311HZ,4#//6

0x1E,0xF5,//00330HZ,5//7

0xB6,0xF5,//00349HZ,5#//8

0x4C,0xF6,//00370HZ,6//9

0xD7,0xF6,//00392HZ,6#//10

0x5A,0xF7,//00415HZ,7//11

0xD8,0xF7,//00440HZ1//12

0x4D,0xF8,//00466HZ1#//13

0xBD,0xF8,//00494HZ2//14

0x24,0xF9,//00523HZ2#//15

0x87,0xF9,//00554HZ3//16

0xE4,0xF9,//00587HZ4//17

0x3D,0xFA,//00622HZ4#//18

0x90,0xFA,//00659HZ5//19

0xDE,0xFA,//00698HZ5#//20

0x29,0xFB,//00740HZ6//21

0x6F,0xFB,//00784HZ6#//22

0xB1,0xFB,//00831HZ7//23

0xEF,0xFB,//00880HZ`1//24

0x2A,0xFC,//00932HZ`1#//25

0x62,0xFC,//00988HZ`2//26

0x95,0xFC,//01046HZ`2#//27

0xC7,0xFC,//01109HZ`3//28

0xF6,0xFC,//01175HZ`4//29

0x22,0xFD,//01244HZ`4#//30

0x4B,0xFD,//01318HZ`5//31

0x73,0xFD,//01397HZ`5#//32

0x98,0xFD,//01480HZ`6//33

0xBB,0xFD,//01568HZ`6#//34

0xDC,0xFD,//01661HZ`7//35

};

//定时中断0,用于产生唱歌频率

timer0()interrupt1

{

TL0=tl0_f;TH0=th0_f;//调入预定时值

speaker=~speaker;//取反音乐输出IO

}

//按键控制音阶声音输出(电子琴)

voidmain(void)//主程序

{

ulongn;

ucharcodejie8[21]={0,2,4,5,7,9,11,12,14,16,17,19,21,23,24,26,28,29,31,33,35};//1234567`1八个音符在频率表中的位置

TMOD=0x01;//使用定时器0的16位工作模式

TR0=0;

ET0=1;

EA=1;

while

(1)

{

if(!

K0)

{

tl0_f=freq[jie8[16]*2];//置一个音符的值

th0_f=freq[jie8[16]*2+1];

TR0=1;

if(K0)gototanzou;

for(n=0;n<12000;n++);//延时

tl0_f=freq[jie8[19]*2];//置一个音符的值

th0_f=freq[jie8[19]*2+1];

TR0=1;

if(K0)gototanzou;

for(n=0;n<12000;n++);//延时

tl0_f=freq[jie8[16]*2];//置一个音符的值

th0_f=freq[jie8[16]*2+1];

TR0=1;

if(K0)gototanzou;

for(n=0;n<12000;n++);//延时

tl0_f=freq[jie8[14]*2];//置一个音符的值

th0_f=freq[jie8[14]*2+1];

TR0=1;

if(K0)gototanzou;

for(n=0;n<12000;n++);//延时

tl0_f=freq[jie8[16]*2];//置一个音符的值

th0_f=freq[jie8[16]*2+1];

TR0=1;

if(K0)gototanzou;

for(n=0;n<12000;n++);//延时

tl0_f=freq[jie8[14]*2];//置一个音符的值

th0_f=freq[jie8[14]*2+1];

TR0=1;

if(K0)gototanzou;

for(n=0;n<12000;n++);//延时

tl0_f=freq[jie8[16]*2];//置一个音符的值

th0_f=freq[jie8[16]*2+1];

TR0=1;

if(K0)gototanzou;

for(n=0;n<24000;n++);//延时

TR0=0;

for(n=0;n<10000;n++);

tl0_f=freq[jie8[16]*2];//置一个音符的值

th0_f=freq[jie8[16]*2+1];

TR0=1;

if(K0)gototanzou;

for(n=0;n<18000;n++);//延时

tl0_f=freq[jie8[14]*2];//置一个音符的值

th0_f=freq[jie8[14]*2+1];

TR0=1;

if(K0)gototanzou;

for(n=0;n<6000;n++);//延时

tl0_f=freq[jie8[9]*2];//置一个音符的值

th0_f=freq[jie8[9]*2+1];

TR0=1;

if(K0)gototanzou;

for(n=0;n<12000;n++);//延时

tl0_f=freq[jie8[12]*2];//置一个音符的值

th0_f=freq[jie8[12]*2+1];

TR0=1;

if(K0)gototanzou;

for(n=0;n<12000;n++);//延时

tl0_f=freq[jie8[16]*2];//置一个音符的值

th0_f=freq[jie8[16]*2+1];

TR0=1;

if(K0)gototanzou;

for(n=0;n<12000;n++);//延时

tl0_f=freq[jie8[14]*2];//置一个音符的值

th0_f=freq[jie8[14]*2+1];

TR0=1;

if(K0)gototanzou;

for(n=0;n<30000;n++);//延时

TR0=0;

for(n=0;n<10000;n++);

tl0_f=freq[jie8[14]*2];//置一个音符的值

th0_f=freq[jie8[14]*2+1];

TR0=1;

if(K0)gototanzou;

for(n=0;n<12000;n++);//延时

tl0_f=freq[jie8[12]*2];//置一个音符的值

th0_f=freq[jie8[12]*2+1];

TR0=1;

if(K0)gototanzou;

for(n=0;n<12000;n++);//延时

tl0_f=freq[jie8[9]*2];//置一个音符的值

th0_f=freq[jie8[9]*2+1];

TR0=1;

if(K0)gototanzou;

for(n=0;n<12000;n++);//延时

tl0_f=freq[jie8[12]*2];//置一个音符的值

th0_f=freq[jie8[12]*2+1];

TR0=1;

if(K0)gototanzou;

for(n=0;n<12000;n++);//延时

tl0_f=freq[jie8[14]*2];//置一个音符的值

th0_f=freq[jie8[14]*2+1];

TR0=1;

if(K0)gototanzou;

for(n=0;n<12000;n++);//延时

tl0_f=freq[jie8[16]*2];//置一个音符的值

th0_f=freq[jie8[16]*2+1];

TR0=1;

if(K0)gototanzou;

for(n=0;n<12000;n++);//延时

tl0_f=freq[jie8[19]*2];//置一个音符的值

th0_f=freq[jie8[19]*2+1];

TR0=1;

if(K0)gototanzou;

for(n=0;n<12000;n++);//延时

tl0_f=freq[jie8[14]*2];//置一个音符的值

th0_f=freq[jie8[14]*2+1];

TR0=1;

if(K0)gototanzou;

for(n=0;n<12000;n++);//延时

TR0=0;

for(n=0;n<10000;n++);

TR0=1;

for(n=0;n<12000;n++);//延时

tl0_f=freq[jie8[16]*2];//置一个音符的值

th0_f=freq[jie8[16]*2+1];

TR0=1;

if(K0)gototanzou;

for(n=0;n<12000;n++);//延时

tl0_f=freq[jie8[21]*2];//置一个音符的值

th0_f=freq[jie8[21]*2+1];

TR0=1;

if(K0)gototanzou;

for(n=0;n<12000;n++);//延时

tl0_f=freq[jie8[19]*2];//置一个音符的值

th0_f=freq[jie8[19]*2+1];

TR0=1;

if(K0)gototanzou;

for(n=0;n<12000;n++);//延时

tl0_f=freq[jie8[7]*2];//置一个音符的值

th0_f=freq[jie8[7]*2+1];

TR0=1;

if(K0)gototanzou;

for(n=0;n<12000;n++);//延时

tl0_f=freq[jie8[14]*2];//置一个音符的值

th0_f=freq[jie8[14]*2+1];

TR0=1;

if(K0)gototanzou;

for(n=0;n<12000;n++);//延时

tl0_f=freq[jie8[12]*2];//置一个音符的值

th0_f=freq[jie8[12]*2+1];

TR0=1;

if(K0)gototanzou;

for(n=0;n<30000;n++);//延时

TR0=0;

for(n=0;n<10000;n++);

tl0_f=freq[jie8[14]*2];//置一个音符的值

th0_f=freq[jie8[14]*2+1];

TR0=1;

if(K0)gototanzou;

for(n=0;n<12000;n++);//延时

tl0_f=freq[jie8[16]*2];//置一个音符的值

th0_f=freq[jie8[16]*2+1];

TR0=1;

if(K0)gototanzou;

for(n=0;n<12000;n++);//延时

tl0_f=freq[jie8[14]*2];//置一个音符的值

th0_f=freq[jie8[14]*2+1];

TR0=1;

if(K0)gototanzou;

for(n=0;n<12000;n++);//延时

tl0_f=freq[jie8[12]*2];//置一个音符的值

th0_f=freq[jie8[12]*2+1];

TR0=1;

if(K0)gototanzou;

for(n=0;n<12000;n++);//延时

tl0_f=freq[jie8[19]*2];//置一个音符的值

th0_f=freq[jie8[19]*2+1];

TR0=1;

if(K0)gototanzou;

for(n=0;n<18000;n++);//延时

tl0_f=freq[jie8[21]*2];//置一个音符的值

th0_f=freq[jie8[21]*2+1];

TR0=1;

if(K0)gototanzou;

for(n=0;n<6000;n++);//延时

tl0_f=freq[jie8[16]*2];//置一个音符的值

th0_f=freq[jie8[16]*2+1];

TR0=1;

if(K0)gototanzou;

for(n=0;n<24000;n++);//延时

TR0=0;

for(n=0;n<10000;n++);

tl0_f=freq[jie8[9]*2];//置一个音符的值

th0_f=freq[jie8[9]*2+1];

TR0=1;

if(K0)gototanzou;

for(n=0;n<12000;n++);//延时

tl0_f=freq[jie8[16]*2];//置一个音符的值

th0_f=freq[jie8[16]*2+1];

TR0=1;

if(K0)gototanzou;

for(n=0;n<12000;n++);//延时

tl0_f=freq[jie8[14]*2];//置一个音符的值

th0_f=freq[jie8[14]*2+1];

TR0=1;

if(K0)gototanzou;

TR0=0;

for(n=0;n<3000;n++);

for(n=0;n<12000;n++);//延时

tl0_f=freq[jie8[14]*2];//置一个音符的值

th0_f=freq[jie8[14]*2+1];

TR0=1;

if(K0)gototanzou;

TR0=0;

for(n=0;n<3000;n++);

for(n=0;n<12000;n++);//延时

tl0_f=freq[jie8[12]*2];//置一个音符的值

th0_f=freq[jie8[12]*2+1];

TR0=1;

if(K0)gototanzou;

for(n=0;n<30000;n++);//延时

TR0=0;

for(n=0;n<10000;n++);

}

tanzou:

if(!

K1)

{

LED1=0;

LED2=1;

LED3=1;

LED4=1;

LED5=1;

LED6=1;

LED7=1;

tl0_f=freq[jie8[0]*2];//置一个音符的值

th0_f=freq[jie8[0]*2+1];

TR0=1;

for(n=0;n<10000;n++);//延时

}

if(!

K2)

{

LED1=1;

LED2=0;

LED3=1;

LED4=1;

LED5=1;

LED6=1;

LED7=1;

tl0_f=freq[jie8[1]*2];//置一个音符的值

th0_f=freq[jie8[1]*2+1];

TR0=1;

for(n=0;n<10000;n++);//延时

}

if(!

K3)

{

LED1=1;

LED2=1;

LED3=0;

LED4=1;

LED5=1;

LED6=1;

LED7=1;

tl0_f=freq[jie8[2]*2];//置一个音符的值

th0_f=freq[jie8[2]*2+1];

TR0=1;

for(n=0;n<10000;n++);//延时

}

if(!

K4)

{

LED1=1;

LED2=1;

LED3=1;

LED4=0;

LED5=1;

LED6=1;

LED7=1;

tl0_f=freq[jie8[3]*2];//置一个音符的值

th0_f=freq[jie8[3]*2+1];

TR0=1;

for(n=0;n<10000;n++);//延时

}

if(!

K5)

{

LED1=1;

LED2=1;

LED3=1;

LED4=1;

LED5=0;

LED6=1;

LED7=1;

tl0_f=freq[jie8[4]*2];//置一个音符的值

th0_f=freq[jie8[4]*2+1];

TR0=1;

for(n=0;n<10000;n++);//延时

}

if(!

K6)

{

LED1=1;

LED2=1;

LED3=1;

LED4=1;

LED5=1;

LED6=0;

LED7=1;

tl0_f=freq[jie8[5]*2];//置一个音符的值

th0_f=freq[jie8[5]*2+1];

TR0=1;

for(n=0;n<10000;n++);//延时

}

if(!

K7)

{

LED1=1;

LED2=1;

LED3=1;

LED4=1;

LED5=1;

LED6=1;

LED7=0;

tl0_f=freq[jie8[6]*2];//置一个音符的值

th0_f=freq[jie8[6]*2+1];

TR0=1;

for(n=0;n<10000;n++);//延时

}

if(!

K8)

{

LED1=0;

LED2=1;

LED3=1;

LED4=1;

LED5=1;

LED6=1;

LED7=1;

tl0_f=freq[jie8[7]*2];//置一个音符的值

th0_f=freq[jie8[7]*2+1];

TR0=1;

for(n=0;n<10000;n++);//延时

}

if(!

K9)

{

LED1=1;

LED2=0;

LED3=1;

LED4=1;

LED5=1;

LED6=1;

LED7=1;

tl0_f=freq[jie8[8]*2];//置一个音符的值

th0_f=freq[jie8[8]*2+1];

TR0=1;

for(n=0;n<10000;n++);//延时

}

if(!

K10)

{

LED1=1;

LED2=1;

LED3=0;

LED4=1;

LED5=1;

LED6=1;

LED7=1;

tl0_f=freq[jie8[9]*2];//置一个音符的值

th0_f=freq[jie8[9]*2+1];

TR0=1;

for(n=0;n<10000;n++);//延时

}

if(!

K11)

{

LED1=1;

LED2=1;

LED3=1;

LED4=0;

LED5=1;

LED6=1;

LED7=1;

tl0_f=freq[jie8[10]*2];//置一个音符的值

th0_f=freq[jie8[10]*2+1];

TR0=1;

for(n=0;n<10000;n++);//延时

}

if(!

K12)

{

LED1=1;

LED2=1;

LED3=1;

LED4=1;

LED5=0;

LED6=1;

LED7=1;

tl0_f=freq[jie8[11]*2];//置一个音符的值

th0_f=freq[jie8[11]*2+1];

TR0=1;

for(n=0;n<10000;n++);//延时

}

if(!

K13)

{

LED1=1;

LED2=1;

LED3=1;

LED4=1;

LED5=1;

LED6=0;

LED7=1;

tl0_f=freq[jie8[12]*2];//置一个音符的值

th0_f=freq[jie8[12]*2+1];

TR0=1;

for(n=0;n<10000;n++);/

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1