51单片机c语言编写电子琴音乐播放器2

上传人:宝路 文档编号:20893073 上传时间:2017-11-22 格式:DOC 页数:7 大小:47.85KB
返回 下载 相关 举报
51单片机c语言编写电子琴音乐播放器2_第1页
第1页 / 共7页
51单片机c语言编写电子琴音乐播放器2_第2页
第2页 / 共7页
51单片机c语言编写电子琴音乐播放器2_第3页
第3页 / 共7页
51单片机c语言编写电子琴音乐播放器2_第4页
第4页 / 共7页
51单片机c语言编写电子琴音乐播放器2_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《51单片机c语言编写电子琴音乐播放器2》由会员分享,可在线阅读,更多相关《51单片机c语言编写电子琴音乐播放器2(7页珍藏版)》请在金锄头文库上搜索。

1、此程序是 51 单片机 c 语言编写的电子琴+音乐播放器,当用杜邦线将 P10 管脚接地时,单片机就会放出世上只有妈妈好 ,将 P11 管脚接地时单片机就播放祝你生日快乐 ,两者为高电平时进入电子钢琴模式,利用 16 个矩阵键盘发出相应的哆、瑞、米、发、索。此文档的乐谱是借鉴别人的,因为本人是音乐白痴!这是我第一次发表,我希望能帮到有需要的人啦.#include #define uchar unsigned char#define uint unsigned intsbit beep=P23; /定义蜂鸣器sbit music=P10; /music 为低电平播放 世上只有妈妈好 (工作模式为

2、音乐播放器) ,music1 为低电平时播放祝你生日快乐,music、music1 都为高电平时(工作模式为电子钢琴)sbit music1=P11;uchar timer0h,timer0l,time,key,flag; /flag=0 时为电子钢琴模式,flag=1 时为音乐播放器uchar code yuepu= 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,

3、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 ; /世上只有妈妈好乐谱uchar code yuepu1=5,1,1, 5,1,1, 6,1,2, 5,1,2, 1,2,2, 7,1,4,5,1,1, 5,1,1, 6,1,2, 5,1,2, 2,2,2, 1,2,4,5,1,1, 5,1,1, 5,2,2, 3,2,2, 1,2,2, 7,1,2, 6,1,2,4,2,1, 4,2,1, 3,2,2, 1,2,2, 2,2,2, 1,2,4;/祝你

4、生日快乐乐谱uchar code TH_0=0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8, 0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC, 0xFC,0xFD,0xFD,0xFD,0xFD,0xFE, / 28个音阶高八位频率表 装进定时器高八位0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF, ;uchar code TL_0=0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F, / 28 个音阶低八位频率表 装进定时

5、器 低八位0xEE,0x44, 0x6B,0xB4,0xF4,0x2D, 0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,;void delay(uchar t)uchar t1;unsigned long t2;for(t1=0;t10;i-)for(j=110;j0;j-);void keyscan() /检测十六个发出音乐按键函数 uchar temp;P3=0xfe;temp=P3;temp=0xf0&temp;if(temp!=0x0f) delayms(10); /检测第一行按键temp=P3 ;temp=temp&0xf0;if(temp!=0xf0)tem

6、p=P3;switch(temp)case 0xee: key=0;break;case 0xde: key=1;break;case 0xbe: key=2;break;case 0x7e: key=3;break;TH0=TH_0key; /将按下的键对应发出此频率声音的初值装入TL0=TL_0key;TR0=1; /打开定时器 0while(temp!=0xf0) /一直按下就一直发声temp=P3;temp=temp&0xf0;TR0=0; /松手时关闭定时器 0,不能发声beep=1; /使蜂鸣器置高关闭,预防在进入中断取反时将它置低打开P3=0xfd;temp=P3;temp=0x

7、f0&temp;if(temp!=0x0f) / 检测第二行按键 delayms(10);temp=P3 ;temp=temp&0xf0;if(temp!=0xf0)temp=P3;switch(temp)case 0xed: key=4;break;case 0xdd: key=5;break;case 0xbd: key=6;break;case 0x7d: key=7;break;TH0=TH_0key; /将按下的键对应发出此频率声音的初值装入TL0=TL_0key; TR0=1; /打开定时器 0while(temp!=0xf0) /一直按下就一直发声temp=P3;temp=tem

8、p&0xf0;TR0=0; /松手时关闭定时器 0,不能发声beep=1; /使蜂鸣器置高关闭,预防在进入中断取反时将它置低打开P3=0xfb;temp=P3;temp=0xf0&temp;if(temp!=0x0f) delayms(10);temp=P3 ;temp=temp&0xf0;if(temp!=0xf0)temp=P3;switch(temp)case 0xeb: key=8;break;case 0xdb: key=9;break;case 0xbb: key=10;break;case 0x7b: key=11;break;TH0=TH_0key; /将按下的键对应发出此频率

9、声音的初值装入TL0=TL_0key;TR0=1; /打开定时器 0while(temp!=0xf0) /一直按下就一直发声temp=P3;temp=temp&0xf0;TR0=0; /松手时关闭定时器 0,不能发声beep=1; /使蜂鸣器置高关闭,预防在进入中断取反时将它置低打开P3=0xf7;temp=P3;temp=0xf0&temp;if(temp!=0x0f) delayms(10);temp=P3 ;temp=temp&0xf0;if(temp!=0xf0)temp=P3;switch(temp)case 0xe7: key=12;break;case 0xd7: key=13;

10、break;case 0xb7: key=14;break;case 0x77: key=15;break;TH0=TH_0key; /将按下的键对应发出此频率声音的初值装入TL0=TL_0key;TR0=1; /打开定时器 0while(temp!=0xf0) /一直按下就一直发声temp=P3;temp=temp&0xf0;TR0=0; /松手时关闭定时器 0,不能发声beep=1; /使蜂鸣器置高关闭,预防在进入中断取反时将它置低打开void main() uchar k,i;TMOD=1; EA=1;ET0=1;while(1)if(music&music1) /当两个都为高电平时没有

11、放音乐,扫描键盘 flag=0;keyscan();if(!music) /当 P10 管脚为低电平时,播放世上只有妈妈好 flag=1;i=0; while(i100) /音乐数组长度 ,唱完从头再来 if(music) /在播放音乐时P10 为高电平时退出播放此歌曲 beep=1; /使蜂鸣器置高关闭,预防在进入中断取反时将它置低打开break; k=yuepui+7*yuepui+1-1;timer0h=TH_0k; / 把对应的音乐频率放进定时器 0timer0l=TL_0k;time=yuepui+2; /音乐节拍i+=3;song(); if(!music1) / music 为低电平时,播放祝你生日快乐 flag=1;i=0; while(i75) /乐谱的长度 if(music1) beep=1;break; k=yuepu1i+7*yuepu1i+1-1;timer0h=TH_0k;timer0l=TL_0k;time=yuepu1i+2;i+=3;song(); void time0() interrupt 1if(flag=0) beep=!beep; /电子琴模式时进入此语句TH0=TH_0key;TL0=TL_0key; else beep=!beep;TH0=timer0h; /音乐播放器模式进入此语句TL0=timer0l;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号