基于单片机的简易电子琴设计(汇编语言内容摘要:

块三大模块。 7 第二章 系统的软件设计 软件是该电子琴控制系统的重要组成部分,在系统的软件设计中我们也才用了模块化设计,将系统的各部分功能编写成子模块的形式,这样增强了系统软件的可 读性和可移植性。 音乐弹奏原理 由于一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样就可以利用不同的频率的组合,即可弹奏出我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时 /计数器来产生这样的方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。 演奏中,每一音符对应着确定的频率,我们将每一音符的时间常数和其相应的节拍常数作为一组,按顺序将乐曲中的所有常数排列成一个表,然后由查表程序依次取出,产生音符并控制节奏,就可以实现演奏效果。 电 子琴弹奏部分:实际上就是把每个按键所对应的值经过处理后发给单片机,再在单片机内把数字当作指针指向所对应的音符。 如下表所示: 按 键 音 阶 S1 do S2 re S3 mi S4 fa S5 so S6 la S7 xi S8 音 乐 音乐弹奏设计 发音电路有三极管、电阻和扬声器组成,接在 ,通过定时器溢出的时间不同, 输出的脉冲频率不同,三极管导通的频率也不同, 8 从而扬声器根据不同频率的脉冲发出的声音也不相同。 如下表所示: 各音符频率 与计数值 T的关系 音符 频率 Hz 半周期( ms) 简谱码 T 定时值( H) 简谱码 T 定时值 (D) 低 Do 131 F117 61719 低 Re 147 F2B7 62135 低 Mi 165 F42A 62506 低 Fa 175 F4D7 62679 低 So 196 F609 62985 低 La 220 F71F 63263 低 Si 247 F818 63512 中 Do 262 F88C 63628 中 Re 294 F95B 63835 中 Mi 330 FA15 64021 中 Fa 349 FA67 64103 中 So 392 FB04 64260 中 La 440 FB90 64400 中 Si 494 FC0C 64524 高 Do 262 FC44 64580 高 Re 294 FCAC 64684 高 Mi 330 FD09 64777 高 Fa 349 FD2A 64810 高 So 392 FD82 64898 高 La 440 FDC8 64968 高 Si 494 FE2E 65070 软件流程图 本系统中单片机 89C51的主要功能就是实现音乐播放功能。 其主程序流程如图 41所示。 9 上位机软件及程序 本系统的上位机软件主要是编辑电子琴播放状态的内容,在设计中采用汇编语言编写了电子琴控制系统控制和播放内容的程序。 ORG 0000H SJMP M1 ORG 000BH MOV TH0,R1 ;设置定时器初值 MOV TL0,R0 CPL ;输出方波 RETI 10 M0:MOV R5,00H M1:CLR A MOV C, ;判断是否为按键 1 MOV ,C JZ DO MOV C, ;判断是否为按键 2 MOV ,C JZ RAI MOV C, ;判断是否为按键 3 MOV ,C JZ MI MOV C, ;判断是否为按键 4 MOV ,C JZ FA MOV C, ;判断是否为按键 5 MOV ,C JZ SO MOV C, ;判断是否为按键 6 MOV ,C JZ LA MOV C, ;判断是否为按键 7 11 MOV ,C JZ XI MOV C, ;判断是否为按键 8 MOV ,C JZ M7 LJMP M1 M7:LJMP M2 DO:MOV R1,0FCH ;设定各音节初值 MOV R0,43H MOV R2,08H CLR ;打开灯 D1 LJMP NEXT RAI:MOV R1,0FCH MOV R0,0ABH MOV R2,08H CLR ;打开灯 D2 LJMP NEXT MI:MOV R1,0FDH MOV R0,08H MOV R2,08H CLR ;打开灯 D3 LJMP NEXT 12 FA:MOV R1,0FDH MOV R0,33H MOV R2,08H CLR ;打开灯 D4 LJMP NEXT SO:MOV R1,0FDH MOV R0,81H MOV R2,08H CLR ;打开灯 D5 LJMP NEXT LA:MOV R1,0FDH MOV R0,0C7H MOV R2,08H CLR ;打开灯 D6 LJMP NEXT XI:MOV R1,0FEH MOV R0,05H MOV R2,08H CLR ;打 开灯 D7 LJMP NEXT NEXT:CLR A 13 MOV TMOD,01H ;设定定时器工作方式 MOV IE,82H ;开启总中断 MOV TH0,R1 ;设置初值 MOV TL0,R0 SETB TR0 ;开启中断 0 LOOP1: LCALL D200C ;调用延时 DJNZ R2,LOOP1 ;判定是否延时完 CLR TR0 ;关闭中断 MOV A,0FFH ;关灯 MOV P2,A LJMP M1 ;跳转主程序 M5:CJNE R5,04H,M9。 判断是否为歌曲 4 MOV DPTR,QU LJMP LOOP M9:CJNE R5,05H,M8 ;判断是否为铃声 MOV DPTR,LS LJMP LOOP M8:CJNE R5,06H,M10 ;判断按键是否到第 6次 M10:LJMP M0 M4:CJNE R5,03H,M5 ;判定是否为歌曲 3 MOV DPTR,PL LJMP LOOP 14 M3:CJNE R5,02H,M4 ;判定是否为歌曲 2 MOV DPTR,LING LJMP LOOP M2:INC R5 ;记录按键 8次数 CJNE R5,01H,M3 ;判定是否为歌曲 1 MOV DPTR,TAB LOOP: CPL ;打开灯 D8 CLR A MOVC A,@A+DPTR ;取音符 MOV R1,A INC DPTR CLR A MOVC A,@A+DPTR MOV R0,A ORL A,R1 JZ NEXT0 ;判定是否为结束符号 MOV A,R0 ANL A,R1 CJNE A,0FFH,NEXT3 ;判定是否为休止符 CLR TR0 MOV R2,04H LCALL D200C 15 INC DPTR LJMP LOOP NEXT3: MOV TMOD,01H ;设定定时器工作方式 MOV IE,82H ;开启总中断 MOV TH0,R1 ;设置初值 MOV TL0,R0 SETB TR0 ;开 启中断 0 SJMP NEXT2 NEXT0:CLR TR0 ;关中断 MOV A,0FFH ;关灯 MOV P2,A LJMP M1 ;跳转至主程序 NEXT2: CLR A INC DPTR MOVC A,@A+DPTR ;取节拍 MOV R2,A LOOP3: LCALL D200C ;调用延时 DJNZ R2,LOOP3 ;判断是否延时完 INC DPTR ;跳到下一音符 LJMP LOOP D200C:MOV R3,65H ;延时子程序 16 D200B:MOV A,0FFH D200A:DEC A JNZ D200A DEC R3 CJNE R3,00H,D200B RET TAB:DB。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。