单片机制作电子琴共同探讨Word文档下载推荐.docx

上传人:b****6 文档编号:20417110 上传时间:2023-01-22 格式:DOCX 页数:15 大小:73.58KB
下载 相关 举报
单片机制作电子琴共同探讨Word文档下载推荐.docx_第1页
第1页 / 共15页
单片机制作电子琴共同探讨Word文档下载推荐.docx_第2页
第2页 / 共15页
单片机制作电子琴共同探讨Word文档下载推荐.docx_第3页
第3页 / 共15页
单片机制作电子琴共同探讨Word文档下载推荐.docx_第4页
第4页 / 共15页
单片机制作电子琴共同探讨Word文档下载推荐.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

单片机制作电子琴共同探讨Word文档下载推荐.docx

《单片机制作电子琴共同探讨Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《单片机制作电子琴共同探讨Word文档下载推荐.docx(15页珍藏版)》请在冰豆网上搜索。

单片机制作电子琴共同探讨Word文档下载推荐.docx

下面我们要为这个音符建立一个表格,有助于单片机通过查表的方式来获得相应的数据

低音0-19之间,中音在20-39之间,高音在40-59之间

TABLE:

DW0,63628,63835,64021,64103,64260,64400,64524,0,0

DW0,63731,63928,0,64185,64331,64463,0,0,0

DW0,64580,64684,64777,64820,64898,64968,65030,0,0

DW0,64633,64732,0,64860,64934,64994,0,0,0

DW0,65058,65110,65157,65178,65217,65252,65283,0,0

DW0,65085,65134,0,65198,65235,65268,0,0,0

DW0

2、音乐的音拍,一个节拍为单位(C调)

对于不同的曲调我们也可以用单片机的另外一个定时/计数器来完成。

下面就用AT89S51单片机产生一首“生日快乐”歌曲来说明单片机如何产生的。

在这个程序中用到了两个定时/计数器来完成的。

其中T0用来产生音符频率,T1用来产生音拍。

5.程序框图

图4.22.2

7.C语言源程序

#include<

AT89X51.H>

unsignedchartemp;

unsignedcharkey;

unsignedchari,j;

unsignedcharSTH0;

unsignedcharSTL0;

unsignedintcodetab[]={64021,64103,64260,64400,

64524,64580,64684,64777,

64820,64898,64968,65030,

65058,65110,65157,65178};

voidmain(void)

{

TMOD=0x01;

ET0=1;

EA=1;

while

(1)

P3=0xff;

//将P3口取出

P3_4=0;

//使P3_4为低电平,这样可以判断第一竖排有没有键按下

temp=P3;

temp=temp&

0x0f;

if(temp!

=0x0f)//有键按下

for(i=50;

i>

0;

i--)

for(j=200;

j>

j--);

//延时

=0x0f)//再判断是否有键按下

switch(temp)//判断是哪个键按下

case0x0e:

key=0;

break;

case0x0d:

key=1;

case0x0b:

key=2;

case0x07:

key=3;

}

P1_0=~P1_0;

P0=table[key];

STH0=tab[key]/256;

//找出键对应的频率的时间,作为定时器中断初始值

STL0=tab[key]%256;

TR0=1;

while(temp!

=0x0f)

TR0=0;

P3_5=0;

//跟上面差不多,现在是判断第二排的按键

switch(temp)

key=4;

key=5;

key=6;

key=7;

P3_6=0;

key=8;

key=9;

key=10;

key=11;

P3_7=0;

key=12;

key=13;

key=14;

key=15;

voidt0(void)interrupt1using0

TH0=STH0;

TL0=STL0;

上面是我从网上弄来的,电子琴程序;

其中还存在很多问题,经过研究,自行修改了一些,修改之后明显有了乐感,但还是达不到音乐渐弱的感觉,如果哪位有兴趣的可以共同探讨,本人QQ:

1123658659

下面是我的修改程序;

大家对比学习:

REG52.H>

//#include<

unsignedchari,j,k;

sbitP3_4=P3^4;

sbitP1_0=P1^0;

sbitP3_5=P3^5;

sbitP3_6=P3^6;

sbitP3_7=P3^7;

//unsignedintcodetable[]={63628,63835

TMOD=0x11;

ET1=1;

k=0;

//P1_0=~P1_0;

//P0=table[key];

//TH0=STH0;

//TL0=STL0;

//LLLLLLLL

TH1=0;

TL1=0;

TR1=1;

//for(k=50;

k>

k--)

//for(i=100;

//for(j=100;

//LLLLLLL

//TR0=0;

//P1_0=1;

//&

&

//for(k=25;

k--)

//&

voidt1(void)interrupt3using0//用另一个中断控制上面的中断

k++;

if(k==12){//通过改变k可以使节拍变化

TR1=0;

大家对比学习,如有不妥之处或有更好的欢迎指正:

可至邮件1123658659@

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

当前位置:首页 > 高中教育 > 语文

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

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