单片机电子琴Word格式.docx

上传人:b****2 文档编号:1012971 上传时间:2023-04-30 格式:DOCX 页数:15 大小:18.14KB
下载 相关 举报
单片机电子琴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_第6页
第6页 / 共15页
单片机电子琴Word格式.docx_第7页
第7页 / 共15页
单片机电子琴Word格式.docx_第8页
第8页 / 共15页
单片机电子琴Word格式.docx_第9页
第9页 / 共15页
单片机电子琴Word格式.docx_第10页
第10页 / 共15页
单片机电子琴Word格式.docx_第11页
第11页 / 共15页
单片机电子琴Word格式.docx_第12页
第12页 / 共15页
单片机电子琴Word格式.docx_第13页
第13页 / 共15页
单片机电子琴Word格式.docx_第14页
第14页 / 共15页
单片机电子琴Word格式.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

单片机电子琴Word格式.docx

《单片机电子琴Word格式.docx》由会员分享,可在线阅读,更多相关《单片机电子琴Word格式.docx(15页珍藏版)》请在冰点文库上搜索。

单片机电子琴Word格式.docx

简谱码(T值)

低1DO 

262 

63628 

#4FA# 

740 

64860

#1DO# 

277 

63731 

中5SO 

784 

64898

低2RE 

294 

63835 

#5SO# 

831 

64934

#2RE# 

311 

63928 

中6 

880 

64968

低3M 

330 

64021 

#6# 

932 

64994

低4FA 

349 

64103 

中7SI 

988 

65030

370 

64185 

高1DO 

1046 

65058

低5SO 

392 

64260 

1109 

65085

415 

64331 

高2RE 

1175 

65110

低6LA 

440 

64400 

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

建立音乐的步骤:

1. 

先把乐谱的音符找出,然后按照上表建立T值表的顺序。

2. 

把T值表建立在TABLE1,构成发音符的计数值放在“TABLE”。

3. 

简谱码为一个字节,节拍为一个字节,音符的节拍码放在“TABLE”处。

4. 

节拍时间的设定,如果1拍的时间是0.4秒,1/4拍的时间就是0.1秒,只要设定延时时间就可以求得节拍的时间。

假如1/4拍为1DELAY,则1拍应为4DELAY。

以此类推。

所以只要求得1/4拍的时间DELAY时间,其余的节拍就是它的倍数。

2硬件电路图

如图,按键1—7表示发中音1—7,按键8表示唱一首完整的歌曲,当在唱歌时需要进行按键发音则按一下按键9即可。

LM386为音频小功放,输出到扬声器。

晶振选择12MZ,采用开关复位方式。

LM386功放电路参阅《8051单片机实践与应用》。

745

单片机电子琴设计

软件设计

1.延时程序的编写

1/4拍的延时时间=187毫秒,这个时间由歌曲本身来决定,歌曲不同这个1/4拍的时间也不同,这里1/4拍的时间就取为187毫秒。

DELAY:

MOV 

R7,#02

D2:

R4,#187

D3:

R3,#248

DJNZ 

R3,$

DJNZ 

R4,D3

R7,D2

R5,DELAY

RET

R5表示为1/4拍的倍数。

T值表的建立

T值表建立在TABLE1中:

TABLE1:

DW 

63628,63731,63835,63928,64021,64103

DW 

64185,64260,64331,64400,64463,64524

64580,64633,64684,64732,64777,64820

64860,64898,64934,64968,64994,65030

65058,65085,65110,65134,65157,65178

65198,65217,65235,65252,65268,65283

键盘扫描程序的编写

KEY:

R3, 

#00H 

/R3中的数表示是那个键按下/

JNB 

P2.0, 

LOOP

INC 

R3

JNB 

P2.1, 

P2.2, 

INC 

P2.3, 

P2.4, 

P2.5, 

P2.6, 

JNC 

P2.7, 

SETB 

F0 

/没有键按下则F0=0/

SJMP 

DO

LOOP:

CLR 

/有键按下则F0=1/

DO:

NOP

RET

此程序可以判断是那个键按下,如果有键按下则F0=0,没有键按下则F0=1。

按键数存放在R3中。

这样就可以根据按键来发音了。

如果是按键8按下则表示是要唱一首完整的歌曲。

可以通过设定中断来实现它。

当按键8按下时产生中断,系统马上响应中断进入中断服务程序,进行查表TABLE可以得到歌曲的简谱码和节拍数然后按照歌曲的规律进行下去,这样就可以唱出一首完整的歌曲了。

TABLE表格的建立,,每个音符先编音符码然后编节拍数,音符码和节拍数各占一个字节。

程序如下:

ORG 

0000H

SJMP 

BEGIN

000BH

TIM0

BEGIN:

TMOD, 

#01H 

/设TIMER在MODE1/

IE, 

#82H 

/中断使能/

REPE:

30H, 

/取简谱码指针/

NEXT:

A, 

30H 

/简谱码指针存入A/

DPTR, 

#TABLE

MOVC 

A, 

@A+DPTR

R2, 

/音符码存入R2中/

CJNE 

A,#0FFH,GOOT 

/是否取到了规定的结束码 

“FFH”/

END0

GOOT:

30H

A,@A+DPTR

R5, 

/节拍数存放在R5中/

R2 

/音符码存入A中/

CJNE 

A,#24H,SING 

/取到的音符码是否为“24H”/

CLR 

TR0 

/是,则不发音/

JMP 

D1

SING:

31H, 

/音符码存入31H中/

RL 

A

#TABLE1

MOVC 

A,@DPTR+A 

/找到TABLE1中对应的T值/

MOV 

32H, 

/取到T值的高字节存入32H中/

TH0,A

A,31H

RL 

33H, 

/取到T值的高字节存入33H中/

TL0,A

SETB 

/启动TIMER0/

D1:

CALL 

DELAY

NEXT

END0:

TR0

REPE

TIM0:

PUSH 

ACC

PSW

TH0,32H

TL0,33H

CPL 

P1.0

POP 

RETI 

TABLE:

13H, 

02H, 

24H, 

01H, 

15H, 

04H 

04H, 

18H, 

17H, 

04H

1AH, 

1FH, 

1CH, 

0FFH

END

对于不同的歌曲只要根据歌曲来建立TABLE即可。

上TABLE表是根据生日快乐歌曲建立的。

按键发音的过程,首先进行键盘扫描,判断是那个键按下,记下键数,存入R3中,然后查表得到相应的T值,并载入到定时器0中同时启动定时器,继续进行键盘扫描,判断是否有键按下,有则表示键一直是按下的,继续发音(因为扫描的时间很短最多也只有几十微秒,所以可以认为是同一个键按下的)。

没有则进行循环扫描。

COOM

ORG 

TIMOY

COOM:

TMOD,#01H

IE,#82H

L1:

KEY

JB 

F0, 

L1 

/没有键按下则继续扫描/

A,R3

A,#07H,SOPP

##### 

/这里是为下面两个程序综合准备/

SOPP:

DPTR,#TABLE2

A,@A+DPTR

35H, 

/T值高字节放入35H中/

TH0, 

36H, 

/T值高字节放入36H中/

TL0, 

L2:

L3

L2

L3:

L1

F0

TIMOY:

TH0, 

#35H

TL0, 

#36H

RETI

TABLE2:

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

只要将这两个程序综合起来就可以完成设计要求了,注意因为在这两个程序分开考虑的时候都是用定时器0来完成的。

而综合起来是只要改变其中一个为定时器1即可。

LJMP 

001BH

TIM1

BEGIN:

TMOD,#11H

IE, 

#8AH

REPE 

TH1, 

TL1, 

TR1

TIM1:

TH1, 

TL1, 

A,#0FFH,GOOT/是否取到了规定的结束码 

/取到T值的高字节存入32H中/,

15H04H, 

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

当前位置:首页 > 高等教育 > 教育学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2