51单片机汇编语言教程:28课音乐程序设计
51单片机汇编语言音乐程序

01两只老虎NEXT BIT 10H ;定义标志位ORG 0000HJMP MAINORG 000BHJMP TONEORG 001BHJMP BEATORG 0100HMAIN: MOV TMOD,#11HMOV TH0,R2MOV TL0,R3MOV TH1,#3CHMOV TL1,#0B0HMOV R4,#00HMOV DPTR,#TABYD: MOV A,R4 ;取音调数据MOVC A,@A+DPTRMOV R2,AXRL A,#00HJNZ JP ;直接取节拍INC R4CALL PD ;判断指针是否溢出MOV A,R4MOVC A,@A+DPTRMOV R3,AXRL A,#0FFHJZ JPMOV A,R2XRL A,#0FFHJNZ MAINJP: INC R4 ;取节拍数据CALL PDMOV A,R4MOVC A,@A+DPTRMOV R5,ASETB EASETB ET0SETB ET1SETB TR0SETB TR1SETB NEXTJB NEXT,$INC R4CALL PDJMP YDPD: MOV A,R4CJNE A,#00H,L1INC DPHL1: RET;音调产生子程序TONE: CPL P2.0MOV TH0,R2MOV TL0,R3RETI;节拍产生子程序BEAT: DJNZ R5,L2MOV TH1,#3CHMOV TL1,#0B0HL3: RETIL2: CLR TR0CLR TR1CLR NEXTJMP L3;两只老虎音符表TAB: DB0FBH,0F9H,08H,0FCH,066H,08H,0FCH,0C7H,08H,0FBH,0F9H,0 8HDB0FBH,0F9H,08H,0FCH,066H,08H,0FCH,0C7H,08H,0FBH,0F9H,0 8HDB0FCH,0C7H,08H,0FCH,0F3H,08H,0FDH,4AH,10H,0FCH,0C7H,0 8HDB0FCH,0F3H,08H,0FDH,4AH,08H,0FDH,4AH,04H,0FDH,95H,04HDB0FDH,4AH,04H,0FCH,0F3H,04H,0FCH,0C7H,08H,0FBH,0F9H,08 HDB0FDH,4AH,04H,0FDH,95H,04H,0FDH,4AH,04H,0FCH,0F3H,04H DB0FCH,0C7H,08H,0FBH,0F9H,08H,0FCH,66H,08H,0FAH,93H,08H DB0FBH,0F9H,08H,00H,08H,0FCH,66H,04H,0FAH,93H,08H DB 0FBH,0F9H,08H,00H,10H,0FFH,0FFHEND02祝你平安ORG 0000HLJMP STARTORG 000BHINC 20H ;中断服务,中断计数器加1MOV TH0,#0D8HMOV TL0,#0EFH ;12M晶振,形成10毫秒中断RETISTART:MOV SP,#50HMOV TH0,#0D8HMOV TL0,#0EFHMOV TMOD,#01HMOV IE,#82HMUSIC0:NOPMOV DPTR,#DAT ;表头地址送DPTRMOV 20H,#00H ;中断计数器清0MOV B,#00H ;表序号清0MUSIC1:NOPCLR AMOVC A,@A+DPTR ;查表取代码JZ END0 ;是00H,则结束CJNE A,#0FFH,MUSIC5LJMP MUSIC3MUSIC5:NOPMOV R6,AINC DPTRMOV A,BMOVC A,@A+DPTR ;取节拍代码送R7MOV R7,ASETB TR0 ;启动计数MUSIC2:NOPCPL P3.3MOV A,R6MOV R3,ALCALL DELMOV A,R7CJNE A,20H,MUSIC2 ;中断计数器(20H)=R7否?;不等,则继续循环MOV 20H,#00H ;等于,则取下一代码INC DPTR; INC BLJMP MUSIC1MUSIC3:NOPCLR TR0 ;休止100毫秒MOV R2,#0DHMUSIC4:NOPMOV R3,#0FFHLCALL DELDJNZ R2,MUSIC4INC DPTRLJMP MUSIC1END0:NOPMOV R2,#64H ;歌曲结束,延时1秒后继续MUSIC6:MOV R3,#00HLCALL DELDJNZ R2,MUSIC6LJMP MUSIC0DEL:NOPDEL3:MOV R4,#02HDEL4:NOPDJNZ R4,DEL4NOPDJNZ R3,DEL3RETNOPDAT:db26h,20h,20h,20h,20h,20h,26h,10h,20h,10h,20h,80h,26h,20h,30h,20 hdb30h,20h,39h,10h,30h,10h,30h,80h,26h,20h,20h,20h,20h,20h,1ch,20 hdb20h,80h,2bh,20h,26h,20h,20h,20h,2bh,10h,26h,10h,2bh,80h,26h,20 hdb30h,20h,30h,20h,39h,10h,26h,10h,26h,60h,40h,10h,39h,10h,26h,20 hdb30h,20h,30h,20h,39h,10h,26h,10h,26h,80h,26h,20h,2bh,10h,2bh,10 hdb2bh,20h,30h,10h,39h,10h,26h,10h,2bh,10h,2bh,20h,2bh,40h,40h,20 hdb20h,10h,20h,10h,2bh,10h,26h,30h,30h,80h,18h,20h,18h,20h,26h,20 hdb20h,20h,20h,40h,26h,20h,2bh,20h,30h,20h,30h,20h,1ch,20h,20h,20 hdb20h,80h,1ch,20h,1ch,20h,1ch,20h,30h,20h,30h,60h,39h,10h,30h,10h db20h,20h,2bh,10h,26h,10h,2bh,10h,26h,10h,26h,10h,2bh,10h,2bh,80 hdb18h,20h,18h,20h,26h,20h,20h,20h,20h,60h,26h,10h,2bh,20h,30h,20 hdb30h,20h,1ch,20h,20h,20h,20h,80h,26h,20h,30h,10h,30h,10h,30h,20 hdb39h,20h,26h,10h,2bh,10h,2bh,20h,2bh,40h,40h,10h,40h,10h,20h,10 hdb 20h,10h,2bh,10h,26h,30h,30h,80h,00HEND03生日歌ORG 0000HJMP STARTORG 000BHJMP TIM0ORG 0030HSTART:MOV TMOD,#01HMOV IE,#82HSTART0:MOV 30H,#00H NEXT: MOV A,30HMOV DPTR,#TABLEMOVC A,@A+DPTRMOV R2,AJZ END0ANL A,#0FHMOV R5,AMOV A,R2SWAP AANL A,#0FHJNZ SINGCLR TR0JMP D1SING: DEC AMOV 22H,ARL AMOV DPTR,#TABLE1MOVC A,@A+DPTRMOV TH0,AMOV 21H,AMOV A,22HRL AINC AMOVC A,@A+DPTRMOV TL0,AMOV 20H,ASETB TR0D1: CALL DELAYINC 30HJMP NEXTEND0: CLR TR0JMP START0 TIM0: PUSH ACCPUSH PSWMOV TH0,21HMOV TL0,20HCPL P3.7POP PSWPOP ACCRETIDELAY: MOV R7,#02D2: MOV R4,#187D3: MOV R3,#248DJNZ R3,$DJNZ R4,D3DJNZ R7,D2DJNZ R5,DELAYRETTABLE1:DW 64260,64400,64524,64580DW 64684,64777,64820,64898DW 64968,65030,65058,65110DW 65157,65178,65217 TABLE:DB 82H,01H,81H,94H,84HDB 0B4H,0A4H,04HDB 82H,01H,81H,94H,84HDB 0C4H,0B4H,04HDB 82H,01H,81H,0F4H,0D4HDB 0B4H,0A4H,94HDB 0E2H,01H,0E1H,0D4H,0B4H DB 0C4H,0B4H,04HDB 82H,01H,81H,94H,84HDB 0B4H,0A4H,04HDB 82H,01H,81H,94H,84HDB 0C4H,0B4H,04HDB 82H,01H,81H,0F4H,0D4HDB 0B4H,0A4H,94HDB 0E2H,01H,0E1H,0D4H,0B4HDB 0C4H,0B4H,04HDB 00HEND04八月桂花香ORG 0000HLJMP STARTORG 000BHINC 20H ;中断服务,中断计数器加1MOV TH0,#0D8HMOV TL0,#0EFH ;12M晶振,形成10毫秒中断RETISTART:MOV SP,#50HMOV TH0,#0D8HMOV TL0,#0EFHMOV TMOD,#01HMOV IE,#82HMUSIC0:NOPMOV DPTR,#DAT ;表头地址送DPTRMOV 20H,#00H ;中断计数器清0MUSIC1:NOPCLR A ;A清零MOVC A,@A+DPTR ;查表取代码JZ END0 ;是00H,则结束CJNE A,#0FFH,MUSIC5 ;如果是休止符,往下执行LJMP MUSIC3MUSIC5:NOPMOV R6,A ;R6=18H音符的频率INC DPTR ;DPTR加一MOV A,#0MOVC A,@A+DPTR ;取节拍代码送R7MOV R7,A ;R7=30H音符发音的时间SETB TR0 ;启动计数MUSIC2:NOPCPL P2.3 ;P2.3是音乐输出引脚MOV A,R6MOV R3,A ;籖3=R6=18HLCALL DELMOV A,R7CJNE A,20H,MUSIC2 ;中断计数器(20H)=R7否? ;不等,则继续循环MOV 20H,#00H ;等于,则取下一代码INC DPTRLJMP MUSIC1MUSIC3:NOP ;休止100毫秒CLR TR0MOV R2,#0DH ;R2=13MUSIC4:NOPMOV R3,#0FFH ;R3=255LCALL DELDJNZ R2,MUSIC4INC DPTRLJMP MUSIC1END0:NOPMOV R2,#0FFH ;歌曲结束,延时1秒后继续MUSIC6:MOV R3,#00HLCALL DELDJNZ R2,MUSIC6LJMP MUSIC0DEL:NOPDEL3:MOV R4,#02HDEL4:NOPDJNZ R4,DEL4NOPDJNZ R3,DEL3RETNOPDAT:DB 18H, 30H, 1CH, 10H DB 20H, 40H, 1CH, 10H DB 18H, 10H, 20H, 10H DB 1CH, 10H, 18H, 40H DB 1CH, 20H, 20H, 20H DB 1CH, 20H, 18H, 20H DB 20H, 80H, 0FFH, 20H DB 30H, 1CH, 10H , 18H DB 20H, 15H, 20H , 1CH DB 20H, 20H, 20H , 26H DB 40H, 20H , 20H , 2BH DB 20H, 26H, 20H , 20H DB 20H, 30H , 80H , 0FFH DB 20H, 20H, 1CH , 10H DB 18H, 10H, 20H , 20H DB 26H, 20H , 2BH , 20H DB 30H, 20H , 2BH , 40H DB 20H, 20H , 1CH , 10H DB 18H, 10H, 20H, 20H DB 26H, 20H , 2BH, 20H DB 30H, 20H, 2BH , 40H DB 20H, 30H, 1CH , 10H DB 18H, 20H , 15H , 20H DB 1CH, 20H , 20H , 20H DB 26H, 40H, 20H , 20HDB 2BH, 20H, 26H , 20HDB 20H, 20H, 30H , 80HDB 20H, 30H, 1CH , 10HDB 20H, 10H, 1CH , 10HDB 20H, 20H, 26H , 20HDB 2BH, 20H, 30H , 20HDB 2BH, 40H, 20H , 15HDB 1FH, 05H, 20H , 10HDB 1CH, 10H, 20H , 20HDB 26H, 20H, 2BH , 20HDB 30H, 20H, 2BH , 40HDB 20H, 30H, 1CH , 10HDB 18H, 20H , 15H , 20HDB 1CH, 20H , 20H , 20HDB 26H, 40H, 20H , 20HDB 2BH, 20H, 26H , 20HDB 20H, 20H, 30H, 30HDB 20H, 30H, 1CH, 10HDB 18H, 40H, 1CH, 20HDB 20H, 20H, 26H, 40HDB 13H, 60H, 18H , 20HDB 15H, 40H, 13H , 40HDB 18H, 80H, 00Hend05兰花草SPK EQU P3.3 ; 蜂鸣器所在端口ORG 0000HJMP STARTSTART:MOV R3,#00HNEXT:MOV A,R3MOV D PTR,#TABLEMOVC A,@A+DPTRJZ STARTMOV R7,AINC R3MOV A,R3MOVC A,@A+DPTRMOV R2,AACALL SONGINC R3SJMP N EXT;================================================ ===============================;=== 歌曲播放子程序===SONG:MOV A,R2 ; 取出节拍RL AJNZ KEEPMOV A,#01HKEEP:MOV R2,AREPEAT:ACALL EIGHTHDJNZ R2,REPEATRET;================================================ ===============================;=== 产生1/8拍延时子程序===EIGHTH:MOV A,R7 ; 查表取出廷时参数,保存到R4MOV D PTR,#DELAY_TMOVC A,@A+DPTRMOV R4,AMOV A,R7 ; 查表取出1/8拍周期数,保存到R5MOV D PTR,#S_PARAMOVC A,@A+DPTRMOV R5,ANEXTCYC:ACALL SOUNDDJNZ R5,NEXTCYCRET;================================================ ===============================;=== 发声子程序===SOUND:SETB SPKACALL SDELAYCLR SPKACALL SDELAYRET;================================================ ===============================;=== 延时子程序===SDELAY:MOV A,R4 ; 廷时值在R4内MOV R0,AXL2:MOV R1,#03HDL1:NOPDJNZ R1,DL1DJNZ R0,XL2RET;================================================ ===============================;=== 1/8拍周期表===S_PARA:DS 1DHDB 15H,16H,00DB 19H,00H,1CH,00H,1FH,21H,00H,25HDB 00H,29H,2CH,00H,31H,34H,37H,00HDB 3EH,41H,00H,49H,00H,52H,57H,00HDB 62H;================================================ ===============================;=== 延时参数表===DELAY_T:DS 1DHDB 7EH,77H,00HDB 6AH,00H,5EH,00H,54H,4FH,00H,46HDB 00H,3FH,3BH,00H,35H,32H,2FH,00HDB 2AH,27H,00H,23H,00H,1FH,1DH,0C0HDB 1AH;================================================ ===============================;=== 歌曲表===TABLE:DW 2202H,2902H,2902H,2902H,2906H,2702H ;我从山中来DW 2502H,2702H,2502H,2402H,2208H ;带着兰花草DW 2E02H,2E02H,2E02H,2E02H,2E06H,2C02H ;种在小园中DW 2902H,2C02H,2D02H,2A02H,2908H ;祈祷花开早DW 2902H,2E02H,2E02H,2C02H,2906H,2702H ;一日看三回DW 2502H,2702H,2502H,2402H,2206H,1D02H ;看得花时过DW 1D02H,2502H,2502H,2402H,2206H,2902H ;兰花却依然DW 2702H,2502H,2402H,2002H,2208H ;苞也无一个DW 0000H ;END。
革命歌曲演奏程序《汇编语言程序设计》课程设计报告

革命歌曲演奏程序《汇编语言程序设计》课程设计报告题目: 革命歌曲演奏程序初始条件:理论:学完“汇编语言程序设计”、“课程计算机概论”、“高级语言程序设计”和“数字逻辑”。
实践:计算机学院科学系实验中心提供计算机和软件平台。
如果自己有计算机可以在其上进行设计。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)(1)编写用键盘选择计算机演奏歌曲的程序,歌曲清单至少包括3首。
(2)程序应有操作提示、输入和输出,界面追求友好,最好是菜单式的界面。
(3)设计若干用例(测试数据),上机测试程序并分析(评价)所设计的程序。
(4)设计报告格式按附件要求书写。
课程设计报告书正文的内容应包括:在正文第一行写课程设计题目;1.需求说明(要求、功能简述)或问题描述;2.设计说明(简要的分析与概要设计);3.详细的算法描述;4.源程序与执行结果(含测试方法和测试结果);5.使用说明;6.总结,包括设计心得(设计的特点、不足、收获与体会)和展望(该程序进一步改进扩展的设想)。
时间安排:设计时间一周:周1:查阅相关资料。
周2:系统分析,设计。
周3~4:编程并上机调试周5:撰写课程设计报告。
设计验收安排:21周星期五8:00起到计算机学院科学系实验中心进行上机验收。
设计报告书收取时间:21周的星期五下午5:00之前。
指导教师签名: 2007年1月18日系主任(或责任教师)签名: 2007年1月 18日革命歌曲演奏程序1 需求说明这次《汇编语言程序设计》课程设计要求通过一个较大型实用程序的设计与实现,综合运用所学知识,加深理解和掌握。
同时培养学生分析问题和解决问题的能力,以及自学能力。
我选择的题目是《革命歌曲演奏程序》,要求完成的主要任务有:(5)编写用键盘选择计算机演奏歌曲的程序,歌曲清单至少包括3首。
(6)程序应有操作提示、输入和输出,界面追求友好,最好是菜单式的界面。
(7)设计若干用例(测试数据),上机测试程序并分析(评价)所设计的程序。
单片机音乐程序的编写方法_江苏豆小平

智能电子版电子报/2003年/12月/14日/第012版/单片机音乐程序的编写方法江苏豆小平利用单片机奏乐的硬件电路十分简单。
本文从单片机的基本发音实验出发,谈谈音乐程序的设计原理,并给出具体实例。
1.基本发音实验声音的频谱范围约在几十赫兹~几千赫兹,若用程序控制单片机的I/O口,使其输出一定频率的矩形波,接上喇叭或蜂鸣器就会发出一定频率的声音,若利用延时控制高低电平持续的时间,改变输出频率,也就改变了音调。
例如,产生200H z的音频信号,按图1接入喇叭或蜂鸣器,实验程序为:M USIC:CPL P2.4M OV R3,#7DHLCALL DELLJM P M USICDEL:NOPDEL1:M OV R4,#02HDEL2:NOPDJNZ R4,DEL2NOPDJNZ R3,DEL1RETDEL是延时程序,R3中存放延时常数。
当R3为1时,延时时间约20L s,200H z音频,周期为1/200秒,即5ms。
当P2.4输出的方波高、低电平的时间各为2.5ms,即R3取值为2500/20=125=7DH时,就可以发出200H z的音调。
2.乐曲的编码知道了1、2、3、4、5、6、7等音符的频率,再经过计算就可以求出实验程序中的R3的值,改变R3可以发出不同的音调,各音符的频率与R3的值的对应关系见表1(C调)。
在编写乐曲时,每一音符对应一个确定的频率。
此外,我们还要知道音符的节拍。
音符的节拍可以用定时器T0来控制。
向T0送不同的初值可产生不同的节拍,如某首歌曲的节奏为每分钟50拍,即1.2秒一拍。
据此可算出别的节拍时间及时间常数(见表2)。
知道了这些,我们就可以先将歌曲的简谱变为频率码和节拍码,然后编程了。
5生日快乐歌6的简谱和频率码的对应关系见表3。
再加上与节拍码的对应关系如下表:DB20H,25H,20H,10H,1CH,40H,20H, 40H,18H,40H,19H,80HDB20H,25H,20H,10H,1CH,40H,20H, 40H,15H,40H,18H,80H,,,,3.音乐程序的实现光有编码还不行,由于T0的最大定时时间为13ms,不可能用改变T0初值产生所有的节拍。
51单片机汇编程序设计PPT课件

5、赋值伪指令
格式汇编指令
格式: END END指示源程序到结束,常将其放在汇编语言源 程序的末尾。
3.3.3 汇编语言程序设计过程
1、分析任务,确定算法或解题思路 2、根据算法和解决思路画出程序流程图 流程图是由一些框图和流程线组合而成:
【例3-10】 求单字节有符号二进制数的补码。
编程如下:
CMPT:
MOV A , 30H
JNB ACC.7 , NCH
;(A)≥0,不需要转换
MOV C , ACC.7 ;保存符号
MOV 10H , C
CPL A
ADD A , #1
MOV C , 10H
MOV ACC.7 , C ;恢复符号
NCH: END
3.3.2 伪指令
1、定位伪指令 格式:ORG n 2、定义字节伪指令 格式:标号:DB X1, X2, ……Xn 此伪指令的功能是把Xi存入从标号开始连续的单元中。 3、定义双字节伪指令 格式:标号:DW X1,X2,……Xn 此伪指令的功能是把Xi存入从标号开始的连续单元中。
4、预留存贮区伪指令
解:编程说明: 内部数据区首址: R0←30H 外部数据区首址: DPTR←2000H 循环次数: R2←32H 程序流程如图3-9所示。
参考程序如下: START: MOV R0 , #30H MOV DPTR , #2000H MOV R2 , #32H
LOOP: MOV A , @R0 MOVX @DPTR , A INC R0 INC DPTR DJNZ R2 , LOOP END
MOV R2 , #10H MOV R4 , #00H MOV R5 , #00H
51单片机:音乐盒设计控制程序(音乐汇编) - 日月环的日志 - 网易博客

db 08h,04h,05h,04h,08h,04h,08h,04h
end
;------------------------------------------------------------------------------------------------------
yfh equ 30h ;音符高位
yfl equ 31h ;音符低位
;低1DO 262 1908 f88c 中1DO 523 0956 fc44 高1DO 1046 0478 fe22
;#1DO# 277 1805 #1DO# 554 0903 #DO# 1109 0451
db 08h,04h,09h,04h,0ah,04h,0bh,04h,0ch,04h,0dh,04h,0eh,04h
db 0fh,04h,10h,04h,11h,04h,12h,04h,13h,04h,14h,04h,15h,06h
db 00h*/
/*乐曲---心太软
db 0ch,02h,0ch,02h,0ah,02h,0dh,04h,0ch,02h,0ah,06h,0ah,04h,09h,02h,08h,02h,08h,04h,08h,02h
db 0fh,02h,0fh,02h,0fh,02h,0fh,02h,0dh,02h,0ch,04h,0ah,02h,0dh,02h,0ch,06h*/
mov yyd,a
lcall delay
nop
ljmp music
delay:
单片机音乐播放器程序设计(DOC)

实验报告 51 单片机设计音乐播放器随着科技的发展,音乐播放功能随处都会用到,如,在开发儿童智力的玩具 中,等等。
目前单片机以其体积小、价格低、编程灵活等特点在这一领域独领风 骚。
、系统功能要求: 1、具有自动循环播放所有乐曲功能。
2、具有单独选择某首乐曲循环播放功能。
3、具有顺序查找乐曲循环播放功能。
4、具有停止播放功能。
二、系统整体方案提示:利用AT89S52产生乐曲音符,再把乐普翻译成计算机音乐语言,由单片机进 行信息处理,在经过信号放大,由喇叭放出乐曲声。
由于音符和节拍是由计算机 产生的,所以发音音符和节拍准确。
单独选择某首乐曲循环播放:按下 K4~K7键即可实现。
系统整体方案框图如下:利用 AT89C51产生乐曲音符,再把乐普翻译成绩 算计音乐语言,由单片机进行信息处理,在经过信号放大,由喇叭放出乐曲声。
由于音符和节拍是由计算机产生的,所以发音音符和节拍准确。
整体框图如图 图一所示。
1、 循环播放:按下 K1 键即可实现。
2、 顺序查找乐曲循环播放:按下 K2键即可实现。
3、 停止播放:按下K3键即可实现。
4、三、硬件系统原理图: 硬件系统原理图如下页图:1)单片机:选择 AT89S52,由于AT89S52是一个低电压,高性能 CMOS 位单 片机,内含4k bytes 的可反复擦鞋的制度程序存储器(PERO )和128bytes 的随机存取数据存储器(RAM ,器件采用ATME 公司的高密度、非易失性存 储技术生产,兼容标准MC — 51指令系统,片内置通用8位中央处理器和Flash 存储单元,内置功能强大的微型计算机 AT89S52提供了高性价比的解决方案。
其内部有足够本系统对存储器的要求,不用外扩。
2)按键控制电路:如图由P1 口作为输入,构成矩阵式按键接口方式。
3)输出控制:此部分的放大电路简单容易实现。
主要采用了一个小功率PNP 型硅管9012,利用“分压偏置式工作点稳定直 流通路”,达到了对静态工作点的稳定。
汇编语言课程设计 音乐点播程序

一.背景分析及意义随着计算机的不断更新发展,计算机在各个领域的应用越来越多,更多的软件开发人员和相关技术人员在程序设计的过程中应用汇编程序或编制汇编语言。
而汇编语言做为计算机专业大学生必修之课,每个做为本专业的学生对汇编的理解和学习就显的尤为重要。
汇编语言是计算机能够提供给用户使用的最快而又最好最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言。
因而,对程序的空间和时间要求很高的场合,汇编语言的应用就显的必不可少了,一些直接控制硬件的应用场合,则更是非用汇编语言不可了。
这次课程设计是在学习汇编语言与实践相结合的一次综合应用。
通过具体的问题分析、设计、调试、运行程序。
在实际问题中锻炼提高自己,增加了对本门课程内容的理解,锻炼了动手能力。
就这个程序具体而言:知道了音调与频率和时间的关系,就可以按照乐曲的曲谱将每个音符的频率和持续时间定义成两个数据表;然后编写程序依次取出表中的频率值和时间值,调用GENSOUNDF程序发出各种声音。
这个程序最终通过菜单所提示的信息选取所要欣赏的音乐,是执行此程序后,会很有速且有效的使扬声器接通并发出音频为896 Hz的声音。
二.总体设计思想ROM BIOS 中的BEEP子程序能根据BL中给出的时间计数植控制8254定时器,产生持续时间计数值控制8254定时器,产生持续时间为1个或几个0.5 秒,频率为896Hz的声音。
通过对BEEP的修改,可产生任一频率的声音。
用汇编语言写的GENSOUNG,能使Pc 机发出指定频率和指定延时的声音。
它是一个很好的通用发声程序。
组成乐曲的每个音符的频率值和持续时间定义成两个数据表,然后编程依次取出表中的频率值和时间值,调用GENSOUND程序发出各种声音。
本程序就是通过GENSOUNG程序演奏乐曲的例子。
该乐曲点播程序由一个乐曲点播主程序和五个子程序组成。
(1)歌曲设置程序;(2)打开另一个显示窗口程序;(3)接收键盘输入程序;(4)返回程序;(5)发声程序。
《音乐程序编制》PPT课件

C0,N8,E0,N8,D0,N1,END,END}h;
9
main(){
int note=0, fre , dur , control;
clock_t goal;
while(song[note]!=END){
fre=song[note];
dur=song[note+1];
if(kbhit()) break;
C2=1047,D2=1175,E2=1319,F2=1397,G2=1568,A2=1760,B2=1976
};
typedef enum NOTES SONG;
SONG song[]={D0,N4,E0,N8,D0,N8,C0,N4,A10,N4,G10,N8,E10,N8,
G10,N8,A10,N8,C0,N2,A10,N4,A10,N8,C0,N8,G10,N8,A0,N8,
G0,N8,F0,N2,G0,N2,A0,N4,G0,N8,E0,N8,D0,N8,E0,N8,C0,N8,
A10,N8,D0,N2,E0,N4,G0,N8,E0,N8,G0,N4,E0,N4,G10,N8,E10,N8,
G10,N8,A10,N8,C0,N4,A10,N4,A10,N8,C0,N8,D0,N8,A10,N8,
用法: #include <dos.h>
unsigned char b;
…
b = inportb(端口地址);
h
3
8位端口输出函数 outportb( )
函数型:
void outportb(int portid ,unsigned char value);
功能:向地址为 portid 的8位端口输出一个字节 (8位),其值为 value,由头文件 dos.h 说明。 用法: #include <dos.h>
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
51单片机汇编语言教程:第28课-音乐程序设计下面给出程序序清单,可直接在TD-III型学习机上演奏,对其它不一样型号的学习机,只需对应地改变一下地址即可。
本程序演奏的是民歌“八月桂花遍地开”,C调,节奏为94拍/分。
读者也能自行找出一首歌,按表1和表2给定的常数,将乐曲翻译成码表输入机器,而程序不变。
本实验办法简便,即使不懂音乐的人,将一首陌生的曲子翻译成代码也是易事,和着机器的演奏学唱一首歌曲,其趣味无穷。
程序清单(略,请参看源程序的说明)。
程序框图如图2所示。
<单片机音乐程序的设计图>本课由单片机教程网提供,有问题指出.硬件连接说明:随便找一个仿真机或者什么单片机实验板,只要能工作的就行,将程序输入,运行,然后找个音箱(你计算机旁边应当就有一对吧)拨出插头,插头的前端接在P1。
0上,后面部分找根线接单片机的地,就应当有声了,然后怎么改进硬件连接就是你的事了。
音乐程序汇编代码代码1-------------Voice.asm--------------------------ORG0000HLJMP STARTORG000BHINC20H;中断服务,中断计数器加1MOV TH0,#0D8HMOV TL0,#0EFH;12M晶振,形成10毫秒中断RETISTART:MOV SP,#50HMOV TH0,#0D8HMOV TL0,#0EFHMOV TMOD,#01HMOV IE,#82HMUSIC0:NOPMOV DPTR,#DAT;表头地址送DPTRMOV20H,#00H;中断计数器清0MOV B,#00H;表序号清0MUSIC1:NOPCLR AMOVC A,@A+DPTR;查表取代码JZ END0;是00H,则结束CJNE A,#0FFH,MUSIC5LJMP MUSIC3MUSIC5:NOPMOV R6,AINC DPTRMOV A,BMOVC A,@A+DPTR;取节拍代码送R7MOV R7,ASETB TR0;启动计数MUSIC2:NOPCPL P1.0MOV A,R6MOV R3,ALCALL DELMOV A,R7CJNE A,20H,MUSIC2;中断计数器(20H)=R7否?;不等,则继续循环MOV20H,#00H;等于,则取下一代码INC DPTR;INC BLJMP MUSIC1MUSIC3:NOPCLR TR0;休止100毫秒MOV R2,#0DHMUSIC4:NOPMOV R3,#0FFHLCALL DELDJNZ R2,MUSIC4INC DPTRLJMP MUSIC1END0:NOPMOV R2,#64H;歌曲结束,延时1秒后继续MUSIC6:MOV R3,#00HLCALL DELDJNZ R2,MUSIC6LJMP MUSIC0DEL:NOPDEL3:MOV R4,#02HDEL4:NOPDJNZ R4,DEL4NOPDJNZ R3,DEL3RETNOPDAT:db26h,20h,20h,20h,20h,20h,26h,10h,20h,10h,20h,80h,26h,20h,30h,20h db30h,20h,39h,10h,30h,10h,30h,80h,26h,20h,20h,20h,20h,20h,1ch,20h db20h,80h,2bh,20h,26h,20h,20h,20h,2bh,10h,26h,10h,2bh,80h,26h,20h db30h,20h,30h,20h,39h,10h,26h,10h,26h,60h,40h,10h,39h,10h,26h,20h db30h,20h,30h,20h,39h,10h,26h,10h,26h,80h,26h,20h,2bh,10h,2bh,10h db2bh,20h,30h,10h,39h,10h,26h,10h,2bh,10h,2bh,20h,2bh,40h,40h,20h db20h,10h,20h,10h,2bh,10h,26h,30h,30h,80h,18h,20h,18h,20h,26h,20h db20h,20h,20h,40h,26h,20h,2bh,20h,30h,20h,30h,20h,1ch,20h,20h,20h db20h,80h,1ch,20h,1ch,20h,1ch,20h,30h,20h,30h,60h,39h,10h,30h,10h db20h,20h,2bh,10h,26h,10h,2bh,10h,26h,10h,26h,10h,2bh,10h,2bh,80h db18h,20h,18h,20h,26h,20h,20h,20h,20h,60h,26h,10h,2bh,20h,30h,20h db30h,20h,1ch,20h,20h,20h,20h,80h,26h,20h,30h,10h,30h,10h,30h,20h db39h,20h,26h,10h,2bh,10h,2bh,20h,2bh,40h,40h,10h,40h,10h,20h,10h db20h,10h,2bh,10h,26h,30h,30h,80h,00HEND音乐程序汇编代码代码2-------------Voice1.asm--------------------------;标题'八月桂花香'发声程序;摘要详见'无线电'92年3期;作者周振安ORG0000HLJMP STARTORG000BHINC20H;中断服务,中断计数器加1MOV TH0,#0D8HMOV TL0,#0EFH;12M晶振,形成10毫秒中断RETISTART:MOV SP,#50HMOV TH0,#0D8HMOV TL0,#0EFHMOV TMOD,#01HMOV IE,#82HMUSIC0:NOPMOV DPTR,#DAT;表头地址送DPTRMOV20H,#00H;中断计数器清0MOV B,#00H;表序号清0MUSIC1:NOPCLR AMOVC A,@A+DPTR;查表取代码JZ END0;是00H,则结束CJNE A,#0FFH,MUSIC5LJMP MUSIC3MUSIC5:NOPMOV R6,AINC DPTRMOV A,BMOVC A,@A+DPTR;取节拍代码送R7MOV R7,ASETB TR0;启动计数MUSIC2:NOPCPL P1.0MOV A,R6MOV R3,ALCALL DELMOV A,R7CJNE A,20H,MUSIC2;中断计数器(20H)=R7否?;不等,则继续循环MOV20H,#00H;等于,则取下一代码INC DPTR;INC BLJMP MUSIC1MUSIC3:NOPCLR TR0;休止100毫秒MOV R2,#0DHMUSIC4:NOPMOV R3,#0FFHLCALL DELDJNZ R2,MUSIC4INC DPTRLJMP MUSIC1END0:NOPMOV R2,#64H;歌曲结束,延时1秒后继续MUSIC6:MOV R3,#00HLCALL DELDJNZ R2,MUSIC6LJMP MUSIC0DEL:NOPDEL3:MOV R4,#02HDEL4:NOPDJNZ R4,DEL4NOPDJNZ R3,DEL3RETNOPDAT:DB18H,30H,1CH,10HDB20H,40H,1CH,10HDB18H,10H,20H,10HDB1CH,10H,18H,40HDB1CH,20H,20H,20HDB1CH,20H,18H,20HDB20H,80H,0FFH,20HDB30H,1CH,10H,18HDB20H,20H,20H,26H DB40H,20H,20H,2BH DB20H,26H,20H,20H DB20H,30H,80H,0FFH DB20H,20H,1CH,10H DB18H,10H,20H,20H DB26H,20H,2BH,20H DB30H,20H,2BH,40H DB20H,20H,1CH,10H DB18H,10H,20H,20H DB26H,20H,2BH,20H DB30H,20H,2BH,40H DB20H,30H,1CH,10H DB18H,20H,15H,20H DB1CH,20H,20H,20H DB26H,40H,20H,20H DB2BH,20H,26H,20H DB20H,20H,30H,80H DB20H,30H,1CH,10H DB20H,10H,1CH,10H DB20H,20H,26H,20H DB2BH,20H,30H,20H DB2BH,40H,20H,15H DB1FH,05H,20H,10H DB1CH,10H,20H,20H DB26H,20H,2BH,20H DB30H,20H,2BH,40H DB20H,30H,1CH,10H DB18H,20H,15H,20HDB26H,40H,20H,20HDB2BH,20H,26H,20HDB20H,20H,30H,30HDB20H,30H,1CH,10HDB18H,40H,1CH,20HDB20H,20H,26H,40HDB13H,60H,18H,20HDB15H,40H,13H,40HDB18H,80H,00Hend51实验板推荐(点击下面的图片可以进入下载资料链接)HJ-1G HJ-3G。