课程设计。
一、课程设计题目:
简易电子琴。
二、课程设计目的:
用汇编语言独立完成一个程序题,以达到熟练运用汇编语言编程实现有比较完整功能的系统的目的。
三、课程设计内容:
用汇编语言编写一个简易电子琴程序,基本功能:1、可以进行固定**演奏(两首以上);可以自行弹奏**。2、图形显示键盘界面;弹奏时键盘现实所按按键;可以调节音量。四、设计思路:
rom bios中的beep子程序能根据bl中给出的时间计数值控制8254定时器,产生持续声音。通过对beep的修改可以使其产生任一频率的声音。用汇编语言编写的程序gensound,能使pc机发出指定频率和指定延迟时间的声音,它是一个很好的通用发声程序。
组成乐曲的每个音符的频率值和持续时间是乐曲发声程序所必须的两组数据,知道了音调及频率的关系后,就可以按照乐曲的乐谱将每个音符的频率和持续时间定义成两个数据表,然后编程依次取出表中的频率值和时间值,调用gensound程序发出各种声音,本程序通过调用gensound程序演奏乐曲。五、操作说明:
运行时,按a键演奏乐曲”two tigers”,按b键演奏乐曲”happy birthday”,按c键演奏乐曲”snail and
oriole”,按p键自行弹奏**,按q键退出。以上按键必须使用大写字母,否则显示出错信息。源程序(如下:datasegment para 'data'
info1 db 0dh,0ahinfo2 db 0dh,0ahwelcome you to come hereinfo3 db 0dh,0ahthis is a music program
info4 db 0dh,0ahinfo5 db 0dh,0ah,0dh,0ah,'please select!$'
info6db 0dh,0ah,0dh,0ah,'input error!please input again !$info7db 0dh,0ah
info9db 0dh,0ah,0dh,0ah,'if you want to play piano,please pushp$'muslistdb 0dh,0ah,'atwo tigers'
db 0dh,0ah,'bhappy birthday'db 0dh,0ah,'csnail and oriole'db 0dh,0ah,'qexit'db 0dh,0ah,'$
mus_freg1dw 2 dup(262,294,330,262);为演奏的乐曲定义一个频率表dw 2 dup(330,349,392)dw 2 dup(392,440,392,349,330,262)dw 2 dup(294,196,262),0ffffh
mus_time1dw 10 dup(25000),50000,25000,25000,50000 ;为演奏的乐曲定义一个节拍时间表dw 2 dup(12000,12000,12000,12000,25000,25000)dw 2 dup(25000,25000,50000)mus_freg2dw 262,262,294,262,349dw 330,262,262,294,262dw 392,349,262,262,523dw 440,349,262,262,466dw 466,440,262,392,349,-1mus_time2dw 500,500,1000,1000,1000
dw 1000,1000,500,500,1000,1000dw 1000,1000,1000,500,500,1000dw 1000,1000,1000,1000,1000,500dw 500,1000,1000,1000,1000,1000
mus_freg3 dw 392,396,392,395,330,392,262,440,392,395dw 392,395,392,330,294,262,330,294,297,330dw 392,395,392,330,335,294,262,265,294,330dw 262,265,220,196,220,196,392,395,392,395
dw 330,392,262,440,292,392,395,392,395,330dw 294,262,330,294,294,330,392,395,330,335dw 294,262,265,294,330,262,265,220,196,220dw 196,392,395,392,395,330,294,262,440,392dw 395,440,262,294,262,294,330,294,262,-1mus_time3 dw 1 dup(25,50,25,50,25,25,50,50,100,25)dw 1 dup(50,25,50,25,25,50,50,100,75,25)dw 1 dup(50,25,25,50,25,25,50,50,75,25)dw 1 dup(50,25,25,50,50,100,25,50,25,50)dw 1 dup(25,25,50,50,100,25,50,25,50,25)dw 1 dup(25,50,50,100,75,25,50,50,50,25)dw 1 dup(25,50,50,75,25,50,25,25,50,50)dw 1 dup(100,25,50,25,50,25,25,50,50,50)dw 1 dup(25,25,50,50,50,50,100,100,200)msg db 0dh,0ah,0dh,0ah,'[1 2 3 4 5 6 7 ]'db 0dh,0ah,' q w e r t y u ]'
db 0dh,0ahdb 0dh,0ah,'9: exit'
db 0dh,0ah
***音调***后面用到-1判断**播是否放完sound_0 dw -1
sound_11 dw 441,-1sound_12 dw 495,-1sound_13 dw 556,-1sound_14 dw 589,-1sound_15 dw 661,-1sound_16 dw 742,-1sound_17 dw 833,-1sound_1 dw 882,-1sound_2 dw 990,-1sound_3 dw 1112,-1sound_4 dw 1178,-1sound_5 dw 1322,-1sound_6 dw 1484,-1sound_7 dw 1655,-1time dw 25
dataends
stacksegment para stack 'stack'db 300 dup ('stack')stackends
codesegment
assume ds:data,ss:stack,cs:codemainproc farmov ax,datamov ds,axmov ah, 3mov al,4int 10h
mov ah,09hmov bh,6mov bl,4int 10h
mov ah,0bhmov bh,09hmov bl,00int 10h;**定义一个宏***showmacro blea dx,bmov ah,9int 21hendm
show info1show info2show info3show info4show info5show info9show muslistinput:mov ah,01hint 21hcmp al,'q'jz retucmp al,'p'jz retu2cmp al,'a'jnz b0
call music1jmp exit1b0:cmp al,'b'jnz c0
call music2jmp exit1c0:cmp al,'c'jnz exit
call music3exit1:show info7jmp inputexit:
call clearshow info6show info7show info5show muslistshow info9
jmp input
retu:mov ah,4chint 21hmain endpretu2:
mov ax,datamov ds,ax
***一个声音宏***
onesound macro soundis,jumpis,letteriscmp al,letterisjnz jumpislea si,soundislea bp,ds:timecall musicjmp inpuendmshow msg
inpu: mov ah,01hint 21hcmp al,'9'jnz go
mov ah,4chint 21h
go: onesound sound_11,a1,'q'a1: onesound sound_12,b1,'w'b1:
onesound sound_13,c1,'e'c1: onesound sound_14,d1,'r'd1: onesound sound_15,e1,'t'
e1: onesound sound_16,f1,'y'f1: onesound sound_17,g1,'u'g1:
onesound sound_1,h1,'1'h1: onesound sound_2,i1,'2'i1: onesound sound_3,j1,'3'j1:
onesound sound_4,k1,'4'k1: onesound sound_5,l1,'5'l1: onesound sound_6,m1,'6'm1:
onesound sound_7,n1,'7'n1: onesound sound_0,o1,alo1: jmp inpu
发声gensound1 proc nearpush axpush bxpush cxpush dxpush di
mov al,0b6hout 43h,almov dx,12hmov ax,348chdiv di
out 42h,almov al,ahout 42h,alin al,61hmov ah,alor al,3out 61h,al
wait2: mov cx,3314call waitf
delay1: dec bxjnz wait2mov al,ahout 61h,alpop dipop dxpop cxpop bxpop ax
retgensound1 endp
waitf proc nearpush axwaitf1:in al,61hand al,10hcmp al,ahje waitf1mov ah,alloop waitf1pop axret
waitf endp
music proc near
push dssub ax,axpush ax
freg: mov di,[si]cmp di,-1je end_musmov bx,ds:[bp]call gensound1add si,2add bp,2end_mus:ret
music endp
music1proc nearpush dssub ax,axpush ax
lea si,mus_freg1lea bp,ds:mus_time1freg1:mov di,[si]cmp di,-1
je end_mus1mov dx,ds:[bp]mov bx,2600
call gensoundadd si,2add bp,2jmp freg1end_mus1:retmusic1endp
gensound proc nearpush axpush bxpush cxpush dxpush di
mov al,0b6hout 43h,almov dx,12h
mov ax,533h*896div di
out 42h,almov al,ahout 42h,alin al,61hmov ah,alor al,3out 61h,alwait1:mov cx,8ff0hdelay2:loop delay2dec bxjnz wait1mov al,ahout 61h,alpop dipop dxpop cxpop bxpop axretgensound endp
music2proc nearpush dssub ax,axpush ax
lea si,mus_freg2lea bp,ds:mus_time2freg2:mov di,[si]cmp di,-1
je end_mus2mov dx,ds:[bp]mov bx,3500
call gensoundadd si,2add bp,2jmp freg1end_mus2:retmusic2endp
music3proc nearpush dssub ax,axpush ax
lea si,mus_freg3lea bp,ds:mus_time3freg3:mov di,[si]cmp di,-1
je end_mus3mov dx,ds:[bp]mov bx,2000
call gensoundadd si,2add bp,2jmp freg1end_mus3:ret
music3endpclear proc nearpush axpush bxpush cxpush dxmovah,6mov al,0mov ch,0mov cl,0mov dh,24mov dl,79mov bh,7int 10hpop dxpop cxpop bxpop axretclear endp
codeends
end main
六、所遇到的问题:
程序使用了学习过程中学到的各个知识点,但是由于对一些相关的知识点不能够合理的应用,所以实验要求的自我弹奏的功能不够完善,所实现的只能是单独弹一个音符,可以调节音量,希望。
在以后的学习中能够学会解决。
七、运行结果:
八、课程设计心得体会:
通过本次课程设计,自己感悟颇深,整个设计中比较顺利地完成了相关设计中的主要部分,但实验**现的一些平时实验中没有出现的问题,颇费周章。经过反复的修改及调试后,设计终于达到了预期目的,尽管相关功能还比较简单,但相信在自己的努力下,经过经验的一次次积累,希望在以后的学习中能够举一反三,做得更好。
九、参考资料。
1、实验课中使用的实验指导例程。
/8088汇编语言程序设计王正智电子工业出版社。
汇编语言课程设计报告
汇编语言不像其他大多数的程序设计语言一样被广泛用于程序设计。下面是小编为大家整理的关于汇编语言课程的设计报告,欢迎大家的阅读。汇编语言程序设计是一门实践性很强的课程。编写程序 上机调试 运行程序是进一步学习和掌握汇编语言程序设计的必要手段。1 掌握实验运行汇编语言所用的计算机机型。2 熟悉常用编辑程...
汇编语言课程设计 报告模版
华北科技学院。课程设计说明书。汇编语言程序设计课程设计。班级 网络b113 姓名 师向荣 学号201107024314 设计题目 在屏幕上弹出或隐去系统时间 设计时间 2013 12 2 至 2013 12 12 指导教师顾涛。评语。评阅成绩评阅教师。1.课程设计的目的 任务。使学生综合使用所学过的...
汇编语言课程设计
微机原理实践 课程设计报告。题目 汇编语言课程设计。专业 网络工程 班级 班 学号 姓名 指导教师 完成日期 2013年 1 月 6 日。一 课程设计目的。1 加深对汇编语言理论和基本知识的理解,掌握dos和bios系统功能调用,掌握运用汇编语言设计具有一定功能的软件的基本方法。2 通过编写一定规模...