微机原理及汇编语言课设电子琴.docx
- 文档编号:11000521
- 上传时间:2023-02-24
- 格式:DOCX
- 页数:24
- 大小:108.09KB
微机原理及汇编语言课设电子琴.docx
《微机原理及汇编语言课设电子琴.docx》由会员分享,可在线阅读,更多相关《微机原理及汇编语言课设电子琴.docx(24页珍藏版)》请在冰豆网上搜索。
微机原理及汇编语言课设电子琴
微机原理与汇编语言
课程设计
电子琴
学院:
计算机科学技术
专业:
计算机科学与技术(工)
班级:
计13-1班
姓名:
肖林英
学号:
201317010125
指导教师:
陈微
2016年6月10日
微机原理与汇编语言课程设计任务书
一、题目:
电子琴
二、设计的目的
1.掌握利用PC机扬声器发出不同频率声音的方法;
2.学习利用系统功能调用从键盘上读取字符的方法;
3.掌握定时器/计数器8253的工作原理;
三、设计要求
编写程序,程序运行时使PC机成为一架可演奏的“钢琴”。
当按下数字键1-8时,依次发出1,2,3,4,5,6,7,七个高音和低音,Esc则退出演奏状态。
独立完成课程设计。
四、设计内容及步骤
1.PC机扬声器电路
电路图如图1所示:
图1PC机扬声器控制电路
通过给8253定时器装入不同的计数值,可以使其输出不同频率的波形。
当与门打开后,经过放大器的放大作用,便可驱动扬声器发出不同频率的音调。
为使该音调的声音持续一段时间,要插入一段延时程序,之后再将扬声器关闭(关闭与门)。
2.建立音频表
要使计算机成为可弹奏的简易电子琴,需要使用系统调用的01H功能以接收键入字符,并且要建立一张音频表。
五、课程设计工作量
每人的程序量应在100行有效程序行以上,不得抄袭,否则给不及格成绩。
六、课程设计工作计划
2016年6月6日指导教师讲课,学生准备文献资料;
2016年6月6日~2016年6月10日每人完成自己程序并能独立演示;
2016年6月10日下午验收,学生撰写课程设计报告。
指导教师签字:
专业主任签章:
微机原理与汇编语言课程设计指导教师评语与成绩
指导教师评语:
课程设计表现成绩:
课程设计验收成绩:
课程设计报告成绩:
课程设计总成绩:
指导教师签字:
2016年月日
一、概述1
1.课题描述1
2.程序设计目的1
二、需求分析1
三、总体设计2
1.电子琴程序2
2.单音调子程序SOUND3
四、详细设计3
1.扬声器3
2.界面设计4
五、调试与运行结果说明5
1.主界面5
2.退出界面6
六、课程设计总结6
七、结束语7
八、程序清单7
参考文献14
一、概述
1.课题描述
随着社会发展,计算机硬件技术越来越多的应用到生活中的各个领域,人们对软硬件技术结合开发出来的产品的要求越来越迫切,需求日益增加,如今用软硬件结合设计电子产品已经成为了一大时尚。
本设计编写的一个用PC机模拟电子琴的程序,利用PC机中的8253和键盘的按键模拟电子琴8个音节的发声。
编程使计算机的数字键1、2、3、4、5、6、7、8作为电子琴按键,按下即发出相应的音阶。
在本次课程设计中,考察了我们编程的技巧、运用Debug动态调试工具进行程序的调试的能力。
同时,本道设计题目还检查了我们对汇编语言这门课程的基本知识的掌握程度。
只有掌握汇编语言基本编程方法,掌握程序各部分功能及其相互联系、相互作用,并要熟悉基本的音乐知识,才能独立的把程序写出来,才能把程序写好。
开发工具:
汇编语言MASMFORWINDOWS
2.程序设计目的
课程设计是培养学生运用有关课程的基础理论和技能解决实际问题,进一步提高学生本专业必要的基本技能、方法和创新能力的重要环节之一。
通过课程设计使学生受到设计方法的初步训练,能用文字、图形和现代设计方法简要、系统、正确地表达设计成果。
《微机原理与汇编语言课程设计》主要是训练学生综合运用学过的微机原理的软件和硬件知识,独立完成一个实际的微机应用设计系统,并在实验室实现。
此次课设是对个人的程序设计方法和技能的基本训练,巩固在课堂上学到的有关程序设计的基本知识和基本方法,为学习后继的基础课和专业课打下坚实的基础。
课设所用的是汇编语言,它是一种机器语言,是计算机能提供的最快最有效的语言,也是能够利用计算机所有硬件性能并能直接控制硬件的语言。
实验不仅培养了实际动手能力,也进一步学习了汇编语言的结构和使用方法,提高了汇编语言的水平。
2、需求分析
本实验是利用微机原理试验箱、8255芯片、8253芯片、键盘、扬声器等硬件设备,设计简易电子琴。
首先利用了编程程序,编辑了8255芯片控制字,对其进行初始化,使其工作在方式0,即基本输入输出状态,将8255的A端口设置为输出,C端口进行,经CPU运算后,输出到8253芯片的A端口中,由此实现对其的初始化。
将8253芯片设置为工作在方式3,即输出对称方波状态。
A端口为输入,“OUT”指令可将输出对应一定频率的方波送到扬声器中,由此实现发声。
本实验通过频率大小控制发出声音的高低,通过对延时程序的调用控制发出声音的长短。
并通过所编程序实现对键盘的重复扫描,重而可以弹奏多个音符的试验目的。
三、总体设计
1.电子琴程序
由于是用键盘的数字键1-8,要先读取键盘的输入,判断输入是否在1-8之间,不在就退到主菜单,若是就根据键值查表找出相应的频率,计算初值,调用发音子程序即可,此时的音长固定。
初值的计算方法是用输入的clk频率除以音符的频率。
程序流程图如图1所示。
图1.1电子琴程序流程图
2.单音调子程序SOUND
单音调子程序的调用前需要进行以下几个方面工作:
(1)确定相应的音调所对应的频率,查表可以得到,再由频率得到对应的8253计数初值。
(2)确定音长,即一个音符所持续的时间。
在单音调子程序中实现发出一个音符的声音,持续所需的时间,流程图如图2所示:
图2.1单音调子程序流程图
四、详细设计
1.扬声器
在PC/XT机中,扬声器接口电路由8255A-5、8253-5、驱动器和低通滤波器等构成,其中8253-5是音频信号源,8255A-5作控制器,驱动器用来增大8253-5输出的TTL电平信号的驱动能力,低通滤波器将脉冲信号转换成接近滤波的音频信号,去驱动扬声器发声。
8253-5的计数器2的CLK2端所加的时钟脉冲频率为1.19318MHZ。
可根据这个频率和所要产生的声音频率,计算出定时常数,经编程让计数器2输出指定频率的波形。
8255A-5的PB0接8253-5的GATE2,作为计数器的门控信号,允许或禁止8253-5计数。
8255A-5的PB1接与门U87的一个输入端,用来对计数器2的OUT2端输出的波形作进一步的控制,当PB1=1时,8253-5从OUT2输出的波形才能通过与门U87送到驱动器75477的A端,送到扬声器插座使之发声。
当PB1=0时,OUT2输出的波形不能通过与门,扬声器不会发声。
当PB1PB0=11时扬声器能连续发声。
2.界面设计
主界面为一架电子琴,并采用漂亮的字体作为提示语。
利用int10h实现,利用宏定义画线和矩形。
DRAWSQREMACROSTART_X,START_Y,END_X,END_Y,COLOR
LOCALROW_UP,ROW_DOWN,RANK_LEFT,RANK_RIGHT
PUSHAX
PUSHBX
PUSHCX
PUSHDX
PUSHSI
MOVAH,0CH
MOVAL,COLOR
MOVBH,0
MOVCX,START_X
MOVDX,START_Y
ROW_UP:
;画上边
INT10H
INCCX
CMPCX,END_X
JNEROW_UP
RANK_RIGHT:
;画右边
INT10H
INCDX
CMPDX,END_Y
JNERANK_RIGHT
MOVCX,START_X;下边起始点
MOVSI,END_X
INCSI
ROW_DOWN:
;画下边
INT10H
INCCX
CMPCX,SI
JNEROW_DOWN
MOVDX,START_Y;右边起始点
MOVCX,START_X
RANK_LEFT:
;画右边
INT10H
INCDX
CMPDX,END_Y
JNERANK_LEFT
POPSI
POPDX
POPCX
POPBX
POPAX
ENDM
五、调试与运行结果说明
1.主界面
图5.1主界面
2.退出界面
图5.2退出界面
六、课程设计总结
本次课程设计由我、邓云杰、刘萌萌三个同学协作共同完成。
通过这次的课程设计,让我对微机原理与汇编语言这门课有了更深的认识,系统的掌握了微机原理与汇编语言的应用知识。
这次课程设计我们做的是用PC机模拟电子琴发声,通过老师的提示及相关实验指导书的资料我们找到了入手点,在已有基础题目的基础上加入创新内容。
在基础功能的实现上并没有遇到问题,主要也是有参考内容的指导,同时通过参考内容更好的把握了设计的整体思路及各个模块的细节。
但是在拓展功能上就有不少的问题。
对于在程序设计中出现的一些问题,我们通过翻阅相关资料和请教老师,最终都得到了解决。
虽然此次课程设计的过程是艰辛的,但结果还是令我们比较欣慰的。
提高了自己的分析解决问题的能力,并且使自己所学的知识与实践相结合,应用到实践当中。
遇到问题时,应该对自己有信心,但也要知道自己的不足,认真去查阅资料和学习不懂的知识。
另外在本次课程设计中,培养了同学之间协作精神,有问题时一起讨论共同解决问题,提高了自己的合作能力。
七、结束语
汇编语言作为一种低级程序设计语言,既然是低级所以应该是最底层的,与我们计算机内部的结构联系应该联系很密切,而且在我们学习中也深刻的了解到了这一点。
比如说后来学到的寄存器、中断、还要各种寻址方式以及进栈出栈,好多的就是设计到计算机硬件。
学完汇编这门课我也对之前的高级语言中的一些知识有了更新的认识,能够让我们更好的理解高级语言,尤其是高级语言中的C语言。
汇编语言对于内存的操作都是基于内存地址的,而C语言中最令人头疼的指针概念,说白了就是内存的地址指针的学习和应用中最头疼的就是在指针这个抽象的概念和实际的内存单元之问建立思维映射,而这些恰恰是我们在汇编语言学习中频繁做的一件平常事另外,对于c语言中的数据类型形参实参函数调用全局变量局部变量等概念及操作,我们都可以用汇编语言中的一些操作相关联,把这些抽象的概念和过程,通过汇编语言形成一个具体的映像,深度割析,这样我们才能真正的学会学好C语言计算机科学的各个方面是一个统一的整体,只有多方面穿插,交互才能更好的搭建计算机知识体系。
我想如果想学好计算机编程技能,如果想做一名合格的编程人员,如果想在计算机编程之路走的更远,我们也必须从汇编语言开始,才能完整、完善的建立计算机编程知识体系!
所以对于我自己来说,要以今天的学习为跳板,为今后的汇编语言的继续学习打好基础。
愿自己在计算机这条道路上越走越远。
本次设计得到了老师的大力支持和帮助,其中老师对此次设计的题目的主要难度以及一些要求和目的给出了详细的解释。
同学对设计中遇到的汇编语言方面的知识给予了很大的帮助。
感谢陈微老师这学期对我们的谆谆教导、对微机原理课程的认真讲解以及对课程设计的细心指导。
您的认真负责让我感觉到了一个电脑工作者所要具备的素质,您的讲课风格让我对微机原理这门课产生了浓厚兴趣,并会更努力的去学习它!
八、程序清单
DRAWMACROSTART_X,START_Y,END_X,END_Y,COLOR
LOCALDRAW_NEXT
;local:
避免宏重复调用时,标号的重复
;功能:
画填充的矩形
;使用条件:
START_X PUSHAX PUSHBX PUSHCX PUSHDX MOVAH,0CH;写像素点 MOVAL,COLOR;设置颜色 MOVBH,0;选用页号0 MOVCX,START_X;列起始点 MOVDX,START_Y;行起始点 DRAW_NEXT: INT10H;画点 INCCX;画横线 CMPCX,END_X;比较行是否画完 JNEDRAW_NEXT;画另一行 MOVCX,START_X;另一行的起始点 INCDX CMPDX,END_Y;比较列是否画完 JNEDRAW_NEXT;未完继续画 POPDX POPCX POPBX POPAX ENDM DRAWSQREMACROSTART_X,START_Y,END_X,END_Y,COLOR LOCALROW_UP,ROW_DOWN,RANK_LEFT,RANK_RIGHT ;功能: 画不填充的矩形 PUSHAX PUSHBX PUSHCX PUSHDX PUSHSI MOVAH,0CH MOVAL,COLOR MOVBH,0 MOVCX,START_X MOVDX,START_Y ROW_UP: ;画上边 INT10H INCCX CMPCX,END_X JNEROW_UP RANK_RIGHT: ;画右边 INT10H INCDX CMPDX,END_Y JNERANK_RIGHT MOVCX,START_X;下边起始点 MOVSI,END_X INCSI ROW_DOWN: ;画下边 INT10H INCCX CMPCX,SI JNEROW_DOWN MOVDX,START_Y;右边起始点 MOVCX,START_X RANK_LEFT: ;画右边 INT10H INCDX CMPDX,END_Y JNERANK_LEFT POPSI POPDX POPCX POPBX POPAX ENDM DATASSEGMENT ;此处输入数据段代码 DATA1DB49h,56h,62h,66h,74h,83h,94h,10h;音频表 NUMDB? ;NUM为8253计数器初值的序号 ;白色琴键坐标 ST_LXDW50,61,72,83,94,105,116 ST_MXDW127,138,149,160,171,182,193 ST_HXDW204,215,226,237,248,259,270 ST_YDW50 ED_LXDW60,71,82,93,104,115,126 ED_MXDW137,148,159,170,181,192,203 ED_HXDW214,225,236,247,258,269,280 ED_YDW90 ;黑色琴键坐标 BT_XDW57,68,90,101,112 DW134,145,167,178,189 DW211,222,244,254,265 BT_YDW50 BD_XDW64,75,97,108,119 DW141,152,174,185,196 DW218,229,251,262,273 BD_YDW70 ;定义在屏幕绘制字 START_COLDB? ;存储起始行 TEXTDB16;起始行 DB2;起始列 DB31H;字体颜色 DB'ThisIsMyCurriculumDesign',0FFH DB'ThankYouForYourSupport',0FFH DB'1.PRESS1~8TOPLAY',0FFH DB'2.PRESSESCTOEXIT',0FFH,0FFH;显示字 DATASENDS STACKSSEGMENT ;此处输入堆栈段代码 STACKSENDS CODESSEGMENT ASSUMECS: CODES,DS: DATAS,SS: STACKS MAINPROCNEAR START: ;此处输入代码段代码 CALLINIT;调用初始化程序 MOVBX,OFFSETDATA1;获取音频表 SKY: MOVAH,07H;无回显过滤的字符输入AL=8位数据 INT21H CMPAL,27;如果按CTRL+C,退出 JEEXIT1 CMPAL,31H;若AL小于1,循环,否则继续执行程序,31H是ASKII码'1' JLSKY CMPAL,38H;若AL大于8,循环,否则继续执行程序,38H是ASKII码'8' JGSKY SUBAL,31H MOVAH,00H MOVDI,[BX+SI] MOVSI,AX MOVNUM,AL;将所获取的键值赋给8253计数器 MOVAL,[BX][SI];寄存器基址加变址寻址方式 PUSHBX CALLINIT1 CALLWAITF INAL,61H ANDAL,0FCH OUT61H,AL;关闭扬声器 JMPSKY MAINENDP ;8253初始化子程序 INIT1PROCNEAR;选择方式三通道二 MOVDL,0AH;控制扬声器声音 MULDL MOVDI,AX MOVAL,0B6H OUT43H,AL MOVDX,0012H MOVAX,34DEH DIVDI OUT42H,AL MOVAL,AH OUT42H,AL INAL,61H;声音开始 MOVAH,AL ORAL,03H OUT61H,AL RET INIT1ENDP ;延时子程序 WAITFPROCNEAR PUSHAX;保护寄存器 WAITF1: INAL,61H;读取PB端口值 ANDAL,10H;低四位清零 CMPAL,AH JEWAITF1 MOVAH,AL LOOPWAITF1 POPAX RET WAITFENDP INITPROCNEAR ;初始化屏幕: 画琴键 MOVAX,DATAS MOVDS,AX MOVAH,0;设置屏幕 MOVAL,0DH INT10H;BIOS对屏幕及显示器所提供的服务程序 MOVAH,0BH MOVBH,0 MOVBL,09H;背景色 INT10H CALLSHOW_TEXT DRAW45,30,285,94,05H DRAWSQRE45,30,285,94,0DH DRAWSQRE49,48,280,49,00H LEASI,ST_LX;画21个白色键 LEADI,ED_LX MOVCX,21 INIT_DRAW: DRAW[SI],ST_Y,[DI],ED_Y,0FH DRAW[SI],90,[DI],93,07H;阴影 ADDSI,2 ADDDI,2 LOOPINIT_DRAW LEASI,BT_X;画15个黑色键 LEADI,BD_X MOVCX,15 INIT_BLOCK: DRAW[SI],BT_Y,[DI],BD_Y,00H ADDSI,2 ADDDI,2 LOOPINIT_BLOCK RET INITENDP SHOW_TEXTPROCNEAR ;在屏幕上显示字符 LEADI,TEXT;载入字符串首地址 MOVDH,[DI];赋行值 INCDI;取得列 MOVDL,[DI];赋列值 MOVSTART_COL,DL;保存开始列 MOVAH,2;设置光标位置 MOVBH,0;0页 INT10H INCDI;取得颜色值 MOVBL,[DI];赋颜色值 CHAR_WRITE: INCDI;取得要显示的字符 MOVAL,[DI] CMPAL,0FFH;行结束否 JEBUMP_ROW;下一行 CMPAL,0;结束否 JZEND_TEXT CALLSHOW_CHAR;显示字符 JMPCHAR_WRITE;下一个字符 END_TEXT: RET BUMP_ROW: INCDH;下一行 MOVDL,START_COL;赋开始列值 MOVAH,2;设光标位置 MOVBH,0 INT10H JMPCHAR_WRITE SHOW_TEXTENDP SHOW_CHARPROCNEAR ;显示字符 MOVAH,9;显示字符 MOVBH,0;0页 MOVCX,1 INT10H INCDL MOVAH,2;设置光标位置 MOVBH,0;0页 INT10H RET SHOW_CHARENDP ;退出 EXIT1: MOVAH,4CH INT21H CODESENDS ENDMAIN 参考文献 [1]戴梅萼,史嘉权.微型计算机技术与运用.清华大学出版社2003. [2]沈美明,温冬蝉.IBM-PC汇编语言程序设计.清华大学出版社.2003. [3]董方武.微机接口技术.中国水利水电出版社.2001. [4]宋锦河.汇编语言程序设计.中国水利水电出版社.2001.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 汇编语言 电子琴