AT89S51单片机试验及实践教程之电子琴Word文档下载推荐.docx

上传人:b****5 文档编号:16332663 上传时间:2022-11-23 格式:DOCX 页数:20 大小:68.52KB
下载 相关 举报
AT89S51单片机试验及实践教程之电子琴Word文档下载推荐.docx_第1页
第1页 / 共20页
AT89S51单片机试验及实践教程之电子琴Word文档下载推荐.docx_第2页
第2页 / 共20页
AT89S51单片机试验及实践教程之电子琴Word文档下载推荐.docx_第3页
第3页 / 共20页
AT89S51单片机试验及实践教程之电子琴Word文档下载推荐.docx_第4页
第4页 / 共20页
AT89S51单片机试验及实践教程之电子琴Word文档下载推荐.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

AT89S51单片机试验及实践教程之电子琴Word文档下载推荐.docx

《AT89S51单片机试验及实践教程之电子琴Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《AT89S51单片机试验及实践教程之电子琴Word文档下载推荐.docx(20页珍藏版)》请在冰豆网上搜索。

AT89S51单片机试验及实践教程之电子琴Word文档下载推荐.docx

64934

#2RE#

311

63928

中6LA

880

64968

低3M

330

64021

#6

932

64994

低4FA

349

64103

中7SI

988

65030

370

64185

高1DO

1046

65058

低5SO

392

64260

#1DO#

1109

65085

415

64331

高2RE

1175

65110

低6LA

440

64400

#2RE#

1245

65134

466

64463

高3M

1318

65157

低7SI

494

64524

高4FA

1397

65178

中1DO

523

64580

1480

65198

554

64633

高5SO

1568

65217

中2RE

587

64684

1661

65235

622

64732

高6LA

1760

65252

中3M

659

64777

1865

65268

中4FA

698

64820

高7SI

1967

65283

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

低音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调)

曲调值

DELAY

调4/4

125ms

62ms

调3/4

187ms

94ms

调2/4

250ms

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

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

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

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

5.程序框图

6.汇编源程序

KEYBUFEQU30H

STH0EQU31H

STL0EQU32H

TEMPEQU33H

ORG00H

LJMPSTART

ORG0BH

LJMPINT_T0

START:

MOVTMOD,#01H

SETBET0

SETBEA

WAIT:

MOVP3,#0FFH

CLRP3.4

MOVA,P3

ANLA,#0FH

XRLA,#0FH

JZNOKEY1

LCALLDELY10MS

CJNEA,#0EH,NK1

MOVKEYBUF,#0

LJMPDK1

NK1:

CJNEA,#0DH,NK2

MOVKEYBUF,#1

NK2:

CJNEA,#0BH,NK3

MOVKEYBUF,#2

NK3:

CJNEA,#07H,NK4

MOVKEYBUF,#3

NK4:

NOP

DK1:

MOVA,KEYBUF

MOVDPTR,#TABLE

MOVCA,@A+DPTR

MOVP0,A

MOVB,#2

MULAB

MOVTEMP,A

MOVDPTR,#TABLE1

MOVSTH0,A

MOVTH0,A

INCTEMP

MOVA,TEMP

MOVSTL0,A

MOVTL0,A

SETBTR0

DK1A:

MOVA,P3

JNZDK1A

CLRTR0

NOKEY1:

CLRP3.5

JZNOKEY2

CJNEA,#0EH,NK5

MOVKEYBUF,#4

LJMPDK2

NK5:

CJNEA,#0DH,NK6

MOVKEYBUF,#5

NK6:

CJNEA,#0BH,NK7

MOVKEYBUF,#6

NK7:

CJNEA,#07H,NK8

MOVKEYBUF,#7

NK8:

DK2:

DK2A:

JNZDK2A

NOKEY2:

CLRP3.6

JZNOKEY3

CJNEA,#0EH,NK9

MOVKEYBUF,#8

LJMPDK3

NK9:

CJNEA,#0DH,NK10

MOVKEYBUF,#9

NK10:

CJNEA,#0BH,NK11

MOVKEYBUF,#10

NK11:

CJNEA,#07H,NK12

MOVKEYBUF,#11

NK12:

DK3:

DK3A:

JNZDK3A

NOKEY3:

CLRP3.7

JZNOKEY4

CJNEA,#0EH,NK13

MOVKEYBUF,#12

LJMPDK4

NK13:

CJNEA,#0DH,NK14

MOVKEYBUF,#13

NK14:

CJNEA,#0BH,NK15

MOVKEYBUF,#14

NK15:

CJNEA,#07H,NK16

MOVKEYBUF,#15

NK16:

DK4:

DK4A:

JNZDK4A

NOKEY4:

LJMPWAIT

DELY10MS:

MOVR6,#10

D1:

MOVR7,#248

DJNZR7,$

DJNZR6,D1

RET

INT_T0:

MOVTH0,STH0

MOVTL0,STL0

CPLP1.0

RETI

DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H

DB7FH,6FH,77H,7CH,39H,5EH,79H,71H

TABLE1:

DW64021,64103,64260,64400

DW64524,64580,64684,64777

DW64820,64898,64968,65030

DW65058,65110,65157,65178

END

7.C语言源程序

#include<

AT89X51.H>

unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};

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_4=0;

temp=P3;

temp=temp&

0x0f;

if(temp!

=0x0f)

for(i=50;

i>

0;

i--)

for(j=200;

j>

j--);

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!

TR0=0;

P3_5=0;

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;

unsignedcharcodemusic_tab[]={

0x30,0x2B,0x26,0x10,//格式为:

频率常数,节拍常数,频率常数,节拍常数,

0x20,0x1C,0x18,0x18,

};

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

当前位置:首页 > 考试认证 > 公务员考试

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

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