帮助进一步讲解这个用c语言编写的世上只有妈妈好的音乐程序

帮助进一步讲解这个用c语言编写的世上只有妈妈好的音乐程序,第1张

原袜旅来的链缺樱接,失效了。

http://blog.163.com/asm_c/blog/static/248203113200910229450995/

看这个吧伏好丛。

//=转自人家。。

SPEAKER EQU P2.0 定义喇叭驱动口

ORG 0000H 伪地址

LJMP MAIN 长跳转,执行Main函数

ORG 000BH

LJMP DSQT0

MAIN: MOV SP,#50H 向SP写入50

MOV TMOD,#01H 定时器设置

MOV TH0,#0F8H 低音1-261HZ;定时器高旅缓位初值装入

MOV TL0,#39H 定时器低位初值装入

SETB EA 允许中断

SETB ET0 在EA打开的前提下,打开T0定时器中断

CLR TR0 不启用T0计数器/定时器LOOP: NOP 开始循环播放了。程序不完整

-------------------------------

1-|6. 5 3 5 | 第一段

LCALL DY6 长跳转到拆闷模低音6标号那里,程序不完整,没有写出来。以罩返下同理

SETB TR0 开始启用T0计数器/定时器

LCALL DEL11

LCALL DEL12

LCALL ZY5

LCALL DEL12

LCALL ZY3

LCALL DEL11

LCALL ZY5

LCALL DEL11

-----------------------

2-|1 6 5 6- | ;第二段

LCALL GY1

SETB TR0

LCALL DEL11

LCALL ZY6

LCALL DEL12

LCALL ZY5

LCALL DEL12

LCALL ZY6

LCALL DEL11

LCALL DEL11

-----------------------

3-|3 5 6 5 3 |

LCALL ZY3

SETB TR0

LCALL DEL11

LCALL ZY5

LCALL DEL12

LCALL ZY6

LCALL DEL12

LCALL ZY5

LCALL DEL11

LCALL ZY3

LCALL DEL11

-----------------------

4-|1 6 5 3 2- |

LCALL ZY1

SETB TR0

LCALL DEL12

LCALL DY6

LCALL DEL12

LCALL ZY5

LCALL DEL12

LCALL ZY3

LCALL DEL12

LCALL ZY2

LCALL DEL11

LCALL DEL11

-----------------------

5-|2. 3 5 5 6 |

LCALL ZY2

SETB TR0

LCALL DEL11

LCALL DEL12

LCALL ZY3

LCALL DEL12

LCALL ZY5

LCALL DEL11

LCALL ZY5

LCALL DEL12

LCALL ZY6

LCALL DEL12

-----------------------

6-|3 2 1 -|

LCALL ZY3

SETB TR0

LCALL DEL11

LCALL ZY2

LCALL DEL11

LCALL ZY1

LCALL DEL11

LCALL DEL11

-----------------------

7-|5. 3 2 1 6 1 |

LCALL ZY5

SETB TR0

LCALL DEL11

LCALL ZY3

LCALL DEL12

LCALL ZY2

LCALL DEL12

LCALL ZY1

LCALL DEL12

LCALL DY6

LCALL DEL12

LCALL ZY1

LCALL DEL12

-----------------------

8-|5 - - - |

LCALL DY5

SETB TR0

LCALL DEL11

LCALL DEL11

LCALL DEL11

LCALL DEL11

LJMP LOOP 跳转到loop那里重新播放

===========================================

低音音符频率对应16位定时器初值装置子程序

DY1: MOV 30H,#0F8H 低音1-262HZ 把F8放在30的地址里面

MOV 40H,#89H

NOP

RET

DY2: MOV 30H,#0F9H 低音2-294HZ

MOV 40H,#59H

RET

NOP

//每一组,第一个是音阶,就是

do

ri

mi

fa

...,

第二个数字,1:低音,2中音,3高音,第三个,表示拍数,3即3拍,等等

code

unsigned

char

sszymmh[]={

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,

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

}

void

t0int()

interrupt

1

{

//定时器里面让团册speaker根据定时时间开关,产生不同频率的声音,就是上面定义的音节频率

TR0=0

speaker=!speaker

TH0=timer0h

TL0=timer0l

TR0=1

}

delay(time)

//很显然,这就是延时几拍了

//这里很显然,就是计算出每一个音的音阶(包含计算了高低音,每级7个音)

k=sszymmh[i]+7*sszymmh[i+1]-1

timer0h=FREQH[k]

//根据音阶频率,设置定时参数,产生相应频戚或缺高辩率的声音

timer0l=FREQL[k]

time=sszymmh[i+2]

//根据曲谱延时几拍

有问题你追问,满意请采纳


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12561727.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存