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. 学生了解音乐在计算机领域的应用,拓宽知识视野。
技能目标:1. 学生能够运用汇编语言进行音乐编程,创作独特的音乐作品;2. 学生通过动手实践,提高逻辑思维能力和问题解决能力;3. 学生学会合作与沟通,提高团队协作能力。
情感态度价值观目标:1. 学生培养对计算机编程和音乐的兴趣,激发创造力和创新精神;2. 学生在学习过程中,体验编程与音乐的乐趣,培养积极的学习态度;3. 学生通过课程学习,认识到科技进步对音乐创作的影响,增强社会责任感。
课程性质:本课程为选修课,结合汇编语言和音乐,培养学生编程技能和音乐素养。
学生特点:学生具备一定的计算机基础知识,对音乐有兴趣,具有较强的学习意愿和动手能力。
教学要求:教师需引导学生掌握汇编语言音乐编程的基本方法,注重实践与理论相结合,关注学生的个体差异,提供有针对性的指导。
通过课程学习,使学生在知识、技能和情感态度价值观方面取得具体的学习成果。
二、教学内容1. 汇编语言基础知识:介绍汇编语言的基本概念、语法和指令,包括寄存器、内存访问、程序流程控制等,关联教材第1章内容。
2. 音乐编程基础:讲解音乐编程的基本原理,如音调、节奏、音色等,引入MIDI音乐制作相关知识,关联教材第2章内容。
3. 汇编语言音乐编程实践:a. 使用汇编语言编写简单的MIDI音乐程序,如演奏一首简单的歌曲,关联教材第3章内容;b. 学习如何调整音量、音色和节奏等参数,创作个性化的音乐作品,关联教材第4章内容;c. 探索音乐与汇编语言的深度融合,如编写互动式音乐程序,关联教材第5章内容。
4. 教学进度安排:a. 第1-2周:汇编语言基础知识学习;b. 第3-4周:音乐编程基础学习;c. 第5-6周:汇编语言音乐编程实践;d. 第7-8周:作品创作、展示与评价。
51单片机音乐盒程序
51单⽚机⾳乐盒程序#include<reg52.h>#define uchar unsigned char#define uint unsigned int#define ulong unsigned longcode unsigned char gao[]={0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC, //1,2,3,4,5,6,7,8,i0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,} ;code unsigned char di[]={0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F, //1,2,3,4,5,6,7,8,i0xEE,0x44, 0x6B,0xB4,0xF4,0x2D,0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,};uchar data gepu[55]; //必须要指明长度uchar data time[55];uchar a;//中间变量把ram数组的值赋给它,传递给定时器中断//第⼀⾸:⽣⽇歌uchar code gepu1[]={5,0,5,6,5,8,7, 5,0,5,6,5,9,8, 5,0,5,12,10,8,7,6, 11,0,11,10,8,9,8,8};//30uchar code time1[]={2,0,2,4,4,4,6, 2,0,2,4,4,4,6, 2,0,2,4,4,4,4,6, 2,0,2,4,4,4,4,4 };//第⼆⾸:两只⽼虎 //⼤于14是指低⾳uchar code gepu2[]={1,2,3,1, 1,2,3,1, 3,4,5,0, 3,4,5,0, 5,6,5,4,3,1, 5,6,5,4,3,1, 2,19,1,0, 2,19,1,0};//36uchar code time2[]={4,4,4,4, 4,4,4,4, 4,4,4,4, 4,4,4,4, 3,1,3,1,4,4, 3,1,3,1,4,4, 4,4,4,4, 4,4,4,4};////第三⾸:多年以前uchar code gepu3[]={1,0,1,2,3,0,3,4, 5,6,5,3, 5,4,3,2, 4,3,2,1,0, 1,0,1,2,3,0,3,4, 5,6,5,3, 5,4,3,2,3,2,1,0};//41uchar code time3[]={4,0,2,2,4,0,2,2, 4,2,2,8, 4,2,2,8, 4,2,2,8,0, 4,0,2,2,4,0,2,2, 4,2,2,8, 4,2,2,4,2,2,10,1};//第四⾸:⼩步舞曲uchar code gepu4[]={5,1,2,3,4,5,1,0,1, 6,4,5,6,7,8,1,0,1, 4,5,4,3,2,3, 4,3,2,1,2, 3,2,1,21,1};//34uchar code time4[]={4,2,2,2,2,4,4,0,4, 4,2,2,2,2,4,4,0,4, 4,2,2,2,2,4, 2,2,2,2,4, 2,2,2,2,10};//第五⾸:字母歌uchar code gepu5[]={1,0,1,5,0,5,6,0,6,5, 4,0,4,3,0,3,2,0,2,1, 5,0,5,4,3,0,3,2, 5,0,5,4,0,4,3,0,3,2, 1,3,5,6,8,5, 4,0,4,3,0,3,2,0,2,1,0};//55 uchar code time5[]={2,0,2,2,0,2,2,0,2,4, 2,0,2,2,0,2,2,0,2,4, 2,0,2,4,2,0,2,4, 2,0,2,2,0,2,2,0,2,4, 2,2,4,2,2,4, 2,0,2,2,0,2,2,0,2,4,1}; uchar i,s;sbit led1=P3^3;sbit led2=P3^4;sbit led3=P3^5;sbit led4=P3^6;sbit led5=P3^7;sbit buzzer=P1^0;sbit key1=P2^0;//开始停⽌sbit key2=P2^1;//上⼀⾸sbit key3=P2^2;//下⼀⾸void delay(uchar t);void delayms(uchar t);void main(){uchar flag=0;uchar k=5;uchar stop;TMOD=0X01;EA=1;ET0=1;while(1){while(key2==0 || key3==0 || flag==0) {flag=1;if(key3==0){k++;delay(5);if(k>5)k=k%5;}if(key2==0){k--;delay(5);if(k==0)k=5;}switch(k%5){case 0:{P3=0x7f;s=30;for(i=0;i<s;i++){gepu[i]=gepu1[i];time[i]=time1[i];}break;}case 1:{P3=0xbf;s=36;for(i=0;i<s;i++){gepu[i]=gepu2[i];time[i]=time2[i];}break;}case 2:{P3=0xdf;s=41;for(i=0;i<s;i++){gepu[i]=gepu3[i];time[i]=time3[i];}break;}case 3:{P3=0xef;s=34;for(i=0;i<s;i++){gepu[i]=gepu4[i];time[i]=time4[i];}break;}case 4:{s=55;for(i=0;i<s;i++){gepu[i]=gepu5[i];time[i]=time5[i];}break;}}}while(key2!=0 && key3!=0){for(i=0;i<s;i++){TR0=1;a=gepu[i];///////////////////////////P0=(~gepu[i]);////////////////////////////if(time[i]>0)delay(time[i]);elsedelayms(1);if(key1==0){delay(5);stop++;}if(stop%2==0)TR0=1;elseTR0=0;while(stop%2){if(key1==0){delay(5);stop++;}}if(key2==0 || key3==0){TR0=0;break;}}}}}void dingshi0() interrupt 1 using 0 {if(a<15){TH0=gao[a+6];TL0=di[a+6];}else{TH0=gao[a-14-1];TL0=di[a-14-1];}buzzer=0;elsebuzzer=~buzzer;}void delay(uchar t) {uint i;while(t--){for(i = 0; i < 10001; i++); }}void delayms(uchar t) {uchar t1; uint t2;for(t1=0;t1<t;t1++){for(t2=0;t2<800;t2++) {;}}}。
51单片机音乐编辑程序详解
#include<reg51.h>#include<intrins.h>#define uc unsigned char#define ui unsigned intuc a;sbit speaker=P1^2;ui code yinpin[]={ //音频的赫兹0,0,0,0,0,0,0, //高两位单调个位表示节拍63628,63835,64021,64103,64260,64400,64524,//低音64680,64684,64777,64820,64898,64968,65030,//中音65085,65110,65157,65178,65217,65252,65282,//高音};uc code yuema[]={//音乐的编码001,001,001,001,134,134,154,132,152,168,184,001,001,001,001,164,164,182,162,162,182,199,197,154,164,182,162,164,132,124,134,122,132,154,164,184,192,162,169,167,001,001,001,204,202,192,198,204,192,202,184,164,204,202,192,194,198,122,132, 114,112,162,164,164,001,001,001,156,152,132,152,162,186,156,152,132,152,182,166,156,152,132,152,162,186,156,152,132,152,182,166,001,001,001,};void delay(ui m){ui i,j;for(i=0;i<121;i++)for(j=0;j<m;j++);}void init_t0(void){TMOD=0X01;//工作在定时器0的模式下ET0=1;//定时器中断允许EA=1;//开总中断TR0=1;//启动定时器}void sec_t0(void) interrupt 1//定时器服务子程序{TH0=yinpin[yuema[a]/10]/256;//复初值TL0=yinpin[yuema[a]/10]%256;//复初值speaker=!speaker;}void jiema(void)//音频的解码{if(yuema[a]/10)TR0=1;else TR0=0;//如果乐码的高两位为1则启动定时器,否则关闭定时器delay(yuema[a]%10*100);//节拍的延时,100表示把节拍的时间扩大100倍,不然时间会很快TR0=0;speaker=1;//关闭定时器和蜂鸣器为下次发生做准备a++;//乐码自加if(yuema[a]==0)a=0;//如果乐码遇到000的时候则表示音乐播放完毕。
51单片机唱歌 C51音乐程序
51单片机唱歌 C51音乐程序#i nclude <reg52.h>#i nclude <intrins.h>//本例采用89C52, 晶振为11.0592MHZ//关于如何编制音乐代码, 其实十分简单,各位可以看以下代码.//频率常数即音乐术语中的音调,而节拍常数即音乐术语中的多少拍;//所以拿出谱子, 试探编吧!unsigned char n=0; //n为节拍常数变量unsigned char code music_tab[] ={0x18, 0x30, 0x1C , 0x10, //格式为: 频率常数, 节拍常数, 频率常数, 节拍常数, 0x20, 0x40, 0x1C , 0x10,0x18, 0x10, 0x20 , 0x10,0x1C, 0x10, 0x18 , 0x40,0x1C, 0x20, 0x20 , 0x20,0x1C, 0x20, 0x18 , 0x20,0x20, 0x80, 0xFF , 0x20,0x30, 0x1C, 0x10 , 0x18,0x20, 0x15, 0x20 , 0x1C,0x20, 0x20, 0x20 , 0x26,0x40, 0x20, 0x20 , 0x2B,0x20, 0x26, 0x20 , 0x20,0x20, 0x30, 0x80 , 0xFF,0x20, 0x20, 0x1C , 0x10,0x18, 0x10, 0x20 , 0x20,0x26, 0x20, 0x2B , 0x20,0x30, 0x20, 0x2B , 0x40,0x20, 0x20, 0x1C , 0x10,0x18, 0x10, 0x20 , 0x20,0x26, 0x20, 0x2B , 0x20,0x30, 0x20, 0x2B , 0x40,0x20, 0x30, 0x1C , 0x10,0x18, 0x20, 0x15 , 0x20,0x1C, 0x20, 0x20 , 0x20,0x26, 0x40, 0x20 , 0x20,0x2B, 0x20, 0x26 , 0x20,0x20, 0x20, 0x30 , 0x80,0x20, 0x30, 0x1C , 0x10,0x20, 0x10, 0x1C , 0x10,0x20, 0x20, 0x26 , 0x20,0x2B, 0x20, 0x30 , 0x20,0x2B, 0x40, 0x20 , 0x15,0x1F, 0x05, 0x20 , 0x10,0x1C, 0x10, 0x20 , 0x20,0x26, 0x20, 0x2B , 0x20,0x30, 0x20, 0x2B , 0x40,0x20, 0x30, 0x1C , 0x10,0x18, 0x20, 0x15 , 0x20,0x1C, 0x20, 0x20 , 0x20,0x26, 0x40, 0x20 , 0x20,0x2B, 0x20, 0x26 , 0x20,0x20, 0x20, 0x30 , 0x30,0x20, 0x30, 0x1C , 0x10,0x18, 0x40, 0x1C , 0x20,0x20, 0x20, 0x26 , 0x40,0x13, 0x60, 0x18 , 0x20,0x15, 0x40, 0x13 , 0x40,0x18, 0x80, 0x00};void int0() interrupt 1 //采用中断0 控制节拍{ TH0=0xd8;TL0=0xef;n--;}void delay (unsigned char m) //控制频率延时{unsigned i=3*m;while(--i);}void delayms(unsigned char a) //豪秒延时子程序{while(--a); //采用while(--a) 不要采用while(a--); 各位可编译一下看看汇编结果就知道了!}void main(){ unsigned char p,m; //m为频率常数变量unsigned char i=0;TMOD&=0x0f;TMOD =0x01;TH0=0xd8;TL0=0xef;IE=0x82;play:while(1){a: p=music_tab[i];if(p==0x00) { i=0, delayms(1000); goto play;} //如果碰到结束符,延时1秒,回到开始再来一遍else if(p==0xff) { i=i+1;delayms(100),TR0=0; goto a;} //若碰到休止符,延时100ms,继续取下一音符else {m=music_tab[i++], n=music_tab[i++];} //取频率常数和节拍常数TR0=1; //开定时器1while(n!=0) P1=~P1,delay(m); //等待节拍完成, 通过P1口输出音频(可多声道哦!)TR0=0; //关定时器1 }}。
汇编音乐程序课程设计
汇编音乐程序课程设计一、课程目标知识目标:1. 学生能理解汇编语言的基本概念,掌握音乐程序设计的相关知识。
2. 学生能运用汇编语言编写简单的音乐程序,如播放单个音符、简单旋律等。
3. 学生了解音乐编程中的循环、条件判断等基本结构,并能运用到实际编程中。
技能目标:1. 学生掌握汇编语言编程环境的使用,如编辑器、编译器等。
2. 学生能运用汇编语言编写音乐程序,具备调试和优化程序的能力。
3. 学生具备团队协作能力,能够与同学共同完成音乐程序的编写和调试。
情感态度价值观目标:1. 学生培养对计算机音乐编程的兴趣,激发创新意识和探索精神。
2. 学生在学习过程中,培养耐心、细心和责任心,养成良好的编程习惯。
3. 学生通过音乐编程,体验艺术与技术的结合,提升审美情趣。
本课程针对高年级学生,课程性质为理论与实践相结合。
在分析学生特点和教学要求的基础上,明确课程目标,将目标分解为具体的学习成果,以便后续的教学设计和评估。
通过本课程的学习,学生将能够掌握汇编音乐编程的基本知识,具备实际编程能力,并在学习过程中培养良好的情感态度价值观。
二、教学内容1. 汇编语言基础知识:介绍汇编语言的基本概念、语法规则,以及与音乐编程相关的基础知识,如音符、节拍等。
教材章节:第1章 汇编语言概述,第2章 汇编语言基础知识2. 汇编音乐编程环境搭建:讲解汇编音乐编程环境的配置方法,包括编辑器、编译器和播放器的使用。
教材章节:第3章 汇编音乐编程环境搭建3. 基本音乐程序编写:教授如何使用汇编语言编写单个音符、简单旋律等音乐程序。
教材章节:第4章 基本音乐程序编写4. 循环与条件判断:介绍在音乐编程中循环、条件判断等基本结构的应用。
教材章节:第5章 循环与条件判断5. 复杂音乐程序设计:讲解如何运用所学知识编写较复杂的音乐程序,如多声部音乐、动态音量调整等。
教材章节:第6章 复杂音乐程序设计6. 调试与优化:教授音乐程序的调试技巧和优化方法,提高程序执行效率。
单片机音乐播程序设计流程
单片机音乐播程序设计流程下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。
文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor. I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!1. 确定音乐格式:首先需要确定要播放的音乐文件格式,常见的音乐格式如 MP3、WAV 等。
基于-51单片机的音乐程序
基于51单片机的按键切换播放音乐原理图:引脚说明:共5个按键,分别接51单片机的P0~P4引脚,前4个按键控制播放设置好的四首音乐,第5个按键用来关闭音乐。
按键采用中断方式,任意时刻按下任意按键那么立即进入所按按键的功能;蜂鸣器接单片机的P3.6口。
仿真说明:使用proteus仿真,晶振:12MHZ。
程序代码如下:/*12Mhz晶振工作*/#include <reg52.h>#define uint unsigned int#define uchar unsigned charsbit voice=P3^6;uchar code sound1[]={0xff,0x40,0x80,0x30,0x40,0x2b,0x40,0x26,0x80,0x24,0x10,0x26,0x40,0x30,0x40,0x2b,0x80,0x30,0x40,0x39,0x40,0x30,0xc0,0x40,0x80,0x30,0x40,0x2b,0x40, 0x26,0x40,0x26,0x20,0x24,0x20,0x20,0x40,0x30,0x40,0x24,0x80,0x26,0x10, 0x20,0x40,0x2b,0x20,0x26,0x20,0x26,0x20,0x2b,0x20,0x2b,0xc0,0x26,0x80, 0x20,0x40,0x19,0x40,0x19,0x80,0x1c,0x10,0x1c,0x80,0x20,0x40,0x20,0x20, 0x1c,0x20,0x19,0x40,0x1c,0x20,0x20,0x20,0x26,0xc0,0x24,0x80,0x24,0x10, 0x20,0x40,0x1c,0x40,0x20,0x40,0x24,0x20,0x26,0x20,0x2b,0x80,0x33,0x40, 0x33,0x20,0x39,0x20,0x40,0x40,0x39,0x40,0x30,0xc0,0x18,0x80,0x1c,0x80, 0x24,0x80,0x20,0x10,0x1c,0x80,0x19,0x40,0x19,0x20,0x19,0x20,0x19,0x40, 0x1c,0x20,0x20,0x20,0x26,0xc0,0x18,0x80,0x1c,0x80,0x24,0x80,0x20,0x10, 0x1c,0x80,0x1c,0x40,0x1c,0x20,0x1c,0x20,0x1c,0x40,0x24,0x20,0x26,0x20, 0xff,0x20,0x00};//同一首歌*/uchar code sound2[]={0xff,0x18,0x40,0x1c,0x20,0x18,0x20,0x13,0x40,0x13,0x20,0x15,0x20,0x13,0x20, 0x15,0x20,0x13,0x20,0x15,0x20,0x18,0x20,0x19,0x20,0x1c,0x20,0x20,0x20, 0x1c,0x40,0x19,0x20,0x18,0x20,0x15,0x40,0x10,0x80,0x13,0x10,0x10,0x40,0x15,0x10,0x13,0x10,0x18,0x10,0x1c,0x10,0x26,0x10, 0x13,0x10,0x18,0x10,0x1c,0x10,0x26,0x10,0x13,0x10,0x18,0x10,0x1c,0x10, 0x26,0x10,0x13,0x10,0x18,0x10,0x1c,0x10,0x26,0x10,0x15,0x10,0x19,0x10, 0x20,0x10,0x2b,0x10,0x15,0x10,0x19,0x10,0x20,0x10,0x2b,0x10,0x15,0x10, 0x19,0x10,0x20,0x10,0x2b,0x10,0x15,0x10,0x19,0x10,0x20,0x10,0x2b,0x10, 0x18,0x10,0x1c,0x10,0x24,0x10,0x30,0x10,0x18,0x10,0x1c,0x10,0x24,0x10, 0x30,0x10,0x19,0x10,0x20,0x10,0x2b,0x10,0x19,0x10,0x19,0x10,0x20,0x10, 0x2b,0x10,0x19,0x10,0x18,0xc0,0xff,0x40,0x40,0x10,0x39,0x20,0x30,0x20, 0x2b,0x20,0x30,0x20,0x2b,0x20,0x26,0x20,0x26,0x20,0x26,0x20,0x26,0x20,0x26,0x20,0x26,0x20,0x2b,0x20,0x30,0x20,0x2b,0x40,0x30,0x10,0x30,0x20, 0x39,0x20,0x30,0x40,0x2b,0x10,0x2b,0x20,0x26,0x20,0x26,0x80,0x40,0x10, 0x39,0x20,0x30,0x20,0x2b,0x20,0x30,0x20,0x2b,0x20,0x30,0x20,0x30,0x20, 0x20,0x20,0x20,0x20,0x26,0x20,0x2b,0x20,0x26,0x20,0x2b,0x20,0x30,0x20, 0x30,0x20,0x26,0x20,0x26,0x20,0x26,0x20,0x2b,0x20,0x30,0x20,0x2b,0x40, 0x2b,0x10,0x2b,0x20,0x2b,0x20,0x2b,0x40,0x30,0x10,0x30,0x20,0x39,0x20, 0x2b,0x80,0x40,0x10,0x39,0x20,0x30,0x20,0x2b,0x20,0x30,0x20,0x2b,0x20, 0x26,0x20,0x26,0x20,0x20,0x20,0x20,0x20,0x26,0x20,0x2b,0x20,0x30,0x20, 0x2b,0x20,0x26,0x20,0x26,0x20,0x1c,0x20,0x1c,0x20,0x26,0x20,0x2b,0x20, 0x30,0x20,0x2b,0x40,0x30,0x10,0x30,0x20,0x39,0x20,0x30,0x40,0x2b,0x10, 0x2b,0x20,0x26,0x20,0x20,0x80,0x40,0x10,0x39,0x20,0x30,0x20,0x2b,0x20, 0x30,0x20,0x2b,0x20,0x30,0x20,0x30,0x20,0x1c,0x20,0x1c,0x20,0x20,0x20, 0x26,0x20,0x26,0x20,0x2b,0x20,0x30,0x20,0x30,0x20,0x26,0x20,0x26,0x20, 0x26,0x20,0x2b,0x20,0x30,0x20,0x2b,0x40,0x2b,0x10,0x2b,0x20,0x2b,0x20, 0x2b,0x40,0x30,0x10,0x30,0x20,0x39,0x20,0x30,0x80,0x30,0x10,0x18,0x20, 0x19,0x20,0x18,0x20,0x1c,0x20,0x18,0x40,0x1c,0x10,0x1c,0x20,0x20,0x20, 0x1c,0x20,0x20,0x20,0x26,0x20,0x2b,0x20,0x26,0x20,0x20,0x20,0x1c,0x20, 0x20,0x20,0x20,0x20,0x20,0x20,0x1c,0x20,0x20,0x20,0x1c,0x40,0x1c,0x10, 0x1c,0x20,0x1c,0x20,0x1c,0x40,0x20,0x10,0x20,0x20,0x1c,0x20,0x20,0x20, 0x26,0x20,0x26,0x40,0xff,0x20,0x30,0x20,0x2b,0x20,0x26,0x20,0x20,0x20, 0x26,0x20,0x2b,0x20,0x30,0x20,0x30,0x20,0x30,0x20,0x2b,0x20,0x26,0x20, 0x1c,0x20,0x26,0x20,0x2b,0x20,0x30,0x20,0x30,0x20,0x30,0x20,0x30,0x20, 0x30,0x20,0x18,0x40,0x18,0x10,0x18,0x20,0x18,0x20,0x18,0x40,0x1c,0x10,0x19,0x20,0x18,0x20,0x19,0x20,0x1c,0x20,0x20,0x20,0x1c,0x20,0x20,0x20, 0x26,0x20,0x2b,0x20,0x26,0x20,0x20,0x20,0x1c,0x20,0x20,0x20,0x20,0x20, 0x20,0x20,0x1c,0x20,0x20,0x20,0x1c,0x40,0x1c,0x10,0x1c,0x20,0x1c,0x20, 0x1c,0x40,0x20,0x10,0x20,0x20,0x1c,0x20,0x20,0x20,0x26,0x20,0x26,0x40, 0xff,0x20,0x30,0x20,0x2b,0x20,0x26,0x20,0x20,0x20,0x26,0x20,0x2b,0x20, 0x30,0x20,0x30,0x20,0x30,0x20,0x2b,0x20,0x26,0x20,0x1c,0x20,0x26,0x20, 0x2b,0x20,0x30,0x20,0x18,0x80,0xff,0x40,0xff,0x40,0xff,0x20,0x18,0x20,0x1c,0x20,0x18,0x20,0x1c,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1c,0x20, 0x20,0x20,0x26,0x20,0x2b,0x20,0x26,0x20,0x2b,0x20,0x2b,0x20,0x30,0x20, 0x39,0x20,0x30,0x20,0x30,0x20,0x2b,0x20,0x30,0xc0,0x30,0x80,0x30,0x20, 0x18,0x20,0x1c,0x20,0x18,0x20,0x15,0x20,0x18,0x20,0x18,0x20,0x18,0x20, 0x15,0x20,0x18,0x20,0x18,0x20,0x18,0x20,0x15,0x20,0x18,0x20,0x1c,0x20, 0x18,0x20,0x13,0x20,0x15,0x20,0x15,0x20,0x18,0x20,0x1c,0x20,0x18,0x20, 0x15,0x40,0x30,0xc0,0xff,0x40,0x00}; //爱情转移*/uchar code sound3[]={0xff,0x40,0x10,0x39,0x10,0x30,0x10,0x2b,0x10,0x26,0x20,0x20,0x10,0x20,0x10, 0x20,0x30,0x18,0x10,0x19,0x20,0x1c,0x20,0x20,0x20,0x20,0x40,0x1c,0x20, 0x30,0x20,0x30,0x20,0x30,0x20,0x1c,0x20,0x20,0x20,0x24,0x10,0x26,0x10, 0x26,0x10,0x2b,0x20,0x30,0x10,0x39,0x20,0x30,0x10,0x30,0x10,0x30,0x20, 0x20,0x20,0x24,0x10,0x26,0x10,0x2b,0x10,0x30,0x10,0x33,0x10,0x40,0x10, 0x39,0x20,0x39,0xc0,0xff,0x20,0x26,0x10,0x20,0x10,0x1c,0x10,0x20,0x10, 0x1c,0x10,0x20,0x10,0x1c,0x10,0x18,0x30,0x19,0x10,0x1c,0x10,0x1c,0x10, 0x20,0x10,0x1c,0x20,0x20,0x20,0x1c,0x20,0x1c,0x10,0x18,0x10,0x19,0x20,0x1c,0x10,0x20,0x10,0x1c,0x10,0x18,0x30,0x15,0x10,0x18,0x10,0x15,0x10, 0x18,0x10,0x18,0x10,0x15,0x30,0x13,0x20,0x13,0x10,0x15,0x10,0x18,0x10, 0x15,0x20,0x13,0x10,0x13,0x60,0x15,0x20,0x13,0x20,0x15,0x10,0x18,0x10, 0x15,0x10,0x18,0x10,0x15,0x20,0x18,0x10,0x15,0x10,0x15,0x60,0x15,0x20, 0x13,0x20,0x15,0x10,0x18,0x10,0x18,0x10,0x18,0x10,0x18,0x20,0x19,0x10, 0x1c,0x10,0x1c,0x60,0xff,0x20,0x13,0x20,0x15,0x10,0x18,0x10,0x15,0x10, 0x18,0x10,0x15,0x20,0x18,0x10,0x15,0x10,0x15,0x20,0x18,0x20,0x18,0x10, 0x10,0x30,0x10,0xc0,0x18,0x20,0x15,0x20,0x13,0x10,0x15,0x10,0x13,0x10, 0x15,0x10,0x13,0x10,0x15,0x10,0x13,0x10,0x15,0x10,0x15,0x10,0x10,0x30, 0x10,0x20,0x13,0x10,0x10,0x10,0x0e,0x10,0x0e,0x10,0x0e,0x10,0x0e,0x10, 0x10,0x20,0x13,0x10,0x15,0x10,0x13,0x60,0x15,0x20,0x13,0x20,0x15,0x20, 0x18,0x10,0x1c,0x10,0x1c,0x40,0x18,0x20,0x19,0x10,0x1c,0x10,0x1c,0x40, 0xff,0x20,0x0e,0x20,0x10,0x20,0x13,0x20,0x15,0x40,0x18,0x20,0x15,0x20, 0xff,0x20,0x26,0x20,0x20,0x20,0x26,0x20,0x15,0x20,0x13,0x40,0x15,0x20, 0x18,0x20,0x1c,0xc0,0x30,0x40,0x2b,0x30,0x26,0x10,0x39,0x40,0xff,0x20, 0x30,0x10,0x39,0x10,0x33,0x10,0x30,0x10,0x2b,0x20,0x2b,0x20,0x30,0x10, 0x2b,0x10,0x26,0x10,0x2b,0x10,0x2b,0x20,0x1c,0x10,0x20,0x10,0x2b,0x10, 0x26,0x10,0x26,0x80,0x18,0x10,0x19,0x10,0x1c,0x10,0x1c,0x10,0x19,0x20, 0x26,0x20,0xff,0x20,0x26,0x20,0x20,0x20,0x26,0x20,0x15,0x20,0x13,0x40, 0x15,0x20,0x18,0x20,0x1c,0xc0,0xff,0x20,0x26,0x20,0x20,0x20,0x26,0x20, 0x15,0x20,0x13,0x40,0x15,0x20,0x18,0x20,0x1c,0x40,0x1c,0xc0,0x00};//最后一次的温柔*/uchar code sound4[]={0xff,0x40,0x30,0x30,0x80,0x30,0x30,0x30,0x80,0x26,0x40,0x2b,0x80,0x30,0x30, 0x2b,0x80,0x26,0x30,0x30,0x80,0x30,0x30,0x26,0x80,0x20,0x30,0x1c,0xc0, 0x1c,0x80,0x1c,0x30,0x20,0x80,0x26,0x30,0x26,0x80,0x30,0x30,0x2b,0x80, 0x30,0x30,0x2b,0x80,0x26,0x30,0x30,0x80,0x39,0x30,0x39,0x80,0x40,0x30, 0x30,0xc0,0x30,0x80,0x1c,0x30,0x20,0x80,0x26,0x30,0x26,0x80,0x30,0x30, 0x2b,0x80,0x30,0x30,0x2b,0x80,0x1c,0x30,0x20,0x80,0x26,0x30,0x26,0x80, 0x20,0x30,0x1c,0xc0,0x1c,0x80,0x18,0x30,0x20,0x80,0x26,0x30,0x26,0x80, 0x30,0x30,0x2b,0x80,0x30,0x30,0x2b,0x80,0x26,0x30,0x30,0x80,0x39,0x30, 0x39,0x80,0x40,0x30,0x30,0xc0,0x30,0xc0,0x00};//友谊地久天长*//*uchar code sound[]={0xff,0x20,0x60,0x26,0x20,0x20,0x40,0x20,0x20,0x1c,0x20,0x18,0x40,0x18,0x20, 0x1c,0x20,0x20,0x80,0x20,0x60,0x1c,0x20,0x20,0x20,0x1c,0x10,0x20,0x10, 0x26,0x20,0x2b,0x20,0x20,0x30,0x1c,0x10,0x20,0x20,0x26,0x20,0x2b,0x80, 0xff,0x20,0x20,0x20,0xff,0x20,0x20,0x20,0x1c,0x40,0x20,0x40,0x18,0x30, 0x1c,0x10,0x20,0x20,0x26,0x20,0x2b,0x80,0xff,0x20,0x20,0x20,0xff,0x20, 0x20,0x20,0x26,0x40,0x2b,0x20,0x30,0x20,0x30,0xc0,0xff,0x40,0x00};//中华民谣*/uchar zdjs=0,jp,p,a;uint dpjs;void del(uchar yj){uchar yj2=2;while(yj!=0){while(yj2!=0) {yj2--;}yj2=2;yj--;}}void delay0() {uchar u=20; while(u--);}void play() {uchar yj;dpjs=0;while(a){zdjs=0;dpjs++;if(p==1){yj=sound1[dpjs];dpjs++;jp=sound1[dpjs];}if(p==2){yj=sound2[dpjs]; dpjs++;jp=sound2[dpjs];}if(p==3){yj=sound3[dpjs];dpjs++;jp=sound3[dpjs];}if(p==4){yj=sound4[dpjs]; dpjs++;jp=sound4[dpjs];}while(zdjs!=jp){if(yj!=0xff){if(yj!=0){voice=!voice; del(yj);}else{dpjs=0;break;}}else{voice=0;del(jp);}}}}void init(){TMOD=0x01;IE=0x82;TH0=0xd8;TL0=0xef;TR0=1;EX0=1;IT0=1;EA=1;}void main(void){init();a=1;p=1;while(1){play();}}void init_0(void) interrupt 0 {uchar q;q=P1;if(q!=0xff){delay0();q=P1;if(q!=0xff){zdjs=0;dpjs=0;jp=0;switch(q){case 0xfe: a=1;p=1;break;case 0xfd: a=1;p=2;break;case 0xfb: a=1;p=3;break;case 0xf7: a=1;p=4;break;case 0xef: a=0;break;}}}}void time0(void) interrupt 1{TH0=0xd8;TL0=0xef;zdjs++;}声明:欢送学习与制作;请注明出处!。
- 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。