A43基于51单片机汇编语言梁祝音乐盒Proteus设计
作者:单片机仿真   类别:51单片机仿真    日期:2026-10-23 09:33:56    阅读:12 次   消耗积分:10 分

image.png

A43基于51单片机汇编语言梁祝音乐盒Proteus设计

用51单片机汇编语言做一个音乐盒,播放《梁祝》片段:每个音符在表里占三个字节——定时器高字节、低字节、音长,定时器1中断翻转P2.0和P2.7推动扬声器,主程序只管按节奏往下走表,走完从头再来。

一、设计实现功能

本设计功能简介:使用51单片机和汇编语言设计一个梁祝音乐盒的proteus仿真,要求以下功能:

1、使用汇编语言编写程序。

2、定时器1工作在方式1,按表中重装值产生不同频率的方波。

3、P2.0、P2.7两路输出驱动扬声器发声。

4、按表循环播放《梁祝》片段,播完自动重头开始。

二、资源汇总

1、仿真文件:Proteus工程,7.8和8.6两个版本都能直接打开。

2、程序文件:main.asm汇编源码,以及编译好的cx.hex。

3、修改日期小工具:购买资料后赠送,用于修改文件创建日期,下载地址在文章最后。

三、设计介绍

拿到压缩包之后先解压,没有解压软件的直接搜"压缩",下载解压软件后先解压文件,再运行仿真和程序。

图1 Proteus仿真总览

仿真原理图

乐谱全部存在TAB这张表里,每三个字节一组:

`asm
TAB: DB 0FAH,15H,08H ;E4,音长8
DB 0FBH,05H,06H ;F4,音长6
DB 0FBH,8CH,02H ;G4,音长2
DB 0FCH,44H,04H ;A4,音长4
DB 0FCH,0ACH,02H ;B4,音长2
...
DB 0FFH,0FFH ;结束标志
`

前两个字节是定时器的重装值,第三个字节是这个音要持续多少个基本单位。查一下表就能看出音高怎么来的:

表值十进制半周期频率音名
0FA15H640211515微秒330HzE4
0FB05H642611275微秒392HzG4
0FB8CH643961140微秒439HzA4
0FC44H64580956微秒523HzC5
0FCACh64684852微秒587HzD5
0FD09H64777759微秒659HzE5
0FD82H64898638微秒784HzG5
0FE22H65058478微秒1046HzC6

规律很明确:重装值 = 65536 - 500000÷频率。想加新歌,按这个公式把简谱上每个音的频率算成重装值填进表里即可。

主循环是一个"取音高、取音长、延时"的三段式:

`asm
LOOP: CLR A
MOVC A,@A+DPTR
MOV R1,A ;高字节
INC DPTR
CLR A
MOVC A,@A+DPTR
MOV R0,A ;低字节
ORL A,R1
JZ XZF ;两个都是0,是休止符
MOV A,R0
ANL A,R1
CJNE A,#0FFH,NEXT ;两个都是FF,是曲子结束
SJMP MAIN ;回到开头重播
NEXT: MOV TH1,R1
MOV TL1,R0
SETB TR1 ;起振
`

这里用了两个巧妙的判断:两个字节相或为0就是休止符(停振但继续走表),两个字节相与等于0FFH就是结束标志(跳回开头)。用数据本身当控制码,表里不用另设标志字节。

音长由第三个字节控制,单位是D130子程序的执行时间。D130是三层循环:内层200次、外层160次,每次4个机器周期,合计128000个机器周期,12MHz下约128毫秒。所以音长值8代表1秒,值2代表0.25秒——曲子里的四分音符填8、八分音符填4、十六分音符填2。

定时器1中断里没有别的活,就是把重装值再写一遍然后翻转两个引脚:

`asm
TIM1: MOV TH1,R1
MOV TL1,R0
CPL P2.0 ;两路同时翻转
CPL P2.7
RETI
`

两路一起翻,是因为仿真里扬声器接在P2.0、P2.7之间做差分驱动,两脚反相,声压翻倍;只接一路也能响,另一路就当备用。

特别注意: 声音发闷或者只有一个音,先查MOV TH1,R1有没有写进中断——方式1不自动重装,漏了这一句会一直响同一个音;曲子放到一半卡住,检查结束标志,两个字节必须都是0FFH才认结束,写成0FFH、00H会被当成正常音符;节奏整体偏慢,D130是按12MHz算的,换成11.0592MHz时基变长,音长要按比例改小;想要音量可调,P2.0外接三极管驱动扬声器,直接带喇叭电流不够;换歌时表尾一定要补0FFH,0FFH,否则程序会顺着往下读到程序区。

四、日期修改

资料中提供修改日期的小工具,购买资料赠送修改文件创建日期的小工具,三个下载地址都在文章最后。

五、资料下载

付费后获取下载链接,直接下载到电脑上,然后解压即可!每个链接前面都配了二维码,手机扫码可以直接跳转。

/

版权所有,转载本站文章请注明出处:proteus单片机
上一篇:A36基于51单片机汇编语言六位数码管时钟Proteus设计
下一篇:A44基于51单片机汇编语言LCD12864简易计算器Proteus设计
${comment['nickname']}   ${comment['createtime']}
  
       
${comment.content}
${reply.nickname} 回复 ${comment.nickname}    ${reply.createtime}
     
  
回复内容:${reply.content}